rails_services 1.1.3 → 2.0.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/README.md +36 -4
- data/lib/generators/rails_services/USAGE +16 -5
- data/lib/generators/rails_services/create_generator.rb +11 -1
- data/lib/generators/rails_services/templates/base_service.rb.erb +9 -10
- data/lib/generators/rails_services/templates/base_service_new.rb.erb +23 -0
- data/lib/generators/rails_services/templates/base_service_old.rb.erb +21 -0
- data/lib/rails_services/version.rb +1 -1
- data/test/lib/generators/rails_services/create_generator_test.rb +8 -2
- data/test/test_helper.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ed6fbb385562ade48621df44d26cc9a792f2e8a
|
4
|
+
data.tar.gz: 8584883d0e3aedc95d8c824b340d0e020d671831
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c926ddb834d4b593e5f4a1871bc614c202b9663cd07bee5ed6979348936c7f036ff3a38f3c76281c7eb9adaafbe8cfa9d020f9dce77176bc79600d11bd9171a8
|
7
|
+
data.tar.gz: e20de587c99ca41564f44d7dd6a1ae7d6485c31e7f4355729915341eae1bc0dd9336ee56478018c85a022f66e5163c23059e457c568bdd1f2592944c34932e88
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ A very (VERY) simple gem for Rails that adds a generator for easily creating a s
|
|
8
8
|
|
9
9
|
## Requirements
|
10
10
|
|
11
|
-
Rails 4
|
11
|
+
Rails 4 and higher
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
@@ -28,11 +28,43 @@ Or install it yourself as:
|
|
28
28
|
|
29
29
|
Examples:
|
30
30
|
|
31
|
-
$ rails generate rails_services:create Service Model|Controller Sub-folder [opt]
|
31
|
+
$ rails generate rails_services:create Service Model|Controller Sub-folder [opt] --instance [yes (default), no]
|
32
32
|
|
33
|
-
$ rails generate rails_services:destroy Service Model|Controller Sub-folder [opt]
|
33
|
+
$ rails generate rails_services:destroy Service Model|Controller Sub-folder [opt] --instance [yes (default), no]
|
34
34
|
|
35
|
-
Sub-folders
|
35
|
+
### Sub-folders
|
36
|
+
Sub-folders are optional but, at this time, you may only use one sub-folder. I generally use the sub-folders when I have a naturally grouped set of services.
|
37
|
+
|
38
|
+
### Instance Argument
|
39
|
+
The instance argument was added in version 2.0.0. It is also optional but does default to `yes` if omitted. In previous iterations of this gem
|
40
|
+
as well as in my early use of service layers, I did not instantiate my service classes; rather, I created adn accessed them at the class level,
|
41
|
+
calling class methods (i.e., those defined with `self.`).
|
42
|
+
|
43
|
+
I was never satisfied with this and, sometime in the last few months, I read a now-lost blog post on utilizing a `BaseService` class and
|
44
|
+
instantiating your actual service. I prefer this new approach, for lack of a better word, and have decided to add it to this gem, as the
|
45
|
+
default style used going forward (starting with 2.0.0).
|
46
|
+
|
47
|
+
## Upgrading
|
48
|
+
The primary change in version 2 is that old services, those that do not include the `BaseService` class, called
|
49
|
+
and accessed methods that were all defined with `self.`. You do not have to choose one style over another; in fact,
|
50
|
+
you can mix and match the styles, if you wish.
|
51
|
+
|
52
|
+
**Converting Old Service Classes** - Should you want to update your older/previously built services with this approach, you only need to do
|
53
|
+
the following:
|
54
|
+
|
55
|
+
# include the base service in your class
|
56
|
+
class ClassName
|
57
|
+
include BaseService
|
58
|
+
|
59
|
+
# Then ... change the method signatures, simply removing "self." from the definition
|
60
|
+
def self.call
|
61
|
+
# ...
|
62
|
+
end
|
63
|
+
# becomes
|
64
|
+
def call
|
65
|
+
# ...
|
66
|
+
end
|
67
|
+
# and so on for other, similarly defined methods
|
36
68
|
|
37
69
|
## Result
|
38
70
|
|
@@ -1,16 +1,27 @@
|
|
1
1
|
Description:
|
2
|
-
Creates a service class and accompanying spec file
|
3
|
-
Destroys a service class and accompanying spec file
|
2
|
+
Creates a service class and accompanying spec/test unit file
|
3
|
+
Destroys a service class and accompanying spec/test unit file
|
4
4
|
|
5
5
|
Example:
|
6
|
-
rails generate rails_services:destroy Thing Model|Controller Sub-folder [opt]
|
6
|
+
rails generate rails_services:destroy Thing Model|Controller Sub-folder [opt] --instance [yes (default), no]
|
7
7
|
|
8
8
|
This will remove:
|
9
9
|
app/services/model|controller/[sub-folder]/thing.rb
|
10
|
+
# either
|
10
11
|
spec/services/model|controller/[sub-folder]/thing_spec.rb
|
12
|
+
# or
|
13
|
+
test/services/model|controller/[sub-folder]/thing_test.rb
|
11
14
|
|
12
|
-
rails generate rails_services:create Thing Model|Controller Sub-folder [opt]
|
15
|
+
rails generate rails_services:create Thing Model|Controller Sub-folder [opt] --instance [yes (default), no]
|
13
16
|
|
14
17
|
This will add:
|
15
18
|
app/services/model|controller/[sub-folder]/thing.rb
|
16
|
-
|
19
|
+
# either
|
20
|
+
spec/services/model|controller/[sub-folder]/thing_spec.rb
|
21
|
+
# or
|
22
|
+
test/services/model|controller/[sub-folder]/thing_test.rb
|
23
|
+
|
24
|
+
The new `instance` argument:
|
25
|
+
Over the last year, I have slightly altered how I structure my service classes. I've taken to using a `BaseService`
|
26
|
+
class that is included in all services. This allows me to inherently instantiate each service (versus the old style of
|
27
|
+
creating service class, which was "class-driven", if you will).
|
@@ -5,13 +5,23 @@ module RailsServices
|
|
5
5
|
argument :service_name, type: :string
|
6
6
|
argument :parent_name, type: :string
|
7
7
|
argument :sub_folder, type: :string, default: ''
|
8
|
+
argument :instance, type: :string, default: 'yes'
|
8
9
|
|
9
10
|
def create_service
|
10
|
-
|
11
|
+
if instance == 'yes'
|
12
|
+
copy_base_service_class
|
13
|
+
template 'base_service_new.rb.erb', "app/services/#{service_directory}/#{service_file}"
|
14
|
+
else
|
15
|
+
template 'base_service_old.rb.erb', "app/services/#{service_directory}/#{service_file}"
|
16
|
+
end
|
11
17
|
create_test
|
12
18
|
end
|
13
19
|
|
14
20
|
private
|
21
|
+
def copy_base_service_class
|
22
|
+
template('base_service.rb.erb', 'app/services/base_service.rb') unless File.exist?('app/services/base_service.rb')
|
23
|
+
end
|
24
|
+
|
15
25
|
def create_test
|
16
26
|
if File.exists?('spec/spec_helper.rb')
|
17
27
|
template 'base_service_spec.rb.erb', "spec/services/#{service_directory}/#{spec_file}"
|
@@ -1,13 +1,12 @@
|
|
1
|
-
<%=
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<%= '
|
1
|
+
<%= 'module BaseService' %>
|
2
|
+
<%= 'def self.included(base)' %>
|
3
|
+
<%= 'base.extend ClassMethods' %>
|
4
|
+
<%= 'end' %>
|
5
|
+
|
6
|
+
<%= 'module ClassMethods' %>
|
7
|
+
<%= 'def call(*args, &block)' %>
|
8
|
+
<%= '@instance ||= self.new' %>
|
9
|
+
<%= '@instance.call *args, &block' %>
|
9
10
|
<%= 'end' %>
|
10
|
-
<% if subfolder_name.present? %>
|
11
11
|
<%= 'end' %>
|
12
|
-
<% end %>
|
13
12
|
<%= 'end' %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= "module #{module_name}" %>
|
2
|
+
<% if subfolder_name.present? %>
|
3
|
+
<%= "module #{subfolder_name}" %>
|
4
|
+
<% end %>
|
5
|
+
<% if subfolder_name.present? %>
|
6
|
+
<%= "class #{class_name}" %>
|
7
|
+
<%= 'include BaseService' %>
|
8
|
+
<%= "# SAMPLE USAGE: #{qualified_name}.(*args)" %>
|
9
|
+
<%= 'def call' %>
|
10
|
+
<%= 'end' %>
|
11
|
+
<%= 'end' %>
|
12
|
+
<% else %>
|
13
|
+
<%= "class #{class_name}" %>
|
14
|
+
<%= 'include BaseService' %>
|
15
|
+
<%= "# SAMPLE USAGE: #{qualified_name}.(*args)" %>
|
16
|
+
<%= 'def call' %>
|
17
|
+
<%= 'end' %>
|
18
|
+
<%= 'end' %>
|
19
|
+
<% end %>
|
20
|
+
<% if subfolder_name.present? %>
|
21
|
+
<%= 'end' %>
|
22
|
+
<% end %>
|
23
|
+
<%= 'end' %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<%= "module #{module_name}" %>
|
2
|
+
<% if subfolder_name.present? %>
|
3
|
+
<%= "module #{subfolder_name}" %>
|
4
|
+
<% end %>
|
5
|
+
<% if subfolder_name.present? %>
|
6
|
+
<%= "class #{class_name}" %>
|
7
|
+
<%= "# SAMPLE USAGE: #{qualified_name}.call(*args)" %>
|
8
|
+
<%= 'def self.call' %>
|
9
|
+
<%= 'end' %>
|
10
|
+
<%= 'end' %>
|
11
|
+
<% else %>
|
12
|
+
<%= "class #{class_name}" %>
|
13
|
+
<%= "# SAMPLE USAGE: #{qualified_name}.call(*args)" %>
|
14
|
+
<%= 'def self.call' %>
|
15
|
+
<%= 'end' %>
|
16
|
+
<%= 'end' %>
|
17
|
+
<% end %>
|
18
|
+
<% if subfolder_name.present? %>
|
19
|
+
<%= 'end' %>
|
20
|
+
<% end %>
|
21
|
+
<%= 'end' %>
|
@@ -7,11 +7,17 @@ class CreateGeneratorTest < Rails::Generators::TestCase
|
|
7
7
|
|
8
8
|
setup do
|
9
9
|
prepare_destination
|
10
|
-
run_generator(%w(TestService ParentModel SubFolder))
|
11
10
|
end
|
12
11
|
|
13
|
-
test 'generates
|
12
|
+
test 'generates an old style service class' do
|
13
|
+
run_generator(%w(TestService ParentModel SubFolder --style old))
|
14
14
|
assert_file 'app/services/parent_models/sub_folder/test_service.rb'
|
15
15
|
end
|
16
16
|
|
17
|
+
test 'generates a new style service class' do
|
18
|
+
run_generator(%w(TestBaseService ParentModel SubFolder --style new))
|
19
|
+
assert_file 'app/services/base_service.rb'
|
20
|
+
assert_file 'app/services/parent_models/sub_folder/test_base_service.rb'
|
21
|
+
end
|
22
|
+
|
17
23
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_services
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Kaminsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -81,6 +81,8 @@ files:
|
|
81
81
|
- lib/generators/rails_services/create_generator.rb
|
82
82
|
- lib/generators/rails_services/destroy_generator.rb
|
83
83
|
- lib/generators/rails_services/templates/base_service.rb.erb
|
84
|
+
- lib/generators/rails_services/templates/base_service_new.rb.erb
|
85
|
+
- lib/generators/rails_services/templates/base_service_old.rb.erb
|
84
86
|
- lib/generators/rails_services/templates/base_service_spec.rb.erb
|
85
87
|
- lib/generators/rails_services/templates/base_service_unit_test.rb.erb
|
86
88
|
- lib/rails_services.rb
|