command_service_object 1.0.0 → 1.1.0

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: 4f7f0b0d9360f1cd9db2ce8bbab1f35f44f0d4d631f7ff356607509237807dbc
4
- data.tar.gz: badfbd6e44876729b1dde74a4dabedd77e11a0b8e0decc333fbe4b43ab9a3e2f
3
+ metadata.gz: 378dc78b1fdeb1e415506b8edacb761ee0a0d78c90b5b1cf90c081a506cf6183
4
+ data.tar.gz: 26395c6559e2f8124583c5002a519f39f32b781dfee944218a894bd6570f1715
5
5
  SHA512:
6
- metadata.gz: e65c2c56b4d32992a78753248012787b888aeaf099d5d8a4bf93e4a1b1efbb0a6c271ed83b79785a66748e0606175231c02ecef3bb1b267da9fee1d8f4cb4c69
7
- data.tar.gz: 9c93b24c8f6831dab02c1a603474821ae37de77b5f3ede2ca3bdb8f91a48a2c68228285ca0fb1b8cae624658d7256827e31439b49e8d92a15501f221786491e8
6
+ metadata.gz: 446882a4a2a56924868783acffa56fdf54b0f61eedb48e1c58846f3de7795f32d7afde0b74fb02425530590324bc240eaf9befedc8b0cb306f52f1cb75e1cde4
7
+ data.tar.gz: 49e3cb994a9304e5b34d88d5abef25e4c79cbb751c1f466b8d232735534205e6092bb74219f4b05e4a46ec8e8cc295730c29b8b656e3ebcef612b98a9a0996f5
@@ -64,7 +64,7 @@ GEM
64
64
  coercible (1.0.0)
65
65
  descendants_tracker (~> 0.0.1)
66
66
  concurrent-ruby (1.1.5)
67
- crass (1.0.4)
67
+ crass (1.0.6)
68
68
  descendants_tracker (0.0.4)
69
69
  thread_safe (~> 0.3, >= 0.3.1)
70
70
  equalizer (0.0.11)
@@ -80,7 +80,7 @@ GEM
80
80
  concurrent-ruby (~> 1.0)
81
81
  ice_nine (0.11.2)
82
82
  json (2.3.1)
83
- loofah (2.2.3)
83
+ loofah (2.7.0)
84
84
  crass (~> 1.0.2)
85
85
  nokogiri (>= 1.5.9)
86
86
  mail (2.7.1)
@@ -94,9 +94,9 @@ GEM
94
94
  minitest (5.11.3)
95
95
  multi_json (1.15.0)
96
96
  nio4r (2.3.1)
97
- nokogiri (1.10.4)
97
+ nokogiri (1.10.10)
98
98
  mini_portile2 (~> 2.4.0)
99
- rack (2.0.7)
99
+ rack (2.2.3)
100
100
  rack-test (1.1.0)
101
101
  rack (>= 1.0, < 3)
102
102
  rails (5.2.3)
@@ -123,7 +123,7 @@ GEM
123
123
  method_source
124
124
  rake (>= 0.8.7)
125
125
  thor (>= 0.19.0, < 2.0)
126
- rake (10.5.0)
126
+ rake (13.0.1)
127
127
  sprockets (3.7.2)
128
128
  concurrent-ruby (~> 1.0)
129
129
  rack (> 1, < 3)
@@ -142,7 +142,7 @@ GEM
142
142
  equalizer (~> 0.0, >= 0.0.9)
143
143
  websocket-driver (0.7.0)
144
144
  websocket-extensions (>= 0.1.0)
145
- websocket-extensions (0.1.3)
145
+ websocket-extensions (0.1.5)
146
146
 
147
147
  PLATFORMS
148
148
  ruby
@@ -153,7 +153,7 @@ DEPENDENCIES
153
153
  command_service_object!
154
154
  minitest (~> 5.11, >= 5.11.3)
155
155
  rails (~> 5.0)
156
- rake (~> 10.0)
156
+ rake (~> 13.0)
157
157
  thor (~> 0.20.3)
158
158
 
159
159
  BUNDLED WITH
