From 72dd2c620cf773323827fc1568418ede22f7fd57 Mon Sep 17 00:00:00 2001 From: Antony Date: Tue, 19 May 2026 08:55:27 +1000 Subject: [PATCH] Plucky::Query::DSL#find supports all enumerables This was not wrapping the document was passed a set containing a single id. --- lib/plucky/query.rb | 10 +++++----- spec/plucky/query_spec.rb | 8 ++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) 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