simple_enum 1.6.7 → 1.6.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +7 -0
- data/lib/simple_enum.rb +1 -0
- data/lib/simple_enum/validation.rb +2 -0
- data/lib/simple_enum/version.rb +1 -1
- data/test/orm/active_record.rb +14 -0
- data/test/orm/mongoid.rb +12 -0
- data/test/simple_enum_test.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6a68b2d21b025bcb22c251918ff51b412be8ab6
|
4
|
+
data.tar.gz: bbe02918d4165d9bca1917c7dc38981bc0127136
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ce5b6271ff2a6b391819e544901d2ddfcfd64ff5c6c253b5f28cdafa94e169f9d2baa6ea7bfd0e35e03e270a63c36d8c4fa6c4f878f8926861d67f63fea0a4d
|
7
|
+
data.tar.gz: 91ad1ead6ee168f5fdcd08f82f004a232dcd1d48a8406a08f3b7597f000d8c96f0d2b7f10099f1ef0a00d4a099d32c19516fa81310aa532a43db8cd62d938e62
|
data/README.rdoc
CHANGED
@@ -82,6 +82,13 @@ useful when creating queries, displaying option elements or similar:
|
|
82
82
|
*Disclaimer*: if you _ever_ decide to reorder this array, beaware that any previous mapping is lost. So it's recommended
|
83
83
|
to create mappings (that might change) using hashes instead of arrays. For stuff like gender it might be probably perfectly
|
84
84
|
fine to use arrays though.
|
85
|
+
* You can use string values instead of integer values if your database column has the type +string+ or +text+:
|
86
|
+
|
87
|
+
class User < ActiveRecord::Base
|
88
|
+
as_eum :status, [:deleted, :active, :dsiabled], :strings => true
|
89
|
+
end
|
90
|
+
|
91
|
+
User.create!(status: :active) #=> #<User id: 1, status_cd: "active">
|
85
92
|
* Want to use `SimpleEnum` in an ActiveModel, or other class, just do:
|
86
93
|
|
87
94
|
class MyModel
|
data/lib/simple_enum.rb
CHANGED
@@ -182,6 +182,7 @@ module SimpleEnum
|
|
182
182
|
|
183
183
|
# generate setter
|
184
184
|
define_method("#{enum_cd}=") do |new_value|
|
185
|
+
new_value = new_value.to_s if options[:strings] && new_value
|
185
186
|
real = new_value.blank? ? nil : values[EnumHash.symbolize(new_value)]
|
186
187
|
real = new_value if real.nil? && values_inverted[new_value].present?
|
187
188
|
raise(ArgumentError, "Invalid enumeration value: #{new_value}") if (options[:whiny] and real.nil? and !new_value.blank?)
|
@@ -18,6 +18,8 @@ module ActiveModel
|
|
18
18
|
enum_def = @klass.enum_definitions[attribute]
|
19
19
|
raw_value = record.send(enum_def[:column])
|
20
20
|
|
21
|
+
raw_value = raw_value.to_s if enum_def[:options][:strings] && raw_value
|
22
|
+
|
21
23
|
next if (raw_value.nil? && options[:allow_nil]) || (raw_value.blank? && options[:allow_blank])
|
22
24
|
|
23
25
|
unless @klass.send(enum_def[:name].to_s.pluralize).values.include?(raw_value)
|
data/lib/simple_enum/version.rb
CHANGED
data/test/orm/active_record.rb
CHANGED
@@ -30,6 +30,8 @@ def reload_db(options = {})
|
|
30
30
|
t.column :word_cd, :string, :limit => 5
|
31
31
|
t.column :role_cd, :string
|
32
32
|
t.column :other, :integer
|
33
|
+
t.column :numeric_cd, :string
|
34
|
+
t.column :nilish_cd, :string
|
33
35
|
end
|
34
36
|
|
35
37
|
# Create ref-data table and fill with records
|
@@ -65,6 +67,16 @@ def extend_computer(current_i18n_name = "Computer", &block)
|
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
70
|
+
def extend_dummy(current_i18n_name = "Dummy", &block)
|
71
|
+
Class.new(Dummy) do
|
72
|
+
ar32? ? self.table_name = 'dummies' : set_table_name('dummies')
|
73
|
+
instance_eval &block
|
74
|
+
instance_eval <<-RUBY
|
75
|
+
def self.model_name; MockName.mock!(#{current_i18n_name.inspect}) end
|
76
|
+
RUBY
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
68
80
|
def named_dummy(class_name, &block)
|
69
81
|
begin
|
70
82
|
return class_name.constantize
|
@@ -83,6 +95,8 @@ class Dummy < ActiveRecord::Base
|
|
83
95
|
as_enum :word, { :alpha => 'alpha', :beta => 'beta', :gamma => 'gamma'}
|
84
96
|
as_enum :didum, [ :foo, :bar, :foobar ], :column => 'other'
|
85
97
|
as_enum :role, [:admin, :member, :anon], :strings => true
|
98
|
+
as_enum :numeric, [:"100", :"3.14"], :strings => true
|
99
|
+
as_enum :nilish, [:nil], :strings => true
|
86
100
|
end
|
87
101
|
|
88
102
|
class Gender < ActiveRecord::Base
|
data/test/orm/mongoid.rb
CHANGED
@@ -46,6 +46,16 @@ def extend_computer(current_i18n_name = "Computer", &block)
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
def extend_dummy(current_i18n_name = "Dummy", &block)
|
50
|
+
Class.new(Dummy) do
|
51
|
+
self.collection_name = 'dummies'
|
52
|
+
instance_eval &block
|
53
|
+
instance_eval <<-RUBY
|
54
|
+
def self.model_name; MockName.mock!(#{current_i18n_name.inspect}) end
|
55
|
+
RUBY
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
49
59
|
def named_dummy(class_name, &block)
|
50
60
|
begin
|
51
61
|
return class_name.constantize
|
@@ -72,6 +82,8 @@ class Dummy
|
|
72
82
|
as_enum :word, { :alpha => 'alpha', :beta => 'beta', :gamma => 'gamma'}
|
73
83
|
as_enum :didum, [ :foo, :bar, :foobar ], :column => 'other'
|
74
84
|
as_enum :role, [:admin, :member, :anon], :strings => true
|
85
|
+
as_enum :numeric, [:"100", :"3.14"], :strings => true
|
86
|
+
as_enum :nilish, [:nil], :strings => true
|
75
87
|
|
76
88
|
before_save :check_typed
|
77
89
|
|
data/test/simple_enum_test.rb
CHANGED
@@ -44,6 +44,23 @@ class SimpleEnumTest < MiniTest::Unit::TestCase
|
|
44
44
|
assert_equal(1, d.gender_cd)
|
45
45
|
end
|
46
46
|
|
47
|
+
def test_setting_value_when_it_is_not_a_string_and_strings_is_true
|
48
|
+
d = Dummy.new
|
49
|
+
d.numeric = 100
|
50
|
+
assert_equal(:"100", d.numeric)
|
51
|
+
assert_equal("100", d.numeric_cd)
|
52
|
+
d.numeric = 3.14
|
53
|
+
assert_equal(:"3.14", d.numeric)
|
54
|
+
assert_equal("3.14", d.numeric_cd)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_setting_value_to_nil_when_enum_has_nil_as_symbol_and_strings_is_true
|
58
|
+
d = Dummy.new
|
59
|
+
d.nilish = nil
|
60
|
+
assert_equal(nil, d.nilish)
|
61
|
+
assert_equal(nil, d.nilish_cd)
|
62
|
+
end
|
63
|
+
|
47
64
|
def test_setting_value_as_key_in_constructor
|
48
65
|
d = Dummy.new :gender => 1
|
49
66
|
assert_equal(:female, d.gender)
|
@@ -221,6 +238,15 @@ class SimpleEnumTest < MiniTest::Unit::TestCase
|
|
221
238
|
assert_equal(true, computer.save)
|
222
239
|
end
|
223
240
|
|
241
|
+
def test_validator_allows_symbols_as_raw_colum_value_if_strings_is_true
|
242
|
+
validated_dummy = extend_dummy do
|
243
|
+
validates_as_enum :role
|
244
|
+
end
|
245
|
+
|
246
|
+
d = validated_dummy.new :role_cd => :admin
|
247
|
+
assert d.valid?, "valid? should return true"
|
248
|
+
end
|
249
|
+
|
224
250
|
def test_that_argumenterror_is_raised_if_invalid_symbol_is_passed
|
225
251
|
assert_raises ArgumentError do
|
226
252
|
Dummy.new :gender => :foo
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Westermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|