has_constant 0.7.2 → 0.7.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.2
1
+ 0.7.3
data/has_constant.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{has_constant}
8
- s.version = "0.7.2"
8
+ s.version = "0.7.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mattbeedle"]
12
- s.date = %q{2011-02-26}
12
+ s.date = %q{2011-03-23}
13
13
  s.description = %q{Allows certain fields to be limited to a set of values}
14
14
  s.email = %q{mattbeedle@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -28,7 +28,13 @@ module HasConstant
28
28
  field plural.to_sym, { :type => Array, :default => [] }.
29
29
  merge(options)
30
30
  else
31
- field singular.to_sym, { :type => Integer }.merge(options)
31
+ if values.is_a?(Hash) || values.respond_to?(:call) &&
32
+ values.call.is_a?(Hash)
33
+ type = String
34
+ else
35
+ type = Integer
36
+ end
37
+ field singular.to_sym, { :type => type }.merge(options)
32
38
  end
33
39
  end
34
40
 
@@ -50,7 +56,13 @@ module HasConstant
50
56
 
51
57
  define_method("#{singular}=") do |val|
52
58
  if val.instance_of?(String)
53
- if index = self.class.send(name.to_s).index(val)
59
+ if self.class.send(name).respond_to?(:key)
60
+ index = self.class.send(name.to_s).key(val).to_s
61
+ elsif self.class.send(name).respond_to?(:index)
62
+ index = self.class.send(name.to_s).index(val)
63
+ index = index.to_s if self.class.send(name.to_s).is_a?(Hash)
64
+ end
65
+ if index
54
66
  write_attribute singular.to_sym, index
55
67
  elsif !val.blank?
56
68
  values = values.call if values.respond_to?(:call)
@@ -70,7 +82,11 @@ module HasConstant
70
82
  end
71
83
 
72
84
  define_method(singular) do
73
- eval("#{self.class}.#{name.to_s}[self.attributes[singular].to_i] if self.attributes[singular]")
85
+ if attributes[singular]
86
+ res = self.class.send(name.to_s)[attributes[singular].to_i] rescue nil
87
+ res ||= self.class.send(name.to_s)[attributes[singular]]
88
+ res ||= self.class.send(name.to_s)[attributes[singular].to_sym]
89
+ end
74
90
  end
75
91
 
76
92
  (class << self; self; end).instance_eval do
@@ -30,6 +30,8 @@ end
30
30
  class Thing
31
31
  include Mongoid::Document
32
32
  include HasConstant
33
+
34
+ field :salutation, :type => String
33
35
  end
34
36
 
35
37
  class MongoidTest < Test::Unit::TestCase
@@ -78,14 +80,15 @@ class MongoidTest < Test::Unit::TestCase
78
80
  setup do
79
81
  Thing.has_constant :salutations, { :first => 'Mr', :second => 'Mrs' }
80
82
  @u = Thing.new :salutation => 'Mrs'
83
+ @u.save!
81
84
  end
82
85
 
83
86
  should 'store the hash key' do
84
- assert_equal 'second', @u.attributes['salutation']
87
+ assert_equal 'second', @u.reload.attributes['salutation']
85
88
  end
86
89
 
87
90
  should 'return the correct value' do
88
- assert_equal 'Mrs', @u.salutation
91
+ assert_equal 'Mrs', @u.reload.salutation
89
92
  end
90
93
  end
91
94
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_constant
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 2
10
- version: 0.7.2
9
+ - 3
10
+ version: 0.7.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - mattbeedle
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-26 00:00:00 +01:00
18
+ date: 2011-03-23 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency