smart_core 0.2.0 → 0.3.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
  SHA256:
3
- metadata.gz: e2ff8c25822c588b21c3d5785f04998fb1bb838e30b6046cc7e1706891133c6b
4
- data.tar.gz: 307a1f6b397dba1339c9e6d4ea701343b349c22261b59e42ae35ccce735b7ff7
3
+ metadata.gz: d5fabab611add86958e30b6ee5b01323f0bf9d25d1dc810a6b425551f6724f07
4
+ data.tar.gz: dd2568de8356fe185579a20adf5778672b84edebfe20145b71fe5ecc3ace07a3
5
5
  SHA512:
6
- metadata.gz: 7755b70015cc2cb2c0cc76c9e3436cda0f7d76170f9109e3e20655ce6e29c16a530b1b522398355329eaa64e5cd139153ba3c93043372b6e734dbfe4994b47a8
7
- data.tar.gz: e580d37f900e4e969464b094d4fc4d4795edcc6bbd90e482716dfcbc7147e327543dcf7e8c29ae5905a15ccd29a362b1b3873cc68972e742c3a5fc579696062b
6
+ metadata.gz: 3ed05efd0358bb94a3eafb8cfb4f4f719a163976ff9d55fe12dc85133173fc02cdfa2d658d51cc1c8109714f17babacdbad3bc77e8261586dcdc2cc3b5734187
7
+ data.tar.gz: 5e47ae0423372cd64d2dade6dad06b00d8faa6dce6a7a52ded5764001ac894c1c3eafb023c7d2babad7662561a4887c30c1b0820b71d4606357f76f66d4ba0ad
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.3.0] - 2019-01-20
5
+ ### Added
6
+ - **Operation**
7
+ - New result object type: `Fatal` (`SmartCore::Operation::Fatal`, `#Fatal`)
8
+ - stops the operation execution flow and returns
9
+ `SmartCore::Operation::Fatal` result immidietly;
10
+ - has `Failure`-like instantiation behavior and internal state (`#failure?`, `#fatal?`, `#errors`);
11
+
4
12
  ## [0.2.0] - 2019-01-20
5
13
  ### Added
6
14
  - **Service object** abstraction (`SmartCore::Operation`);
data/README.md CHANGED
@@ -26,7 +26,7 @@ require 'smart_core'
26
26
 
27
27
  - [**Operation Object**](#operation-object) (aka `Service Object`) (`SmartCore::Operation`)
28
28
  - attribute definition DSL (`param`, `option`, `params`, `options`);
29
- - yieldable result object abstraction (`Success`, `Failure`, `#success?`, `#failure?`);
29
+ - yieldable result object abstraction (`Success`, `Failure`, `Fatal`, `#success?`, `#failure?`, `#fatal?`);
30
30
  - yieldable `#call` (and `.call`);
31
31
  - inheritance works as expected `:)`;
32
32
  - no dependencies;
@@ -5,6 +5,26 @@ class SmartCore::Operation
5
5
  # @since 0.2.0
6
6
  Error = Class.new(StandardError)
7
7
 
8
+ # @api public
9
+ # @since 0.3.0
10
+ FatalError = Class.new(Error) do
11
+ # @return [SmartCore::Operation::Fatal]
12
+ #
13
+ # @api private
14
+ # @since 0.3.0
15
+ attr_reader :__operation_result__
16
+
17
+ # @param operation_result [SmartCore::Operation::Fatal]
18
+ # @return [void]
19
+ #
20
+ # @api private
21
+ # @since 0.3.0
22
+ def initialize(operation_result)
23
+ @__operation_result__ = operation_result
24
+ super()
25
+ end
26
+ end
27
+
8
28
  # @api public
9
29
  # @since 0.2.0
10
30
  ArgumentError = Class.new(::ArgumentError)
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api public
4
+ # @since 0.3.0
5
+ class SmartCore::Operation::Fatal < SmartCore::Operation::Failure
6
+ # @return [SmartCore::Operation::FatalError]
7
+ #
8
+ # @api private
9
+ # @since 0.3.0
10
+ def exception
11
+ SmartCore::Operation::FatalError.new(self)
12
+ end
13
+
14
+ # @return [Boolean]
15
+ #
16
+ # @api public
17
+ # @since 0.3.0
18
+ def fatal?
19
+ true.tap { yield(self) if block_given? }
20
+ end
21
+ end
@@ -155,6 +155,9 @@ class SmartCore::Operation::InstanceBuilder
155
155
  operation_object.singleton_class.prepend(Module.new do
156
156
  def call
157
157
  super.tap { |result| yield(result) if block_given? }
158
+ rescue SmartCore::Operation::FatalError => error
159
+ # NOTE: returns SmartCore::Operation::Fatal instance
160
+ error.__operation_result__.tap { |result| yield(result) if block_given? }
158
161
  end
159
162
  end)
160
163
  end
@@ -9,6 +9,7 @@ class SmartCore::Operation
9
9
  require_relative 'operation/result'
10
10
  require_relative 'operation/success'
11
11
  require_relative 'operation/failure'
12
+ require_relative 'operation/fatal'
12
13
  require_relative 'operation/instance_builder'
13
14
  require_relative 'operation/attribute_definer'
14
15
  require_relative 'operation/initialization_dsl'
@@ -35,7 +36,9 @@ class SmartCore::Operation
35
36
  # @since 0.2.0
36
37
  def initialize(*, **); end
37
38
 
38
- # @return [SmartCore::Operation::Success, SmartCore::Operation::Failure]
39
+ # @return [SmartCore::Operation::Success]
40
+ # @return [SmartCore::Operation::Failure]
41
+ # @return [SmartCore::Operation::Fatal]
39
42
  #
40
43
  # @api public
41
44
  # @since 0.2.0
@@ -62,4 +65,15 @@ class SmartCore::Operation
62
65
  def Failure(*errors) # rubocop:disable Naming/MethodName
63
66
  SmartCore::Operation::Failure.new(*errors)
64
67
  end
68
+
69
+ # @param errors [Array<Symbol|Any>]
70
+ # @return [SmartCore::Operation::Fatal]
71
+ #
72
+ # @raise [SmartCore::Operation::FatalError]
73
+ #
74
+ # @api public
75
+ # @since 0.2.0
76
+ def Fatal(*errors) # rubocop:disable Naming/MethodName
77
+ raise SmartCore::Operation::Fatal.new(*errors)
78
+ end
65
79
  end
@@ -5,5 +5,5 @@ module SmartCore
5
5
  #
6
6
  # @api public
7
7
  # @since 0.1.0
8
- VERSION = '0.2.0'
8
+ VERSION = '0.3.0'
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
@@ -134,6 +134,7 @@ files:
134
134
  - lib/smart_core/operation/attribute_set.rb
135
135
  - lib/smart_core/operation/exceptions.rb
136
136
  - lib/smart_core/operation/failure.rb
137
+ - lib/smart_core/operation/fatal.rb
137
138
  - lib/smart_core/operation/initialization_dsl.rb
138
139
  - lib/smart_core/operation/instance_builder.rb
139
140
  - lib/smart_core/operation/result.rb