mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 01:14:53 +01:00
ruby: add bindings for notmuch_database_get_all_tags
The Ruby bindings were missing a way to get all the tags of the database. Now you should be able to access this with the public instance method `all_tags` of your database object. Example of use: notmuchdb = Notmuch::Database.new path, { :create => false, :mode => Notmuch::MODE_READ_ONLY } my_tags = notmuchdb.all_tags my_tags.each { |tag| print tag } my_tags.destroy! Amended by db: improve error reporting, add test
This commit is contained in:
parent
b183f2635e
commit
7e6e23c36e
5 changed files with 52 additions and 0 deletions
8
NEWS
8
NEWS
|
@ -1,3 +1,11 @@
|
|||
Notmuch 0.23 (UNRELEASED)
|
||||
=========================
|
||||
|
||||
Ruby Bindings
|
||||
-------------
|
||||
|
||||
Add support for `notmuch_database_get_all_tags`
|
||||
|
||||
Notmuch 0.22 (2016-04-26)
|
||||
=========================
|
||||
|
||||
|
|
|
@ -374,6 +374,30 @@ notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq: DB.get_all_tags() => TAGS
|
||||
*
|
||||
* Returns a list of all tags found in the database.
|
||||
*/
|
||||
VALUE
|
||||
notmuch_rb_database_get_all_tags (VALUE self)
|
||||
{
|
||||
notmuch_database_t *db;
|
||||
notmuch_tags_t *tags;
|
||||
|
||||
Data_Get_Notmuch_Database (self, db);
|
||||
|
||||
tags = notmuch_database_get_all_tags (db);
|
||||
if (!tags) {
|
||||
const char *msg = notmuch_database_status_string (db);
|
||||
if (!msg)
|
||||
msg = "Unknown notmuch error";
|
||||
|
||||
rb_raise (notmuch_rb_eBaseError, "%s", msg);
|
||||
}
|
||||
return Data_Wrap_Struct (notmuch_rb_cTags, NULL, NULL, tags);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq: DB.query(query) => QUERY
|
||||
*
|
||||
|
|
|
@ -177,6 +177,9 @@ notmuch_rb_database_find_message (VALUE self, VALUE idv);
|
|||
VALUE
|
||||
notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv);
|
||||
|
||||
VALUE
|
||||
notmuch_rb_database_get_all_tags (VALUE self);
|
||||
|
||||
VALUE
|
||||
notmuch_rb_database_query_create (VALUE self, VALUE qstrv);
|
||||
|
||||
|
|
|
@ -229,6 +229,7 @@ Init_notmuch (void)
|
|||
notmuch_rb_database_find_message, 1); /* in database.c */
|
||||
rb_define_method (notmuch_rb_cDatabase, "find_message_by_filename",
|
||||
notmuch_rb_database_find_message_by_filename, 1); /* in database.c */
|
||||
rb_define_method (notmuch_rb_cDatabase, "all_tags", notmuch_rb_database_get_all_tags, 0); /* in database.c */
|
||||
rb_define_method (notmuch_rb_cDatabase, "query", notmuch_rb_database_query_create, 1); /* in database.c */
|
||||
|
||||
/*
|
||||
|
|
|
@ -83,4 +83,20 @@ EOF
|
|||
notmuch count --output=threads tag:inbox > EXPECTED
|
||||
test_expect_equal_file OUTPUT EXPECTED
|
||||
|
||||
test_begin_subtest "get all tags"
|
||||
test_ruby <<"EOF"
|
||||
require 'notmuch'
|
||||
$maildir = ENV['MAIL_DIR']
|
||||
if not $maildir then
|
||||
abort('environment variable MAIL_DIR must be set')
|
||||
end
|
||||
@db = Notmuch::Database.new($maildir)
|
||||
@t = @db.all_tags()
|
||||
for tag in @t do
|
||||
print tag,"\n"
|
||||
end
|
||||
EOF
|
||||
notmuch search --output=tags '*' > EXPECTED
|
||||
test_expect_equal_file OUTPUT EXPECTED
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue