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.
- data/lib/enumerated_type/version.rb +1 -1
- data/lib/enumerated_type.rb +4 -3
- data/test/enumerated_type_spec.rb +23 -2
- metadata +4 -4
data/lib/enumerated_type.rb
CHANGED
@@ -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
|
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
|
-
|
56
|
-
raise
|
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
|
-
|
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.
|
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-
|
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:
|
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:
|
102
|
+
hash: 531591614487386038
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
105
|
rubygems_version: 1.8.23
|