From 7de4850074bf0a682e8b38c63716b09cf24220fa Mon Sep 17 00:00:00 2001 From: Sergey Gribovski Date: Tue, 6 Jan 2015 12:17:34 +0100 Subject: [PATCH] added .attribute_names method --- lib/virtus/class_methods.rb | 18 ++++++++++++++++++ .../unit/virtus/class_methods/finalize_spec.rb | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/virtus/class_methods.rb b/lib/virtus/class_methods.rb index 7f5930a9..c20d01b1 100644 --- a/lib/virtus/class_methods.rb +++ b/lib/virtus/class_methods.rb @@ -49,6 +49,24 @@ def attributes attribute_set end + # Returns array of all attribute names defined on a Class + # + # @example + # class User + # include Virtus + # + # attribute :name, String + # attribute :age, Integer + # end + # + # User.attribute_names # => [:name, :age] + # + # @return [Array] + # @api public + def attribute_names + attribute_set.map(&: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 ee46987e..976b4116 100644 --- a/spec/unit/virtus/class_methods/finalize_spec.rb +++ b/spec/unit/virtus/class_methods/finalize_spec.rb @@ -64,4 +64,13 @@ class Address it 'automatically resolves constant when it is already available' do expect(Examples::Article.attribute_set[:person].type.primitive).to be(Examples::Person) end + + describe 'attribute_names' do + + it 'returns array of attribute names' do + expect(Examples::Person.attribute_names).to eq([:name, :articles, :address]) + end + + end + end