recursive-open-struct 0.2.1 → 0.3.1

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/.document CHANGED
File without changes
data/.rspec CHANGED
File without changes
data/Gemfile CHANGED
@@ -10,5 +10,6 @@ group :development do
10
10
  gem 'rspec' #, "~> 2.3.0"
11
11
  gem 'bundler' #, "~> 1.0.0"
12
12
  gem 'jeweler' #, "~> 1.6.0"
13
- gem 'rcov' #, ">= 0"
13
+ gem 'rcov' if RUBY_VERSION =~ /^1\.8/
14
+ gem 'rdoc'
14
15
  end
data/Gemfile.lock CHANGED
@@ -1,22 +1,25 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.2)
4
+ diff-lcs (1.1.3)
5
5
  git (1.2.5)
6
- jeweler (1.6.0)
7
- bundler (~> 1.0.0)
6
+ jeweler (1.8.4)
7
+ bundler (~> 1.0)
8
8
  git (>= 1.2.5)
9
9
  rake
10
- rake (0.9.0)
11
- rcov (0.9.9)
12
- rspec (2.6.0)
13
- rspec-core (~> 2.6.0)
14
- rspec-expectations (~> 2.6.0)
15
- rspec-mocks (~> 2.6.0)
16
- rspec-core (2.6.2)
17
- rspec-expectations (2.6.0)
18
- diff-lcs (~> 1.1.2)
19
- rspec-mocks (2.6.0)
10
+ rdoc
11
+ json (1.7.5)
12
+ rake (0.9.2.2)
13
+ rdoc (3.12)
14
+ json (~> 1.4)
15
+ rspec (2.11.0)
16
+ rspec-core (~> 2.11.0)
17
+ rspec-expectations (~> 2.11.0)
18
+ rspec-mocks (~> 2.11.0)
19
+ rspec-core (2.11.1)
20
+ rspec-expectations (2.11.3)
21
+ diff-lcs (~> 1.1.3)
22
+ rspec-mocks (2.11.3)
20
23
 
21
24
  PLATFORMS
22
25
  ruby
@@ -24,5 +27,5 @@ PLATFORMS
24
27
  DEPENDENCIES
25
28
  bundler
26
29
  jeweler
27
- rcov
30
+ rdoc
28
31
  rspec
data/LICENSE.txt CHANGED
File without changes
data/README.rdoc CHANGED
@@ -1,27 +1,39 @@
1
1
  = recursive-open-struct
2
2
 
3
- RecursiveOpenStruct is a extension of OpenStruct.
4
- It enhance OpenStruct in that it allows nested hashes to be treated in a recursive
5
- fashion. For example:
3
+ OpenStruct subclass that returns nested hash attributes as
4
+ RecursiveOpenStructs.
5
+
6
+ It allows for hashes within hashes to be called in a chain of methods:
7
+
6
8
  ros = RecursiveOpenStruct.new( { :fooa => { :foob => 'fooc' } } )
7
- can now be accessed this way :
8
- ros.fooa.foob # 'fooc'
9
9
 
10
- Also, if needed, nested hashes can still be accessed as hashes :
10
+ ros.fooa.foob # => 'fooc'
11
+
12
+ Also, if needed, nested hashes can still be accessed as hashes:
11
13
 
12
14
  ros.fooa_as_a_hash # { :foob => 'fooc' }
13
15
 
16
+ RecursiveOpenStruct can also optionally recurse across arrays, although you
17
+ have to explicitly enable it:
18
+
19
+ h = { :somearr => [ { :name => 'a'}, { :name => 'b' } ] }
20
+
21
+ ros = RecursiveOpenStruct.new(h, :recurse_over_arrays => true )
22
+
23
+ ros.somarr[0].name # => 'a'
24
+ ros.somarr[1].name # => 'b'
25
+
14
26
  == Installation
15
27
 
16
28
  Available as a gem in rubygems, the default gem repository.
17
29
 
18
30
  If you use bundler, just throw that in your gemfile :
31
+
19
32
  gem 'recursive-open-struct'
20
33
 
21
34
  You may also install the gem manually :
22
- gem install recursive-open-struct
23
35
 
24
- Isn't that easy ? (Special thanks to the jeweler tool)
36
+ gem install recursive-open-struct
25
37
 
26
38
  == Note on Patches/Pull Requests
27
39
 
data/Rakefile CHANGED
@@ -49,7 +49,7 @@ end
49
49
 
