enumerated_type 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module EnumeratedType
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -34,7 +34,8 @@ module EnumeratedType
34
34
 
35
35
  def initialize(name, properties)
36
36
  @name = name
37
- properties.each { |k, v| send(:"#{k}=", v.freeze) }
37
+ properties.each { |k, v| send(:"#{k}=", v) }
38
+ properties.values.each { |v| v.freeze if v.is_a?(String) }
38
39
  end
39
40
 
40
41
  def self.new(*names)
@@ -52,8 +53,8 @@ module EnumeratedType
52
53
  end
53
54
 
54
55
  def [](name)
55
- each { |e| return e if e.name == name }
56
- raise ArgumentError, "Unrecognized #{self.name} name #{name.inspect}'"
56
+ found = find { |e| e.name == name }
57
+ found || raise(ArgumentError, "Unrecognized #{self.name} name #{name.inspect}'")
57
58
  end
58
59
 
59
60
  def recognized?(name)
@@ -80,8 +80,29 @@ describe EnumeratedType do
80
80
  Gender.map(&:planet).must_equal ["mars", "venus"]
81
81
  end
82
82
 
83
- it "freezes properties" do
84
- lambda { Gender::MALE.planet.replace("pluto") }.must_raise(RuntimeError)
83
+ it "freezes String properties" do
84
+ Gender::MALE.planet.frozen?.must_equal true
85
+ end
86
+
87
+ it "does not freeze other properties" do
88
+ NonString = Class.new do
89
+ def frozen?
90
+ !!@frozen
91
+ end
92
+
93
+ def freeze
94
+ @frozen = true
95
+ end
96
+ end
97
+
98
+ non_string = NonString.new
99
+
100
+ Class.new do
101
+ include EnumeratedType
102
+ declare :test, :other => non_string
103
+ end
104
+
105
+ non_string.frozen?.must_equal false
85
106
  end
86
107
 
87
108
  it "does not expose public setters for properties" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumerated_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-10 00:00:00.000000000 Z
12
+ date: 2014-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -90,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
90
  version: '0'
91
91
  segments:
92
92
  - 0
93
- hash: 3532502107879021321
93
+ hash: 531591614487386038
94
94
  required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  version: '0'
100
100
  segments:
101
101
  - 0
102
- hash: 3532502107879021321
102
+ hash: 531591614487386038
103
103
  requirements: []
104
104
  rubyforge_project:
105
105
  rubygems_version: 1.8.23