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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3fe343adaad795fb7f453ab2c090689efb39f80
4
- data.tar.gz: b22a7f31227a1ed96b763ce420e315d7d1f6e5ca
3
+ metadata.gz: 9ed6fbb385562ade48621df44d26cc9a792f2e8a
4
+ data.tar.gz: 8584883d0e3aedc95d8c824b340d0e020d671831
5
5
  SHA512:
6
- metadata.gz: 10364abcef2b2def89dd724f7bbf6b687b2e6f14556ed28ec97fa489293b3a0962cc9d3366d5eeccfff75046ed14713bc3a7cfbed424b1cc3fae4ff8c526e169
7
- data.tar.gz: 51d82ba5ab02a6257ed228a0bdd016e7f686fc9203960fec2dc52957993eb406c4990971f9012ee918e928e96d605db6c45a8480f7d2a6e6d604aa4004ef695e
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.2.0 and higher
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 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.
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
- spec/services/model|controller/[sub-folder]/thing_spec.rb
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
- template 'base_service.rb.erb', "app/services/#{service_directory}/#{service_file}"
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
- <%= "module #{module_name}" %>
2
- <% if subfolder_name.present? %>
3
- <%= "module #{subfolder_name}" %>
4
- <% end %>
5
- <%= "class #{class_name}" %>
6
- <%= "# SAMPLE USAGE: #{qualified_name}.call(*args)" %>
7
- <%= 'def self.call' %>
8
- <%= 'end' %>
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' %>
@@ -1,3 +1,3 @@
1
1
  module RailsServices
2
- VERSION = '1.1.3'
2
+ VERSION = '2.0.0'
3
3
  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 a service class' do
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
@@ -10,6 +10,7 @@ require 'minitest/autorun'
10
10
  require 'minitest/reporters'
11
11
  require 'minitest/pride'
12
12
 
13
+ MiniTest::Reporters.use!
13
14
 
14
15
  class MiniTest::Unit::TestCase
15
16
  ActiveSupport::TestCase.test_order = :random
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: 1.1.3
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-03 00:00:00.000000000 Z
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