kernel-fetch_in 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/fetch_in.rb +13 -0
- data/lib/fetch_in/version.rb +1 -1
- data/lib/kernel/fetch_in.rb +3 -11
- data/spec/kernel/fetch_in_spec.rb +8 -2
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWRiYTIwMjVkMDc1Y2E3MGQxYzczMjg2MGVjMTc0MTI2NjBlYjUyZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWMxNzUzNWI1YTI1YzkyOGE0M2FiOGQxNDU0MzNkYjYwMmYyZDVhZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTNjMGEwNzBlYmViMDE5NmVkZGQ2OGI1MzY1OTIwYjZjNWMyYzcxMzExOTJi
|
10
|
+
ODdkZTg4NjFlZDljYjQ0NTNjMDcyYjlkNzUxMGQzYjlhMGJhNjVlZmJjM2Iz
|
11
|
+
MDhiODQ3NzU5NGM2Mjk4YjE1NmY2YjI4MWZkN2MxZTVjMDcyZWI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmZiZjRiMmI0YzM4ZWM2NDAwOWE4ODUwMzFmZWEzYjE3ZGI4Yzk3ZWM3MGI5
|
14
|
+
NjgwOTdjYmE0MmEyODU0MjBhMDA2YzRmMmFhMmQ4MGZiOTM4ZDE3ZDgxNzgx
|
15
|
+
ZjFlNTAyN2EwODFmNGE5ZjMxMmM2YjIxMzc2MWRhNzIyMDU1OTA=
|
data/lib/fetch_in.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module FetchIn
|
2
|
+
def self.fetch_in(collection, first_key, *rest)
|
3
|
+
keys = [first_key] + rest
|
4
|
+
last_key = nil
|
5
|
+
keys.reduce(collection) do |c, k|
|
6
|
+
last_key = k
|
7
|
+
c.fetch(k)
|
8
|
+
end
|
9
|
+
rescue IndexError
|
10
|
+
raise unless block_given?
|
11
|
+
yield last_key
|
12
|
+
end
|
13
|
+
end
|
data/lib/fetch_in/version.rb
CHANGED
data/lib/kernel/fetch_in.rb
CHANGED
@@ -1,15 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'fetch_in'
|
2
2
|
|
3
3
|
module Kernel
|
4
|
-
|
5
|
-
|
6
|
-
keys.reduce(collection) do |c, k|
|
7
|
-
last_key = k
|
8
|
-
c.fetch(k)
|
9
|
-
end
|
10
|
-
rescue IndexError, KeyError
|
11
|
-
raise unless block_given?
|
12
|
-
yield last_key
|
13
|
-
end
|
4
|
+
extend Forwardable
|
5
|
+
def_delegator :FetchIn, :fetch_in
|
14
6
|
private :fetch_in
|
15
7
|
end
|
@@ -6,6 +6,12 @@ RSpec.describe Kernel do
|
|
6
6
|
let(:value) { double }
|
7
7
|
|
8
8
|
describe '#fetch_in' do
|
9
|
+
context 'passed no key arguments' do
|
10
|
+
it 'raises an ArgumentError' do
|
11
|
+
expect { fetch_in(collection) }.to raise_error ArgumentError
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
9
15
|
context 'passed a single key argument' do
|
10
16
|
it 'returns what #fetch on the collection argument returns' do
|
11
17
|
allow(collection).to receive(:fetch).with(key) { value }
|
@@ -13,8 +19,8 @@ RSpec.describe Kernel do
|
|
13
19
|
end
|
14
20
|
|
15
21
|
[IndexError, KeyError].each do |err|
|
16
|
-
context "when #fetch raises
|
17
|
-
before { allow(collection).to receive(:fetch).with(key) {
|
22
|
+
context "when #fetch raises #{err}" do
|
23
|
+
before { allow(collection).to receive(:fetch).with(key) { fail err } }
|
18
24
|
|
19
25
|
it 'raises that Error' do
|
20
26
|
expect { fetch_in(collection, key) }.to raise_error err
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kernel-fetch_in
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Novitski
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- README.md
|
54
54
|
- Rakefile
|
55
55
|
- kernel-fetch_in.gemspec
|
56
|
+
- lib/fetch_in.rb
|
56
57
|
- lib/fetch_in/version.rb
|
57
58
|
- lib/kernel/fetch_in.rb
|
58
59
|
- spec/kernel/fetch_in_spec.rb
|