command_service_object 0.6.4 → 1.2.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 +4 -4
- data/Gemfile.lock +74 -61
- data/README.md +41 -22
- data/command_service_object.gemspec +2 -1
- data/lib/command_service_object.rb +1 -0
- data/lib/command_service_object/helpers/check_helper.rb +9 -0
- data/lib/command_service_object/version.rb +1 -1
- data/lib/generators/.DS_Store +0 -0
- data/lib/generators/service/command/command_generator.rb +23 -3
- data/lib/generators/service/{test/templates/rspec/command.rb.erb → command/templates/command_spec.rb.erb} +0 -0
- data/lib/generators/service/entity/entity_generator.rb +39 -0
- data/lib/generators/service/entity/templates/entity.rb.erb +9 -0
- data/lib/generators/service/external/external_generator.rb +46 -0
- data/lib/generators/service/external/templates/external.rb.erb +16 -0
- data/lib/generators/service/external/templates/external_spec.rb.erb +12 -0
- data/lib/generators/service/external/templates/external_test.rb.erb +0 -0
- data/lib/generators/service/helper.rb +23 -0
- data/lib/generators/service/install/templates/initializer.rb +5 -0
- data/lib/generators/service/install/templates/services/application_service.rb +57 -16
- data/lib/generators/service/install/templates/services/case_base.rb +4 -0
- data/lib/generators/service/install/templates/services/listener_base.rb +7 -0
- data/lib/generators/service/install/templates/services/query_base.rb +55 -0
- data/lib/generators/service/listener/listener_generator.rb +39 -0
- data/lib/generators/service/listener/templates/listener.rb.erb +11 -0
- data/lib/generators/service/micro/micro_generator.rb +11 -2
- data/lib/generators/service/query/USAGE +8 -0
- data/lib/generators/service/query/query_generator.rb +39 -0
- data/lib/generators/service/query/templates/query.rb.erb +22 -0
- data/lib/generators/service/service_generator.rb +13 -4
- data/lib/generators/service/setup/setup_generator.rb +20 -6
- data/lib/generators/service/setup/templates/doc.md.erb +39 -0
- data/lib/generators/service/usecase/templates/usecase.rb.erb +17 -3
- data/lib/generators/service/{test/templates/rspec/usecase.rb.erb → usecase/templates/usecase_spec.rb.erb} +0 -0
- data/lib/generators/service/usecase/usecase_generator.rb +22 -3
- metadata +40 -15
- data/lib/generators/service/getter/getter_generator.rb +0 -30
- data/lib/generators/service/getter/templates/getter.rb.erb +0 -8
- data/lib/generators/service/policies.rb +0 -5
- data/lib/generators/service/test/USAGE +0 -8
- data/lib/generators/service/test/templates/minitest/usecase.rb.erb +0 -1
- data/lib/generators/service/test/test_generator.rb +0 -72
@@ -4,9 +4,9 @@ require 'rubygems'
|
|
4
4
|
require_relative './setup/setup_generator.rb'
|
5
5
|
require_relative './usecase/usecase_generator.rb'
|
6
6
|
require_relative './command/command_generator.rb'
|
7
|
-
require_relative './test/test_generator.rb'
|
8
7
|
require 'rails/generators'
|
9
8
|
require 'rails/generators/model_helpers'
|
9
|
+
require_relative './helper.rb'
|
10
10
|
|
11
11
|
module Service
|
12
12
|
module Generators
|
@@ -16,6 +16,7 @@ module Service
|
|
16
16
|
# Skiping options
|
17
17
|
class_option :skip_usecase, type: :boolean, default: false, aliases: '-U'
|
18
18
|
class_option :skip_command, type: :boolean, default: false, aliases: '-C'
|
19
|
+
class_option :skip_entity, type: :boolean, default: false, aliases: '-E'
|
19
20
|
class_option :skip_test, type: :boolean, default: false, aliases: '-T'
|
20
21
|
|
21
22
|
def install_if_not
|
@@ -40,10 +41,18 @@ module Service
|
|
40
41
|
invoke Service::Generators::CommandGenerator, [name, usecases]
|
41
42
|
end
|
42
43
|
|
43
|
-
|
44
|
-
return if options.skip_test?
|
44
|
+
private
|
45
45
|
|
46
|
-
|
46
|
+
def service_name
|
47
|
+
Service::Helper.service_name(name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def service_path
|
51
|
+
Service::Helper.service_path(name)
|
52
|
+
end
|
53
|
+
|
54
|
+
def spec_path
|
55
|
+
Service::Helper.spec_path(name)
|
47
56
|
end
|
48
57
|
end
|
49
58
|
end
|
@@ -1,19 +1,33 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
1
3
|
module Service
|
2
4
|
module Generators
|
3
5
|
class SetupGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
7
|
+
|
8
|
+
DIRS = %w(listeners jobs externals queries usecases commands entities usecases/micros)
|
9
|
+
|
4
10
|
def setup
|
5
|
-
|
11
|
+
DIRS.each do |dir|
|
12
|
+
empty_directory("#{service_path}/#{dir}")
|
13
|
+
end
|
6
14
|
|
7
|
-
|
8
|
-
|
9
|
-
empty_directory("app/services/#{service_name}/commands")
|
10
|
-
empty_directory("app/services/#{service_name}/usecases/micros")
|
15
|
+
path = "#{service_path}/doc.md"
|
16
|
+
template 'doc.md.erb', path unless File.exist?(path)
|
11
17
|
end
|
12
18
|
|
13
19
|
private
|
14
20
|
|
15
21
|
def service_name
|
16
|
-
|
22
|
+
Service::Helper.service_name(args.first)
|
23
|
+
end
|
24
|
+
|
25
|
+
def service_path
|
26
|
+
Service::Helper.service_path(args.first)
|
27
|
+
end
|
28
|
+
|
29
|
+
def spec_path
|
30
|
+
Service::Helper.spec_path(args.first)
|
17
31
|
end
|
18
32
|
end
|
19
33
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
## <%= service_name.classify %>
|
2
|
+
The authorization system is responsible for identifying a particular user.
|
3
|
+
|
4
|
+
### Database Tables
|
5
|
+
- users
|
6
|
+
- profiles
|
7
|
+
|
8
|
+
### Entities:
|
9
|
+
###### *Many objects are not fundamentally defined by their attributes, but rather by a thread of continuity and identity.*
|
10
|
+
- User
|
11
|
+
- name: string
|
12
|
+
- email: string
|
13
|
+
- phone: string
|
14
|
+
- Profile:
|
15
|
+
- address: string
|
16
|
+
- foo: boolean
|
17
|
+
- bar: int
|
18
|
+
|
19
|
+
### Usecases (Processes):
|
20
|
+
###### *Use Cases focus on Users, Actions, and Processes.*
|
21
|
+
- **[Login](login-uml-and-full-doc)** - the process for authorization, we write out to the user an authentication key for a month. Only a user with a verified phone and email address can authenticate.
|
22
|
+
- **[Logout](logout-uml-and-full-doc)** - After logging out, the user will need to log in again to access the system.
|
23
|
+
|
24
|
+
### Queries:
|
25
|
+
- FindByEmail(email: string)
|
26
|
+
- FindByName(name: string)
|
27
|
+
|
28
|
+
### Listeners:
|
29
|
+
###### *An event listener that waits for an event outside the service to occur.*
|
30
|
+
- order_status
|
31
|
+
|
32
|
+
### Externals:
|
33
|
+
###### *Wrapper for any external interactions.*
|
34
|
+
- **UserService**
|
35
|
+
- user_info(id: id)
|
36
|
+
- **Stripe** - payment gateway wrapper.
|
37
|
+
- charge(pid, amount, currency)
|
38
|
+
- refund(charge_id)
|
39
|
+
- create_customer(email, phone, name)
|
@@ -7,7 +7,17 @@ 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
|
15
|
+
|
16
|
+
output
|
17
|
+
end
|
18
|
+
|
19
|
+
def output
|
20
|
+
# return entity object
|
11
21
|
end
|
12
22
|
|
13
23
|
# This method will run if call method raise error
|
@@ -24,10 +34,14 @@ module <%= service_name.classify %>::Usecases
|
|
24
34
|
true
|
25
35
|
end
|
26
36
|
|
37
|
+
def broadcast
|
38
|
+
Hutch.publish('<%= service_name %>', action: '<%= "#{@usecase.underscore}" %>', subject: {})
|
39
|
+
end
|
40
|
+
|
27
41
|
private
|
28
42
|
|
29
|
-
|
30
|
-
|
31
|
-
|
43
|
+
def replace_me
|
44
|
+
# [business logic]
|
45
|
+
end
|
32
46
|
end
|
33
47
|
end
|
File without changes
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../setup/setup_generator.rb'
|
2
|
+
require_relative '../helper'
|
2
3
|
|
3
4
|
module Service
|
4
5
|
module Generators
|
@@ -12,15 +13,33 @@ module Service
|
|
12
13
|
|
13
14
|
usecases.each do |u|
|
14
15
|
@usecase = u.classify
|
15
|
-
|
16
|
-
|
16
|
+
create_main(u)
|
17
|
+
create_test(u)
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
21
|
private
|
21
22
|
|
23
|
+
def create_main(m)
|
24
|
+
path = "#{service_path}/usecases/#{m.underscore}.rb"
|
25
|
+
template 'usecase.rb.erb', path unless options.skip_command?
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_test(m)
|
29
|
+
path = "#{spec_path}/usecases/#{m.underscore}_spec.rb"
|
30
|
+
template 'usecase_spec.rb.erb', path
|
31
|
+
end
|
32
|
+
|
22
33
|
def service_name
|
23
|
-
|
34
|
+
Service::Helper.service_name(name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def service_path
|
38
|
+
Service::Helper.service_path(name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def spec_path
|
42
|
+
Service::Helper.spec_path(name)
|
24
43
|
end
|
25
44
|
end
|
26
45
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: command_service_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adham EL-Deeb
|
8
8
|
- Mohamed Diaa
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-10-08 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: '
|
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: '
|
89
|
+
version: '13.0'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: thor
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,6 +121,20 @@ dependencies:
|
|
121
121
|
- - ">="
|
122
122
|
- !ruby/object:Gem::Version
|
123
123
|
version: 1.0.5
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: hutch
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '1.0'
|
131
|
+
type: :runtime
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '1.0'
|
124
138
|
description: command_service_object gem helps you to generate service and command
|
125
139
|
objects using rails generator.
|
126
140
|
email:
|
@@ -148,36 +162,47 @@ files:
|
|
148
162
|
- lib/command_service_object.rb
|
149
163
|
- lib/command_service_object/configuration.rb
|
150
164
|
- lib/command_service_object/failure.rb
|
165
|
+
- lib/command_service_object/helpers/check_helper.rb
|
151
166
|
- lib/command_service_object/helpers/controller_helper.rb
|
152
167
|
- lib/command_service_object/helpers/failure_helper.rb
|
153
168
|
- lib/command_service_object/helpers/model_helper.rb
|
154
169
|
- lib/command_service_object/hooks.rb
|
155
170
|
- lib/command_service_object/railtie.rb
|
156
171
|
- lib/command_service_object/version.rb
|
172
|
+
- lib/generators/.DS_Store
|
157
173
|
- lib/generators/service/USAGE
|
158
174
|
- lib/generators/service/command/USAGE
|
159
175
|
- lib/generators/service/command/command_generator.rb
|
160
176
|
- lib/generators/service/command/templates/command.rb.erb
|
161
|
-
- lib/generators/service/
|
162
|
-
- lib/generators/service/
|
177
|
+
- lib/generators/service/command/templates/command_spec.rb.erb
|
178
|
+
- lib/generators/service/entity/entity_generator.rb
|
179
|
+
- lib/generators/service/entity/templates/entity.rb.erb
|
180
|
+
- lib/generators/service/external/external_generator.rb
|
181
|
+
- lib/generators/service/external/templates/external.rb.erb
|
182
|
+
- lib/generators/service/external/templates/external_spec.rb.erb
|
183
|
+
- lib/generators/service/external/templates/external_test.rb.erb
|
184
|
+
- lib/generators/service/helper.rb
|
163
185
|
- lib/generators/service/install/install_generator.rb
|
164
186
|
- lib/generators/service/install/templates/initializer.rb
|
165
187
|
- lib/generators/service/install/templates/services/application_service.rb
|
166
188
|
- lib/generators/service/install/templates/services/case_base.rb
|
167
189
|
- lib/generators/service/install/templates/services/command_base.rb
|
190
|
+
- lib/generators/service/install/templates/services/listener_base.rb
|
191
|
+
- lib/generators/service/install/templates/services/query_base.rb
|
168
192
|
- lib/generators/service/install/templates/services/service_result.rb
|
193
|
+
- lib/generators/service/listener/listener_generator.rb
|
194
|
+
- lib/generators/service/listener/templates/listener.rb.erb
|
169
195
|
- lib/generators/service/micro/micro_generator.rb
|
170
196
|
- lib/generators/service/micro/templates/micro.rb.erb
|
171
|
-
- lib/generators/service/
|
197
|
+
- lib/generators/service/query/USAGE
|
198
|
+
- lib/generators/service/query/query_generator.rb
|
199
|
+
- lib/generators/service/query/templates/query.rb.erb
|
172
200
|
- lib/generators/service/service_generator.rb
|
173
201
|
- lib/generators/service/setup/setup_generator.rb
|
174
|
-
- lib/generators/service/
|
175
|
-
- lib/generators/service/test/templates/minitest/usecase.rb.erb
|
176
|
-
- lib/generators/service/test/templates/rspec/command.rb.erb
|
177
|
-
- lib/generators/service/test/templates/rspec/usecase.rb.erb
|
178
|
-
- lib/generators/service/test/test_generator.rb
|
202
|
+
- lib/generators/service/setup/templates/doc.md.erb
|
179
203
|
- lib/generators/service/usecase/USAGE
|
180
204
|
- lib/generators/service/usecase/templates/usecase.rb.erb
|
205
|
+
- lib/generators/service/usecase/templates/usecase_spec.rb.erb
|
181
206
|
- lib/generators/service/usecase/usecase_generator.rb
|
182
207
|
homepage: https://github.com/adham90/command_service_object
|
183
208
|
licenses:
|
@@ -202,8 +227,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
227
|
- !ruby/object:Gem::Version
|
203
228
|
version: '0'
|
204
229
|
requirements: []
|
205
|
-
rubygems_version: 3.
|
206
|
-
signing_key:
|
230
|
+
rubygems_version: 3.1.2
|
231
|
+
signing_key:
|
207
232
|
specification_version: 4
|
208
233
|
summary: Rails Generator for command service object.
|
209
234
|
test_files: []
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require_relative '../setup/setup_generator.rb'
|
2
|
-
|
3
|
-
module Service
|
4
|
-
module Generators
|
5
|
-
class GetterGenerator < Rails::Generators::NamedBase
|
6
|
-
source_root File.expand_path('templates', __dir__)
|
7
|
-
|
8
|
-
argument :getters, type: :array, default: [], banner: 'getter getter'
|
9
|
-
|
10
|
-
def setup
|
11
|
-
invoke Service::Generators::SetupGenerator, [name]
|
12
|
-
end
|
13
|
-
|
14
|
-
def create_getters
|
15
|
-
getters.each do |g|
|
16
|
-
@getter = g.classify
|
17
|
-
|
18
|
-
path = "app/services/#{service_name}/usecases/getters/#{g.underscore}.rb"
|
19
|
-
template 'getter.rb.erb', path
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def service_name
|
26
|
-
"#{name.underscore}_service"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require_relative '../setup/setup_generator.rb'
|
2
|
-
|
3
|
-
module Service
|
4
|
-
module Generators
|
5
|
-
class TestGenerator < Rails::Generators::NamedBase
|
6
|
-
source_root File.expand_path('templates', __dir__)
|
7
|
-
argument :tests, type: :array, default: [], banner: 'usecase usecase'
|
8
|
-
|
9
|
-
def generate_test
|
10
|
-
return if options.skip_test?
|
11
|
-
|
12
|
-
if defined?(Minitest)
|
13
|
-
minitest_test
|
14
|
-
elsif defined?(RSpec)
|
15
|
-
rspec_test
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def minitest_test
|
22
|
-
dir = create_test_dir('test')
|
23
|
-
|
24
|
-
tests.each do |t|
|
25
|
-
@test = t.classify
|
26
|
-
path = "#{dir}/usecases/#{t.underscore}_test.rb"
|
27
|
-
template 'minitest/usecase.rb.erb', path
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def rspec_test
|
32
|
-
dir = create_test_dir('spec')
|
33
|
-
create_usecase_test(dir)
|
34
|
-
create_command_test(dir)
|
35
|
-
end
|
36
|
-
|
37
|
-
def create_usecase_test(dir)
|
38
|
-
tests.each do |t|
|
39
|
-
@test = t.classify
|
40
|
-
path = "#{dir}/usecases/#{t.underscore}_spec.rb"
|
41
|
-
template 'rspec/usecase.rb.erb', path
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def create_command_test(dir)
|
46
|
-
tests.each do |t|
|
47
|
-
@test = t.classify
|
48
|
-
path = "#{dir}/commands/#{t.underscore}_spec.rb"
|
49
|
-
template 'rspec/command.rb.erb', path
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def create_test_dir(path)
|
54
|
-
test_path = "#{path}/services"
|
55
|
-
service_test = "#{test_path}/#{service_name}"
|
56
|
-
usecases_path = "#{test_path}/#{service_name}/usecases"
|
57
|
-
commands_path = "#{test_path}/#{service_name}/commands"
|
58
|
-
|
59
|
-
empty_directory(test_path) unless File.exist?(test_path)
|
60
|
-
empty_directory(service_test) unless File.exist?(service_test)
|
61
|
-
empty_directory(usecases_path) unless File.exist?(usecases_path)
|
62
|
-
empty_directory(commands_path) unless File.exist?(commands_path)
|
63
|
-
|
64
|
-
service_test
|
65
|
-
end
|
66
|
-
|
67
|
-
def service_name
|
68
|
-
"#{name.underscore}_service"
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|