command_service_object 1.4.0 → 1.4.1

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: 36d2b1f785b76803f0333bb3747c5e0fe01f6670573afb93305df3136f00ab46
4
- data.tar.gz: e37a9faf02baef49903868a63a0fe5912f8a6e3b01272ccdd90d51d3826b2ec7
3
+ metadata.gz: e58280d4d7d95c07974d99a7a0b9fdee2ba1b0dff5e3c757c82082a0be4d0384
4
+ data.tar.gz: 71d0e82c16cca76ed43149651c638cba4952ac4aa8265fd989f469c9920bee35
5
5
  SHA512:
6
- metadata.gz: 0ea1e2f5b1ea28fdf19f63a6f3ed068d7f6eeb193c0dd3e815af26181740462aae1310ae3d472a161ebf737c02980e9b255c68d323bb08e56c28df797610fb2e
7
- data.tar.gz: 8188249f9cfcff0deb07d00bc46da92b7afa5fbc6f2108927f2573fd0a9fda7f67d9988f75757a84a47150d22306dab2fd673642b70123c83c8a6914669621f2
6
+ metadata.gz: d97e57b73f54c8d9b759f8917693d8b96cc22aec18f93d6f19f4e05cc0e5d8145d56ae180a6381ec3343c87ea6e14ad0d1d131e1277c3188a107ef6025113b5a
7
+ data.tar.gz: 5c2aff6a34ea6fdc6e42670afaba56096189fc968e2a8f2a20a131a98039792d4751480ba704d5bb3b15b00e209e7ee203616fe9abc4c912a7f77efd06a450e6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- command_service_object (1.1.0)
4
+ command_service_object (1.4.1)
5
5
  hutch (~> 1.0)
6
6
  virtus (~> 1.0, >= 1.0.5)
7
7
 
@@ -79,7 +79,7 @@ GEM
79
79
  i18n (1.8.5)
80
80
  concurrent-ruby (~> 1.0)
81
81
  ice_nine (0.11.2)
82
- json (2.3.1)
82
+ json (2.5.1)
83
83
  loofah (2.7.0)
84
84
  crass (~> 1.0.2)
85
85
  nokogiri (>= 1.5.9)
@@ -1,3 +1,3 @@
1
1
  module CommandServiceObject
2
- VERSION = '1.4.0'.freeze
2
+ VERSION = '1.4.1'.freeze
3
3
  end
@@ -2,12 +2,12 @@
2
2
 
3
3
  require 'rails_helper'
4
4
 
5
- describe <%= service_name.classify %>::Commands::<%= @test %>, type: :model do
5
+ describe <%= service_name.classify %>::Commands::<%= @command %>, type: :model do
6
6
  describe 'attrubites' do
7
- it { expect(subject).to respond_to(:EX) }
7
+ <%# it { expect(subject).to respond_to(:EX) } %>
8
8
  end
9
9
 
10
10
  describe 'validatios' do
11
- it { should validate_presence_of(:EX) }
11
+ <%# it { should validate_presence_of(:EX) } %>
12
12
  end
13
13
  end
@@ -4,7 +4,7 @@ require 'rails_helper'
4
4
 
5
5
  describe <%= service_name.classify %>::Externals::<%= @external %> do
6
6
  # Example
7
- # context "when success" do
7
+ # context 'when success' do
8
8
  # it 'should be okay?' do
9
9
  # expect(subject.[method_name]).to eql([result])
10
10
  # end
@@ -7,33 +7,37 @@ class ApplicationService
7
7
  def call(cmd)
8
8
  @cmd = cmd
9
9
  @bm = Benchmark.measure do
10
- raise Errors::InvalidCommand, cmd.class if cmd.invalid?
10
+ raise Errors::InvalidCommand if cmd.invalid?
11
11
 
12
12
  @usecase = usecase_class.new(cmd)
13
- raise Errors::NotAuthorizedError, cmd.class unless usecase.allowed?
13
+
14
+ raise Errors::NotAuthorizedError unless usecase.allowed?
14
15
 
15
16
  @result = ServiceResult.new { usecase.call }
16
17
 
17
18
  rollback if result.error.present?
19
+ usecase.broadcast if result.ok?
18
20
  end
19
21
 
20
22
  log_command
21
23
  result
22
24
  rescue StandardError => e
23
- ServiceResult.new { raise e }
25
+ ServiceResult.new { raise e }
24
26
  end
25
27
 
26
28
  def rollback
27
29
  usecase.rollback_micros
28
30
  usecase.rollback
29
- log_errors(result.error)
30
31
  end
31
32
 
32
33
  private
33
34
 
34
35
  def log_command
