trickery 0.0.3 → 0.0.4

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