rails_services 1.1.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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