classy_enum 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,156 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ class Breed < ClassyEnum::Base; end
4
+ class Breed::GoldenRetriever < Breed; end
5
+ class Breed::Snoop < Breed; end
6
+ class Breed::Husky < Breed; end
7
+
8
+ class Color < ClassyEnum::Base; end
9
+ class Color::White < Color; end;
10
+ class Color::Black < Color; end;
11
+
12
+ class CatBreed < ClassyEnum::Base
13
+ owner :cat
14
+
15
+ def breed_color
16
+ "#{cat.color} #{self}"
17
+ end
18
+ end
19
+
20
+ class CatBreed::Abyssian < CatBreed; end
21
+ class CatBreed::Bengal < CatBreed; end
22
+ class CatBreed::Birman < CatBreed; end
23
+ class CatBreed::Persian < CatBreed; end
24
+
25
+ class Dog < ActiveRecord::Base
26
+ classy_enum_attr :breed
27
+ end
28
+
29
+ class AllowBlankBreedDog < ActiveRecord::Base
30
+ classy_enum_attr :breed, :allow_blank => true
31
+ end
32
+
33
+ class AllowNilBreedDog < ActiveRecord::Base
34
+ classy_enum_attr :breed, :allow_nil => true
35
+ end
36
+
37
+ class OtherDog < ActiveRecord::Base
38
+ classy_enum_attr :other_breed, :enum => 'Breed'
39
+ end
40
+
41
+ describe Dog do
42
+ specify { Dog.new(:breed => nil).should_not be_valid }
43
+ specify { Dog.new(:breed => '').should_not be_valid }
44
+
45
+ context "with valid breed options" do
46
+ subject { Dog.new(:breed => :golden_retriever) }
47
+ it { should be_valid }
48
+ its(:breed) { should be_a(Breed::GoldenRetriever) }
49
+ its('breed.allow_blank') { should be_false }
50
+ end
51
+
52
+ context "with invalid breed options" do
53
+ subject { Dog.new(:breed => :fake_breed) }
54
+ it { should_not be_valid }
55
+ it { should have(1).error_on(:breed) }
56
+ end
57
+ end
58
+
59
+ describe "A ClassyEnum that allows blanks" do
60
+ specify { AllowBlankBreedDog.new(:breed => nil).should be_valid }
61
+ specify { AllowBlankBreedDog.new(:breed => '').should be_valid }
62
+
63
+ context "with valid breed options" do
64
+ subject { AllowBlankBreedDog.new(:breed => :golden_retriever) }
65
+ it { should be_valid }
66
+ its('breed.allow_blank') { should be_true }
67
+ end
68
+
69
+ context "with invalid breed options" do
70
+ subject { AllowBlankBreedDog.new(:breed => :fake_breed) }
71
+ it { should_not be_valid }
72
+ it { should have(1).error_on(:breed) }
73
+ end
74
+ end
75
+
76
+ describe "A ClassyEnum that allows nils" do
77
+ specify { AllowNilBreedDog.new(:breed => nil).should be_valid }
78
+ specify { AllowNilBreedDog.new(:breed => '').should_not be_valid }
79
+
80
+ context "with valid breed options" do
81
+ subject { AllowNilBreedDog.new(:breed => :golden_retriever) }
82
+ it { should be_valid }
83
+ its('breed.allow_blank') { should be_true }
84
+ end
85
+
86
+ context "with invalid breed options" do
87
+ subject { AllowNilBreedDog.new(:breed => :fake_breed) }
88
+ it { should_not be_valid }
89
+ it { should have(1).error_on(:breed) }
90
+ end
91
+ end
92
+
93
+ describe "A ClassyEnum that has a different field name than the enum" do
94
+ subject { OtherDog.new(:other_breed => :snoop) }
95
+ its(:other_breed) { should be_a(Breed::Snoop) }
96
+ end
97
+
98
+ class ActiveDog < ActiveRecord::Base
99
+ classy_enum_attr :color
100
+ validates_uniqueness_of :name, :scope => :color
101
+ scope :goldens, where(:breed => 'golden_retriever')
102
+ end
103
+
104
+ describe ActiveDog do
105
+ context 'uniqueness on name' do
106
+ subject { ActiveDog.new(:name => 'Kitteh', :breed => :golden_retriever, :color => :black) }
107
+ it { should be_valid }
108
+
109
+ context 'with existing kitteh' do
110
+ before do
111
+ ActiveDog.create!(:name => 'Kitteh', :breed => :husky, :color => :black)
112
+ end
113
+
114
+ it { should have(1).error_on(:name) }
115
+ end
116
+ end
117
+
118
+ context 'scopes' do
119
+ let!(:golden) { ActiveDog.create!(:name => 'Sebastian', :breed => :golden_retriever, :color => :white) }
120
+ let!(:husky) { ActiveDog.create!(:name => 'Sirius', :breed => :husky, :color => :black) }
121
+
122
+ after { ActiveDog.destroy_all }
123
+
124
+ it 'should know all dogs' do
125
+ ActiveDog.all.should include(golden, husky)
126
+ end
127
+
128
+ it 'should have a working scope' do
129
+ ActiveDog.goldens.should include(golden)
130
+ ActiveDog.goldens.should_not include(husky)
131
+ end
132
+ end
133
+
134
+ end
135
+
136
+ class Cat < ActiveRecord::Base
137
+ classy_enum_attr :breed, :enum => 'CatBreed'
138
+ attr_accessor :color
139
+ delegate :breed_color, :to => :breed
140
+ end
141
+
142
+ class OtherCat < ActiveRecord::Base
143
+ classy_enum_attr :breed, :enum => 'CatBreed', :serialize_as_json => true
144
+ attr_accessor :color
145
+ delegate :breed_color, :to => :breed
146
+ end
147
+
148
+ describe Cat do
149
+ let(:abyssian) { Cat.new(:breed => :abyssian, :color => 'black') }
150
+ let(:persian) { OtherCat.new(:breed => :persian, :color => 'white') }
151
+
152
+ it 'should delegate breed color to breed with an ownership reference' do
153
+ abyssian.breed_color { should eql('black Abyssian') }
154
+ persian.breed_color { should eql('white Persian') }
155
+ end
156
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ class ClassyEnumBase < ClassyEnum::Base
4
+ end
5
+
6
+ class ClassyEnumBase::One < ClassyEnumBase
7
+ end
8
+
9
+ class ClassyEnumBase::Two < ClassyEnumBase
10
+ end
11
+
12
+ describe ClassyEnum::Base do
13
+ context '.build' do
14
+ context 'invalid option' do
15
+ it 'should return the option' do
16
+ ClassyEnumBase.build(:invalid_option).should == :invalid_option
17
+ end
18
+ end
19
+
20
+ context 'string option' do
21
+ subject { ClassyEnumBase.build("one") }
22
+ it { should be_a(ClassyEnumBase::One) }
23
+ end
24
+
25
+ context 'symbol option' do
26
+ subject { ClassyEnumBase.build(:two) }
27
+ it { should be_a(ClassyEnumBase::Two) }
28
+ end
29
+ end
30
+
31
+ context '#new' do
32
+ subject { ClassyEnumBase::One }
33
+ its(:new) { should be_a(ClassyEnumBase::One) }
34
+ its(:new) { should == ClassyEnumBase::One.new }
35
+ end
36
+
37
+ context 'Subclass naming' do
38
+ it 'should raise an error when invalid' do
39
+ lambda {
40
+ class WrongSublcassName < ClassyEnumBase; end
41
+ }.should raise_error(ClassyEnum::SubclassNameError)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe ClassyEnum::Base, 'Arel visitor' do
47
+ specify do
48
+ Arel::Visitors::ToSql.instance_methods.map(&:to_sym).should include(:'visit_ClassyEnumBase_One', :'visit_ClassyEnumBase_Two')
49
+ end
50
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ class ClassyEnumCollection < ClassyEnum::Base
4
+ end
5
+
6
+ class ClassyEnumCollection::One < ClassyEnumCollection
7
+ end
8
+
9
+ class ClassyEnumCollection::Two < ClassyEnumCollection
10
+ end
11
+
12
+ class ClassyEnumCollection::Three < ClassyEnumCollection
13
+ end
14
+
15
+ describe ClassyEnum::Collection do
16
+ subject { ClassyEnumCollection }
17
+
18
+ its(:enum_options) { should == [ClassyEnumCollection::One, ClassyEnumCollection::Two, ClassyEnumCollection::Three] }
19
+ its(:all) { should == [ClassyEnumCollection::One.new, ClassyEnumCollection::Two.new, ClassyEnumCollection::Three.new] }
20
+ its(:select_options) { should == [['One', 'one'],['Two', 'two'], ['Three', 'three']] }
21
+ end
22
+
23
+ describe ClassyEnum::Collection, Comparable do
24
+ let(:one) { ClassyEnumCollection::One.new }
25
+ let(:two) { ClassyEnumCollection::Two.new }
26
+ let(:three) { ClassyEnumCollection::Three.new }
27
+
28
+ subject { [one, three, two] }
29
+ its(:sort) { should eql([one, two, three]) }
30
+ its(:max) { should eql(three) }
31
+ its(:min) { should eql(one) }
32
+ end
@@ -0,0 +1,55 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ class ClassyEnumConversion < ClassyEnum::Base
4
+ end
5
+
6
+ class ClassyEnumConversion::One < ClassyEnumConversion
7
+ end
8
+
9
+ class ClassyEnumConversion::Two < ClassyEnumConversion
10
+ end
11
+
12
+ describe ClassyEnum::Conversion do
13
+ context '#to_i' do
14
+ specify { ClassyEnumConversion::One.new.to_i.should == 1 }
15
+ specify { ClassyEnumConversion::Two.new.to_i.should == 2 }
16
+ end
17
+
18
+ context '#index' do
19
+ specify { ClassyEnumConversion::One.new.index.should == 1 }
20
+ specify { ClassyEnumConversion::Two.new.index.should == 2 }
21
+ end
22
+
23
+ context '#to_s' do
24
+ specify { ClassyEnumConversion::One.new.to_s.should == 'one' }
25
+ specify { ClassyEnumConversion::Two.new.to_s.should == 'two' }
26
+ end
27
+
28
+ context '#to_sym' do
29
+ specify { ClassyEnumConversion::One.new.to_sym.should == :one }
30
+ specify { ClassyEnumConversion::Two.new.to_sym.should == :two }
31
+ end
32
+
33
+ context '#as_json' do
34
+ context 'serialize_as_json is false' do
35
+ specify { ClassyEnumConversion::One.new.as_json.should == 'one' }
36
+ specify { ClassyEnumConversion::Two.new.as_json.should == 'two' }
37
+ end
38
+
39
+ context 'serialize_as_json is true' do
40
+ specify do
41
+ enum = ClassyEnumConversion::One.new
42
+ enum.serialize_as_json = true
43
+ enum.instance_variable_set('@key', 'value')
44
+ enum.as_json.should == {'key' => 'value' }
45
+ end
46
+
47
+ specify do
48
+ enum = ClassyEnumConversion::One.new
49
+ enum.serialize_as_json = true
50
+ enum.instance_variable_set('@key', 'value')
51
+ enum.as_json.should == {'key' => 'value' }
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ class ClassyEnumPredicate < ClassyEnum::Base
4
+ end
5
+
6
+ class ClassyEnumPredicate::One < ClassyEnumPredicate
7
+ end
8
+
9
+ class ClassyEnumPredicate::Two < ClassyEnumPredicate
10
+ end
11
+
12
+ describe ClassyEnum::Predicate do
13
+ context '#attribute?' do
14
+ specify { ClassyEnumPredicate::One.new.should be_one }
15
+ specify { ClassyEnumPredicate::One.new.should_not be_two }
16
+ specify { ClassyEnumPredicate::Two.new.should_not be_one }
17
+ specify { ClassyEnumPredicate::Two.new.should be_two }
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ class ProjectTier < ClassyEnum::Base
4
+ class_attribute :inherited_properties
5
+ end
6
+
7
+ class ProjectTier::One < ProjectTier
8
+ self.inherited_properties = [1,2,3]
9
+ end
10
+
11
+ class ProjectTier::Two < ProjectTier::One
12
+ self.inherited_properties += [4,5,6]
13
+ end
14
+
15
+ describe 'Classy Enum inheritance' do
16
+ it 'should inherit from the previous class' do
17
+ ProjectTier::One.inherited_properties.should == [1,2,3]
18
+ ProjectTier::Two.inherited_properties.should == [1,2,3,4,5,6]
19
+ end
20
+
21
+ it 'should instantiate the subclass' do
22
+ ProjectTier::Two.build(:two).should == ProjectTier::Two.new
23
+ end
24
+
25
+ it 'should have the right index' do
26
+ ProjectTier::Two.new.index.should == 2
27
+ end
28
+ end
data/spec/spec_helper.rb CHANGED
@@ -46,32 +46,3 @@ ActiveRecord::Schema.define(:version => 1) do
46
46
  t.string :breed
47
47
  end
48
48
  end
49
-
50
- class Breed < ClassyEnum::Base
51
- enum_classes :golden_retriever, :snoop, :husky
52
- end
53
-
54
- class BreedGoldenRetriever < Breed
55
- end
56
-
57
- class BreedSnoop < Breed
58
- end
59
-
60
- class BreedHusky < Breed
61
- end
62
-
63
- class Dog < ActiveRecord::Base
64
- classy_enum_attr :breed
65
- end
66
-
67
- class AllowBlankBreedDog < ActiveRecord::Base
68
- classy_enum_attr :breed, :allow_blank => true
69
- end
70
-
71
- class AllowNilBreedDog < ActiveRecord::Base
72
- classy_enum_attr :breed, :allow_nil => true
73
- end
74
-
75
- class OtherDog < ActiveRecord::Base
76
- classy_enum_attr :other_breed, :enum => :breed
77
- end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: classy_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 3.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 2.10.0
37
+ version: 2.11.0
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 2.10.0
45
+ version: 2.11.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: sqlite3
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -95,17 +95,20 @@ files:
95
95
  - gemfiles/Gemfile.rails-3.2.x
96
96
  - init.rb
97
97
  - lib/classy_enum.rb
98
- - lib/classy_enum/attributes.rb
98
+ - lib/classy_enum/active_record.rb
99
99
  - lib/classy_enum/base.rb