50
50
  task :default => :spec
51
51
 
52
- require 'rake/rdoctask'
52
+ require 'rdoc/task'
53
53
  Rake::RDocTask.new do |rdoc|
54
54
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
55
55
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.1
@@ -0,0 +1 @@
1
+ require 'recursive_open_struct'
@@ -1,55 +1,66 @@
1
1
  require 'ostruct'
2
2
 
3
3
  class RecursiveOpenStruct < OpenStruct
4
-
4
+
5
+ def initialize(h=nil, args={})
6
+ @recurse_over_arrays = args.fetch(:recurse_over_arrays,false)
7
+ super(h)
8
+ end
9
+
5
10
  def new_ostruct_member(name)
6
11
  name = name.to_sym
7
12
  unless self.respond_to?(name)
8
13
  class << self; self; end.class_eval do
9
- define_method(name) {
14
+ define_method(name) do
10
15
  v = @table[name]
11
- v.is_a?(Hash) ? RecursiveOpenStruct.new(v) : v
12
- }
16
+ if v.is_a?(Hash)
17
+ RecursiveOpenStruct.new(v)
18
+ elsif v.is_a?(Array) and @recurse_over_arrays
19
+ v.map { |a| (a.is_a? Hash) ? RecursiveOpenStruct.new(a, :recurse_over_arrays => true) : a }
20
+ else
21
+ v
22
+ end
23
+ end
13
24
  define_method("#{name}=") { |x| modifiable[name] = x }
14
25
  define_method("#{name}_as_a_hash") { @table[name] }
15
26
  end
16
27
  end
17
28
  name
18
29
  end
19
-
20
- def debug_inspect(indent_level = 0, recursion_limit = 12)
21
- display_recursive_open_struct(@table, indent_level, recursion_limit)
30
+
31
+ def debug_inspect(io = STDOUT, indent_level = 0, recursion_limit = 12)
32
+ display_recursive_open_struct(io, @table, indent_level, recursion_limit)
22
33
  end
23
-
24
- def display_recursive_open_struct(ostrct_or_hash, indent_level, recursion_limit)
25
-
34
+
35
+ def display_recursive_open_struct(io, ostrct_or_hash, indent_level, recursion_limit)
36
+
26
37
  if recursion_limit <= 0 then
27
38
  # protection against recursive structure (like in the tests)
28
- puts ' '*indent_level + '(recursion limit reached)'
39
+ io.puts ' '*indent_level + '(recursion limit reached)'
29
40
  else
30
41
  #puts ostrct_or_hash.inspect
31
42
  if ostrct_or_hash.is_a?(RecursiveOpenStruct) then
32
43
  ostrct_or_hash = ostrct_or_hash.marshal_dump
33
44
  end
34
-
45
+
35
46
  # We'll display the key values like this : key = value
36
47
  # to align display, we look for the maximum key length of the data that will be displayed
37
48
  # (everything except hashes)
38
- data_indent = ostrct_or_hash
39
- .reject { |k, v| v.is_a?(RecursiveOpenStruct) || v.is_a?(Hash) }
40
- .max {|a,b| a[0].to_s.length <=> b[0].to_s.length}[0].length
49
+ data_indent = ostrct_or_hash \
50
+ .reject { |k, v| v.is_a?(RecursiveOpenStruct) || v.is_a?(Hash) } \
51
+ .max {|a,b| a[0].to_s.length <=> b[0].to_s.length}[0].to_s.length
41
52
  # puts "max length = #{data_indent}"
42
-
53
+
43
54
  ostrct_or_hash.each do |key, value|
44
55
  if (value.is_a?(RecursiveOpenStruct) || value.is_a?(Hash)) then
45
- puts ' '*indent_level + key.to_s + '.'
46
- display_recursive_open_struct(value, indent_level + 1, recursion_limit - 1)
56
+ io.puts ' '*indent_level + key.to_s + '.'
57
+ display_recursive_open_struct(io, value, indent_level + 1, recursion_limit - 1)
47
58
  else
48
- puts ' '*indent_level + key.to_s + ' '*(data_indent - key.to_s.length) + ' = ' + value.inspect
59
+ io.puts ' '*indent_level + key.to_s + ' '*(data_indent - key.to_s.length) + ' = ' + value.inspect
49
60
  end
50
61
  end
51
62
  end
52
-
63
+
53
64
  true
54
65
  end
55
66
 
