object_struct 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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