nucleus-core 0.1.2 → 0.1.4

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: 2e8f1e827a4aff4f39d769c090f5f7d8ef84943a9200a4f4c23321b7f797fc0f
4
- data.tar.gz: 7cf9cba46cd45f56e8b6eaea86d066f2cb95315a91918a088e80f35dda326c23
3
+ metadata.gz: cad40c45a637495932d264dfef04ca978e3f47dba177e8acbfbd59a37e0c2217
4
+ data.tar.gz: 3389a5a8e8bb3d63c4afb7fb47ae900367295d86c7bb4ccf651773b1805ca9b2
5
5
  SHA512:
6
- metadata.gz: 673a551fa263daa8ade580dc2950741255ee4366bfd201b15228e8525cfbd6d21563aa82c8e279de51f4f54c870411d91e2a2d169f74a22a261e391b07c2e119
7
- data.tar.gz: 6b153a4819376e7b4c054078f6efb6527462faaca7bf8bf44c9b0fdf553a3c6088232951493167a6361a41968a0c885d3438af8d1365ad318d4b0e1a8847dbb6
6
+ metadata.gz: 461315b12ca674353043961e25e49498878392b89d4aef410aa1e0d16e43938087e4eb377840dd4b815d4a176e3f8f09c296be096198dcd39022b647cee4b89a
7
+ data.tar.gz: 6cbd15c2ce8e2d264ecdd849e1f723b60519c132e2b422f9fc9857f0fc9828649b712bed93bf90680d1a422e87d25e6277fb801dd457436e39667665f390b3c4
data/README.md CHANGED
@@ -22,8 +22,10 @@ Below is an example using NucleusCore Core with Rails:
22
22
  ```ruby
23
23
  # controllers/payments_controller.rb
24
24
  class PaymentsController < ApplicationController
25
+ include NucleusCore::Responder
26
+
25
27
  def create
26
- NucleusCore::Responder.handle_response do
28
+ handle_response do
27
29
  policy.enforce!(:can_write?)
28
30
 
29
31
  context, _process = HandleCheckoutWorkflow.call(invoice_params)
@@ -104,6 +106,7 @@ class ShoppingCartRepository < NucleusCore::Repository
104
106
  end
105
107
  end
106
108
 
109
+ # app/models/shopping_cart.rb
107
110
  class ShoppingCart < ActiveRecord::Base
108
111
  # ...
109
112
  end
@@ -2,13 +2,22 @@ require "set"
2
2
 
3
3
  module NucleusCore
4
4
  module Responder
5
+ attr_reader :request_format, :response_adapter
6
+
7
+ def init_responder(request_format: nil, response_adapter: nil)
8
+ set_request_format(request_format)
9
+ set_response_adapter(response_adapter)
10
+ end
11
+
5
12
  def set_request_format(request=nil)
6
- @request_format = request&.format&.to_sym || :json
13
+ @request_format = request&.to_sym || :json
7
14
  end
8
15
 
9
- def request_format
10
- @request_format ||= set_request_format
16
+ # rubocop:disable Naming/AccessorMethodName
17
+ def set_response_adapter(response_adapter)
18
+ @response_adapter = response_adapter
11
19
  end
20
+ # rubocop:enable Naming/AccessorMethodName
12
21
 
13
22
  # rubocop:disable Lint/RescueException:
14
23
  def handle_response(&block)
@@ -70,7 +79,7 @@ module NucleusCore
70
79
  def render_response(entity)
71
80
  render_headers(entity.headers)
72
81
 
73
- render_method = {
82
+ method_name = {
74
83
  NucleusCore::JsonResponse => :render_json,
75
84
  NucleusCore::XmlResponse => :render_xml,
76
85
  NucleusCore::PdfResponse => :render_pdf,
@@ -79,7 +88,7 @@ module NucleusCore
79
88
  NucleusCore::NoResponse => :render_nothing
80
89
  }.fetch(entity.class, nil)
81
90
 
82
- response_adapter&.send(render_method, entity)
91
+ response_adapter&.send(method_name, entity)
83
92
  end
84
93
 
85
94
  def render_headers(headers={})
@@ -122,9 +131,5 @@ module NucleusCore
122
131
  def exception_map
123
132
  NucleusCore.configuration.exceptions_map
124
133
  end
125
-
126
- def response_adapter
127
- NucleusCore.configuration.response_adapter
128
- end
129
134
  end
130
135
  end
@@ -1,3 +1,3 @@
1
1
  module NucleusCore
2
- VERSION = "0.1.2".freeze
2
+ VERSION = "0.1.4".freeze
3
3
  end
data/lib/nucleus_core.rb CHANGED
@@ -24,12 +24,15 @@ module NucleusCore
24
24
  class BadRequest < BaseException; end
25
25
 
26
26
  class Configuration
27
- attr_reader :exceptions_map, :response_adapter
27
+ attr_reader :exceptions_map
28
28
  attr_accessor :logger
29
29
 
30
+ RESPONSE_ADAPTER_METHODS = %i[
31
+ render_json render_xml render_text render_pdf render_csv render_nothing set_header
32
+ ].freeze
33
+
30
34
  def initialize
31
35
  @logger = nil
32
- @response_adapter = nil
33
36
  @exceptions_map = nil
34
37
  end
35
38
 
@@ -37,10 +40,6 @@ module NucleusCore
37
40
  @exceptions_map = format_exceptions(args)
38
41
  end
39
42
 
40
- def response_adapter=(adapter)
41
- @response_adapter = format_adapter(adapter)
42
- end
43
-
44
43
  private
45
44
 
46
45
  def objectify(hash)
@@ -51,35 +50,13 @@ module NucleusCore
51
50
 
52
51
  def format_exceptions(exceptions={})
53
52
  exception_defaults = ERROR_STATUSES.reduce({}) { |acc, ex| acc.merge(ex => nil) }
53
+ exceptions_map = (exceptions || exception_defaults)
54
+ .slice(*exception_defaults.keys)
55
+ .reduce({}) do |acc, (key, value)|
56
+ acc.merge(key => Array.wrap(value))
57
+ end
54
58
 
55
- objectify(
56
- (exceptions || exception_defaults)
57
- .slice(*exception_defaults.keys)
58
- .reduce({}) do |acc, (key, value)|
59
- acc.merge(key => Array.wrap(value))
60
- end
61
- )
62
- end
63
-
64
- def format_adapter(adapter={})
65
- adapter.tap do |a|
66
- verify_adapter!(a)
67
- end
68
- end
69
-
70
- ADAPTER_METHODS = %i[
71
- render_json render_xml render_text render_pdf render_csv render_nothing set_header
72
- ].freeze
73
-
74
- def verify_adapter!(adapter)
75
- current_adapter_methods = Set[*(adapter.methods - Object.methods)]
76
- required_adapter_methods = ADAPTER_METHODS.to_set
77
-
78
- return if current_adapter_methods == required_adapter_methods
79
-
80
- missing = current_adapter_methods.subtract(required_adapter_methods)
81
-
82
- raise ArgumentError, "responder.adapter must implement: #{missing}"
59
+ objectify(exceptions_map)
83
60
  end
84
61
  end
85
62
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nucleus-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - dodgerogers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-01 00:00:00.000000000 Z
11
+ date: 2023-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 1.43.0
75
+ version: 1.44.1
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 1.43.0
82
+ version: 1.44.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rubocop-minitest
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.26.1
89
+ version: 0.27.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.26.1
96
+ version: 0.27.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubocop-packaging
99
99
  requirement: !ruby/object:Gem::Requirement