diff --git a/lib/plucky/query.rb b/lib/plucky/query.rb index c606cda..ee871e7 100755 --- a/lib/plucky/query.rb +++ b/lib/plucky/query.rb @@ -87,12 +87,12 @@ def find_one(opts={}) def find(*ids) return nil if ids.empty? - single_id_find = ids.size == 1 && !ids[0].is_a?(Array) - - if single_id_find - first(:_id => ids[0]) + if ids.size == 1 && !ids.first.is_a?(Enumerable) + first(_id: ids.first) else - all(:_id => ids.flatten) + flat_ids = ids.flat_map { |id| Array(id) }.flatten + + all(_id: flat_ids) end end diff --git a/spec/plucky/query_spec.rb b/spec/plucky/query_spec.rb index 7a835a7..a024257 100755 --- a/spec/plucky/query_spec.rb +++ b/spec/plucky/query_spec.rb @@ -119,6 +119,14 @@ @query.find('john', 'frank').should == [@john] end + it 'works when passed a set' do + @query.find(Set.new(['chris', 'john'])).should == [@chris, @john] + end + + it 'a set of one returns an array' do + @query.find(Set.new(['chris'])).should == [@chris] + end + it "returns nil for nil" do @query.find(nil).should be_nil end