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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85516bbf2735d8ddfe0f60a8b9670664ba9d460caf84069aecb9391424242c7e
4
- data.tar.gz: a2b5c9fd61031ffff6439e6650f8b580104841822f0aeb414ae9dddd606ac2e7
3
+ metadata.gz: a9c0733e1cd979ff0fff600b08ceac8499b600f5df11be54a6c36dadf0cedc7e
4
+ data.tar.gz: '099f2ec34692805b8b37cf2f33cebad5e1b7278cb8a66ed58c7d9eb5d8e7a1b1'
5
5
  SHA512:
6
- metadata.gz: 716b7f956d74790b330bc35bcd5ca571f89c308fc7b1e28af1dcd77e6278f1422d8ae5787f5f4cf42be501bcd374af1a28b8c6c337229ce2a109db71e483bafe
7
- data.tar.gz: bd66285a50914b4e3b7dd26982adaeea15d9670b7d60727334331023028b6979a59f51a793945827fe4fa7df351cbb48fddfd737955ab028c9c46f14f1fcee5a
6
+ metadata.gz: 3632e4b5004e08e865ba8e627338e2e1db4006b1d9819d98ebc75a4ac5afa5d0620853994d2236cc7a7f79cc3aa45d892a3f3d24de1be4efa2631ac325acffcd
7
+ data.tar.gz: 74e01e3d30debd14581269c772cefb88f6c83b857d8f79e6a3eb2998445351bb427401ab8e833e74ae42452fc1d734247c3ea4911d1ae8c60017181830f05fc3
@@ -1,12 +1,15 @@
1
1
  module CubanLinx
2
2
  class Chain
3
3
  def initialize(functions, context:)
4
- @function_chain = functions.map { |function| chainable_method(context, function) }
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), &reducer).as_result.then do |result|
9
- block_given? ? block.call(result) : result
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
@@ -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 = MessageHash.new(messages, initial_keys: :warnings)
8
- @errors = hash_with_sets.merge(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 hash_with_sets
50
- Hash.new { |hash, key| hash[key] = Set.new }
51
- end
66
+ def determine_and_validate(status)
67
+ return status.to_sym if VALID_STATUSES.include?(status.to_sym)
52
68
 
53
- class MessageHash < Hash
54
- def initialize(messages, initial_keys: [])
55
- super() { |hash, key| hash[key] = Set.new }
56
- .merge!(messages)
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
- def merge(other_hash)
61
- super(other_hash) do |_key, val1, val2|
62
- case [val1, val2]
63
- in [Set => set1, Array => collection]
64
- set1 + collection
65
- in [Set => set1, val]
66
- set1 << val
67
- else
68
- val2
69
- end
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
- end
87
+ }
72
88
  end
73
- private_constant :MessageHash
89
+ # rubocop:enable Metrics/MethodLength
74
90
  end
75
91
  end
data/lib/version.rb CHANGED
@@ -1 +1 @@
1
- VERSION = '0.1.1'.freeze
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.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-04-10 00:00:00.000000000 Z
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: '0'
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.0.3
87
+ rubygems_version: 3.2.15
59
88
  signing_key:
60
89
  specification_version: 4
61
90
  summary: Chainable functions