skn_utils 5.5.0 → 5.6.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 +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
|