data/README.md CHANGED
@@ -18,13 +18,14 @@ Service consists of several objects { `Command Object` `Usecase Object` And `Err
18
18
  - **Listeners:** An event listener that waits for an event outside the service to occur.
19
19
  - **Entities:** Many objects are not fundamentally defined by their attributes, but rather by a thread of continuity and identity.
20
20
 
21
- #### Result Object
21
+ ### Result Object
22
22
 
23
23
  In case of successful or failure `ApplicationService` the responsible object for all services will return `service_result` object this object contain `value!` method containing successful call result, and `errors` method containing failure `errors` objects.
24
24
 
25
- #### Business Logic Failures
25
+ ### Helpers:
26
26
 
27
- To raise bussiness logic failures you can use `fail!` helper method with `message: String, extra_data: Hash` arguments.
27
+ - Fail: You can use `fail!` helper to raise business logic failures, ex: `fail!('user should not have any active cards')`.
28
+ - Check: To do business logic validations you can use `check!` helper ex: `check!('user should not have any active cards') { user.active_cards.empty? }`, if the given block returns false then it will raise fail! with the given message.
28
29
 
29
30
  > You can check if the result successful or not by using `ok?` method.
30
31
 
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency 'byebug', '~> 9.0.6'
37
37
  spec.add_development_dependency 'minitest', '~> 5.11', '>= 5.11.3'
38
38
  spec.add_development_dependency 'rails', '~> 5.0'
39
- spec.add_development_dependency 'rake', '~> 10.0'
39
+ spec.add_development_dependency 'rake', '~> 13.0'
40
40
  spec.add_development_dependency 'thor', '~> 0.20.3'
41
41
 
42
42
  spec.add_dependency 'virtus', '~> 1.0', '>= 1.0.5'
@@ -4,6 +4,7 @@ require 'command_service_object/failure'
4
4
  require 'command_service_object/helpers/model_helper'
5
5
  require 'command_service_object/helpers/controller_helper'
6
6
  require 'command_service_object/helpers/failure_helper'
7
+ require 'command_service_object/helpers/check_helper'
7
8
  require 'command_service_object/hooks'
8
9
  require 'virtus'
9
10
 
@@ -0,0 +1,9 @@
1
+ module CommandServiceObject
2
+ module CheckHelper
3
+ def check!(message, &block)
4
+ raise "No block given" unless block_given?
5
+
6
+ fail!(message) unless block.call
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module CommandServiceObject
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -17,12 +17,10 @@ class ApplicationService
17
17
  rollback if result.error.present?
18
18
  end
19
19
 
20
+ log_command
20
21
  result
21
22
  rescue StandardError => e
22
- log_errors(e)
23
- ServiceResult.new { raise e }
24
- ensure
25
- log_command
23
+ ServiceResult.new { raise e }
26
24
  end
27
25
 
28
26
  def rollback
@@ -33,26 +31,38 @@ class ApplicationService
33
31
 
34
32
  private
35
33
 
36
- def log_errors(err)
37
- return if err.class.is_a?(CommandServiceObject::Failure)
38
- # Add your logging logic
39
- # ex:
40
- # Rollbar.error(err)
41
- end
42
-
43
34
  def log_command
44
- service_logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(Rails.root.join('log', 'services.log').to_s))
45
- status = result.ok? ? 'success' : 'faild'
35
+ service_logger = ActiveSupport::Logger.new(Rails.root.join('log', 'services.log').to_s)
36
+ service_logger.formatter = proc do |severity, datetime, progname, msg|
37
+ "[#{msg['usecase']}] [#{msg['status']}] [#{datetime.to_s(:db)} ##{Process.pid}] -- #{msg['body']}\n"
38
+ end
39
+ log_body = result.ok? ? success_log : failure_log
46
40
 
47
- service_logger.tagged(service_name, usecase_name, status) do
48
- service_logger.info(
49
- {
41
+ service_logger.info(log_body)
42
+ end
43
+
44
+ def success_log
45
+ {
46
+ usecase: "#{service_name}::#{usecase_name}",
47
+ status: 'success',
48
+ body: {
50
49
  cmd: cmd.as_json,
51
50
  result: result.value!.as_json,
52
51
  benchmark: bm.as_json
53
- }.as_json
54
- )
55
- end
52
+ }
53
+ }.as_json
54
+ end
55
+
56
+ def failure_log
57
+ {
58
+ usecase: "#{service_name}::#{usecase_name}",
59
+ status: 'faild',
60
+ body: {
61
+ cmd: cmd.as_json,
62
+ error: result.error.to_s,
63
+ benchmark: bm.as_json
64
+ }
65
+ }.as_json
56
66
  end
57
67
 
58
68
  def usecase_class
@@ -5,6 +5,7 @@ require 'hutch'
5
5
  class CaseBase
6
6
  include CommandServiceObject::Hooks
7
7
  include CommandServiceObject::FailureHelper
8
+ include CommandServiceObject::CheckHelper
8
9
 
9
10
  attr_reader :cmd, :issuer, :right_name
10
11
  alias_attribute :payload, :cmd
@@ -7,6 +7,10 @@ module <%= service_name.classify %>::Usecases
7
7
  # methods for Business logic.
8
8
  #
9
9
  def call
10
+ # Use check! for business logic validation,
11
+ # If the given block returns false then it will raise a business logic failure with the given message.
12
+ # Ex: check!("user should not have any active cards") { cmd.issuer.active_cards.empty? }
13
+
10
14
  replace_me
11
15
 
12
16
  output
@@ -31,7 +35,7 @@ module <%= service_name.classify %>::Usecases
31
35
  end
32
36
 
33
37
  def broadcast
34
- Hutch.publish('<%= "#{service_name}_#{@usecase.underscore}" %>', subject: {}, action: '<%= "#{@usecase.underscore}" %>')
38
+ Hutch.publish('<%= service_name %>', action: '<%= "#{@usecase.underscore}" %>', subject: {})
35
39
  end
36
40
 
37
41
  private
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: command_service_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adham EL-Deeb
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-09-23 00:00:00.000000000 Z
12
+ date: 2020-10-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -79,14 +79,14 @@ dependencies:
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '13.0'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '10.0'
89
+ version: '13.0'
90
90
  - !ruby/object:Gem::Dependency
91
91
  name: thor
92
92
  requirement: !ruby/object:Gem::Requirement
@@ -162,6 +162,7 @@ files:
162
162
  - lib/command_service_object.rb
163
163
  - lib/command_service_object/configuration.rb
164
164
  - lib/command_service_object/failure.rb
165
+ - lib/command_service_object/helpers/check_helper.rb
165
166
  - lib/command_service_object/helpers/controller_helper.rb
166
167
  - lib/command_service_object/helpers/failure_helper.rb
167
168
  - lib/command_service_object/helpers/model_helper.rb