35
- service_logger = ActiveSupport::Logger.new(Rails.root.join('log', 'services.log').to_s)
36
- service_logger.formatter = proc do |severity, datetime, progname, msg|
36
+ FileUtils.mkdir_p 'log/services'
37
+ service_logger = ActiveSupport::Logger.new(
38
+ Rails.root.join('log', 'services', "#{service_name.underscore}.log").to_s, 'daily'
39
+ )
40
+ service_logger.formatter = proc do |_severity, datetime, _progname, msg|
37
41
  "[#{msg['usecase']}] [#{msg['status']}] [#{datetime.to_s(:db)} ##{Process.pid}] -- #{msg['body']}\n"
38
42
  end
39
43
  log_body = result.ok? ? success_log : failure_log
@@ -46,10 +50,10 @@ class ApplicationService
46
50
  usecase: "#{service_name}::#{usecase_name}",
47
51
  status: 'success',
48
52
  body: {
49
- cmd: cmd.as_json,
50
- result: result.value!.as_json,
51
- benchmark: bm.as_json
52
- }
53
+ cmd: cmd.as_json,
54
+ result: result.value!.as_json,
55
+ benchmark: bm.as_json
56
+ }
53
57
  }.as_json
54
58
  end
55
59
 
@@ -78,3 +82,13 @@ class ApplicationService
78
82
  end
79
83
  end
80
84
  end
85
+
86
+ module Errors
87
+ class NotAuthorizedError < StandardError
88
+ def initialize(msg: 'not allowd')
89
+ super(msg)
90
+ end
91
+ end
92
+
93
+ class InvalidCommand < StandardError; end
94
+ end
@@ -2,10 +2,10 @@
2
2
 
3
3
  class CommandBase
4
4
  include ActiveModel::Validations
5
- include Virtus.model(nullify_blank: true)
5
+ include Virtus.model
6
6
 
7
7
  # if you need to enable policies add issuer attribute
8
- attribute :issuer, Object, default: :default_issuer
8
+ attribute :issuer, Issuer, default: :default_issuer
9
9
 
10
10
  private
11
11
 
@@ -0,0 +1,10 @@
1
+ class Issuer
2
+ include ActiveModel::Validations
3
+ include Virtus.model
4
+
5
+ attribute :id, String
6
+ attribute :type, String
7
+ attribute :scope, Array[String], default: []
8
+
9
+ validates :id, :type, presence: true
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'json'
2
+
3
+ class Util::Json < Virtus::Attribute
4
+ def coerce(value)
5
+ value.is_a?(::Hash) ? value : JSON.parse(value)
6
+ end
7
+ end
@@ -2,12 +2,12 @@
2
2
 
3
3
  require 'rails_helper'
4
4
 
5
- describe <%= service_name.classify %>::Usecases::<%= @test %> do
6
- let(:cmd) { <%= service_name.classify %>::Commands::<%= @test %>.new(cmd_params) }
5
+ describe <%= service_name.classify %>::Usecases::<%= @usecase %> do
6
+ let(:cmd) { <%= service_name.classify %>::Commands::<%= @usecase %>.new(cmd_params) }
7
7
  let(:cmd_default_params) {{ name: 'test_name' }}
8
8
 
9
- context "when success" do
10
- let(:cmd_params) { cmd_default_params.merge!({ name: 'valid_name' }) }
9
+ context 'when success' do
10
+ let(:cmd_params) { cmd_default_params }
11
11
  let!(:result) { ApplicationService.call(cmd) }
12
12
 
13
13
  it 'should be okay?' do
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.4.0
4
+ version: 1.4.1
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-10-24 00:00:00.000000000 Z
12
+ date: 2021-01-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -187,9 +187,11 @@ files:
187
187
  - lib/generators/service/install/templates/services/application_service.rb
188
188
  - lib/generators/service/install/templates/services/case_base.rb
189
189
  - lib/generators/service/install/templates/services/command_base.rb
190
+ - lib/generators/service/install/templates/services/issuer.rb
190
191
  - lib/generators/service/install/templates/services/listener_base.rb
191
192
  - lib/generators/service/install/templates/services/query_base.rb
192
193
  - lib/generators/service/install/templates/services/service_result.rb
194
+ - lib/generators/service/install/templates/services/util/json.rb
193
195
  - lib/generators/service/install/templates/services/value_object_base.rb
194
196
  - lib/generators/service/listener/listener_generator.rb
195
197
  - lib/generators/service/listener/templates/listener.rb.erb
@@ -230,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
232
  - !ruby/object:Gem::Version
231
233
  version: '0'
232
234
  requirements: []
233
- rubygems_version: 3.1.2
235
+ rubygems_version: 3.1.4
234
236
  signing_key:
235
237
  specification_version: 4
236
238
  summary: Rails Generator for command service object.