tonsser_hash_utils 1.0.3.pre.alpha → 1.0.7
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 +5 -5
- data/lib/hash_with_quick_access.rb +22 -6
- data/lib/tonsser_hash_utils/version.rb +1 -1
- data/spec/lib/hash_with_quick_access_spec.rb +25 -0
- data/tonsser_hash_utils.gemspec +6 -4
- metadata +16 -18
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fda51f9686ea5ee379c8142b2bc82d07e2b5c1da0f377be6733a6aedabed90c3
|
4
|
+
data.tar.gz: 6272902b8f7939cde94cddde0a47a70cf8f9dddc4b3696c93d1a926bb0aa96db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 045bd922b11053b035c8707bcca0a6a83929ecbc6b027b2e840fb3e8d48859c5e6ae96d4f8cdb0d5935db58035f6ebb9fddeda70b33f77dba9bf7233ba390edd
|
7
|
+
data.tar.gz: 83f0a8cb86f49e3b5b05c692d8bb572f8df81d2b2f6f56b00c89ccf3e159c742c3d8446fc5a5b971979a3e553b413c2fd78194a534223d0f6224d994bee3994f
|
@@ -1,16 +1,26 @@
|
|
1
1
|
class HashWithQuickAccess
|
2
|
+
def self.add_convenience_method_to_hash!
|
3
|
+
Hash.send(:include, ConvenienceMethod)
|
4
|
+
end
|
5
|
+
|
2
6
|
def initialize(hash)
|
3
7
|
@hash = hash
|
4
8
|
end
|
5
9
|
|
6
10
|
def method_missing(key, *args, &block)
|
7
|
-
if key?(key)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
value = if key?(key)
|
12
|
+
fetch_possibly_decorated_value(key)
|
13
|
+
elsif hash.respond_to?(key)
|
14
|
+
delegate_and_decorate(key, *args, &block)
|
15
|
+
else
|
16
|
+
fail KeyError, "key :#{key} was not found"
|
17
|
+
end
|
18
|
+
|
19
|
+
if !hash.respond_to?(key)
|
20
|
+
define_singleton_method(key) { value }
|
13
21
|
end
|
22
|
+
|
23
|
+
value
|
14
24
|
end
|
15
25
|
|
16
26
|
def respond_to?(method_name, include_private = false)
|
@@ -68,4 +78,10 @@ class HashWithQuickAccess
|
|
68
78
|
[key, key.to_sym]
|
69
79
|
end
|
70
80
|
end
|
81
|
+
|
82
|
+
module ConvenienceMethod
|
83
|
+
def with_quick_access
|
84
|
+
HashWithQuickAccess.new(self)
|
85
|
+
end
|
86
|
+
end
|
71
87
|
end
|
@@ -76,4 +76,29 @@ describe HashWithQuickAccess do
|
|
76
76
|
|
77
77
|
expect(derived_hash.new).to eq 1337
|
78
78
|
end
|
79
|
+
|
80
|
+
it "adds accessed keys as instance methods" do
|
81
|
+
hash = HashWithQuickAccess.new(a: 1)
|
82
|
+
|
83
|
+
hash.a
|
84
|
+
|
85
|
+
expect(hash.methods - Object.new.methods).to include :a
|
86
|
+
end
|
87
|
+
|
88
|
+
it "doesn't memoize Hash methods" do
|
89
|
+
pp (Hash.new.methods - Object.new.methods).sort
|
90
|
+
|
91
|
+
hash = HashWithQuickAccess.new(a: 1)
|
92
|
+
|
93
|
+
expect(hash.key?(:a)).to eq true
|
94
|
+
expect(hash.key?(:a)).to eq true
|
95
|
+
end
|
96
|
+
|
97
|
+
it "can monkey patch Hash with a convenience method" do
|
98
|
+
HashWithQuickAccess.add_convenience_method_to_hash!
|
99
|
+
|
100
|
+
hash = { a: 1 }.with_quick_access
|
101
|
+
|
102
|
+
expect(hash.a).to eq 1
|
103
|
+
end
|
79
104
|
end
|
data/tonsser_hash_utils.gemspec
CHANGED
@@ -13,14 +13,16 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "http://github.com/tonsser/tonsser_hash_utils"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
+
spec.required_ruby_version = ">= 2.2.0"
|
17
|
+
|
16
18
|
spec.files = `git ls-files -z`.split("\x0")
|
17
19
|
spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
|
18
20
|
spec.test_files = spec.files.grep(/^(test|spec|features)/)
|
19
21
|
spec.require_paths = ["lib"]
|
20
22
|
|
21
|
-
spec.add_development_dependency "bundler", "
|
22
|
-
spec.add_development_dependency "rake", "
|
23
|
-
spec.add_development_dependency "rspec", "
|
23
|
+
spec.add_development_dependency "bundler", ">= 1.7"
|
24
|
+
spec.add_development_dependency "rake", ">= 10.0"
|
25
|
+
spec.add_development_dependency "rspec", ">= 3.2.0"
|
24
26
|
|
25
|
-
spec.add_runtime_dependency "activesupport", "
|
27
|
+
spec.add_runtime_dependency "activesupport", ">= 4.0"
|
26
28
|
end
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tonsser_hash_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Pedersen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-27 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: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 3.2.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: 3.2.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: activesupport
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 4.
|
61
|
+
version: '4.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 4.
|
68
|
+
version: '4.0'
|
69
69
|
description: ''
|
70
70
|
email:
|
71
71
|
- david@tonsser.com
|
@@ -75,7 +75,6 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".rspec"
|
78
|
-
- ".ruby-version"
|
79
78
|
- Gemfile
|
80
79
|
- LICENSE.txt
|
81
80
|
- README.md
|
@@ -104,15 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
103
|
requirements:
|
105
104
|
- - ">="
|
106
105
|
- !ruby/object:Gem::Version
|
107
|
-
version:
|
106
|
+
version: 2.2.0
|
108
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
108
|
requirements:
|
110
|
-
- - "
|
109
|
+
- - ">="
|
111
110
|
- !ruby/object:Gem::Version
|
112
|
-
version:
|
111
|
+
version: '0'
|
113
112
|
requirements: []
|
114
|
-
|
115
|
-
rubygems_version: 2.4.5
|
113
|
+
rubygems_version: 3.1.2
|
116
114
|
signing_key:
|
117
115
|
specification_version: 4
|
118
116
|
summary: A collection of classes for dealing with hashes
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.2.0
|