recursive-open-struct 0.4.4 → 0.4.5

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,7 +1,7 @@
1
1
  require 'ostruct'
2
2
 
3
3
  class RecursiveOpenStruct < OpenStruct
4
- VERSION = "0.4.4"
4
+ VERSION = "0.4.5"
5
5
 
6
6
  def initialize(h=nil, args={})
7
7
  @recurse_over_arrays = args.fetch(:recurse_over_arrays,false)
@@ -28,7 +28,7 @@ class RecursiveOpenStruct < OpenStruct
28
28
  define_method(name) do
29
29
  v = @table[name]
30
30
  if v.is_a?(Hash)
31
- @sub_elements[name] ||= RecursiveOpenStruct.new(v, :recurse_over_arrays => @recurse_over_arrays)
31
+ @sub_elements[name] ||= self.class.new(v, :recurse_over_arrays => @recurse_over_arrays)
32
32
  elsif v.is_a?(Array) and @recurse_over_arrays
33
33
  @sub_elements[name] ||= recurse_over_array v
34
34
  else
@@ -45,7 +45,7 @@ class RecursiveOpenStruct < OpenStruct
45
45
  def recurse_over_array array
46
46
  array.map do |a|
47
47
  if a.is_a? Hash
48
- RecursiveOpenStruct.new(a, :recurse_over_arrays => true)
48
+ self.class.new(a, :recurse_over_arrays => true)
49
49
  elsif a.is_a? Array
50
50
  recurse_over_array a
51
51
  else
@@ -65,7 +65,7 @@ class RecursiveOpenStruct < OpenStruct
65
65
  io.puts ' '*indent_level + '(recursion limit reached)'
66
66
  else
67
67
  #puts ostrct_or_hash.inspect
68
- if ostrct_or_hash.is_a?(RecursiveOpenStruct) then
68
+ if ostrct_or_hash.is_a?(self.class) then
69
69
  ostrct_or_hash = ostrct_or_hash.marshal_dump
70
70
  end
71
71
 
@@ -73,12 +73,12 @@ class RecursiveOpenStruct < OpenStruct
73
73
  # to align display, we look for the maximum key length of the data that will be displayed
74
74
  # (everything except hashes)
75
75
  data_indent = ostrct_or_hash \
76
- .reject { |k, v| v.is_a?(RecursiveOpenStruct) || v.is_a?(Hash) } \
76
+ .reject { |k, v| v.is_a?(self.class) || v.is_a?(Hash) } \
77
77
  .max {|a,b| a[0].to_s.length <=> b[0].to_s.length}[0].to_s.length
78
78
  # puts "max length = #{data_indent}"
79
79
 
80
80
  ostrct_or_hash.each do |key, value|
81
- if (value.is_a?(RecursiveOpenStruct) || value.is_a?(Hash)) then
81
+ if (value.is_a?(self.class) || value.is_a?(Hash)) then
82
82
  io.puts ' '*indent_level + key.to_s + '.'
83
83
  display_recursive_open_struct(io, value, indent_level + 1, recursion_limit - 1)
84
84
  else
@@ -234,6 +234,14 @@ QUOTE
234
234
  @io.string.should match /^ h2\.$/
235
235
  @io.string.should match /^ \(recursion limit reached\)$/
236
236
  end
237
+
238
+ it "creates nested objects via subclass" do
239
+ RecursiveOpenStructSubClass = Class.new(RecursiveOpenStruct)
240
+
241
+ rossc = RecursiveOpenStructSubClass.new({ :one => [{:two => :three}] }, recurse_over_arrays: true)
242
+
243
+ rossc.one.first.class.should == RecursiveOpenStructSubClass
244
+ end
237
245
  end # additionnel features
238
246
 
239
247
  end # describe RecursiveOpenStruct
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recursive-open-struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
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: 2013-08-28 00:00:00.000000000 Z
12
+ date: 2013-10-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec