diff --git a/lib/virtus/attribute_set.rb b/lib/virtus/attribute_set.rb index 66055a84..f66b72ae 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/spec/unit/virtus/class_methods/finalize_spec.rb b/spec/unit/virtus/class_methods/finalize_spec.rb index ee46987e..81e20ede 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_set.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)