diff --git a/lib/active_hash/relation.rb b/lib/active_hash/relation.rb index 90a7b50f..725a21c4 100644 --- a/lib/active_hash/relation.rb +++ b/lib/active_hash/relation.rb @@ -73,7 +73,16 @@ def size end def pluck(*column_names) - column_names.map { |column_name| all.map(&column_name.to_sym) }.inject(&:zip) + symbolized_column_names = column_names.map(&:to_sym) + + if symbolized_column_names.length == 1 + column_name = symbolized_column_names.first + all.map { |record| record[column_name] } + else + all.map do |record| + symbolized_column_names.map { |column_name| record[column_name] } + end + end end def ids diff --git a/spec/active_hash/base_spec.rb b/spec/active_hash/base_spec.rb index 4c6b5063..9b06f930 100644 --- a/spec/active_hash/base_spec.rb +++ b/spec/active_hash/base_spec.rb @@ -527,17 +527,22 @@ class Region < ActiveHash::Base describe ".pluck" do before do Country.data = [ - {:id => 1, :name => "US"}, - {:id => 2, :name => "Canada"} + {:id => 1, :name => "US", :language => "English"}, + {:id => 2, :name => "Canada", :language => "English"}, + {:id => 3, :name => "Mexico", :language => "Spanish"} ] end - it "returns an two dimensional Array of attributes values" do - expect(Country.pluck(:id, :name)).to match_array([[1,"US"], [2, "Canada"]]) + it "returns an two dimensional Array of 3 attributes values" do + expect(Country.pluck(:id, :name, :language)).to match_array([[1, "US", "English"], [2, "Canada", "English"], [3, "Mexico", "Spanish"]]) + end + + it "returns an two dimensional Array of 2 attributes values" do + expect(Country.pluck(:id, :name)).to match_array([[1, "US"], [2, "Canada"], [3, "Mexico"]]) end it "returns an Array of attribute values" do - expect(Country.pluck(:id)).to match_array([1,2]) + expect(Country.pluck(:id)).to match_array([1, 2, 3]) end end