command_service_object 1.0.0 → 1.1.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: 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