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 CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.0.8 (October 8, 2010)
2
+
3
+ Convert array elements from hash into class instances within the current class' module
4
+
1
5
  ## 0.0.7 (October 4, 2010)
2
6
 
3
7
  Made to_h method public, so results can be converted to hash
@@ -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.7'
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
- klass = ((value.is_a? Array) ? type.to_s.classify : type.to_s.camelize).constantize rescue ObjectStruct
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
@@ -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
- - 7
9
- version: 0.0.7
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-07 00:00:00 -07:00
17
+ date: 2010-10-08 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency