From 21785cb0f644f16c30886a3fa83213887d0f4cde Mon Sep 17 00:00:00 2001 From: JP Slavinsky Date: Mon, 9 Oct 2017 08:56:33 -0600 Subject: [PATCH 1/2] Add default search values --- README.md | 15 +++++++++++++++ lib/keyword_search.rb | 9 ++++++++- lib/keyword_search/definition.rb | 10 +++++----- test/test_keyword_search.rb | 24 ++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4135969..2ebb7f2 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,21 @@ KeywordSearch.search(terms) do |with| arguments << "%#{values.join(' ')}%" end + # A keyword description can be passed as the second argument of the + # `keyword` call, and read back as an attribute on the keyword + with.keyword :title, 'Some description of the title search here' do |values| + ... + end + + # Default values can be passed as the `keyword` call's third argument. + # Such default values will be assumed to be part of the search string + # if its keyword is not already present in that string. Defaults are + # always positive. + with.keyword :title, nil, "Dr." do |values| + # A search on 'title:Mr.' will yield a `values` of `['Mr.']` + # A search on 'has:something' will yield a `values` of `['Dr.']` + end + end ``` diff --git a/lib/keyword_search.rb b/lib/keyword_search.rb index 0b0fefc..999a9b8 100644 --- a/lib/keyword_search.rb +++ b/lib/keyword_search.rb @@ -15,6 +15,7 @@ class << self def search(input_string, definition=nil, &block) definition ||= Definition.new(&block) results = parse(input_string) + add_default_values(results, definition) results.each do |key, terms| definition.handle(key, terms) end @@ -25,6 +26,13 @@ def search(input_string, definition=nil, &block) private ####### + def add_default_values(results, definition) + definition.keywords.each do |keyword| + next if keyword.default_values.nil? + results[keyword.name.to_s] ||= parse(keyword.default_values)[:default] + end + end + def parse(input) #:nodoc: data = input + ' ' @@ -2286,4 +2294,3 @@ class << self end - diff --git a/lib/keyword_search/definition.rb b/lib/keyword_search/definition.rb index 53c2c18..f5fc372 100644 --- a/lib/keyword_search/definition.rb +++ b/lib/keyword_search/definition.rb @@ -4,9 +4,9 @@ class Definition class Keyword - attr_reader :name, :description, :handler - def initialize(name, description=nil, &handler) - @name, @description = name, description + attr_reader :name, :description, :default_values, :handler + def initialize(name, description=nil, default_values=nil, &handler) + @name, @description, @default_values = name, description, default_values @handler = handler end @@ -31,8 +31,8 @@ def keywords @keywords ||= [] end - def keyword(name, description=nil, &block) - keywords << Keyword.new(name, description, &block) + def keyword(name, description=nil, default_values=nil, &block) + keywords << Keyword.new(name, description, default_values, &block) end def default_keyword(name) diff --git a/test/test_keyword_search.rb b/test/test_keyword_search.rb index 0820b7d..0caadcb 100644 --- a/test/test_keyword_search.rb +++ b/test/test_keyword_search.rb @@ -333,4 +333,28 @@ end assert_equal [ [ %w(google.com), false ] ], result end + + it 'a search falling back to default values' do + result = [] + + KeywordSearch.search(%<>) do |with| + with.keyword :some_flag, nil, "false" do |values, positive| + result << [ values, positive ] + end + end + + assert_equal [ [ %w(false), true ] ], result + end + + it 'a search should not use default values when explicit values present' do + result = [] + + KeywordSearch.search(%) do |with| + with.keyword :some_flag, nil, "false" do |values, positive| + result << [ values, positive ] + end + end + + assert_equal [ [ %w(true), true ] ], result + end end From a374489dc47bdd3d9e0d588c64116ac5cdf314dc Mon Sep 17 00:00:00 2001 From: Dante Soares Date: Fri, 24 May 2019 12:23:09 -0500 Subject: [PATCH 2/2] Version bump; Update Travis config --- .travis.yml | 8 +------- keyword_search.gemspec | 2 +- lib/keyword_search/version.rb | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index e145ba3..a574c8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,3 @@ rvm: - - 1.9.3 - - 2.0.0 - + - 2.6.1 bundler_args: --without docs - -notifications: - email: - - brwcodes@gmail.com \ No newline at end of file diff --git a/keyword_search.gemspec b/keyword_search.gemspec index bbde2f5..9ea1465 100644 --- a/keyword_search.gemspec +++ b/keyword_search.gemspec @@ -19,6 +19,6 @@ Gem::Specification.new do |spec| spec.rdoc_options = ["--charset=UTF-8"] spec.require_paths = ["lib"] - spec.add_development_dependency "bundler", "~> 1.3" spec.add_development_dependency "rake" + spec.add_development_dependency "minitest" end diff --git a/lib/keyword_search/version.rb b/lib/keyword_search/version.rb index 17c8faf..16f521d 100644 --- a/lib/keyword_search/version.rb +++ b/lib/keyword_search/version.rb @@ -1,3 +1,3 @@ module KeywordSearch - VERSION = '1.5.0' + VERSION = '1.6.0' end