From 85ae2bcf56021a22a803fbde34baa5050bbb28d9 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Sat, 1 May 2021 07:04:46 -0500 Subject: [PATCH] ruby: use notmuch_exclude_t enum It exists since 2013, let's allow it to be used in Ruby. Signed-off-by: Felipe Contreras --- bindings/ruby/init.c | 24 ++++++++++++++++++++++++ bindings/ruby/query.c | 8 +++++--- test/T395-ruby.sh | 17 +++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c index 62515eca..bedfbf60 100644 --- a/bindings/ruby/init.c +++ b/bindings/ruby/init.c @@ -154,6 +154,30 @@ Init_notmuch (void) * Maximum allowed length of a tag */ rb_define_const (mod, "TAG_MAX", INT2FIX (NOTMUCH_TAG_MAX)); + /* + * Document-const: Notmuch::EXCLUDE_FLAG + * + * Only flag excluded results + */ + rb_define_const (mod, "EXCLUDE_FLAG", INT2FIX (NOTMUCH_EXCLUDE_FLAG)); + /* + * Document-const: Notmuch::EXCLUDE_TRUE + * + * Exclude messages from the results + */ + rb_define_const (mod, "EXCLUDE_TRUE", INT2FIX (NOTMUCH_EXCLUDE_TRUE)); + /* + * Document-const: Notmuch::EXCLUDE_FALSE + * + * Don't exclude anything + */ + rb_define_const (mod, "EXCLUDE_FALSE", INT2FIX (NOTMUCH_EXCLUDE_FALSE)); + /* + * Document-const: Notmuch::EXCLUDE_ALL + * + * Exclude all results + */ + rb_define_const (mod, "EXCLUDE_ALL", INT2FIX (NOTMUCH_EXCLUDE_ALL)); /* * Document-class: Notmuch::BaseError diff --git a/bindings/ruby/query.c b/bindings/ruby/query.c index 3ec98c6c..8a2b4d3d 100644 --- a/bindings/ruby/query.c +++ b/bindings/ruby/query.c @@ -102,19 +102,21 @@ notmuch_rb_query_add_tag_exclude (VALUE self, VALUE tagv) } /* - * call-seq: QUERY.omit_excluded=(boolean) => nil + * call-seq: QUERY.omit_excluded=(fixnum) => nil * * Specify whether to omit excluded results or simply flag them. - * By default, this is set to +true+. + * By default, this is set to +Notmuch::EXCLUDE_TRUE+. */ VALUE notmuch_rb_query_set_omit_excluded (VALUE self, VALUE omitv) { notmuch_query_t *query; + notmuch_exclude_t value; Data_Get_Notmuch_Query (self, query); - notmuch_query_set_omit_excluded (query, RTEST (omitv)); + value = FIXNUM_P (omitv) ? FIX2UINT (omitv) : RTEST(omitv); + notmuch_query_set_omit_excluded (query, value); return Qnil; } diff --git a/test/T395-ruby.sh b/test/T395-ruby.sh index 597330d3..d36d4aff 100755 --- a/test/T395-ruby.sh +++ b/test/T395-ruby.sh @@ -65,4 +65,21 @@ db.all_tags.each do |tag| end EOF +notmuch config set search.exclude_tags deleted +generate_message '[subject]="Good"' +generate_message '[subject]="Bad"' "[in-reply-to]=\<$gen_msg_id\>" +notmuch new > /dev/null +notmuch tag +deleted id:$gen_msg_id + +test_begin_subtest "omit excluded all" +notmuch search --output=threads --exclude=all tag:inbox > EXPECTED +test_ruby <<"EOF" +q = db.query('tag:inbox') +q.add_tag_exclude('deleted') +q.omit_excluded = Notmuch::EXCLUDE_ALL +q.search_threads.each do |t| + puts 'thread:%s' % t.thread_id +end +EOF + test_done