trickery 0.0.3 → 0.0.4

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.
@@ -2,19 +2,30 @@ require 'ostruct'
2
2
 
3
3
  class ::Hash
4
4
 
5
- def deep_ostruct(values=nil)
6
- values ||= self
7
- case values
8
- when Hash
9
- OpenStruct.new.tap do |o|
10
- values.each do |key, value|
11
- o.send key.to_s + '=',
12
- deep_ostruct(value)
13
- end
5
+ def deep_ostruct
6
+ OpenStruct.new.tap do |o|
7
+ each do |key, value|
8
+ o.send key.to_s + '=',
9
+ case value
10
+ when Hash, Array
11
+ value.deep_ostruct
12
+ else value
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ class ::Array
21
+
22
+ def deep_ostruct
23
+ map do |v|
24
+ case value
25
+ when Hash, Array
26
+ value.deep_ostruct
27
+ else value
14
28
  end
15
- when Array
16
- values.map { |v| deep_ostruct(v) }
17
- else values
18
29
  end
19
30
  end
20
31
 
@@ -1,3 +1,3 @@
1
1
  module Trickery
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/trickery.rb CHANGED
@@ -1,3 +1,5 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
1
3
  require "trickery/version"
2
4
 
3
5
  require 'trickery/cmd_runner'
@@ -25,4 +25,10 @@ describe Hash do
25
25
  assert { { a: { b: 0 } } == a.deep_merge(b) }
26
26
  end
27
27
 
28
+ it 'ignores nil at level 0' do
29
+ a = { a: 42 }
30
+ b = { a: nil }
31
+ assert { { a: 42 } == a.deep_merge(b) }
32
+ end
33
+
28
34
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ require File.expand_path(File.join(%w(.. .. .. .. lib trickery hash deep_ostruct)), __FILE__)
4
+
5
+ describe Hash do
6
+
7
+ it 'responds to deep_ostruct' do
8
+ assert { {}.respond_to?(:deep_ostruct) }
9
+ end
10
+
11
+ it 'creates open struct' do
12
+ assert { {}.deep_ostruct.is_a? OpenStruct }
13
+ end
14
+
15
+ it 'sets properties' do
16
+ assert { { foo: 42 }.deep_ostruct.foo == 42 }
17
+ end
18
+
19
+ it 'creates open structs deeply' do
20
+ assert { { foo: {} }.deep_ostruct.foo.is_a? OpenStruct }
21
+ end
22
+
23
+ it 'sets properties deeply' do
24
+ assert { { foo: { bar: 42 } }.deep_ostruct.foo.bar == 42 }
25
+ end
26
+
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trickery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -113,6 +113,7 @@ files:
113
113
  - spec/spec_helper.rb
114
114
  - spec/trickery/deep_ostruct_spec.rb
115
115
  - spec/trickery/hash/deep_merge_spec.rb
116
+ - spec/trickery/hash/deep_ostruct_spec.rb
116
117
  - trickery.gemspec
117
118
  homepage: https://github.com/branch14/trickery
118
119
  licenses:
@@ -129,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
130
  version: '0'
130
131
  segments:
131
132
  - 0
132
- hash: 2592008232353536074
133
+ hash: -4013730140083209136
133
134
  required_rubygems_version: !ruby/object:Gem::Requirement
134
135
  none: false
135
136
  requirements:
@@ -138,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
139
  version: '0'
139
140
  segments:
140
141
  - 0
141
- hash: 2592008232353536074
142
+ hash: -4013730140083209136
142
143
  requirements: []
143
144
  rubyforge_project:
144
145
  rubygems_version: 1.8.23
@@ -149,3 +150,4 @@ test_files:
149
150
  - spec/spec_helper.rb
150
151
  - spec/trickery/deep_ostruct_spec.rb
151
152
  - spec/trickery/hash/deep_merge_spec.rb
153
+ - spec/trickery/hash/deep_ostruct_spec.rb