respond_to_dig 1.0.1 → 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: 38f3df9283b99bb984df4903b5cbf3c9918eafd3
4
- data.tar.gz: 4fda9b0c7ad5aa7a33e0f75c872e01714a2e4f64
3
+ metadata.gz: 7093fc0a72916735cfa5a2e911152ad6564b8029
4
+ data.tar.gz: d8d5fa0f6cc82c881caca196a30df4bcfb915090
5
5
  SHA512:
6
- metadata.gz: 70ed1d747efffcf96b38ba3e70c1fb3730b09e5466fc72f591f964675ab098c925d8ce8b63c55ad7b8112f451cae5190f2c2ec632288865445c245baecfa2da7
7
- data.tar.gz: c5ef4ceee329deaf2317936992287be1aced7310256a18c61f1ecca5113ee3cc61558cae4222e05fcf709c09f98713d542d4a98ca89d09fdf46107882f2e0487
6
+ metadata.gz: 3b9e60265b8f80a7066be6acc05e8194ba9cdbba5b935bc35366e1e452310d9d4a15b4ce38e033aee7a842aee0271bc73caa39c260f4856e939f7784b7a1adbf
7
+ data.tar.gz: 77f95396978f600b84f0f3ed38432651d9942ee0c991ad0fb412f122514edae8a802a907714d647350089871c9b018543e08475bf3c55b8e0cfadf00ab2ab34e
data/README.md CHANGED
@@ -7,7 +7,7 @@ This gem backports Array#dig and Hash#dig methods from Ruby 2.3+ to earlier vers
7
7
 
8
8
  ## vs [RubyDig](https://github.com/Invoca/ruby_dig)
9
9
  * RubyDig has side-effects, but RespondToDig doesn't.
10
- * RespondToDig only supports `Array` and `Hash`, but RespondToDig supports any `Enumerable` classes which have `[]` method such as `Struct`.
10
+ * RespondToDig only supports `Array` and `Hash`, but RespondToDig supports any `Enumerable` objects which have `[]` method such as `Struct`.
11
11
 
12
12
  ## Installation
13
13
 
@@ -27,17 +27,16 @@ Or install it yourself as:
27
27
 
28
28
  ## Usage
29
29
 
30
- ```
30
+ ```rb
31
31
  require 'respond_to_dig'
32
32
 
33
- response = RespondToDig::respond_to_dig({
34
- mom: {first: "Marge", last: "Bouvier"},
35
- dad: {first: "Homer", last: "Simpson"},
36
- kids: [
37
- {first: "Bart", last: "Simpson"},
38
- {first: "Lisa", last: "Simpson"}
39
- ]})
33
+ h = RespondToDig::respond_to_dig({ foo: {bar: {baz: 1 }}})
34
+ h.dig(:foo, :bar, :baz) #=> 1
35
+ h.dig(:foo, :zot, :xyz) #=> nil
36
+ h.dig(:foo, :bar, :baz, :xyz) #=> TypeError
40
37
 
41
- response.dig(:kids, 1, :first)
42
- # => "Lisa"
38
+ g = RespondToDig::respond_to_dig({ foo: [10, 11, 12] })
39
+ g.dig(:foo, 1) #=> 11
43
40
  ```
41
+
42
+ For the details, refer [Module: RespondToDig — Documentation](http://www.rubydoc.info/gems/respond_to_dig/RespondToDig).
@@ -1,3 +1,3 @@
1
1
  module RespondToDig
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -1,21 +1,44 @@
1
+ # Extracts the nested value specified by the sequence of index by calling dig at each step,
2
+ # returning nil if any intermediate step is nil.
3
+ # @example
4
+ # h = RespondToDig::invoke_dig({ foo: {bar: {baz: 1 }}})
5
+ # h.dig(:foo, :bar, :baz) #=> 1
6
+ # h.dig(:foo, :zot, :xyz) #=> nil
7
+ # h.dig(:foo, :bar, :baz, :xyz) #=> TypeError
8
+ #
9
+ # g = RespondToDig::invoke_dig({ foo: [10, 11, 12] })
10
+ # g.dig(:foo, 1) #=> 11
1
11
  module RespondToDig
2
12
 
3
13
  class << self
14
+ # Invokes `RespondToDig` module if the `receiver` object is digabble
15
+ # @see RespondToDig#digabble
16
+ # @param receiver [Object]
17
+ # @return [Object, RespondToDig]
4
18
  def respond_to_dig(receiver)
5
19
  receiver.tap do |r|
6
20
  r.singleton_class.send(:include, RespondToDig) if RespondToDig.diggable? r
7
21
  end
8
22
  end
9
23
 
10
- # The reason why not purely duck typed by `[]` method is to avoid unexpected behavior,
11
- # for example we won't get `'o'` by `'foo'.dig(1)` by String#[].
24
+ # Returns whether the `target` object is able to be invoked by `RespondToDig`
25
+ # @note The reason why not purely duck typed by `[]` method is to avoid unexpected behavior,
26
+ # for example we won't get `'o'` by `'foo'.dig(1)` by String#[].
27
+ # @param target [Object]
28
+ # @return [Bool]
12
29
  def diggable?(target)
13
30
  target.is_a? Enumerable and
14
31
  target.respond_to? :[] and
15
32
  not target.respond_to? :dig
16
33
  end
34
+
35
+ alias_method :invoke_dig, :respond_to_dig
17
36
  end
18
37
 
38
+ # Retrieves the value object corresponding to the each `key` objects recursively with nil-safe
39
+ # @param key [Object, ...]
40
+ # @raise [TypeError] Throws if trying to access the value which doesn't respond to `#dig` such as `String` object
41
+ # @return [Object, RespondToDig, NilClass]
19
42
  def dig(key, *rest)
20
43
  value = RespondToDig::respond_to_dig(self[key])
21
44
  if value.nil? || rest.empty?
@@ -99,4 +99,10 @@ class RespondToDigTest
99
99
  end
100
100
  end
101
101
  end
102
+
103
+ describe "Alias" do
104
+ it 'alias #invoke_dig' do
105
+ assert_equal RespondToDig::respond_to_dig({}), RespondToDig::invoke_dig({})
106
+ end
107
+ end
102
108
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: respond_to_dig
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ymkjp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-03 00:00:00.000000000 Z
11
+ date: 2016-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description:
@@ -59,10 +59,10 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - ".editorconfig"
63
- - ".github/PULL_REQUEST_TEMPLATE.md"
64
- - ".gitignore"
65
- - ".travis.yml"
62
+ - .editorconfig
63
+ - .github/PULL_REQUEST_TEMPLATE.md
64
+ - .gitignore
65
+ - .travis.yml
66
66
  - CONTRIBUTING.md
67
67
  - Gemfile
68
68
  - LICENSE.txt
@@ -82,17 +82,17 @@ require_paths:
82
82
  - lib
83
83
  required_ruby_version: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - ">="
85
+ - - '>='
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - ">="
90
+ - - '>='
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  requirements: []
94
94
  rubyforge_project:
95
- rubygems_version: 2.2.2
95
+ rubygems_version: 2.6.4
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: Explicit backporting of Array#dig and Hash#dig for Ruby < 2.3.