@@ -4,24 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{recursive-open-struct}
8
- s.version = "0.2.1"
7
+ s.name = "recursive-open-struct"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{William (B.J.) Snow Orvis}]
12
- s.date = %q{2011-05-31}
13
- s.description = %q{RecursiveOpenStruct is a subclass of OpenStruct. It differs from
14
- OpenStruct in that it allows nested hashes to be treated in a recursive
15
- fashion. For example:
16
-
17
- ros = RecursiveOpenStruct.new({ :a => { :b => 'c' } })
18
- ros.a.b # 'c'
19
-
20
- Also, nested hashes can still be accessed as hashes:
21
-
22
- ros.a_as_a_hash # { :b => 'c' }
23
- }
24
- s.email = %q{aetherknight@gmail.com}
11
+ s.authors = ["William (B.J.) Snow Orvis"]
12
+ s.date = "2013-01-05"
13
+ s.description = "RecursiveOpenStruct is a subclass of OpenStruct. It differs from\nOpenStruct in that it allows nested hashes to be treated in a recursive\nfashion. For example:\n\n ros = RecursiveOpenStruct.new({ :a => { :b => 'c' } })\n ros.a.b # 'c'\n\nAlso, nested hashes can still be accessed as hashes:\n\n ros.a_as_a_hash # { :b => 'c' }\n"
14
+ s.email = "aetherknight@gmail.com"
25
15
  s.extra_rdoc_files = [
26
16
  "LICENSE.txt",
27
17
  "README.rdoc"
@@ -35,16 +25,17 @@ Also, nested hashes can still be accessed as hashes:
35
25
  "README.rdoc",
36
26
  "Rakefile",
37
27
  "VERSION",
28
+ "lib/recursive-open-struct.rb",
38
29
  "lib/recursive_open_struct.rb",
39
30
  "recursive-open-struct.gemspec",
40
31
  "spec/recursive_open_struct_spec.rb",
41
32
  "spec/spec_helper.rb"
42
33
  ]
