clean-architecture 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c49173a8914ea9260202535efe792a4a678619d
4
- data.tar.gz: 508d35b34541f7b631cf1ea8fd994b4b20e08927
3
+ metadata.gz: d751cba3aff6904c1fc224d28039d479ea698805
4
+ data.tar.gz: 37182b20aab7f39b7caf92aae13db1efb186ba10
5
5
  SHA512:
6
- metadata.gz: 9cf655b8ae3fddb3071fb12b817b4b3e08863a34e0007a06d15c814c3cbde3d43057f62dca01ade1bfe02aed5634850e5b2852d6c9647a83055f598494cb6ec4
7
- data.tar.gz: b92ebb0350cd0d79ed012c0318560bfef0148fa5669a6e4837f1c7f48a87611e44dafea1b6cfa75dc228946e28c34e42b44572f3a4c9c238b9e626d372c3203f
6
+ metadata.gz: f003370b9134dcc89007f48a3d754c4e55603aa191a12ad599107f46cc2d91088cad2d4c2f6accf61ebe87819126d289f645f0e0858dee418ca839838b93a6b7
7
+ data.tar.gz: 5479aaa78c7e438f581af8f8481fa025f40b6705b55181aae59389492f74d927d63a3e709b48aa7cd3377953808075968c4198591ca6697de6cc1978931c8847
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ 1.0.0
2
+
3
+ * Remove strategy and command interfaces
4
+ * Turn Authorization into a virtual class rather than an interface
5
+ * Remove ActorGetsAuthorizedThenDoesWork in favour of having the Authorization virtual class
6
+ return a result type (use .bind in the client)
7
+ * Change WithAuditTrail to WriteUseCaseAuditTrail command with a result
8
+
1
9
  0.2.0
2
10
 
3
11
  * Add Entities::FailureDetails and support for it in the various Serializers
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- clean-architecture (0.2.0)
4
+ clean-architecture (1.0.0)
5
5
  dry-matcher (~> 0.0)
6
6
  dry-monads (~> 1.0)
7
7
  dry-struct (~> 0.0)
@@ -3,6 +3,8 @@
3
3
  # THIS FILE IS AUTOGENERATED AND SHOULD NOT BE MANUALLY MODIFIED
4
4
 
5
5
  require 'clean_architecture/adapters/all'
6
+ require 'clean_architecture/checks/all'
7
+ require 'clean_architecture/commands/all'
6
8
  require 'clean_architecture/entities/all'
7
9
  require 'clean_architecture/interfaces/all'
8
10
  require 'clean_architecture/matchers/all'
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # THIS FILE IS AUTOGENERATED AND SHOULD NOT BE MANUALLY MODIFIED
4
+
5
+ require 'clean_architecture/checks/authorization'
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dry/monads/all'
4
+ require 'clean_architecture/entities/failure_details'
5
+
6
+ module CleanArchitecture
7
+ module Checks
8
+ class Authorization
9
+ extend Forwardable
10
+
11
+ def result
12
+ if authorized?
13
+ Dry::Monads::Success(true)
14
+ else
15
+ failure_details = Entities::FailureDetails.new(
16
+ message: failure_message,
17
+ other_properties: {},
18
+ type: 'unauthorized'
19
+ )
20
+ Dry::Monads::Failure(failure_details)
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def failure_message
27
+ 'Unauthorized'
28
+ end
29
+
30
+ def authorized?
31
+ raise NotImplementedError
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # THIS FILE IS AUTOGENERATED AND SHOULD NOT BE MANUALLY MODIFIED
4
+
5
+ require 'clean_architecture/commands/write_use_case_audit_trail'
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'clean_architecture/entities/use_case_history_entry'
4
+ require 'duckface'
5
+
6
+ module CleanArchitecture
7
+ module Commands
8
+ class WriteUseCaseAuditTrail
9
+ extend Forwardable
10
+
11
+ def initialize(use_case_target)
12
+ @use_case_target = use_case_target
13
+ end
14
+
15
+ def result
16
+ @result ||= begin
17
+ entry = Entities::UseCaseHistoryEntry.new(@use_case_target)
18
+ parameters.persistence.create_use_case_history_entry(entry)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -15,7 +15,7 @@ module CleanArchitecture
15
15
 
16
16
  attribute :type, FailureTypes
17
17
  attribute :message, Types::Strict::String
18
- attribute :other_properties, Types::Strict::Hash
18
+ attribute :other_properties, Types::Strict::Hash.default({})
19
19
  end
20
20
  end
21
21
  end
@@ -12,11 +12,12 @@ module CleanArchitecture
12
12
  implements_interface Interfaces::UseCaseHistoryEntry
13
13
  extend Forwardable
14
14
 
15
- def initialize(use_case_class, use_case_parameters, use_case_result, use_case_target)
16
- @use_case_class = use_case_class
17
- @use_case_parameters = use_case_parameters
18
- @use_case_result = use_case_result
15
+ def initialize(use_case, use_case_target)
16
+ @use_case = use_case
19
17
  @use_case_target = use_case_target
18
+ @use_case_class = @use_case.class
19
+ @use_case_parameters = @use_case.parameters
20
+ @use_case_result = @use_case.result
20
21
  end
21
22
 
22
23
  def extra_parameters_hash
@@ -2,13 +2,10 @@
2
2
 
3
3
  # THIS FILE IS AUTOGENERATED AND SHOULD NOT BE MANUALLY MODIFIED
4
4
 
5
- require 'clean_architecture/interfaces/authorization_check'
6
5
  require 'clean_architecture/interfaces/authorization_parameters'
7
6
  require 'clean_architecture/interfaces/base_parameters'
8
- require 'clean_architecture/interfaces/command'
9
7
  require 'clean_architecture/interfaces/jsonable'
10
8
  require 'clean_architecture/interfaces/persistence'
11
- require 'clean_architecture/interfaces/strategy'
12
9
  require 'clean_architecture/interfaces/success_payload'
13
10
  require 'clean_architecture/interfaces/targeted_parameters'
14
11
  require 'clean_architecture/interfaces/use_case'
@@ -2,5 +2,3 @@
2
2
 
3
3
  # THIS FILE IS AUTOGENERATED AND SHOULD NOT BE MANUALLY MODIFIED
4
4
 
5
- require 'clean_architecture/strategies/actor_gets_authorized_then_does_work'
6
- require 'clean_architecture/strategies/with_audit_trail'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CleanArchitecture
4
- VERSION = '0.2.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clean-architecture
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bellroy Tech Team
@@ -148,19 +148,20 @@ files:
148
148
  - lib/clean_architecture/adapters/all.rb
149
149
  - lib/clean_architecture/adapters/attribute_hash_base.rb
150
150
  - lib/clean_architecture/all.rb
151
+ - lib/clean_architecture/checks/all.rb
152
+ - lib/clean_architecture/checks/authorization.rb
153
+ - lib/clean_architecture/commands/all.rb
154
+ - lib/clean_architecture/commands/write_use_case_audit_trail.rb
151
155
  - lib/clean_architecture/entities/all.rb
152
156
  - lib/clean_architecture/entities/failure_details.rb
153
157
  - lib/clean_architecture/entities/targeted_parameters.rb
154
158
  - lib/clean_architecture/entities/untargeted_parameters.rb
155
159
  - lib/clean_architecture/entities/use_case_history_entry.rb
156
160
  - lib/clean_architecture/interfaces/all.rb
157
- - lib/clean_architecture/interfaces/authorization_check.rb
158
161
  - lib/clean_architecture/interfaces/authorization_parameters.rb
159
162
  - lib/clean_architecture/interfaces/base_parameters.rb
160
- - lib/clean_architecture/interfaces/command.rb
161
163
  - lib/clean_architecture/interfaces/jsonable.rb
162
164
  - lib/clean_architecture/interfaces/persistence.rb
163
- - lib/clean_architecture/interfaces/strategy.rb
164
165
  - lib/clean_architecture/interfaces/success_payload.rb