100
- - lib/classy_enum/class_methods.rb
101
- - lib/classy_enum/instance_methods.rb
100
+ - lib/classy_enum/collection.rb
101
+ - lib/classy_enum/conversion.rb
102
+ - lib/classy_enum/predicate.rb
102
103
  - lib/classy_enum/version.rb
103
104
  - lib/generators/classy_enum/classy_enum_generator.rb
104
105
  - lib/generators/classy_enum/templates/enum.rb
105
- - spec/active_record_spec.rb
106
- - spec/classy_enum_attributes_spec.rb
107
- - spec/classy_enum_owner_reference_spec.rb
108
- - spec/classy_enum_spec.rb
106
+ - spec/classy_enum/active_record_spec.rb
107
+ - spec/classy_enum/base_spec.rb
108
+ - spec/classy_enum/collection_spec.rb
109
+ - spec/classy_enum/conversion_spec.rb
110
+ - spec/classy_enum/predicate_spec.rb
111
+ - spec/classy_enum_inheritance_spec.rb
109
112
  - spec/spec_helper.rb
110
113
  homepage: http://github.com/beerlington/classy_enum
111
114
  licenses: []
@@ -121,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
121
124
  version: '0'
122
125
  segments:
123
126
  - 0
124
- hash: -2001790811310918278
127
+ hash: 3644506881692123531
125
128
  required_rubygems_version: !ruby/object:Gem::Requirement