43
- s.homepage = %q{http://github.com/aetherknight/recursive-open-struct}
44
- s.licenses = [%q{MIT}]
45
- s.require_paths = [%q{lib}]
46
- s.rubygems_version = %q{1.8.3}
47
- s.summary = %q{OpenStruct subclass that returns nested hash attributes as RecursiveOpenStructs}
34
+ s.homepage = "http://github.com/aetherknight/recursive-open-struct"
35
+ s.licenses = ["MIT"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = "1.8.24"
38
+ s.summary = "OpenStruct subclass that returns nested hash attributes as RecursiveOpenStructs"
48
39
 
49
40
  if s.respond_to? :specification_version then
50
41
  s.specification_version = 3
@@ -53,18 +44,18 @@ Also, nested hashes can still be accessed as hashes:
53
44
  s.add_development_dependency(%q<rspec>, [">= 0"])
54
45
  s.add_development_dependency(%q<bundler>, [">= 0"])
55
46
  s.add_development_dependency(%q<jeweler>, [">= 0"])
56
- s.add_development_dependency(%q<rcov>, [">= 0"])
47
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
57
48
  else
58
49
  s.add_dependency(%q<rspec>, [">= 0"])
59
50
  s.add_dependency(%q<bundler>, [">= 0"])
60
51
  s.add_dependency(%q<jeweler>, [">= 0"])
61
- s.add_dependency(%q<rcov>, [">= 0"])
52
+ s.add_dependency(%q<rdoc>, [">= 0"])
62
53
  end
63
54
  else
64
55
  s.add_dependency(%q<rspec>, [">= 0"])
65
56
  s.add_dependency(%q<bundler>, [">= 0"])
66
57
  s.add_dependency(%q<jeweler>, [">= 0"])
67
- s.add_dependency(%q<rcov>, [">= 0"])
58
+ s.add_dependency(%q<rdoc>, [">= 0"])
68
59
  end
69
60
  end
70
61
 
@@ -2,46 +2,46 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'recursive_open_struct'
3
3
 
4
4
  describe RecursiveOpenStruct do
5
-
5
+
6
6
  describe "behavior it inherits from OpenStruct" do
7
-
7
+
8
8
  it "can represent arbitrary data objects" do
9
9
  ros = RecursiveOpenStruct.new
10
10
  ros.blah = "John Smith"
11
11
  ros.blah.should == "John Smith"
12
12
  end
13
-
13
+
14
14
  it "can be created from a hash" do
15
15
  h = { :asdf => 'John Smith' }
16
16
  ros = RecursiveOpenStruct.new(h)
17
17
  ros.asdf.should == "John Smith"
18
18
  end
19
-
19
+
20
20
  it "can modify an existing key" do
21
21
  h = { :blah => 'John Smith' }
22
22
  ros = RecursiveOpenStruct.new(h)
23
23
  ros.blah = "George Washington"
24
24
  ros.blah.should == "George Washington"
25
25
  end
26
-
26
+
27
27
  describe "handling of arbitrary attributes" do
28
28
  before(:each) do
29
29
  @ros = RecursiveOpenStruct.new
30
30
  @ros.blah = "John Smith"
31
31
  end
32
-
32
+
33
33
  describe "#respond?" do
34
34
  it { @ros.should respond_to :blah }
35
35
  it { @ros.should respond_to :blah= }
36
36
  it { @ros.should_not respond_to :asdf }
37
37
  it { @ros.should_not respond_to :asdf= }
38
38
  end # describe #respond?
39
-
39
+
40
40
  describe "#methods" do
41
- it { @ros.methods.should include :blah }
42
- it { @ros.methods.should include :blah= }
43
- it { @ros.methods.should_not include :asdf }
44
- it { @ros.methods.should_not include :asdf= }
41
+ it { @ros.methods.map(&:to_sym).should include :blah }
42
+ it { @ros.methods.map(&:to_sym).should include :blah= }
43
+ it { @ros.methods.map(&:to_sym).should_not include :asdf }
44
+ it { @ros.methods.map(&:to_sym).should_not include :asdf= }
45
45
  end # describe #methods
46
46
  end # describe handling of arbitrary attributes
47
47
  end # describe behavior it inherits from OpenStruct
@@ -51,15 +51,15 @@ describe RecursiveOpenStruct do
51
51
  h = { :blah => { :another => 'value' } }
52
52
  @ros = RecursiveOpenStruct.new(h)
53
53
  end
54
-
54
+
55
55
  it "returns accessed hashes as RecursiveOpenStructs instead of hashes" do
56
56
  @ros.blah.another.should == 'value'
57
57
  end
58
-
58
+
59
59
  it "uses #key_as_a_hash to return key as a Hash" do
60
60
  @ros.blah_as_a_hash.should == { :another => 'value' }
61
61
  end
62
-
62
+
63
63
  describe "handling loops in the origin Hashes" do
64
64
  before(:each) do
65
65
  h1 = { :a => 'a'}
@@ -67,7 +67,7 @@ describe RecursiveOpenStruct do
67
67
  h1[:h2] = h2
68
68
  @ros = RecursiveOpenStruct.new(h2)
69
69
  end
70
-
70
+
71
71
  it { @ros.h1.a.should == 'a' }
72
72
  it { @ros.h1.h2.a.should == 'b' }
73
73
  it { @ros.h1.h2.h1.a.should == 'a' }
@@ -75,20 +75,101 @@ describe RecursiveOpenStruct do
75
75
  it { @ros.h1.should == @ros.h1.h2.h1 }
76
76
  it { @ros.h1.should_not == @ros.h1.h2 }
77
77
  end # describe handling loops in the origin Hashes
78
+
79
+ describe 'recursing over arrays' do
80
+ let(:blah_list) { [ { :foo => '1' }, { :foo => '2' }, 'baz' ] }
81
+ let(:h) { { :blah => blah_list } }
82
+
83
+ context "when recursing over arrays is enabled" do
84
+ before(:each) do
85
+ @ros = RecursiveOpenStruct.new(h, :recurse_over_arrays => true)
86
+ end
87
+
88
+ it { @ros.blah.length.should == 3 }
89
+ it { @ros.blah[0].foo.should == '1' }
90
+ it { @ros.blah[1].foo.should == '2' }
91
+ it { @ros.blah_as_a_hash.should == blah_list }
92
+ it { @ros.blah[2].should == 'baz' }
93
+ end # when recursing over arrays is enabled
94
+
95
+ context "when recursing over arrays is disabled" do
96
+ before(:each) do
97
+ @ros = RecursiveOpenStruct.new(h)
98
+ end
99
+
100
+ it { @ros.blah.length.should == 3 }
101
+ it { @ros.blah[0].should == { :foo => '1' } }
102
+ it { @ros.blah[0][:foo].should == '1' }
103
+ end # when recursing over arrays is disabled
104
+
105
+ end # recursing over arrays
78
106
  end # recursive behavior
79
-
107
+
80
108
  describe "additionnel features" do
81
-
109
+
82
110
  before(:each) do
83
111
  h1 = { :a => 'a'}
84
112
  h2 = { :a => 'b', :h1 => h1 }
85
113
  h1[:h2] = h2
86
114
  @ros = RecursiveOpenStruct.new(h2)
87
115
  end
88
-
116
+
89
117
  it "should have a simple way of display" do
90
- @ros.debug_inspect
118
+ @output = <<-QUOTE
119
+ a = "b"
120
+ h1.
121
+ a = "a"
122
+ h2.
123
+ a = "b"
124
+ h1.
125
+ a = "a"
126
+ h2.
127
+ a = "b"
128
+ h1.
129
+ a = "a"
130
+ h2.
131
+ a = "b"
132
+ h1.
133
+ a = "a"
134
+ h2.
135
+ a = "b"
136
+ h1.
137
+ a = "a"
138
+ h2.
139
+ a = "b"
140
+ h1.
141
+ a = "a"
142
+ h2.
143
+ (recursion limit reached)
144
+ QUOTE
145
+ @io = StringIO.new
146
+ @ros.debug_inspect(@io)
147
+ @io.string.should match /^a = "b"$/
148
+ @io.string.should match /^h1\.$/
149
+ @io.string.should match /^ a = "a"$/
150
+ @io.string.should match /^ h2\.$/
151
+ @io.string.should match /^ a = "b"$/
152
+ @io.string.should match /^ h1\.$/
153
+ @io.string.should match /^ a = "a"$/
154
+ @io.string.should match /^ h2\.$/
155
+ @io.string.should match /^ a = "b"$/
156
+ @io.string.should match /^ h1\.$/
157
+ @io.string.should match /^ a = "a"$/
158
+ @io.string.should match /^ h2\.$/
159
+ @io.string.should match /^ a = "b"$/
160
+ @io.string.should match /^ h1\.$/
161
+ @io.string.should match /^ a = "a"$/
162
+ @io.string.should match /^ h2\.$/
163
+ @io.string.should match /^ a = "b"$/
164
+ @io.string.should match /^ h1\.$/
165
+ @io.string.should match /^ a = "a"$/
166
+ @io.string.should match /^ h2\.$/
167
+ @io.string.should match /^ a = "b"$/
168
+ @io.string.should match /^ h1\.$/
169
+ @io.string.should match /^ a = "a"$/
170
+ @io.string.should match /^ h2\.$/
171
+ @io.string.should match /^ \(recursion limit reached\)$/
91
172
  end
92
173
  end # additionnel features
93
-
174
+
94
175
  end # describe RecursiveOpenStruct
data/spec/spec_helper.rb CHANGED
File without changes
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.2.1
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-05-31 00:00:00.000000000Z
12
+ date: 2013-01-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &73346940 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *73346940
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bundler
27
- requirement: &73346640 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *73346640
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: jeweler
38
- requirement: &73346350 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *73346350
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
- name: rcov
49
- requirement: &73346110 !ruby/object:Gem::Requirement
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *73346110
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  description: ! "RecursiveOpenStruct is a subclass of OpenStruct. It differs from\nOpenStruct
59
79
  in that it allows nested hashes to be treated in a recursive\nfashion. For example:\n\n
60
80
  \ ros = RecursiveOpenStruct.new({ :a => { :b => 'c' } })\n ros.a.b # 'c'\n\nAlso,
@@ -75,6 +95,7 @@ files:
75
95
  - README.rdoc
76
96
  - Rakefile
77
97
  - VERSION
98
+ - lib/recursive-open-struct.rb
78
99
  - lib/recursive_open_struct.rb
79
100
  - recursive-open-struct.gemspec
80
101
  - spec/recursive_open_struct_spec.rb
@@ -94,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
115
  version: '0'
95
116
  segments:
96
117
  - 0
97
- hash: 764807215
118
+ hash: -2043007964418436897
98
119
  required_rubygems_version: !ruby/object:Gem::Requirement
99
120
  none: false
100
121
  requirements:
@@ -103,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
124
  version: '0'
104
125
  requirements: []
105
126
  rubyforge_project:
106
- rubygems_version: 1.8.3
127
+ rubygems_version: 1.8.24
107
128
  signing_key:
108
129
  specification_version: 3
109
130
  summary: OpenStruct subclass that returns nested hash attributes as RecursiveOpenStructs