command_service_object 1.4.0 → 1.4.1

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: 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.