cuban_linx 0.1.1 → 1.0.1
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/lib/cuban_linx/chain.rb +6 -3
- data/lib/cuban_linx/collaborator.rb +3 -1
- data/lib/cuban_linx/payload.rb +42 -26
- data/lib/version.rb +1 -1
- metadata +34 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9c0733e1cd979ff0fff600b08ceac8499b600f5df11be54a6c36dadf0cedc7e
|
4
|
+
data.tar.gz: '099f2ec34692805b8b37cf2f33cebad5e1b7278cb8a66ed58c7d9eb5d8e7a1b1'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3632e4b5004e08e865ba8e627338e2e1db4006b1d9819d98ebc75a4ac5afa5d0620853994d2236cc7a7f79cc3aa45d892a3f3d24de1be4efa2631ac325acffcd
|
7
|
+
data.tar.gz: 74e01e3d30debd14581269c772cefb88f6c83b857d8f79e6a3eb2998445351bb427401ab8e833e74ae42452fc1d734247c3ea4911d1ae8c60017181830f05fc3
|
data/lib/cuban_linx/chain.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
module CubanLinx
|
2
2
|
class Chain
|
3
3
|
def initialize(functions, context:)
|
4
|
-
@function_chain = functions.map
|
4
|
+
@function_chain = functions.map do |function|
|
5
|
+
chainable_method(context, function)
|
6
|
+
end
|
5
7
|
end
|
6
8
|
|
7
9
|
def call(**initial_args, &block)
|
8
|
-
function_chain.reduce(Payload.new(:ok, initial_args),
|
9
|
-
|
10
|
+
function_chain.reduce(Payload.new(:ok, initial_args),
|
11
|
+
&reducer).as_result.then do |result|
|
12
|
+
block_given? ? block.call(result) : result
|
10
13
|
end
|
11
14
|
end
|
12
15
|
|
@@ -20,9 +20,10 @@ module CubanLinx
|
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
+
# rubocop:disable Metrics/MethodLength
|
23
24
|
def handle(payload, result)
|
24
25
|
case result
|
25
|
-
in :ok | nil
|
26
|
+
in :ok | true | nil
|
26
27
|
payload.tuple
|
27
28
|
in [:ok, messages]
|
28
29
|
[:ok, payload.add(messages), payload.errors]
|
@@ -38,5 +39,6 @@ module CubanLinx
|
|
38
39
|
[:error, payload.messages, payload.add_errors(errors)]
|
39
40
|
end
|
40
41
|
end
|
42
|
+
# rubocop:enable Metrics/MethodLength
|
41
43
|
end
|
42
44
|
end
|
data/lib/cuban_linx/payload.rb
CHANGED
@@ -2,10 +2,13 @@ require "set"
|
|
2
2
|
|
3
3
|
module CubanLinx
|
4
4
|
class Payload
|
5
|
+
InvalidStatusError = Class.new(StandardError)
|
6
|
+
VALID_STATUSES = %i[ok no_op error].freeze
|
7
|
+
|
5
8
|
def initialize(status, messages = {}, errors = {})
|
6
|
-
@status = status
|
7
|
-
@messages =
|
8
|
-
@errors =
|
9
|
+
@status = determine_and_validate(status)
|
10
|
+
@messages = messages.merge({ warnings: Set.new }, &merge_block)
|
11
|
+
@errors = errors
|
9
12
|
end
|
10
13
|
|
11
14
|
def fetch(*args, &block)
|
@@ -25,11 +28,15 @@ module CubanLinx
|
|
25
28
|
end
|
26
29
|
|
27
30
|
def add(new_messages)
|
28
|
-
messages.merge(new_messages)
|
31
|
+
messages.merge(new_messages, &merge_block)
|
29
32
|
end
|
30
33
|
|
31
34
|
def add_errors(error_messages)
|
32
|
-
errors.merge(error_messages)
|
35
|
+
errors.merge(error_messages, &merge_block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_warning(message)
|
39
|
+
add(warnings: message)
|
33
40
|
end
|
34
41
|
|
35
42
|
def warnings
|
@@ -42,34 +49,43 @@ module CubanLinx
|
|
42
49
|
messages.delete(key)
|
43
50
|
end
|
44
51
|
|
52
|
+
def method_missing(method_name, *, &block)
|
53
|
+
super unless respond_to_missing?(method_name)
|
54
|
+
|
55
|
+
messages.fetch(method_name)
|
56
|
+
end
|
57
|
+
|
58
|
+
def respond_to_missing?(method_name, include_private = false)
|
59
|
+
messages.key?(method_name) || super
|
60
|
+
end
|
61
|
+
|
45
62
|
attr_reader :status, :messages, :errors
|
46
63
|
|
47
64
|
private
|
48
65
|
|
49
|
-
def
|
50
|
-
|
51
|
-
end
|
66
|
+
def determine_and_validate(status)
|
67
|
+
return status.to_sym if VALID_STATUSES.include?(status.to_sym)
|
52
68
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
.tap { |hash| Array(initial_keys).each { |key| hash[key] } }
|
58
|
-
end
|
69
|
+
raise InvalidStatusError,
|
70
|
+
"Received #{status.inspect}. "\
|
71
|
+
"Should be one of: #{VALID_STATUSES.inspect}"
|
72
|
+
end
|
59
73
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
74
|
+
# rubocop:disable Metrics/MethodLength
|
75
|
+
def merge_block
|
76
|
+
lambda { |_key, val1, val2|
|
77
|
+
case [val1, val2]
|
78
|
+
in [Set => set1, Array => collection]
|
79
|
+
set1 + collection
|
80
|
+
in [Set => set1, Set => set2]
|
81
|
+
set1 + set2
|
82
|
+
in [Set => set1, val]
|
83
|
+
set1 << val
|
84
|
+
else
|
85
|
+
val2
|
70
86
|
end
|
71
|
-
|
87
|
+
}
|
72
88
|
end
|
73
|
-
|
89
|
+
# rubocop:enable Metrics/MethodLength
|
74
90
|
end
|
75
91
|
end
|
data/lib/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VERSION =
|
1
|
+
VERSION = "1.0.1".freeze
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuban_linx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Moret
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faker
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.20.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.20.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +38,20 @@ dependencies:
|
|
24
38
|
- - '='
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: 3.11.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.27'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.27'
|
27
55
|
description: For procedural ruby
|
28
56
|
email: ryancmoret@gmail.com
|
29
57
|
executables: []
|
@@ -39,7 +67,8 @@ files:
|
|
39
67
|
homepage: https://rubygems.org/gems/cuban_linx
|
40
68
|
licenses:
|
41
69
|
- MIT
|
42
|
-
metadata:
|
70
|
+
metadata:
|
71
|
+
rubygems_mfa_required: 'true'
|
43
72
|
post_install_message:
|
44
73
|
rdoc_options: []
|
45
74
|
require_paths:
|
@@ -48,14 +77,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
77
|
requirements:
|
49
78
|
- - ">="
|
50
79
|
- !ruby/object:Gem::Version
|
51
|
-
version:
|
80
|
+
version: 3.0.0
|
52
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
82
|
requirements:
|
54
83
|
- - ">="
|
55
84
|
- !ruby/object:Gem::Version
|
56
85
|
version: '0'
|
57
86
|
requirements: []
|
58
|
-
rubygems_version: 3.
|
87
|
+
rubygems_version: 3.2.15
|
59
88
|
signing_key:
|
60
89
|
specification_version: 4
|
61
90
|
summary: Chainable functions
|