tonsser_hash_utils 1.0.3.pre.alpha → 1.0.7

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
- SHA1:
3
- metadata.gz: c94a26118be02055b25fa3b377aa61e075ccc77a
4
- data.tar.gz: 0e346aec2880d232db2cd09bb2421a13e79a03e4
2
+ SHA256:
3
+ metadata.gz: fda51f9686ea5ee379c8142b2bc82d07e2b5c1da0f377be6733a6aedabed90c3
4
+ data.tar.gz: 6272902b8f7939cde94cddde0a47a70cf8f9dddc4b3696c93d1a926bb0aa96db
5
5
  SHA512:
6
- metadata.gz: e394b024fd7a12d3a01a8f3b655b2c11f8a60930964e406559a039cc7d16d25db611ead524fa8b96ea38b4fbbf995be43a3aeff64c604fe4996598644ff9fe21
7
- data.tar.gz: 49ced59c1509fe5d7c5a72102d116ee450f593d0af2c60a86bb1f4b0ccf243ea9bbe731062df9014d6bf54fe2bcb22c5ecd68c62c4d89fecaea7dc8ad142275f
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
- fetch_possibly_decorated_value(key)
9
- elsif hash.respond_to?(key)
10
- delegate_and_decorate(key, *args, &block)
11
- else
12
- fail KeyError, "key :#{key} was not found"
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
@@ -1,3 +1,3 @@
1
1
  module TonsserHashUtils
2
- VERSION = "1.0.3-alpha"
2
+ VERSION = "1.0.7"
3
3
  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
@@ -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", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec", "~> 3.2.0"
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", "~> 4.2.0"
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.3.pre.alpha
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: 2015-07-03 00:00:00.000000000 Z
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.2.0
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.2.0
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: '0'
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: 1.3.1
111
+ version: '0'
113
112
  requirements: []
114
- rubyforge_project:
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
@@ -1 +0,0 @@
1
- 2.2.0