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.
@@ -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
- valid_values += values_hash.keys.map do |key|
41
- key.is_a?(String) ? key.to_sym : key.to_s
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
@@ -1,3 +1,3 @@
1
1
  module EnumeratedField
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  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 :chiquita, Banana::BRAND_CHIQUITA
59
- assert_equal :delmonte, Banana::BRAND_DELMONTE
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
@@ -2,4 +2,3 @@ require 'test/unit'
2
2
  require 'turn'
3
3
  require 'shoulda'
4
4
  require 'lib/enumerated_field'
5
- require "active_model"
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: 23
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 4
10
- version: 0.0.4
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Luke Ludwig