enumerated_field 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/enumerated_field.rb +11 -4
- data/lib/enumerated_field/version.rb +1 -1
- data/test/enumerated_field_test.rb +3 -2
- data/test/test_helper.rb +0 -1
- metadata +3 -3
data/lib/enumerated_field.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require "active_model"
|
2
|
+
require "active_support/hash_with_indifferent_access"
|
3
|
+
|
1
4
|
module EnumeratedField
|
2
5
|
|
3
6
|
def self.included(klass)
|
@@ -10,7 +13,7 @@ module EnumeratedField
|
|
10
13
|
# field_name typically corresponds to the database column name
|
11
14
|
# values_array is a double array (not a hash to preserve order for when order matters.. ie select options)
|
12
15
|
def enum_field(field_name, values_array, options = {})
|
13
|
-
values_hash =
|
16
|
+
values_hash = ActiveSupport::HashWithIndifferentAccess.new
|
14
17
|
values_array.each { |value, key| values_hash[key] = value }
|
15
18
|
default_options = {
|
16
19
|
:validate => true,
|
@@ -37,8 +40,12 @@ module EnumeratedField
|
|
37
40
|
|
38
41
|
unless options[:validate] == false
|
39
42
|
valid_values = values_hash.keys
|
40
|
-
|
41
|
-
key.is_a?(String)
|
43
|
+
values_hash.keys.map do |key|
|
44
|
+
if key.is_a?(String) and not key.blank?
|
45
|
+
valid_values << key.to_sym
|
46
|
+
else
|
47
|
+
valid_values << key.to_s
|
48
|
+
end
|
42
49
|
end
|
43
50
|
validates field_name, :inclusion => valid_values,
|
44
51
|
:allow_nil => options[:allow_nil], :allow_blank => options[:allow_blank]
|
@@ -71,7 +78,7 @@ module EnumeratedField
|
|
71
78
|
# ex. object.league_nfl? which returns true if the objects league
|
72
79
|
# field is currently set to nfl otherwise false
|
73
80
|
values_hash.keys.each do |key|
|
74
|
-
define_method("#{field_name}_#{key}?") { send(field_name) == key }
|
81
|
+
define_method("#{field_name}_#{key}?") { send(field_name).to_s == key.to_s }
|
75
82
|
end
|
76
83
|
|
77
84
|
end
|
@@ -55,8 +55,8 @@ class EnumeratedFieldTest < Test::Unit::TestCase
|
|
55
55
|
end
|
56
56
|
|
57
57
|
should 'create contstants for the field keys' do
|
58
|
-
assert_equal
|
59
|
-
assert_equal
|
58
|
+
assert_equal "chiquita", Banana::BRAND_CHIQUITA
|
59
|
+
assert_equal "delmonte", Banana::BRAND_DELMONTE
|
60
60
|
end
|
61
61
|
|
62
62
|
should 'create underscored constants from field keys which contain invalid constant name characters' do
|
@@ -79,6 +79,7 @@ class EnumeratedFieldTest < Test::Unit::TestCase
|
|
79
79
|
|
80
80
|
should 'show Green for color_display of green' do
|
81
81
|
assert_equal @red_apple.color_display_for(:green), 'Green'
|
82
|
+
assert_equal @red_apple.color_display_for('green'), 'Green'
|
82
83
|
end
|
83
84
|
|
84
85
|
should 'have two enum fields in one class' do
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumerated_field
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.4
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Luke Ludwig
|