mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +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)
|
Notmuch 0.22 (2016-04-26)
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
|
|
@ -374,6 +374,30 @@ notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv)
|
||||||
return Qnil;
|
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
|
* call-seq: DB.query(query) => QUERY
|
||||||
*
|
*
|
||||||
|
|
|
@ -177,6 +177,9 @@ notmuch_rb_database_find_message (VALUE self, VALUE idv);
|
||||||
VALUE
|
VALUE
|
||||||
notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv);
|
notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv);
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
notmuch_rb_database_get_all_tags (VALUE self);
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
notmuch_rb_database_query_create (VALUE self, VALUE qstrv);
|
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 */
|
notmuch_rb_database_find_message, 1); /* in database.c */
|
||||||
rb_define_method (notmuch_rb_cDatabase, "find_message_by_filename",
|
rb_define_method (notmuch_rb_cDatabase, "find_message_by_filename",
|
||||||
notmuch_rb_database_find_message_by_filename, 1); /* in database.c */
|
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 */
|
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
|
notmuch count --output=threads tag:inbox > EXPECTED
|
||||||
test_expect_equal_file OUTPUT 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
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue