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:
Ludovic LANGE 2016-03-06 07:56:28 -04:00 committed by David Bremner
parent b183f2635e
commit 7e6e23c36e
5 changed files with 52 additions and 0 deletions

8
NEWS
View file

@ -1,3 +1,11 @@
Notmuch 0.23 (UNRELEASED)
=========================
Ruby Bindings
-------------
Add support for `notmuch_database_get_all_tags`
Notmuch 0.22 (2016-04-26)
=========================

View file

@ -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
*

View file

@ -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);

View file

@ -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 */
/*

View file

@ -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