From a432fc117aef41ee548fcd00926f8ae2aa791c25 Mon Sep 17 00:00:00 2001 From: Adam Nowak Date: Thu, 28 Aug 2014 17:17:30 +0200 Subject: [PATCH] allow search classes to use proc as search target --- lib/searchlight/search.rb | 9 ++++++++- spec/searchlight/search_spec.rb | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/searchlight/search.rb b/lib/searchlight/search.rb index dea68f3..58090b5 100644 --- a/lib/searchlight/search.rb +++ b/lib/searchlight/search.rb @@ -13,7 +13,14 @@ def initialize(options = {}) end def search - @search ||= self.class.search_target + @search ||= begin + target = self.class.search_target + if target.respond_to?(:call) + target.call + else + target + end + end end def results diff --git a/spec/searchlight/search_spec.rb b/spec/searchlight/search_spec.rb index 4b66537..286209b 100644 --- a/spec/searchlight/search_spec.rb +++ b/spec/searchlight/search_spec.rb @@ -329,6 +329,17 @@ def search_age; end expect(search.search).to eq(MockModel) end + context "when target is a proc" do + let(:proc_result) { 'some string' } + let(:proc_search_target) { -> { proc_result } } + let(:search_class) { AccountSearch } + let(:search) { search_class.new } + + it "returns proc result" do + search_class.search_on proc_search_target + expect(search.search).to eq(proc_result) + end + end end describe "results" do