skn_utils 5.5.0 → 5.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/skn_registry.rb +23 -5
- data/lib/skn_utils/core_extensions.rb +27 -0
- data/lib/skn_utils/version.rb +1 -1
- data/spec/lib/skn_utils/registry_spec.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2822f2d8bb83e07b5b099fe277285948dc0e687f
|
4
|
+
data.tar.gz: 28ae0ca8c94fbc7998ce696d3424345976588ff8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 951ff479251217472626d4e8c4dca4bf8e40d59be6606ecefc7ee21b9eb5150f2ff080a9edb8e02b003d2d5cc59cca194cd63a57fc8b5c19dd36a6f4fe334671
|
7
|
+
data.tar.gz: a7919693b23911d56a4c3411e5f8c89e62142921a507ecae61357d49e8f7a4eda5e1df65ecf0abf1516f4d3c47fead9820568d1fb2aeaf95972c83f3cfa58f36
|
data/README.md
CHANGED
@@ -323,6 +323,10 @@ There are many more use cases for Ruby's Hash that this gem just makes easier to
|
|
323
323
|
|
324
324
|
same_instance = SknContainer.resolve(:the_instance)
|
325
325
|
|
326
|
+
* Testing Support:
|
327
|
+
- #substitute(...) allows you to mock an existing entry. #substitute is an alias for #register_mock
|
328
|
+
- #restore! clears all mocked entries. #restore! is an alias for #unregister_mock!
|
329
|
+
|
326
330
|
|
327
331
|
## Public Methods: SknUtils::ConcurrentJobs ONLY
|
328
332
|
`ConcurrentJobs` behaves as a concurrent thread pool by using Concurrent::Promise from the `concurrent-ruby` gem.
|
data/lib/skn_registry.rb
CHANGED
@@ -73,9 +73,8 @@ class SknRegistry < Concurrent::Hash
|
|
73
73
|
attr_reader :item, :options
|
74
74
|
|
75
75
|
def initialize(item, options = {})
|
76
|
-
@item
|
77
|
-
|
78
|
-
}.merge(options)
|
76
|
+
@item = item
|
77
|
+
@options = { call: item.is_a?(::Proc) }.merge(options)
|
79
78
|
end
|
80
79
|
|
81
80
|
# Determine if call is required, without changing original values
|
@@ -96,18 +95,19 @@ class SknRegistry < Concurrent::Hash
|
|
96
95
|
def initialize(&block)
|
97
96
|
super
|
98
97
|
block.call(self) if block_given?
|
98
|
+
@__substitutes = {}
|
99
99
|
end
|
100
100
|
|
101
101
|
# public instance methods
|
102
102
|
def register(key, contents = nil, options = {}, &block)
|
103
103
|
if block_given?
|
104
104
|
item = block
|
105
|
-
options
|
105
|
+
options.merge!(contents) if contents.is_a?(::Hash)
|
106
106
|
else
|
107
107
|
item = contents
|
108
108
|
end
|
109
109
|
|
110
|
-
self
|
110
|
+
self.store( key, Content.new(item, options) )
|
111
111
|
|
112
112
|
self # enable chaining
|
113
113
|
end
|
@@ -116,4 +116,22 @@ class SknRegistry < Concurrent::Hash
|
|
116
116
|
self[key]&.call(render_proc)
|
117
117
|
end
|
118
118
|
|
119
|
+
def register_mock(key, contents = nil, options = {}, &block)
|
120
|
+
if member?(key)
|
121
|
+
@__substitutes.store(key, self.delete(key) )
|
122
|
+
end
|
123
|
+
|
124
|
+
register(key, contents, options, &block)
|
125
|
+
end
|
126
|
+
alias_method :substitute, :register_mock
|
127
|
+
|
128
|
+
def unregister_mocks!
|
129
|
+
@__substitutes.keys.each do |k|
|
130
|
+
self[k] = @__substitutes.delete(k)
|
131
|
+
end
|
132
|
+
|
133
|
+
nil
|
134
|
+
end
|
135
|
+
alias_method :restore!, :unregister_mocks!
|
136
|
+
|
119
137
|
end
|
@@ -4,6 +4,7 @@
|
|
4
4
|
# File: ./lib/skn_utils/core_extensions.rb --
|
5
5
|
# -- from: Rails 4.1 ActiveSupport:lib/active_support/core_ext/object/blank.rb
|
6
6
|
# -- Ref: https://6ftdan.com/allyourdev/2015/01/20/refinements-over-monkey-patching/
|
7
|
+
# -- Ref: https://medium.com/rubycademy/the-complete-guide-to-create-a-copy-of-an-object-in-ruby-part-ii-cd28a99d58d9
|
7
8
|
|
8
9
|
module SknUtils
|
9
10
|
module CoreObjectExtensions
|
@@ -53,6 +54,15 @@ module SknUtils
|
|
53
54
|
def presence
|
54
55
|
self if present?
|
55
56
|
end
|
57
|
+
|
58
|
+
def duplicable?
|
59
|
+
true
|
60
|
+
end
|
61
|
+
|
62
|
+
def deep_dup
|
63
|
+
duplicable? ? dup : self
|
64
|
+
end
|
65
|
+
|
56
66
|
end
|
57
67
|
|
58
68
|
class ::NilClass
|
@@ -96,6 +106,10 @@ module SknUtils
|
|
96
106
|
#
|
97
107
|
# @return [true, false]
|
98
108
|
alias_method :blank?, :empty?
|
109
|
+
|
110
|
+
def deep_dup
|
111
|
+
map(&:deep_dup)
|
112
|
+
end
|
99
113
|
end
|
100
114
|
|
101
115
|
class ::Hash
|
@@ -106,6 +120,19 @@ module SknUtils
|
|
106
120
|
#
|
107
121
|
# @return [true, false]
|
108
122
|
alias_method :blank?, :empty?
|
123
|
+
|
124
|
+
def deep_dup
|
125
|
+
hash = dup
|
126
|
+
each_pair do |key, value|
|
127
|
+
if key.frozen? && ::String === key
|
128
|
+
hash[key] = value.deep_dup
|
129
|
+
else
|
130
|
+
hash.delete(key)
|
131
|
+
hash[key.deep_dup] = value.deep_dup
|
132
|
+
end
|
133
|
+
end
|
134
|
+
hash
|
135
|
+
end
|
109
136
|
end
|
110
137
|
|
111
138
|
class ::String
|
data/lib/skn_utils/version.rb
CHANGED
@@ -127,4 +127,26 @@ describe SknRegistry, "IoC Lite Container class." do
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
|
+
|
131
|
+
context "When used for testing " do
|
132
|
+
|
133
|
+
it "#register_mock Registers a temporary mock." do
|
134
|
+
services.register_mock(:service_c, "Testing" )
|
135
|
+
|
136
|
+
expect(services.resolve(:service_c)).to eq "Testing"
|
137
|
+
services.restore!
|
138
|
+
end
|
139
|
+
|
140
|
+
it "#unregister_mocks! Remove all mocks and restores previous entries if present." do
|
141
|
+
original = services.resolve(:service_c)
|
142
|
+
services.substitute(:service_c, "Testing")
|
143
|
+
expect(services.resolve(:service_c)).to eq "Testing"
|
144
|
+
|
145
|
+
services.unregister_mocks!
|
146
|
+
|
147
|
+
services.resolve(:service_c)
|
148
|
+
expect(services.resolve(:service_c)).to eq original
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
130
152
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skn_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Scott Jr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02
|
11
|
+
date: 2019-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deep_merge
|