ds_hash 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTQwYWUxN2YyM2JiMDU4NzhhZGY4NTA5NTFkMzQyODMzZDc5NjA3YQ==
4
+ Zjk1ZmY3OWYxNjJiZGMxY2NiZjFhZDljNTk0OWM0N2E2NjUzNGFmMg==
5
5
  data.tar.gz: !binary |-
6
- ZGNkODc3NTM1OTNjMmM4MjAxNmViYzNhNGYwNWZkM2IyYWYwNTBiMw==
6
+ NWIzZjcwZTJiOWI2ZjcxYWE4ZGY5MWU3OTdiMmM0NTkyMDdiNmM1OQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTE0Mzc3OWI0M2U2N2U3ODZhN2JkZmI3NjQ2NDQzMTRiZTAzMGU0MDg5ZDZh
10
- NGNhMWMxN2VhZGZjN2RmOTA4MTU4NGRkNmE0NzRhNmY4NGExNjkxOTg4MDg2
11
- YzFkOTQwMTgwOTc4OTE0Yjk0MGZhY2I0N2E4ZmUwZDBmYjRkN2Q=
9
+ NzdlODU1NGY4MjE1YTBiODI2ZmIwNDNlYzFjNjY1YTZiYjUzNTQyMGNkZGJk
10
+ ZDIwNjZiNmFmNGU5ZTJiNGExZmMyN2U3OWU5ZWMwNWJjMGFkMDMwMjJmYjlk
11
+ NDNlODYyYTFhYTYzZGM3NjIzZDI2ZmMzOWIwNGNhY2U3MGVlZGY=
12
12
  data.tar.gz: !binary |-
13
- NTc2MDVkYjI2MGM2ZTNhNWU1NzViNDdhZWUyYzljMzQxODAzYWI2MzZkODRi
14
- NDhmZDQ5MjVhZTIyZDQ1OWIxOTJmNGMzZDcxYzlmMTQ4N2M5YmQwNGFlYjJh
15
- ZmQ5MmVmYTNkNTRlNTkzYTcxYzNhYjYxN2ZmY2Q3NTYwOWY0Y2M=
13
+ NmZhZDA3OWNkZTU2MTA2MmZjNWJmNzk3MTNjMTYyOWJmOWU3MzE4NTlkNjVh
14
+ MGE3YzIyNGY2MjVmZThlYWYwYWNmNzdjZjU0NjM3NjczN2QwN2NkZDExOWMw
15
+ NDY4OGVjY2RkMGZmYzBlNGY2NWZlYjYzM2UzODlmZGE0YWQzNTE=
data/README.rdoc CHANGED
@@ -17,6 +17,27 @@ _Hash_.+compact!+
17
17
 
18
18
  vide: Hash.compact
19
19
 
20
+ _Hash_.+clean+
21
+
22
+ idem Hash.compact
23
+
24
+ _Hash_.+clean!+
25
+
26
+ idem Hash.compact!
27
+
28
+ _Hash_.+deep_key?+
29
+
30
+ hash = { :a => { :b => 'b' } }
31
+ hash.deep_key? :a, :b # return true
32
+ hash.deep_key? :a, :x # return false
33
+
34
+ _Hash_.+deep_fetch+
35
+
36
+ hash = { :a => { :b => 'hello' } }
37
+ hash.deep_key? :a, :b # return 'hello'
38
+ hash.deep_key? :a, :x # return nil
39
+
40
+
20
41
  _Hash_.+deep_dup+
21
42
 
22
43
  hash = { :a => { :b => 'b' } }
@@ -26,6 +47,14 @@ _Hash_.+deep_dup+
26
47
  hash[:a][:c] #=> nil
27
48
  dup[:a][:c] #=> "c"
28
49
 
50
+ _Hash_.+to_struct+
51
+
52
+ hash = { :a => { :b => 'hello' } }
53
+ struct = hash.to_struct # Returns a nested struct
54
+ puts struct.a # { :b => 'hello' }
55
+ puts struct.a.b # 'hello'
56
+
57
+
29
58
  == Contributing to ds_hash
30
59
 
31
60
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/ds_hash.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
 
12
12
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
13
13
  s.authors = ["nardele salomon"]
14
- s.date = "2015-04-14"
14
+ s.date = "2015-04-15"
15
15
  s.description = "Hash class extensions"
