hash-selector 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4aba65b6d21271d3127dae88d963ac20b182cdc7
4
- data.tar.gz: 958929bebd3c730c8ecc5c64bab8d2fed69462d9
3
+ metadata.gz: cd79cb3f4b022a4dc715e84cc8b0aefa3c3c0f72
4
+ data.tar.gz: e22414a6f58dc2823dd80cf508ae964db361eca9
5
5
  SHA512:
6
- metadata.gz: 3fdde540f8d87267856d59a5a47ef94efec344a3b0ec9daacda3bb0c46289f7c7ab5101af7cf707f914a7ed1f74e52ca8fd82fce3ef299c1b401a8d06e396140
7
- data.tar.gz: 6ffd9d9d114d4248aa1672956a4febe4d03cca92cb1b7fe9e84d1847563624038731050c3bad836b69b0161f61f1a1b6da5dd0ba6df31d038156288aa8e2df3f
6
+ metadata.gz: 6d13fc70a478ef619be306ac379905f998ac6115d4d5c344d046cf302e6624ae4c3be3776b2eee2c5bd5e072b34bc5e12825e6b78ffaa66bffc5a96eab3df47a
7
+ data.tar.gz: 559d3a07bf68c80d3701c6a8bba2a53fc27937b23d26918cdad051d29e56937d4c59a97764a98f8191603d4ce4fc67242ffbd2f757e5ac70d739945030a316df
data/README.md CHANGED
@@ -62,7 +62,7 @@ Or install it yourself as:
62
62
 
63
63
  ## Contributing
64
64
 
65
- 1. Fork it ( https://github.com/[my-github-username]/hash_selector/fork )
65
+ 1. Fork it ( https://github.com/pezra/hash-selector/fork )
66
66
  2. Create your feature branch (`git checkout -b my-new-feature`)
67
67
  3. Commit your changes (`git commit -am 'Add some feature'`)
68
68
  4. Push to the branch (`git push origin my-new-feature`)
@@ -21,7 +21,8 @@ class HashSelector
21
21
  rescue IndexError
22
22
  raise KeyError
23
23
  end
24
- } ]
24
+ } ],
25
+ desc + "[#{key.inspect}]"
25
26
  end
26
27
 
27
28
  # Returns a new selector that selects an entry from the result of the current
@@ -34,29 +35,36 @@ class HashSelector
34
35
  else
35
36
  needle
36
37
  end
37
- } ]
38
+ } ],
39
+ desc + ".find{...}"
38
40
  end
39
41
  alias_method :detect, :find
40
42
 
41
43
  # Returns the value from a hash at the location specified by this selector.
42
44
  def find_in(hay_stack)
43
- steps.reduce(hay_stack) { |search_area, step| step.call(search_area) }
45
+ idx = 0
46
+ steps.reduce(hay_stack) { |search_area, step| idx +=1; step.call(search_area) }
44
47
 
45
48
  rescue KeyError
46
49
  if block_given?
47
50
  yield hay_stack
48
51
  else
49
- raise
52
+ raise KeyError, "step #{idx} of #{self} failed to match"
50
53
  end
51
54
  end
52
55
 
56
+ def to_s
57
+ desc
58
+ end
59
+
53
60
  protected
54
61
 
55
62
  MISSING = Object.new
56
63
 
57
- def initialize(steps = [])
64
+ def initialize(steps = [], desc="HashSelector.new")
58
65
  @steps = steps
66
+ @desc = desc
59
67
  end
60
68
 
61
- attr_reader :steps
69
+ attr_reader :steps, :desc
62
70
  end
@@ -1,3 +1,3 @@
1
1
  class HashSelector
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -9,6 +9,11 @@ RSpec.describe "HashSelector" do
9
9
  ] },
10
10
  qux: 42 } }
11
11
 
12
+ it "has a useful to_s" do
13
+ expect( HashSelector.new[:foo].find{true}[:bar].to_s )
14
+ .to eq "HashSelector.new[:foo].find{...}[:bar]"
15
+ end
16
+
12
17
  it "can select values from top level" do
13
18
  expect(
14
19
  HashSelector.new[:qux]
@@ -35,7 +40,7 @@ RSpec.describe "HashSelector" do
35
40
 
36
41
  it "raise error on a array index miss" do
37
42
  expect { HashSelector.new[:foo][:bar][42].find_in(data)
38
- }.to raise_error KeyError
43
+ }.to raise_error KeyError, %r/\[:foo\]\[:bar\]\[42\]/
39
44
  end
40
45
 
41
46
  it "returns value of default value block a array index miss" do
@@ -61,7 +66,7 @@ RSpec.describe "HashSelector" do
61
66
  expect {
62
67
  HashSelector.new[:foo][:bar].detect{|it| it[:name] == "mallory"}
63
68
  .find_in(data)
64
- }.to raise_error KeyError
69
+ }.to raise_error KeyError, %r/\[:foo\]\[:bar\].find{...}/
65
70
  end
66
71
 
67
72
  it "returns value of default value block on a #find/#detect miss" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash-selector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-27 00:00:00.000000000 Z
11
+ date: 2015-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler