nested_value 0.0.1 → 0.0.2
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.
- data/README.md +19 -6
- data/lib/nested_value.rb +20 -4
- data/lib/patch_nested_value.rb +17 -0
- metadata +7 -5
data/README.md
CHANGED
@@ -10,32 +10,45 @@ class MyClass
|
|
10
10
|
include NestedValue
|
11
11
|
|
12
12
|
def initialize
|
13
|
-
@
|
13
|
+
@my_data = {:come_out => [{:come_out => {:wherever =>
|
14
|
+
["wrong turn", {:you_are => "Found ME!!!"}]}}, "some_value", 0]}
|
14
15
|
end
|
15
16
|
|
16
17
|
def correct
|
17
|
-
nested_value(@
|
18
|
+
nested_value(@my_data, :come_out, 0, :come_out, :wherever, 1, :you_are)
|
18
19
|
end
|
19
20
|
|
20
21
|
def incorrect
|
21
|
-
nested_value(@
|
22
|
+
nested_value(@my_data, :come_out, 0, :wherever, 0, :you_are)
|
22
23
|
end
|
23
24
|
|
24
25
|
def not_even_close
|
25
|
-
nested_value(@
|
26
|
+
nested_value(@my_data, :where, :are, :you, 99)
|
26
27
|
end
|
27
28
|
|
28
29
|
def going_halfway
|
29
|
-
nested_value(@
|
30
|
+
nested_value(@my_data, :come_out, 0, :come_out)
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
33
34
|
MyClass.new.correct #=> "Found Me!!!"
|
34
35
|
MyClass.new.incorrect #=> nil
|
35
36
|
MyClass.new.not_even_close #=> nil
|
36
|
-
MyClass.new.going_halfway #=> {:wherever
|
37
|
+
MyClass.new.going_halfway #=> {:wherever=>["wrong turn", {:you_are=>"Found ME!!!"}]}
|
37
38
|
```
|
38
39
|
|
39
40
|
You could also extend the NestedValue module if you prefer.
|
40
41
|
|
42
|
+
In versions 0.0.2 and above, you can patch nested_value_for on Array and Hash with ease. All you have to do is require the patch_nested_value file.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
require "patch_nested_value"
|
46
|
+
|
47
|
+
my_array = [5,3,4,5,6,{some: "value"}]
|
48
|
+
my_array.nested_value_for(5, :some) #=> "value"
|
49
|
+
|
50
|
+
my_hash = {I: {can: {has: [:moneyz]}}}
|
51
|
+
my_hash.nested_value_for(:I, :can, :has, 0) #=> :moneyz
|
52
|
+
```
|
53
|
+
|
41
54
|
Enjoy!
|
data/lib/nested_value.rb
CHANGED
@@ -1,8 +1,24 @@
|
|
1
1
|
module NestedValue
|
2
|
-
def nested_value(
|
3
|
-
ordered_list_of_keys.inject(
|
4
|
-
return unless
|
5
|
-
|
2
|
+
def nested_value(nested_data_structure, *ordered_list_of_keys)
|
3
|
+
ordered_list_of_keys.inject(nested_data_structure) do |remaining_value, key|
|
4
|
+
return unless can_be_read?(remaining_value)
|
5
|
+
remaining_value = access_value(remaining_value, key)
|
6
6
|
end
|
7
7
|
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def can_be_read?(remaining_value)
|
12
|
+
remaining_value && (remaining_value.kind_of?(Hash) || remaining_value.kind_of?(Array))
|
13
|
+
end
|
14
|
+
|
15
|
+
def access_value(remaining_value, key)
|
16
|
+
return if remaining_value.kind_of?(Array) && !key.kind_of?(Integer)
|
17
|
+
remaining_value[key] ||
|
18
|
+
if key.kind_of?(String)
|
19
|
+
remaining_value[key.to_sym]
|
20
|
+
else
|
21
|
+
remaining_value[key.to_s]
|
22
|
+
end
|
23
|
+
end
|
8
24
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "nested_value"
|
2
|
+
|
3
|
+
class Hash
|
4
|
+
include NestedValue
|
5
|
+
|
6
|
+
def nested_value_for(*access_chain)
|
7
|
+
nested_value(self, *access_chain)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Array
|
12
|
+
include NestedValue
|
13
|
+
|
14
|
+
def nested_value_for(*access_chain)
|
15
|
+
nested_value(self, *access_chain)
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nested_value
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Dave Moore
|
9
|
+
- Trace Wax
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
@@ -13,7 +14,7 @@ date: 2013-06-28 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: bundler
|
16
|
-
requirement: &
|
17
|
+
requirement: &70097721570320 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
@@ -21,10 +22,10 @@ dependencies:
|
|
21
22
|
version: '0'
|
22
23
|
type: :development
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
+
version_requirements: *70097721570320
|
25
26
|
- !ruby/object:Gem::Dependency
|
26
27
|
name: rspec
|
27
|
-
requirement: &
|
28
|
+
requirement: &70097721569100 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
30
|
requirements:
|
30
31
|
- - ! '>='
|
@@ -32,7 +33,7 @@ dependencies:
|
|
32
33
|
version: 1.2.0
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
+
version_requirements: *70097721569100
|
36
37
|
description: Access values hidden in deeply nested data structures with ease and without
|
37
38
|
fear.
|
38
39
|
email: cuvuligio@gmail.com
|
@@ -41,6 +42,7 @@ extensions: []
|
|
41
42
|
extra_rdoc_files: []
|
42
43
|
files:
|
43
44
|
- lib/nested_value.rb
|
45
|
+
- lib/patch_nested_value.rb
|
44
46
|
- LICENSE
|
45
47
|
- README.md
|
46
48
|
homepage: https://github.com/dcmoore/nested_value
|