16
16
  s.email = "del.soft.99@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -1,4 +1,3 @@
1
-
2
1
  class Hash
3
2
 
4
3
  ##
@@ -71,4 +70,19 @@ class Hash
71
70
  end
72
71
  end
73
72
 
73
+ unless self.method_defined? 'to_struct'
74
+ def to_struct
75
+ hash = self
76
+ klass = Struct.new(*hash.keys.map(&:to_sym) )
77
+ struct = klass.new(*hash.values)
78
+ hash.each do |key, value|
79
+ if value.is_a?(Hash)
80
+ v = value.to_struct
81
+ struct[key] = v
82
+ end
83
+ end
84
+ return struct
85
+ end
86
+ end
87
+
74
88
  end
@@ -1,3 +1,3 @@
1
1
  module DsHash
2
- VERSION = '1.1.2'
2
+ VERSION = '1.2.0'
3
3
  end
data/spec/ds_hash_spec.rb CHANGED
@@ -6,15 +6,11 @@ let(:hash_clean_values){
6
6
  { a: { b: 1, c: { d: 2 } }, g: 3 , j: [1,2]}
7
7
  }
8
8
 
9
- let(:hash_with_false_values){
10
- { a: { b: false}}
11
- }
12
9
 
13
10
  let(:hash_with_empty_values) {
14
11
  { a: { b: 1, c: { d: 2, e: nil}, f: nil }, g: 3, h: nil, j: [nil, 1, 2] }
15
12
  }
16
13
 
17
- let(:hash_deep_dup) { hash_clean_values.deep_dup }
18
14
 
19
15
  it "#compact" do
20
16
  hash_with_empty_values.compact.should eq hash_clean_values
@@ -33,6 +29,7 @@ it "#clean!" do
33
29
  end
34
30
 
35
31
  context "#deep_dup" do
32
+ let(:hash_deep_dup) { hash_clean_values.deep_dup }
36
33
  it { hash_deep_dup.should eq hash_clean_values }
37
34
  it { hash_deep_dup.object_id.should_not eq hash_clean_values.object_id }
38
35
  end
@@ -40,9 +37,15 @@ end
40
37
  context "#deep_key?" do
41
38
  it { hash_clean_values.deep_key?(:a, :c, :d).should be_true }
42
39
  it { hash_clean_values.deep_key?(:d).should be_false }
40
+ pending "deep key with hash with indifferent access"
43
41
  end
44
42
 
45
43
  context "#deep_fetch" do
44
+
45
+ let(:hash_with_false_values){
46
+ { a: { b: false}}
47
+ }
48
+
46
49
  it { hash_clean_values.deep_fetch(:a, :c, :d).should eq 2 }
47
50
  it { hash_clean_values.deep_fetch(:a, :b).should eq 1 }
48
51
  it { hash_clean_values.deep_fetch(:g).should eq 3 }
@@ -53,11 +56,23 @@ context "#deep_fetch" do
53
56
  it { hash_clean_values.deep_fetch(:d, 'a').should eq 'a' }
54
57
  it { hash_clean_values.deep_fetch(:d, :a, :j, 'b').should eq 'b' }
55
58
 
56
-
57
59
  it { hash_with_false_values.deep_fetch(:a, :b).should === false }
58
60
  it { hash_with_false_values.deep_fetch(:a, :b, nil).should === false }
59
61
 
60
62
 
61
63
  end
62
64
 
65
+ context "#to_struct" do
66
+ let(:struct_from_hash) {
67
+ {a: {b: 1, c: {d: 2, e: nil}}, 'k' => 1, 'l' => { 'm' => 2}}.to_struct
68
+ }
69
+
70
+ it { struct_from_hash.a.b.should == 1 }
71
+ it { struct_from_hash.a.c.d.should == 2 }
72
+ it { struct_from_hash.a.c.e.should == nil }
73
+
74
+ it { struct_from_hash.k.should eq 1 }
75
+ it { struct_from_hash.l.m.should eq 2 }
76
+ end
77
+
63
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ds_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nardele salomon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2015-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -109,5 +109,5 @@ rubyforge_project:
109
109
  rubygems_version: 2.2.1
110
110
  signing_key:
111
111
  specification_version: 4
112
- summary: Hash class extensions v. 1.1.2
112
+ summary: Hash class extensions v. 1.2.0
113
113
  test_files: []