nxt_support 0.1.6 → 0.1.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +7 -7
- data/README.md +14 -0
- data/lib/nxt_support/util.rb +1 -0
- data/lib/nxt_support/util/crystalizer.rb +34 -0
- data/lib/nxt_support/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9cd2e7ab48d6e58c2b05de88fecef08c69df0bf8bc5e9de3b1955b86d900187
|
4
|
+
data.tar.gz: 155c904d6bdcc15d03ebae72b688f06bcf32cf497b3ac4728e447c23fa512727
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 452a21d24a142cd56a027b5cfb835c37b4ecc16e2966dd27e3c41be364ecef75ff225bf23c06506e6b1a984aff42b27e09082a0be2360d27a92c8abfd036620e
|
7
|
+
data.tar.gz: 9c6afc5fe2aa482f9cb3e76e158f681db66fd6c996d2f3dd831cb620489bbc96ec1a4540d892d1980c71bc59ba5039bfd671217efb7ed230f514855846c65d25
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nxt_support (0.1.
|
4
|
+
nxt_support (0.1.7)
|
5
5
|
nxt_init
|
6
6
|
nxt_registry
|
7
7
|
rails
|
@@ -66,13 +66,13 @@ GEM
|
|
66
66
|
zeitwerk (~> 2.2, >= 2.2.2)
|
67
67
|
builder (3.2.4)
|
68
68
|
coderay (1.1.2)
|
69
|
-
concurrent-ruby (1.1.
|
69
|
+
concurrent-ruby (1.1.7)
|
70
70
|
crass (1.0.6)
|
71
71
|
diff-lcs (1.3)
|
72
72
|
erubi (1.9.0)
|
73
73
|
globalid (0.4.2)
|
74
74
|
activesupport (>= 4.2.0)
|
75
|
-
i18n (1.8.
|
75
|
+
i18n (1.8.5)
|
76
76
|
concurrent-ruby (~> 1.0)
|
77
77
|
loofah (2.6.0)
|
78
78
|
crass (~> 1.0.2)
|
@@ -87,11 +87,11 @@ GEM
|
|
87
87
|
mini_portile2 (2.4.0)
|
88
88
|
minitest (5.14.1)
|
89
89
|
nio4r (2.5.2)
|
90
|
-
nokogiri (1.10.
|
90
|
+
nokogiri (1.10.10)
|
91
91
|
mini_portile2 (~> 2.4.0)
|
92
92
|
nxt_init (0.1.5)
|
93
93
|
activesupport
|
94
|
-
nxt_registry (0.1
|
94
|
+
nxt_registry (0.2.1)
|
95
95
|
activesupport
|
96
96
|
pry (0.13.1)
|
97
97
|
coderay (~> 1.1)
|
@@ -153,10 +153,10 @@ GEM
|
|
153
153
|
thread_safe (0.3.6)
|
154
154
|
tzinfo (1.2.7)
|
155
155
|
thread_safe (~> 0.1)
|
156
|
-
websocket-driver (0.7.
|
156
|
+
websocket-driver (0.7.3)
|
157
157
|
websocket-extensions (>= 0.1.0)
|
158
158
|
websocket-extensions (0.1.5)
|
159
|
-
zeitwerk (2.
|
159
|
+
zeitwerk (2.4.0)
|
160
160
|
|
161
161
|
PLATFORMS
|
162
162
|
ruby
|
data/README.md
CHANGED
@@ -247,6 +247,20 @@ TestClass.translate_hash(hash, tuple)
|
|
247
247
|
=> { 'first_name' => 'John', 'last_name' => 'Doe', 'maiden_name' => 'Doe' }
|
248
248
|
```
|
249
249
|
|
250
|
+
#### NxtSupport::Crystalizer
|
251
|
+
|
252
|
+
`NxtSupport::Crystalizer` crystallizes a shared value from an array of elements and screams in case the value is not
|
253
|
+
the same across the collection. This is useful in a scenario where you want to guarantee that certain objects share the same
|
254
|
+
attribute. Let's say you want to ensure that all users in your collection reference the same department, then the idea
|
255
|
+
is that you can crystallize the department from your collection.
|
256
|
+
|
257
|
+
```ruby
|
258
|
+
NxtSupport::Crystalizer.new(collection: ['andy', 'andy']).call # => 'andy'
|
259
|
+
NxtSupport::Crystalizer.new(collection: []).call # NxtSupport::Crystalizer::Error
|
260
|
+
NxtSupport::Crystalizer.new(collection: ['andy', 'scotty']).call # NxtSupport::Crystalizer::Error
|
261
|
+
NxtSupport::Crystalizer.new(collection: insurances, attribute: :effective_at).call # => shared effective_at or error in case of different effective_ats
|
262
|
+
```
|
263
|
+
|
250
264
|
## Development
|
251
265
|
|
252
266
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/nxt_support/util.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
module NxtSupport
|
2
|
+
class Crystalizer
|
3
|
+
Error = Class.new(StandardError)
|
4
|
+
|
5
|
+
include NxtInit
|
6
|
+
|
7
|
+
attr_init :collection, on_ambiguity: -> { default_ambiguity_handler }, with: :itself
|
8
|
+
|
9
|
+
def call
|
10
|
+
ensure_unanimity
|
11
|
+
unique_values.first
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def unique_values
|
17
|
+
@unique_values ||= resolved_collection.uniq
|
18
|
+
end
|
19
|
+
|
20
|
+
def resolved_collection
|
21
|
+
@resolved_collection ||= collection.map { |value| with.is_a?(Proc) ? with.call(value) : value.send(with) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def default_ambiguity_handler
|
25
|
+
->(collection) { raise Error, "Values in collection are not unanimous: #{collection}" }
|
26
|
+
end
|
27
|
+
|
28
|
+
def ensure_unanimity
|
29
|
+
return if unique_values.size == 1
|
30
|
+
|
31
|
+
on_ambiguity.arity == 1 ? on_ambiguity.call(collection) : on_ambiguity.call
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/nxt_support/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nxt_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nils Sommer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- lib/nxt_support/serializers.rb
|
160
160
|
- lib/nxt_support/serializers/has_time_attributes.rb
|
161
161
|
- lib/nxt_support/util.rb
|
162
|
+
- lib/nxt_support/util/crystalizer.rb
|
162
163
|
- lib/nxt_support/util/enum_hash.rb
|
163
164
|
- lib/nxt_support/util/hash_translator.rb
|
164
165
|
- lib/nxt_support/version.rb
|
@@ -186,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
187
|
- !ruby/object:Gem::Version
|
187
188
|
version: '0'
|
188
189
|
requirements: []
|
189
|
-
rubygems_version: 3.0.
|
190
|
+
rubygems_version: 3.0.3
|
190
191
|
signing_key:
|
191
192
|
specification_version: 4
|
192
193
|
summary: Support through reusable Mixins and Helpers for Ruby on Rails Applications
|