command_service_object 0.6.5 → 1.3.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 +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 +3 -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/install/templates/services/value_object_base.rb +4 -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 +12 -13
- 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
- data/lib/generators/service/value_object/templates/value_object.rb.erb +17 -0
- data/lib/generators/service/value_object/value_object_generator.rb +40 -0
- metadata +43 -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,20 +4,15 @@ 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
|
13
13
|
class ServiceGenerator < Rails::Generators::NamedBase
|
14
14
|
argument :usecases, type: :array, default: [], banner: 'usecase usecase'
|
15
15
|
|
16
|
-
# Skiping options
|
17
|
-
class_option :skip_usecase, type: :boolean, default: false, aliases: '-U'
|
18
|
-
class_option :skip_command, type: :boolean, default: false, aliases: '-C'
|
19
|
-
class_option :skip_test, type: :boolean, default: false, aliases: '-T'
|
20
|
-
|
21
16
|
def install_if_not
|
22
17
|
return if File.exist?('app/services')
|
23
18
|
|
@@ -29,21 +24,25 @@ module Service
|
|
29
24
|
end
|
30
25
|
|
31
26
|
def generate_usecases
|
32
|
-
return if options.skip_usecase?
|
33
|
-
|
34
27
|
invoke Service::Generators::UsecaseGenerator, [name, usecases]
|
35
28
|
end
|
36
29
|
|
37
30
|
def generate_commands
|
38
|
-
return if options.skip_command?
|
39
|
-
|
40
31
|
invoke Service::Generators::CommandGenerator, [name, usecases]
|
41
32
|
end
|
42
33
|
|
43
|
-
|
44
|
-
|
34
|
+
private
|
35
|
+
|
36
|
+
def service_name
|
37
|
+
Service::Helper.service_name(name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def service_path
|
41
|
+
Service::Helper.service_path(name)
|
42
|
+
end
|
45
43
|
|
46
|
-
|
44
|
+
def spec_path
|
45
|
+
Service::Helper.spec_path(name)
|
47
46
|
end
|
48
47
|
end
|
49
48
|
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
|
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
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module <%= service_name.classify %>::ValueObjects
|
4
|
+
class <%= @value_object %> < ValueObjectBase
|
5
|
+
# You can read Virtus gem doc for more info.
|
6
|
+
# https://github.com/solnic/virtus
|
7
|
+
|
8
|
+
# Attributes
|
9
|
+
# values do
|
10
|
+
# attribute :latitude, Float
|
11
|
+
# attribute :longitude, Float
|
12
|
+
# end
|
13
|
+
|
14
|
+
# Validations
|
15
|
+
# validates :REPLACE_ME, presence: true
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../setup/setup_generator.rb'
|
2
|
+
require_relative '../helper'
|
3
|
+
|
4
|
+
module Service
|
5
|
+
module Generators
|
6
|
+
class ValueObjectGenerator < Rails::Generators::NamedBase
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
8
|
+
|
9
|
+
argument :value_objects, type: :array, default: [], banner: 'value_object value_object'
|
10
|
+
|
11
|
+
def call
|
12
|
+
invoke Service::Generators::SetupGenerator, [name]
|
13
|
+
|
14
|
+
value_objects.each do |u|
|
15
|
+
@value_object = u.classify
|
16
|
+
create_main(u)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def create_main(m)
|
23
|
+
path = "#{service_path}/value_objects/#{m.underscore}.rb"
|
24
|
+
template 'value_object.rb.erb', path
|
25
|
+
end
|
26
|
+
|
27
|
+
def service_name
|
28
|
+
Service::Helper.service_name(name)
|
29
|
+
end
|
30
|
+
|
31
|
+
def service_path
|
32
|
+
Service::Helper.service_path(name)
|
33
|
+
end
|
34
|
+
|
35
|
+
def spec_path
|
36
|
+
Service::Helper.spec_path(name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
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.3.0
|
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,37 +162,51 @@ 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/install/templates/services/value_object_base.rb
|
194
|
+
- lib/generators/service/listener/listener_generator.rb
|
195
|
+
- lib/generators/service/listener/templates/listener.rb.erb
|
169
196
|
- lib/generators/service/micro/micro_generator.rb
|
170
197
|
- lib/generators/service/micro/templates/micro.rb.erb
|
171
|
-
- lib/generators/service/
|
198
|
+
- lib/generators/service/query/USAGE
|
199
|
+
- lib/generators/service/query/query_generator.rb
|
200
|
+
- lib/generators/service/query/templates/query.rb.erb
|
172
201
|
- lib/generators/service/service_generator.rb
|
173
202
|
- 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
|
203
|
+
- lib/generators/service/setup/templates/doc.md.erb
|
179
204
|
- lib/generators/service/usecase/USAGE
|
180
205
|
- lib/generators/service/usecase/templates/usecase.rb.erb
|
206
|
+
- lib/generators/service/usecase/templates/usecase_spec.rb.erb
|
181
207
|
- lib/generators/service/usecase/usecase_generator.rb
|
208
|
+
- lib/generators/service/value_object/templates/value_object.rb.erb
|
209
|
+
- lib/generators/service/value_object/value_object_generator.rb
|
182
210
|
homepage: https://github.com/adham90/command_service_object
|
183
211
|
licenses:
|
184
212
|
- MIT
|
@@ -202,8 +230,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
230
|
- !ruby/object:Gem::Version
|
203
231
|
version: '0'
|
204
232
|
requirements: []
|
205
|
-
rubygems_version: 3.
|
206
|
-
signing_key:
|
233
|
+
rubygems_version: 3.1.2
|
234
|
+
signing_key:
|
207
235
|
specification_version: 4
|
208
236
|
summary: Rails Generator for command service object.
|
209
237
|
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
|