command_service_object 0.6.5 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +74 -61
  3. data/README.md +41 -22
  4. data/command_service_object.gemspec +2 -1
  5. data/lib/command_service_object.rb +1 -0
  6. data/lib/command_service_object/helpers/check_helper.rb +9 -0
  7. data/lib/command_service_object/version.rb +1 -1
  8. data/lib/generators/.DS_Store +0 -0
  9. data/lib/generators/service/command/command_generator.rb +23 -3
  10. data/lib/generators/service/{test/templates/rspec/command.rb.erb → command/templates/command_spec.rb.erb} +0 -0
  11. data/lib/generators/service/entity/entity_generator.rb +39 -0
  12. data/lib/generators/service/entity/templates/entity.rb.erb +9 -0
  13. data/lib/generators/service/external/external_generator.rb +46 -0
  14. data/lib/generators/service/external/templates/external.rb.erb +16 -0
  15. data/lib/generators/service/external/templates/external_spec.rb.erb +12 -0
  16. data/lib/generators/service/external/templates/external_test.rb.erb +0 -0
  17. data/lib/generators/service/helper.rb +23 -0
  18. data/lib/generators/service/install/templates/initializer.rb +5 -0
  19. data/lib/generators/service/install/templates/services/application_service.rb +57 -16
  20. data/lib/generators/service/install/templates/services/case_base.rb +3 -0
  21. data/lib/generators/service/install/templates/services/listener_base.rb +7 -0
  22. data/lib/generators/service/install/templates/services/query_base.rb +55 -0
  23. data/lib/generators/service/install/templates/services/value_object_base.rb +4 -0
  24. data/lib/generators/service/listener/listener_generator.rb +39 -0
  25. data/lib/generators/service/listener/templates/listener.rb.erb +11 -0
  26. data/lib/generators/service/micro/micro_generator.rb +11 -2
  27. data/lib/generators/service/query/USAGE +8 -0
  28. data/lib/generators/service/query/query_generator.rb +39 -0
  29. data/lib/generators/service/query/templates/query.rb.erb +22 -0
  30. data/lib/generators/service/service_generator.rb +12 -13
  31. data/lib/generators/service/setup/setup_generator.rb +20 -6
  32. data/lib/generators/service/setup/templates/doc.md.erb +39 -0
  33. data/lib/generators/service/usecase/templates/usecase.rb.erb +17 -3
  34. data/lib/generators/service/{test/templates/rspec/usecase.rb.erb → usecase/templates/usecase_spec.rb.erb} +0 -0
  35. data/lib/generators/service/usecase/usecase_generator.rb +22 -3
  36. data/lib/generators/service/value_object/templates/value_object.rb.erb +17 -0
  37. data/lib/generators/service/value_object/value_object_generator.rb +40 -0
  38. metadata +43 -15
  39. data/lib/generators/service/getter/getter_generator.rb +0 -30
  40. data/lib/generators/service/getter/templates/getter.rb.erb +0 -8
  41. data/lib/generators/service/policies.rb +0 -5
  42. data/lib/generators/service/test/USAGE +0 -8
  43. data/lib/generators/service/test/templates/minitest/usecase.rb.erb +0 -1
  44. 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
- def generate_tests
44
- return if options.skip_test?
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
- invoke Service::Generators::TestGenerator, [name, usecases]
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
- return if File.exist?("app/services/#{service_name}")
11
+ DIRS.each do |dir|
12
+ empty_directory("#{service_path}/#{dir}")
13
+ end
6
14
 
7
- empty_directory("app/services/#{service_name}")
8
- empty_directory("app/services/#{service_name}/usecases")
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
- "#{args.first.underscore}_service"
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
- def replace_me
30
- # [business logic]
31
- end
43
+ def replace_me
44
+ # [business logic]
45
+ end
32
46
  end
33
47
  end
@@ -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
- path = "app/services/#{service_name}/usecases/#{u.underscore}.rb"
16
- template 'usecase.rb.erb', path
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
- "#{name.underscore}_service"
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: 0.6.5
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: 2019-11-06 00:00:00.000000000 Z
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: '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
@@ -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/getter/getter_generator.rb
162
- - lib/generators/service/getter/templates/getter.rb.erb
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/policies.rb
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/test/USAGE
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.0.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
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module <%= service_name.classify %>::Usecases::Getters
4
- class <%= @getter %>
5
- def call(*args)
6
- end
7
- end
8
- end
@@ -1,5 +0,0 @@
1
- class
2
- def initialize(*args)
3
-
4
- end
5
- end