enumerated_field 0.0.4 → 0.1.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.
- 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
|