From 65393c016cffefc835d5f5094c7a3850159fc56b Mon Sep 17 00:00:00 2001 From: "J.J Abrams" Date: Fri, 23 Jun 2017 14:55:15 +0200 Subject: [PATCH 1/4] Add method attribute_names to ClassMethods to collect all attributes name in an array --- lib/virtus/class_methods.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/virtus/class_methods.rb b/lib/virtus/class_methods.rb index 7f5930a9..12141b01 100644 --- a/lib/virtus/class_methods.rb +++ b/lib/virtus/class_methods.rb @@ -49,6 +49,24 @@ def attributes attribute_set end + + # Returns all the attributes name defined on a Class + # + # @example + # class User + # include Virtus + # + # attribute :name, String + # attribute :age, Integer + # end + # + # @return [:name, :age] + # + # @api public + def attribute_names + attribute_set.to_a.map{|attr| attr.name} + end + private # Setup descendants' own Attribute-accessor-method-hosting modules From 38ebedfa1181ed30ca335cabdc9e5decf84bb310 Mon Sep 17 00:00:00 2001 From: "J.J Abrams" Date: Fri, 23 Jun 2017 15:02:38 +0200 Subject: [PATCH 2/4] add test for attribute_names in ClassMethods --- spec/unit/virtus/class_methods/finalize_spec.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/unit/virtus/class_methods/finalize_spec.rb b/spec/unit/virtus/class_methods/finalize_spec.rb index ee46987e..ba0da548 100644 --- a/spec/unit/virtus/class_methods/finalize_spec.rb +++ b/spec/unit/virtus/class_methods/finalize_spec.rb @@ -40,6 +40,12 @@ class Address Virtus.finalize end + describe 'attribute_names' do + it 'returns array of attribute names' do + expect(Examples::Person.attribute_names).to eq([:name, :articles, :address]) + end + end + it "sets attributes that don't require finalization" do expect(Examples::Person.attribute_set[:name]).to be_instance_of(Virtus::Attribute) expect(Examples::Person.attribute_set[:name].primitive).to be(String) From 4284445f1d987cb3b85b4853c5cfdef5f7827fdd Mon Sep 17 00:00:00 2001 From: "J.J Abrams" Date: Fri, 23 Jun 2017 15:10:25 +0200 Subject: [PATCH 3/4] mmove attribute_names to AttributeSet#names --- lib/virtus/attribute_set.rb | 17 +++++++++++++++++ lib/virtus/class_methods.rb | 18 ------------------ .../unit/virtus/class_methods/finalize_spec.rb | 2 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lib/virtus/attribute_set.rb b/lib/virtus/attribute_set.rb index 66055a84..ad542d7c 100644 --- a/lib/virtus/attribute_set.rb +++ b/lib/virtus/attribute_set.rb @@ -27,6 +27,23 @@ def initialize(parent = nil, attributes = []) reset end + # Returns all the attributes name defined on a Class + # + # @example + # class User + # include Virtus + # + # attribute :name, String + # attribute :age, Integer + # end + # + # @return [:name, :age] + # + # @api public + def names + @attributes.map{&:name} + end + # Iterate over each attribute in the set # # @example diff --git a/lib/virtus/class_methods.rb b/lib/virtus/class_methods.rb index 12141b01..7f5930a9 100644 --- a/lib/virtus/class_methods.rb +++ b/lib/virtus/class_methods.rb @@ -49,24 +49,6 @@ def attributes attribute_set end - - # Returns all the attributes name defined on a Class - # - # @example - # class User - # include Virtus - # - # attribute :name, String - # attribute :age, Integer - # end - # - # @return [:name, :age] - # - # @api public - def attribute_names - attribute_set.to_a.map{|attr| attr.name} - end - private # Setup descendants' own Attribute-accessor-method-hosting modules diff --git a/spec/unit/virtus/class_methods/finalize_spec.rb b/spec/unit/virtus/class_methods/finalize_spec.rb index ba0da548..81e20ede 100644 --- a/spec/unit/virtus/class_methods/finalize_spec.rb +++ b/spec/unit/virtus/class_methods/finalize_spec.rb @@ -42,7 +42,7 @@ class Address describe 'attribute_names' do it 'returns array of attribute names' do - expect(Examples::Person.attribute_names).to eq([:name, :articles, :address]) + expect(Examples::Person.attribute_set.names).to eq([:name, :articles, :address]) end end From 7ee1fb550e9f455331e071526678a17c922d9401 Mon Sep 17 00:00:00 2001 From: "J.J Abrams" Date: Fri, 23 Jun 2017 15:22:42 +0200 Subject: [PATCH 4/4] fix typo --- lib/virtus/attribute_set.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/virtus/attribute_set.rb b/lib/virtus/attribute_set.rb index ad542d7c..f66b72ae 100644 --- a/lib/virtus/attribute_set.rb +++ b/lib/virtus/attribute_set.rb @@ -41,7 +41,7 @@ def initialize(parent = nil, attributes = []) # # @api public def names - @attributes.map{&:name} + @attributes.map(&:name) end # Iterate over each attribute in the set