active_enum 0.8.0 → 0.8.1
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.
- data/README.rdoc +15 -4
- data/active_enum.gemspec +1 -1
- data/lib/active_enum/extensions.rb +5 -2
- data/lib/active_enum/storage/memory_store.rb +7 -6
- data/lib/active_enum/version.rb +1 -1
- data/spec/active_enum/extensions_spec.rb +28 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -43,11 +43,21 @@ Beware that if you change the order of values defined in an enum which don't hav
|
|
43
43
|
This could corrupt your data if the enum values have been stored in a model record, as they will no longer map to
|
44
44
|
the original enum.
|
45
45
|
|
46
|
+
Define values with meta data
|
47
|
+
|
48
|
+
class Sex < ActiveEnum::Base
|
49
|
+
value :id => 1, :name => 'Male', :symbol => '♂'
|
50
|
+
value :id => 2, :name => 'Female', :symbol => '♀'
|
51
|
+
end
|
52
|
+
|
53
|
+
The meta data can be any other key-value pairs, it's not limited to certain keys.
|
54
|
+
|
46
55
|
Enum class usage
|
47
56
|
|
48
57
|
Sex[1] # => 'Male'
|
49
58
|
Sex['Male'] # => 1
|
50
59
|
Sex[:male] # => 1
|
60
|
+
Sex.meta(1) # => { :symbol => '♂' }
|
51
61
|
Sex.to_select # => [['Male', 1], ['Female',2]] for select form helpers
|
52
62
|
|
53
63
|
=== Ordering
|
@@ -100,11 +110,12 @@ Access the enum values and the enum class using the attribute method with a symb
|
|
100
110
|
|
101
111
|
user = User.new
|
102
112
|
user.sex = 1
|
103
|
-
user.sex
|
113
|
+
user.sex # => 1
|
104
114
|
|
105
|
-
user.sex(:id)
|
106
|
-
user.sex(:name)
|
107
|
-
user.sex(:enum)
|
115
|
+
user.sex(:id) # => 1
|
116
|
+
user.sex(:name) # => 'Male'
|
117
|
+
user.sex(:enum) # => Sex
|
118
|
+
user.sex(:symbol) # => ♂. Can use any meta data key.
|
108
119
|
|
109
120
|
You can set the default to return the enum name value for enumerated attribute
|
110
121
|
|
data/active_enum.gemspec
CHANGED
@@ -60,13 +60,14 @@ module ActiveEnum
|
|
60
60
|
# user.sex(:id)
|
61
61
|
# user.sex(:name)
|
62
62
|
# user.sex(:enum)
|
63
|
+
# user.sex(:meta_key)
|
63
64
|
#
|
64
65
|
def define_active_enum_read_method(attribute)
|
65
66
|
define_method("#{attribute}") do |*arg|
|
66
|
-
arg
|
67
|
+
arg = arg.first
|
67
68
|
value = super()
|
69
|
+
enum = self.class.enum_for(attribute)
|
68
70
|
|
69
|
-
enum = self.class.enum_for(attribute)
|
70
71
|
case arg
|
71
72
|
when :id
|
72
73
|
value if enum[value]
|
@@ -74,6 +75,8 @@ module ActiveEnum
|
|
74
75
|
enum[value]
|
75
76
|
when :enum
|
76
77
|
enum
|
78
|
+
when Symbol
|
79
|
+
(enum.meta(value) || {})[arg]
|
77
80
|
else
|
78
81
|
ActiveEnum.use_name_as_value ? enum[value] : value
|
79
82
|
end
|
@@ -27,12 +27,13 @@ module ActiveEnum
|
|
27
27
|
|
28
28
|
def sort!
|
29
29
|
return if @order == :as_defined
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
|
31
|
+
case @order
|
32
|
+
when :asc
|
33
|
+
values.sort! {|a,b| a[0] <=> b[0] }
|
34
|
+
when :desc
|
35
|
+
values.sort! {|a,b| b[0] <=> a[0] }
|
36
|
+
end
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
data/lib/active_enum/version.rb
CHANGED
@@ -124,6 +124,34 @@ describe ActiveEnum::Extensions do
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
+
describe "with meta data" do
|
128
|
+
before(:all) do
|
129
|
+
reset_class Person do
|
130
|
+
enumerate :sex do
|
131
|
+
value :id => 1, :name => 'Male', :description => 'Man'
|
132
|
+
value :id => 2, :name => 'Female', :description => 'Woman'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
before do
|
138
|
+
@person = Person.new(:sex =>1)
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should return meta value for existing key' do
|
142
|
+
@person.sex(:description).should == 'Man'
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'should return nil for missing meta value' do
|
146
|
+
@person.sex(:nonexistent).should be_nil
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should return nil for missing index' do
|
150
|
+
@person.sex = nil
|
151
|
+
@person.sex(:description).should be_nil
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
127
155
|
describe "question method" do
|
128
156
|
before do
|
129
157
|
@person.sex = 1
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 1
|
10
|
+
version: 0.8.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Adam Meehan
|