126
129
  none: false
127
130
  requirements:
@@ -130,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
133
  version: '0'
131
134
  segments:
132
135
  - 0
133
- hash: -2001790811310918278
136
+ hash: 3644506881692123531
134
137
  requirements: []
135
138
  rubyforge_project:
136
139
  rubygems_version: 1.8.24
@@ -138,8 +141,10 @@ signing_key:
138
141
  specification_version: 3
139
142
  summary: A class based enumerator utility for Ruby on Rails
140
143
  test_files:
141
- - spec/active_record_spec.rb
142
- - spec/classy_enum_attributes_spec.rb
143
- - spec/classy_enum_owner_reference_spec.rb
144
- - spec/classy_enum_spec.rb
144
+ - spec/classy_enum/active_record_spec.rb
145
+ - spec/classy_enum/base_spec.rb
146
+ - spec/classy_enum/collection_spec.rb
147
+ - spec/classy_enum/conversion_spec.rb
148
+ - spec/classy_enum/predicate_spec.rb
149
+ - spec/classy_enum_inheritance_spec.rb
145
150
  - spec/spec_helper.rb
@@ -1,72 +0,0 @@
1
- module ClassyEnum
2
- module Attributes
3
-
4
- # Class macro used to associate an enum with an attribute on an ActiveRecord model.
5
- # This method is automatically added to all ActiveRecord models when the classy_enum gem
6
- # is installed. Accepts an argument for the enum class to be associated with
7
- # the model. If the enum class name is different than the field name, then an optional
8
- # field name can be passed. ActiveRecord validation is automatically added to ensure
9
- # that a value is one of its pre-defined enum members.
10
- #
11
- # ==== Example
12
- # # Associate an enum Priority with Alarm model's priority attribute
13
- # class Alarm < ActiveRecord::Base
14
- # classy_enum_attr :priority
15
- # end
16
- #
17
- # # Associate an enum Priority with Alarm model's alarm_priority attribute
18
- # class Alarm < ActiveRecord::Base
19
- # classy_enum_attr :alarm_priority, :enum => :priority
20
- # end
21
- def classy_enum_attr(*args)
22
- options = args.extract_options!
23
-
24
- attribute = args[0]
25
-
26
- enum = options[:enum] || attribute
27
- allow_blank = options[:allow_blank] || false
28
- allow_nil = options[:allow_nil] || false
29
- serialize_as_json = options[:serialize_as_json] || false
30
-
31
- reader_method = attribute.to_s
32
-
33
- if options.has_key? :suffix
34
- ActiveSupport::Deprecation.warn(':suffix option for classy_enum_attr is deprecated, and will be removed in ClassyEnum 3.0.', caller)
35
- reader_method += "_#{options[:suffix]}"
36
- end
37
-
38
- klass = enum.to_s.camelize.constantize
39
-
40
- valid_attributes = reader_method == attribute.to_s ? klass.all : klass.all.map(&:to_s)
41
-
42
- self.instance_eval do
43
-
44
- # Add ActiveRecord validation to ensure it won't be saved unless it's an option
45
- validates_inclusion_of attribute,
46
- :in => valid_attributes,
47
- :message => "must be one of #{klass.valid_options}",
48
- :allow_blank => allow_blank,
49
- :allow_nil => allow_nil
50
-
51
- # Define getter method that returns a ClassyEnum instance
52
- define_method reader_method do
53
- klass.build(read_attribute(attribute), :owner => self, :serialize_as_json => serialize_as_json)
54
- end
55
-
56
- # Define setter method that accepts either string or symbol for member
57
- define_method "#{attribute}=" do |value|
58
- value = value.to_s unless value.nil?
59
- super(value)
60
- end
61
-
62
- # Store the enum options so it can be later retrieved by Formtastic
63
- define_method "#{attribute}_options" do
64
- {:enum => enum, :allow_blank => allow_blank}
65
- end
66
-
67
- end
68
-
69
- end
70
-
71
- end
72
- end
@@ -1,141 +0,0 @@
1
- module ClassyEnum
2
- module ClassMethods
3
-
4
- # Macro for defining enum members within a ClassyEnum class.
5
- # Accepts an array of symbols or strings which are converted to
6
- # ClassyEnum members as descents of their parent class.
7
- #
8
- # ==== Example
9
- # # Define an enum called Priority with three child classes
10
- # class Priority < ClassyEnum::Base
11
- # enum_classes :low, :medium, :high
12
- # end
13
- #
14
- # The child classes will be defined with the following constants:
15
- # PriorityLow, PriorityMedium, and PriorityHigh
16
- #
17
- # These child classes can be instantiated with either:
18
- # Priority.build(:low) or PriorityLow.new
19
- #
20
- def enum_classes(*enums)
21
- ActiveSupport::Deprecation.warn('enum_classes is deprecated, and will be removed in ClassyEnum 3.0. It is no longer needed.', caller)
22
-
23
- self.class_eval do
24
- class_attribute :enum_options, :base_class
25
-
26
- self.enum_options = enums.map(&:to_sym)
27
- self.base_class = self
28
-
29
- # # Use ActiveModel::AttributeMethods to define attribute? methods
30
- attribute_method_suffix '?'
31
- define_attribute_methods enums
32
- end
33
- end
34
-
35
- def inherited(klass)
36
- return if self == ClassyEnum::Base
37
-
38
- # Add visit_EnumMember methods to support validates_uniqueness_of with enum field
39
- Arel::Visitors::ToSql.class_eval do
40
- define_method "visit_#{klass.name}", lambda {|value| quote(value.to_s) }
41
- end
42
-
43
- if klass.name.start_with? "#{base_class.name}::"
44
- enum = klass.name.split('::').last.underscore.to_sym
45
- else
46
- ActiveSupport::Deprecation.warn("The enum class name #{klass} is deprecated. ClassyEnum 3.0 will require subclasses to use the parent class as a namespace. Change it to #{base_class}::#{klass.name.gsub(base_class.name, '')}", caller)
47
- enum = klass.name.gsub(klass.base_class.name, '').underscore.to_sym
48
- end
49
-
50
- index = self.enum_options.index(enum) + 1
51
-
52
- klass.class_eval do
53
- @index = index
54
- @option = enum
55
-
56
- attr_accessor :owner, :serialize_as_json
57
- end
58
- end
59
-
60
- # Build a new ClassyEnum child instance
61
- #
62
- # ==== Example
63
- # # Create an Enum with some elements
64
- # class Priority < ClassyEnum::Base
65
- # enum_classes :low, :medium, :high
66
- # end
67
- #
68
- # Priority.build(:low) # => PriorityLow.new
69
- def build(value, options={})
70
- return value if value.blank?
71
- return TypeError.new("Valid #{self} options are #{self.valid_options}") unless self.enum_options.include? value.to_sym
72
-
73
- # Temp hack until 3.0 to allow both namespaced and non-namespaced classes
74
- begin
75
- klass = "#{self}::#{value.to_s.camelize}".constantize
76
- rescue NameError
77
- klass = "#{self}#{value.to_s.camelize}".constantize
78
- end
79
-
80
- object = klass.new
81
- object.owner = options[:owner]
82
- object.serialize_as_json = options[:serialize_as_json]
83
- object
84
- end
85
-
86
- def find(value, options={})
87
- ActiveSupport::Deprecation.warn("find is deprecated, and will be removed in ClassyEnum 3.0. Use build(:member) instead.", caller)
88
- build(value, options)
89
- end
90
-
91
- # Returns an array of all instantiated enums
92
- #
93
- # ==== Example
94
- # # Create an Enum with some elements
95
- # class Priority < ClassyEnum::Base
96
- # enum_classes :low, :medium, :high
97
- # end
98
- #
99
- # Priority.all # => [PriorityLow.new, PriorityMedium.new, PriorityHigh.new]
100
- def all
101
- self.enum_options.map {|e| build(e) }
102
- end
103
-
104
- # Returns a 2D array for Rails select helper options.
105
- # Also used internally for Formtastic support
106
- #
107
- # ==== Example
108
- # # Create an Enum with some elements
109
- # class Priority < ClassyEnum::Base
110
- # enum_classes :low, :really_high
111
- # end
112
- #
113
- # Priority.select_options # => [["Low", "low"], ["Really High", "really_high"]]
114
- def select_options
115
- all.map {|e| [e.name, e.to_s] }
116
- end
117
-
118
- # Returns a comma separated list of valid enum options.
119
- # Also used internally for ActiveRecord model validation error messages
120
- #
121
- # ==== Example
122
- # # Create an Enum with some elements
123
- # class Priority < ClassyEnum::Base
124
- # enum_classes :low, :medium, :high
125
- # end
126
- #
127
- # Priority.valid_options # => "low, medium, high"
128
- def valid_options
129
- ActiveSupport::Deprecation.warn("valid_options is deprecated, and will be removed in ClassyEnum 3.0. Use all.join(', ') instead.", caller)
130
- self.enum_options.map(&:to_s).join(', ')
131
- end
132
-
133
- private
134
-
135
- # DSL setter method for reference to enum owner
136
- def owner(owner)
137
- define_method owner, lambda { @owner }
138
- end
139
-
140
- end
141
- end