object_struct 0.0.7 → 0.0.8
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/CHANGELOG +4 -0
- data/lib/object_struct/object_struct.rb +6 -2
- data/test/test_object_struct.rb +13 -0
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
# @abstract You probably want to subclass ObjectStruct, to reflect your business
|
26
26
|
# entities. See the README for example use.
|
27
27
|
class ObjectStruct < OpenStruct
|
28
|
-
VERSION = '0.0.
|
28
|
+
VERSION = '0.0.8'
|
29
29
|
|
30
30
|
# Delegated to Hash#each
|
31
31
|
def each &blk
|
@@ -126,7 +126,8 @@ class ObjectStruct < OpenStruct
|
|
126
126
|
# requested, or an ObjectStruct; or an Array thereof; or the value if it
|
127
127
|
# neither an Array nor Hash.
|
128
128
|
def self.convert(value, type = nil)
|
129
|
-
|
129
|
+
klass_name = type.to_s.demodulize
|
130
|
+
klass = modulize((value.is_a? Array) ? klass_name.classify : klass_name.camelize).constantize rescue ObjectStruct
|
130
131
|
|
131
132
|
case value
|
132
133
|
when Array
|
@@ -139,6 +140,9 @@ class ObjectStruct < OpenStruct
|
|
139
140
|
end
|
140
141
|
|
141
142
|
private
|
143
|
+
def self.modulize(klassname)
|
144
|
+
(name.split('::')[0..-2] << klassname).join('::')
|
145
|
+
end
|
142
146
|
|
143
147
|
def self.value_maybe_promise(key, value)
|
144
148
|
case value
|
data/test/test_object_struct.rb
CHANGED
@@ -13,6 +13,11 @@ class Widget < ObjectStruct
|
|
13
13
|
property_type :slots => Slotnozzle, :plural => true
|
14
14
|
end
|
15
15
|
|
16
|
+
module KnobModule
|
17
|
+
class Knobwizzle < ObjectStruct; end
|
18
|
+
class SubKnob < ObjectStruct; end
|
19
|
+
end
|
20
|
+
|
16
21
|
class ObjectStructTest < MiniTest::Unit::TestCase
|
17
22
|
def setup
|
18
23
|
@data = JSON.load File.open File.dirname(__FILE__)+'/test_data.json'
|
@@ -64,4 +69,12 @@ class ObjectStructTest < MiniTest::Unit::TestCase
|
|
64
69
|
refute @widget.has_id?
|
65
70
|
assert @widget.has_text?
|
66
71
|
end
|
72
|
+
|
73
|
+
def test_modulizes_array_class_names
|
74
|
+
obj = {'sub_knobs' => [{'a' => 'a'}, {'b' => 'b'}, {'c' => 'c'}]}
|
75
|
+
knobwizzle = KnobModule::Knobwizzle.convert(obj, 'KnobModule::Knobwizzle')
|
76
|
+
assert knobwizzle.is_a?(KnobModule::Knobwizzle), "Knobwizzle is a #{knobwizzle.class.name}, not a KnobModule::Knobwizzle"
|
77
|
+
assert knobwizzle.sub_knobs.all? {|sk| sk.is_a?(KnobModule::SubKnob)}, "sub_knobs are #{knobwizzle.sub_knobs.first.class.name}, not KnobModule::SubKnobs"
|
78
|
+
end
|
79
|
+
|
67
80
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Quid, Inc.
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-08 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|