dotize 0.1.0
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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +3 -0
- data/README.md +31 -0
- data/Rakefile +6 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/dotize.gemspec +24 -0
- data/lib/dotize.rb +28 -0
- data/lib/dotize/version.rb +3 -0
- metadata +110 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4d9f0e51699a51a7ebb81fd992bd4e294a578514
|
4
|
+
data.tar.gz: c606aa0a03ea41929e00f7142bba6a1e5891d452
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d5da80d92e6f10228067e2ee44ae9bb9d05fe348573e164531ca1de00dcd90e741efa3479d594043c1f70b90eb703b2022b67a200c0f04f9b13adeab14069747
|
7
|
+
data.tar.gz: 60bd06957868ffcad5356dfe4f7c4a42372f5c61533dccb3b95638e16ec33734e4e0c69ae29c14a2a15fadf9fb19142dad0a7d5e8660410d1f88dcc29c0a3402
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# Dotize
|
2
|
+
|
3
|
+

|
4
|
+
|
5
|
+
Access values from a deeply-nested Hash using a simple string:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
my_hash = {'a' => {'b' => {'c' => 123}}}
|
9
|
+
my_hash.extend(Dotize)
|
10
|
+
my_hash.dot('a.b.c') # => 123
|
11
|
+
```
|
12
|
+
|
13
|
+
If a value isn't found, nil is returned by default:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
my_hash.dot('a.b.z.z.z') # => nil
|
17
|
+
```
|
18
|
+
|
19
|
+
You can provide a block to override the default, like Ruby's [Hash#fetch](http://ruby-doc.org/core-2.3.0/Hash.html#method-i-fetch):
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
my_hash.dot('a.b.z.z.z') { |el| 2 + 2 } # => 4
|
23
|
+
```
|
24
|
+
|
25
|
+
## Development
|
26
|
+
|
27
|
+
- Run specs via `rake` or `bundle exec rspec`
|
28
|
+
|
29
|
+
## Credits
|
30
|
+
|
31
|
+
The name of this is ~~inspired-by~~ copied from [github.com/vardars/dotize](https://github.com/vardars/dotize), a Javascript equivalent.
|
data/Rakefile
ADDED
data/bin/console
ADDED
data/bin/setup
ADDED
data/dotize.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'dotize/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "dotize"
|
8
|
+
spec.version = Dotize::VERSION
|
9
|
+
spec.authors = ["odlp"]
|
10
|
+
spec.email = ["oliverp@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = "Dig into a deeply-nested Hash with a dot-delimited string"
|
13
|
+
spec.homepage = "https://github.com/odlp/dotize"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = "exe"
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
21
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
22
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
23
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
24
|
+
end
|
data/lib/dotize.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "dotize/version"
|
2
|
+
|
3
|
+
module Dotize
|
4
|
+
def dot(selector, &default_block)
|
5
|
+
current_value = self
|
6
|
+
|
7
|
+
begin
|
8
|
+
keys_from_selector(selector).each do |key|
|
9
|
+
raise StopIteration unless current_value.respond_to? :fetch
|
10
|
+
current_value = current_value.fetch(key) { raise StopIteration }
|
11
|
+
end
|
12
|
+
rescue StopIteration
|
13
|
+
return calc_default_value(default_block)
|
14
|
+
end
|
15
|
+
|
16
|
+
current_value
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def keys_from_selector(selector)
|
22
|
+
selector.split('.')
|
23
|
+
end
|
24
|
+
|
25
|
+
def calc_default_value(default_block)
|
26
|
+
default_block.call(self) unless default_block.nil?
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dotize
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- odlp
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- oliverp@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".travis.yml"
|
79
|
+
- Gemfile
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- bin/console
|
83
|
+
- bin/setup
|
84
|
+
- dotize.gemspec
|
85
|
+
- lib/dotize.rb
|
86
|
+
- lib/dotize/version.rb
|
87
|
+
homepage: https://github.com/odlp/dotize
|
88
|
+
licenses: []
|
89
|
+
metadata: {}
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 2.4.5.1
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Dig into a deeply-nested Hash with a dot-delimited string
|
110
|
+
test_files: []
|