tonsser_hash_utils 1.0.2 → 1.0.3.pre.alpha

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a07a24d08bf8a7ce458efb446458126f97961994
4
- data.tar.gz: 169432513c2a5ba66f8435897922032daec6d267
3
+ metadata.gz: c94a26118be02055b25fa3b377aa61e075ccc77a
4
+ data.tar.gz: 0e346aec2880d232db2cd09bb2421a13e79a03e4
5
5
  SHA512:
6
- metadata.gz: 4ffaabc26f0bc621f20c0f0b64c544537f970f6d5563329189e2420024e168b63d1a78323866723469a38228709bb717d6eba966a057a461f7b5a24334cfc2b6
7
- data.tar.gz: 8f75d7cf18ef1710a901419e9174ec2d13b081fdc43b2587196616942befa0aff126140924cd5c01571614135c7709c0e359d07c901e0933dd81777f37233da2
6
+ metadata.gz: e394b024fd7a12d3a01a8f3b655b2c11f8a60930964e406559a039cc7d16d25db611ead524fa8b96ea38b4fbbf995be43a3aeff64c604fe4996598644ff9fe21
7
+ data.tar.gz: 49ced59c1509fe5d7c5a72102d116ee450f593d0af2c60a86bb1f4b0ccf243ea9bbe731062df9014d6bf54fe2bcb22c5ecd68c62c4d89fecaea7dc8ad142275f
data/README.md CHANGED
@@ -126,3 +126,7 @@ json = builder.as_json
126
126
  3. Commit your changes (`git commit -am 'Add some feature'`)
127
127
  4. Push to the branch (`git push origin my-new-feature`)
128
128
  5. Create a new Pull Request
129
+
130
+ ## Releasing
131
+
132
+ `bundle exec rake release`
@@ -3,9 +3,11 @@ class HashWithQuickAccess
3
3
  @hash = hash
4
4
  end
5
5
 
6
- def method_missing(key)
6
+ def method_missing(key, *args, &block)
7
7
  if key?(key)
8
8
  fetch_possibly_decorated_value(key)
9
+ elsif hash.respond_to?(key)
10
+ delegate_and_decorate(key, *args, &block)
9
11
  else
10
12
  fail KeyError, "key :#{key} was not found"
11
13
  end
@@ -16,7 +18,7 @@ class HashWithQuickAccess
16
18
  end
17
19
 
18
20
  def keys
19
- @hash.keys.map(&:to_sym)
21
+ hash.keys.map(&:to_sym)
20
22
  end
21
23
 
22
24
  def [](key)
@@ -25,9 +27,19 @@ class HashWithQuickAccess
25
27
 
26
28
  private
27
29
 
30
+ attr_reader :hash
31
+
32
+ def delegate_and_decorate(method_name, *args, &block)
33
+ obj = hash.send(method_name, *args, &block)
34
+ possibly_decorate(obj)
35
+ end
36
+
28
37
  def fetch_possibly_decorated_value(key)
29
- obj = @hash.fetch(key) { @hash.fetch(key.to_s) }
38
+ obj = hash.fetch(key) { hash.fetch(key.to_s) }
39
+ possibly_decorate(obj)
40
+ end
30
41
 
42
+ def possibly_decorate(obj)
31
43
  if should_be_decorated(obj)
32
44
  decorate(obj)
33
45
  else
@@ -52,7 +64,7 @@ class HashWithQuickAccess
52
64
  end
53
65
 
54
66
  def all_keys
55
- @hash.keys.flat_map do |key|
67
+ hash.keys.flat_map do |key|
56
68
  [key, key.to_sym]
57
69
  end
58
70
  end
@@ -1,3 +1,3 @@
1
1
  module TonsserHashUtils
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3-alpha"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require "hash_with_quick_access"
2
+ require "pp"
2
3
 
3
4
  describe HashWithQuickAccess do
4
5
  it "gives you quick access to hashes or arrays nested in other hashes" do
@@ -55,4 +56,24 @@ describe HashWithQuickAccess do
55
56
 
56
57
  expect(hash[:job][:title]).to eq "Programmer"
57
58
  end
59
+
60
+ it "delegate methods to the hash" do
61
+ hash = HashWithQuickAccess.new(a: 1, b: 2)
62
+
63
+ expect(hash.map(&:last)).to eq [1, 2]
64
+ end
65
+
66
+ it "doesn't delegate if a key exists with the name" do
67
+ hash = HashWithQuickAccess.new(values: 1)
68
+
69
+ expect(hash.values).to eq 1
70
+ end
71
+
72
+ it "wraps delegated methods in HashWithQuickAccess if they're hashes" do
73
+ hash = HashWithQuickAccess.new(a: 1, b: 2)
74
+
75
+ derived_hash = hash.reduce(new: 1337) { |acc, (_, _)| acc }
76
+
77
+ expect(derived_hash.new).to eq 1337
78
+ end
58
79
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tonsser_hash_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3.pre.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Pedersen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-15 00:00:00.000000000 Z
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -107,9 +107,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
107
  version: '0'
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - ">="
110
+ - - ">"
111
111
  - !ruby/object:Gem::Version
112
- version: '0'
112
+ version: 1.3.1
113
113
  requirements: []
114
114
  rubyforge_project:
115
115
  rubygems_version: 2.4.5