165
166
  - lib/clean_architecture/interfaces/targeted_parameters.rb
166
167
  - lib/clean_architecture/interfaces/use_case.rb
@@ -176,9 +177,7 @@ files:
176
177
  - lib/clean_architecture/serializers/html_response_from_result.rb
177
178
  - lib/clean_architecture/serializers/json_response_from_result.rb
178
179
  - lib/clean_architecture/serializers/success_payload.rb
179
- - lib/clean_architecture/strategies/actor_gets_authorized_then_does_work.rb
180
180
  - lib/clean_architecture/strategies/all.rb
181
- - lib/clean_architecture/strategies/with_audit_trail.rb
182
181
  - lib/clean_architecture/types.rb
183
182
  - lib/clean_architecture/version.rb
184
183
  homepage: https://bellroy.com
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'duckface'
4
-
5
- module CleanArchitecture
6
- module Interfaces
7
- module AuthorizationCheck
8
- extend Duckface::ActsAsInterface
9
-
10
- def authorized?
11
- raise NotImplementedError
12
- end
13
- end
14
- end
15
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'duckface'
4
-
5
- module CleanArchitecture
6
- module Interfaces
7
- module Command
8
- extend Duckface::ActsAsInterface
9
-
10
- def initialize(_parameters)
11
- raise NotImplementedError
12
- end
13
-
14
- def parameters
15
- raise NotImplementedError
16
- end
17
-
18
- def result
19
- raise NotImplementedError
20
- end
21
- end
22
- end
23
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CleanArchitecture
4
- module Interfaces
5
- module Strategy
6
- extend Duckface::ActsAsInterface
7
-
8
- def parameters
9
- raise NotImplementedError
10
- end
11
-
12
- def result
13
- raise NotImplementedError
14
- end
15
- end
16
- end
17
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/monads/all'
4
- require 'clean_architecture/entities/failure_details'
5
- require 'clean_architecture/interfaces/strategy'
6
-
7
- module CleanArchitecture
8
- module Strategies
9
- class ActorGetsAuthorizedThenDoesWork
10
- extend Forwardable
11
-
12
- implements_interface Interfaces::Strategy
13
-
14
- def initialize(authorization_check, sub_strategy)
15
- @authorization_check = authorization_check
16
- @sub_strategy = sub_strategy
17
- end
18
-
19
- def_delegator :@sub_strategy, :parameters
20
-
21
- UNAUTHORIZED_FAILURE_DETAILS = Entities::FailureDetails.new(
22
- message: 'Unauthorized',
23
- other_properties: {},
24
- type: 'unauthorized'
25
- )
26
-
27
- def result
28
- @result ||= begin
29
- if @authorization_check.authorized?
30
- @sub_strategy.result
31
- else
32
- Dry::Monads::Failure(UNAUTHORIZED_FAILURE_DETAILS)
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'clean_architecture/entities/use_case_history_entry'
4
- require 'clean_architecture/interfaces/strategy'
5
- require 'duckface'
6
-
7
- module CleanArchitecture
8
- module Strategies
9
- class WithAuditTrail
10
- implements_interface Interfaces::Strategy
11
- extend Forwardable
12
-
13
- def initialize(use_case_class, sub_strategy, use_case_target)
14
- @use_case_class = use_case_class
15
- @sub_strategy = sub_strategy
16
- @use_case_target = use_case_target
17
- end
18
-
19
- def result
20
- @result ||= begin
21
- strategy_result = @sub_strategy.result
22
- entry = new_use_case_history_entry(strategy_result)
23
- parameters.persistence.create_use_case_history_entry(entry)
24
- strategy_result
25
- end
26
- end
27
-
28
- def_delegator :@sub_strategy, :parameters
29
-
30
- private
31
-
32
- def new_use_case_history_entry(sub_strategy_result)
33
- Entities::UseCaseHistoryEntry.new(
34
- @use_case_class,
35
- @sub_strategy.parameters,
36
- sub_strategy_result,
37
- @use_case_target
38
- )
39
- end
40
- end
41
- end
42
- end