enumerated_type 0.2.1 → 0.2.2

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.
@@ -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