rails_services 2.5.0 → 3.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
  SHA256:
3
- metadata.gz: d2f04402e73719510609114c229a41e0f81f0ebcb3bea04daf9805af3830ede4
4
- data.tar.gz: 8d04e05060dbfe5ef9936f1c0bc0fd2835651765665328c105e4ec2e9741c81d
3
+ metadata.gz: 3fc4964ed8a04bba20c8098d333195f81bfbf4f842ac09db9bac7113eca4f4c2
4
+ data.tar.gz: d0bc860c1bee886dd923ef379a728f8eaf7ba8c918092cc5026f6cc1a42d660f
5
5
  SHA512:
6
- metadata.gz: b4aca48fb605ebba2f981e6bc58e4edf25692feb1302e3a34f722480d61d2d21c8ce24d616af504468eb42b3c13cf949480fbb7f84720f4a540757176967fbea
7
- data.tar.gz: 3d3de55bd88596df2972fb1555a0fc7fbf51e99d45bc180c0f67b13d3eef51c6187ba9875661a5f9cdca255a24ab211d66c6f0f721a241bc206271a9becf3b2c
6
+ metadata.gz: c8c3fa58a147354c9f29b2a08192b0b20dc03090029c7d1f524db94cd0613a2d7e11e31badd6733f4451c840d3a0112766bfd5182a0a8fea4a551e4112ccdb39
7
+ data.tar.gz: a0b6f429baf0ef7cccbbbf3f31da12d1518e7b041d76276a6edbb25e4d4960d020691e15d6ada17cbf0b6f28eadac44c3cc8cae7da3068242dcef5f5a49a0ad0
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Test Coverage](https://codeclimate.com/github/imageaid/rails_service_generator/coverage.png)](https://codeclimate.com/github/imageaid/rails_service_generator)
5
5
  [![Gem Version](https://badge.fury.io/rb/rails_services.svg)](http://badge.fury.io/rb/rails_services)
6
6
 
7
- A very (VERY) simple gem for Rails that adds a generator for easily creating a service class and its accompanying spec or test unit file.
7
+ A simple gem for Rails that adds a generator for easily creating a service class and/or form object and its accompanying spec or test unit file.
8
8
 
9
9
  ## Requirements
10
10
 
@@ -28,36 +28,46 @@ Or install it yourself as:
28
28
 
29
29
  Examples:
30
30
 
31
- $ rails generate rails_services:create Service Model|Controller Sub-folder [opt] --instance [yes (default), no]
31
+ $ rails generate rails_services:create Service Model|Controller --sub_folder Sub-folder [opt]
32
32
 
33
- $ rails generate rails_services:destroy Service Model|Controller Sub-folder [opt] --instance [yes (default), no]
33
+ $ rails generate rails_services:destroy Service Model|Controller --sub_folder Sub-folder [opt]
34
34
 
35
- ### Sub-folders
35
+ $ rails generate rails_services:form Form Model|Controller --sub_folder Sub-folder [opt] --accessors name email [opt]
36
+
37
+ ## CHANGES AND NOTES
38
+ ### Notes: Sub-folders
36
39
  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
40
 
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.`).
41
+ ### Changes: new argument structure for the command line
42
+ Previous versions of the gem used plain old arguments to create or destroy the appropriate files. Over time, this became
43
+ more unwieldy than imagined. From version 3.0.0 forward, there are only two arguments: `object_name` and `parent_name`.
44
+
45
+ If you would like to add a sub-folder to the service or form, you can now provide the `class_option` for it:
46
+ `--sub_folder NAME_OF_FOLDER`. Similarly, for the form generator, you can pass in an array of `attr_accessors` with
47
+ the following: `--accessors accessor_1_name accessor_2_name ...`.
42
48
 
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).
49
+ ### Changes: Instance Argument REMOVED
50
+ An instance argument was added in version 2.0.0. While the version 2.x line allowed users to choose between the old and new style,
51
+ (new = service clases inherited from a `BaseService` class and instantiated the service), the version 3.x line removes this option. BE AWARE :).
46
52
 
47
53
  ## 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.
54
+ There are two primary changes in version 3:
55
+
56
+ First, all services now include the `BaseService` class and methods in the services are,
57
+ by default, instance methods rather than class methods.
51
58
 
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:
59
+ Second, the gem now allows you to generate a `Form` object/model.
60
+
61
+ **Converting Old Service Classes** - Should you want to update your older/previously built services with this approach,
62
+ you only need to do the following:
54
63
 
55
64
  # include the base service in your class
56
65
  class ClassName
57
66
  include BaseService
58
67
 
59
- # Then ... add an initialize method and change the method signatures, simply removing from the definition
60
- def call
68
+ # Then ... optionally, add an initialize method and
69
+ # change the method signatures, simply removing self. from the definition(s)
70
+ def self.call
61
71
  # ...
62
72
  end
63
73
  # becomes
@@ -66,14 +76,26 @@ the following:
66
76
  end
67
77
  # and so on for other, similarly defined methods
68
78
 
69
- ## Result
79
+ ## Generator Result (create service and create form)
70
80
 
71
- Two files are created (spec or test based on your `test_framework`):
81
+ Two files are created (spec or test based on your `test_framework`).
82
+
83
+ For services:
72
84
 
73
85
  + app/services/model|controller/[sub-folder]/thing.rb
74
86
  + spec/services/model|controller/[sub-folder]/thing_spec.rb
75
87
  + test/services/model|controller/[sub-folder]/thing_test.rb
76
88
 
89
+ For forms:
90
+
91
+ + app/forms/model|controller/[sub-folder]/thing_form.rb
92
+ + spec/forms/model|controller/[sub-folder]/thing_form_spec.rb
93
+ + test/forms/model|controller/[sub-folder]/thing_form_test.rb
94
+
95
+ ## Generator Result (destroy service)
96
+
97
+ Pretty simple here ... it just removes the files it created
98
+
77
99
  ## Contributing
78
100
 
79
101
  1. Fork it ( https://github.com/imageaid/rails_services/fork )
@@ -1,27 +1,33 @@
1
1
  Description:
2
2
  Creates a service class and accompanying spec/test unit file
3
3
  Destroys a service class and accompanying spec/test unit file
4
+ Creates a form object and accompanying spec/test unit file
4
5
 
5
- Example:
6
- rails generate rails_services:destroy Thing Model|Controller Sub-folder [opt] --instance [yes (default), no]
6
+ Service Example:
7
+ rails generate rails_services:create Thing Model|Controller -- sub_folder Sub-folder [opt]]
7
8
 
8
- This will remove:
9
+ This will add:
9
10
  app/services/model|controller/[sub-folder]/thing.rb
10
11
  # either
11
12
  spec/services/model|controller/[sub-folder]/thing_spec.rb
12
13
  # or
13
14
  test/services/model|controller/[sub-folder]/thing_test.rb
14
15
 
15
- rails generate rails_services:create Thing Model|Controller Sub-folder [opt] --instance [yes (default), no]
16
+ rails generate rails_services:destroy Thing Model|Controller -- sub_folder Sub-folder [opt]]
16
17
 
17
- This will add:
18
+ This will remove:
18
19
  app/services/model|controller/[sub-folder]/thing.rb
19
20
  # either
20
21
  spec/services/model|controller/[sub-folder]/thing_spec.rb
21
22
  # or
22
23
  test/services/model|controller/[sub-folder]/thing_test.rb
23
24
 
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).
25
+ Form Example:
26
+ rails generate rails_services:form Thing Model|Controller -- sub_folder Sub-folder [opt] --accessors name email [opt]
27
+
28
+ This will add:
29
+ app/forms/[parent-folder]/[sub-folder]/thing_form.rb
30
+ # either
31
+ spec/forms/[parent-folder]/[sub-folder]/thing_form_spec.rb
32
+ # or
33
+ test/forms/[parent-folder]/[sub-folder]/thing_form_test.rb
@@ -1,74 +1,40 @@
1
+ require_relative '../../../lib/rails_services/nameable'
2
+ require_relative '../../../lib/rails_services/fileable'
3
+
1
4
  module RailsServices
2
5
  class Generators
3
6
  ##
4
7
  # creates a service class
5
8
  class CreateGenerator < Rails::Generators::Base
6
9
  source_root File.expand_path('templates', __dir__)
7
- argument :service_name, type: :string
10
+
11
+ include Nameable
12
+ include Fileable
13
+
14
+ argument :object_name, type: :string
8
15
  argument :parent_name, type: :string
9
- argument :sub_folder, type: :string, default: ''
10
- argument :instance, type: :string, default: 'yes'
16
+
17
+ class_option :sub_folder, type: :string, default: ''
11
18
 
12
19
  def create_service
13
- if instance == 'yes'
14
- copy_base_service_class
15
- template 'base_service_new.rb.erb', "app/services/#{service_directory}/#{service_file}"
16
- else
17
- template 'base_service_old.rb.erb', "app/services/#{service_directory}/#{service_file}"
18
- end
20
+ copy_base_service_class
21
+ template 'base_service_new.rb.erb', "app/services/#{object_directory}/#{service_object_file}"
19
22
  create_test
20
23
  end
21
24
 
22
25
  private
23
26
 
24
27
  def copy_base_service_class
25
- template('base_service.rb.erb', 'app/services/base_service.rb') unless File.exist?('app/services/base_service.rb')
28
+ template('base_service_class.rb.erb', 'app/services/base_service.rb') unless File.exist?('app/services/base_service.rb')
26
29
  end
27
30
 
28
31
  def create_test
29
32
  if File.exist?('spec/spec_helper.rb')
30
- template 'base_service_spec.rb.erb', "spec/services/#{service_directory}/#{spec_file}"
33
+ template 'base_service_spec.rb.erb', "spec/services/#{object_directory}/#{service_spec_file}"
31
34
  else
32
- template 'base_service_unit_test.rb.erb', "test/services/#{service_directory}/#{unit_file}"
35
+ template 'base_service_unit_test.rb.erb', "test/services/#{object_directory}/#{service_unit_file}"
33
36
  end
34
37
  end
35
-
36
- def service_directory
37
- file_path = parent_name.pluralize.underscore.to_s
38
- file_path += "/#{sub_folder.underscore}" if sub_folder.present?
39
- file_path
40
- end
41
-
42
- def service_file
43
- "#{service_name.underscore}.rb"
44
- end
45
-
46
- def spec_file
47
- "#{service_name.underscore}_spec.rb"
48
- end
49
-
50
- def unit_file
51
- "#{service_name.underscore}_test.rb"
52
- end
53
-
54
- def qualified_name
55
- name = "#{parent_name.pluralize.camelize}::"
56
- name += "#{sub_folder.camelize}::" if sub_folder.present?
57
- name += service_name.camelize.to_s
58
- name
59
- end
60
-
61
- def module_name
62
- parent_name.pluralize.camelize.to_s
63
- end
64
-
65
- def subfolder_name
66
- sub_folder.try(:camelize).to_s
67
- end
68
-
69
- def class_name
70
- service_name.camelize.to_s
71
- end
72
38
  end
73
39
  end
74
40
  end
@@ -1,24 +1,32 @@
1
+ require_relative '../../../lib/rails_services/nameable'
2
+ require_relative '../../../lib/rails_services/fileable'
3
+
1
4
  module RailsServices
2
5
  class Generators
3
6
  ##
4
7
  # destroys a service class
5
8
  class DestroyGenerator < Rails::Generators::Base
6
- argument :service_name, type: :string
9
+ include Nameable
10
+ include Fileable
11
+
12
+ argument :object_name, type: :string
7
13
  argument :parent_name, type: :string
8
- argument :sub_folder, type: :string, default: ''
14
+
15
+ class_option :sub_folder, type: :string, default: ''
9
16
 
10
17
  def destroy_service
11
- remove_file "app/services/#{full_service_directory}/#{service_file}"
12
- remove_file "spec/services/#{full_service_directory}/#{spec_file}"
18
+ remove_file "app/services/#{full_object_directory}/#{service_object_file}"
19
+ remove_file "spec/services/#{full_object_directory}/#{service_spec_file}"
20
+ remove_file "test/services/#{full_object_directory}/#{service_unit_file}"
13
21
 
14
- manage_containing_directories('app', 'spec')
22
+ manage_containing_directories('app', 'spec', 'test')
15
23
  end
16
24
 
17
25
  private
18
26
 
19
- def full_service_directory
27
+ def full_object_directory
20
28
  file_path = service_parent_directory.to_s
21
- file_path += "/#{sub_folder.underscore}" if sub_folder.present?
29
+ file_path += "/#{options['sub_folder'].underscore}" if options['sub_folder'].present?
22
30
  file_path
23
31
  end
24
32
 
@@ -26,23 +34,15 @@ module RailsServices
26
34
  parent_name.pluralize.underscore.to_s
27
35
  end
28
36
 
29
- def service_file
30
- "#{service_name.underscore}.rb"
31
- end
32
-
33
- def spec_file
34
- "#{service_name.underscore}_spec.rb"
35
- end
36
-
37
37
  def manage_containing_directories(*directory_types)
38
38
  directory_types.each do |directory_type|
39
- remove_dir("#{directory_type}/services/#{full_service_directory}") if directory_empty?(directory_type)
39
+ remove_dir("#{directory_type}/services/#{full_object_directory}") if directory_empty?(directory_type)
40
40
  remove_dir("#{directory_type}/services/#{service_parent_directory}") if parent_directory_empty?(directory_type)
41
41
  end
42
42
  end
43
43
 
44
44
  def directory_empty?(directory_type)
45
- Dir["#{Rails.root}/#{directory_type}/services/#{full_service_directory}/*"].empty?
45
+ Dir["#{Rails.root}/#{directory_type}/services/#{full_object_directory}/*"].empty?
46
46
  end
47
47
 
48
48
  def parent_directory_empty?(directory_type)
@@ -0,0 +1,36 @@
1
+ require_relative '../../../lib/rails_services/nameable'
2
+ require_relative '../../../lib/rails_services/fileable'
3
+
4
+ module RailsServices
5
+ class Generators
6
+ ##
7
+ # generates a form object
8
+ class FormGenerator < Rails::Generators::Base
9
+ source_root File.expand_path('templates', __dir__)
10
+
11
+ include Nameable
12
+ include Fileable
13
+
14
+ argument :object_name, type: :string, required: true
15
+ argument :parent_name, type: :string, required: true
16
+
17
+ class_option :sub_folder, type: :string, default: ''
18
+ class_option :accessors, type: :array, default: []
19
+
20
+ def create_form
21
+ template 'base_form.rb.erb', "app/forms/#{object_directory}/#{form_object_file}"
22
+ create_test
23
+ end
24
+
25
+ private
26
+
27
+ def create_test
28
+ if File.exist?('spec/spec_helper.rb')
29
+ template 'base_form_spec.rb.erb', "spec/forms/#{object_directory}/#{form_spec_file}"
30
+ else
31
+ template 'base_form_unit_test.rb.erb', "test/forms/#{object_directory}/#{form_unit_file}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,30 @@
1
+ <%= '# Generated form object' %>
2
+ <%= "module #{module_name}" %>
3
+ <% if subfolder_name.present? -%>
4
+ <%= "module #{subfolder_name}" %>
5
+ <%= '##' %>
6
+ <%= "# #{qualified_name} Form Object" %>
7
+ <%= "class #{form_class_name}" %>
8
+ <%= 'include ActiveModel::Model' %>
9
+
10
+ <% if options['accessors'].present? -%>
11
+ <%= "attr_accessor :#{options['accessors'].join(', :')}" %>
12
+
13
+ <% end -%>
14
+ <%= 'def save;' %> <%= 'end' %>
15
+ <%= 'end' %>
16
+ <%= 'end' %>
17
+ <% else -%>
18
+ <%= '##' %>
19
+ <%= "# #{qualified_name} Form Object" %>
20
+ <%= "class #{form_class_name}" %>
21
+ <%= 'include ActiveModel::Model' %>
22
+
23
+ <% if options['accessors'].present? -%>
24
+ <%= "attr_accessor :#{options['accessors'].join(', :')}" %>
25
+
26
+ <% end -%>
27
+ <%= 'def save;' %> <%= 'end' %>
28
+ <%= 'end' %>
29
+ <% end -%>
30
+ <%= 'end' %>
@@ -0,0 +1,7 @@
1
+ <%= "describe #{qualified_name} do" %>
2
+ <%= "context 'doing something' do" %>
3
+ <%= "it 'should test something' do" %>
4
+ <%= 'skip' %>
5
+ <%= 'end' %>
6
+ <%= 'end' %>
7
+ <%= 'end' %>
@@ -0,0 +1,7 @@
1
+ <%= "require 'test_helper'" %>
2
+
3
+ <%= "class #{form_class_name}Test < ActiveSupport::TestCase" %>
4
+ <%= 'def test_some_stuff' %>
5
+ <%= "assert (1 == 2), 'You best test yourself before you wreck yourself!'" %>
6
+ <%= 'end' %>
7
+ <%= 'end' %>
@@ -1,25 +1,28 @@
1
+ <%= '# Generated service object' %>
1
2
  <%= "module #{module_name}" %>
2
3
  <% if subfolder_name.present? -%>
3
4
  <%= "module #{subfolder_name}" %>
4
- <% end -%>
5
- <%= '##' %>
6
- <%= "# #{qualified_name} Service Class" %>
7
- <% if subfolder_name.present? -%>
8
- <%= "class #{class_name}" %>
5
+ <%= '##' %>
6
+ <%= "# #{qualified_name} Service Class" %>
7
+ <%= "class #{service_class_name}" %>
9
8
  <%= 'include BaseService' %>
10
- <%= "# SAMPLE USAGE: #{qualified_name}.(*args)" %>
9
+
10
+ <%= "# SAMPLE USAGE: #{qualified_name}.new(*args).call" %>
11
11
  <%= 'def initialize(_args);' %> <%= 'end' %>
12
+
12
13
  <%= 'def call;' %> <%= 'end' %>
13
14
  <%= 'end' %>
15
+ <%= 'end' %>
14
16
  <% else -%>
15
- <%= "class #{class_name}" %>
17
+ <%= '##' %>
18
+ <%= "# #{qualified_name} Service Class" %>
19
+ <%= "class #{service_class_name}" %>
16
20
  <%= 'include BaseService' %>
17
- <%= "# SAMPLE USAGE: #{qualified_name}.(*args)" %>
21
+
22
+ <%= "# SAMPLE USAGE: #{qualified_name}.new(*args).call" %>
18
23
  <%= 'def initialize(_args);' %> <%= 'end' %>
24
+
19
25
  <%= 'def call;' %> <%= 'end' %>
20
26
  <%= 'end' %>
21
27
  <% end -%>
22
- <% if subfolder_name.present? -%>
23
- <%= 'end' %>
24
- <% end -%>
25
28
  <%= 'end' %>
@@ -1,6 +1,6 @@
1
1
  <%= "require 'test_helper'" %>
2
2
 
3
- <%= "class #{class_name}Test < ActiveSupport::TestCase" %>
3
+ <%= "class #{service_class_name}Test < ActiveSupport::TestCase" %>
4
4
  <%= 'def test_some_stuff' %>
5
5
  <%= "assert (1 == 2), 'You best test yourself before you wreck yourself!'" %>
6
6
  <%= 'end' %>
@@ -0,0 +1,37 @@
1
+ module RailsServices
2
+ ##
3
+ # handles creating files and directories
4
+ module Fileable
5
+ def object_directory
6
+ file_path = parent_name.pluralize.underscore.to_s
7
+ file_path += "/#{options['sub_folder'].underscore}" if options['sub_folder'].present?
8
+ file_path
9
+ end
10
+
11
+ # services
12
+ def service_object_file
13
+ "#{object_name.underscore}.rb"
14
+ end
15
+
16
+ def service_spec_file
17
+ "#{object_name.underscore}_spec.rb"
18
+ end
19
+
20
+ def service_unit_file
21
+ "#{object_name.underscore}_test.rb"
22
+ end
23
+
24
+ # forms
25
+ def form_object_file
26
+ "#{object_name.underscore}_form.rb"
27
+ end
28
+
29
+ def form_spec_file
30
+ "#{object_name.underscore}_form_spec.rb"
31
+ end
32
+
33
+ def form_unit_file
34
+ "#{object_name.underscore}_form_test.rb"
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ module RailsServices
2
+ ##
3
+ # commonly used naming conventions
4
+ module Nameable
5
+ def qualified_name
6
+ name = "#{parent_name.pluralize.camelize}::"
7
+ name += "#{options['sub_folder'].camelize}::" if options['sub_folder'].present?
8
+ name += object_name.camelize.to_s
9
+ name
10
+ end
11
+
12
+ def module_name
13
+ parent_name.pluralize.camelize.to_s
14
+ end
15
+
16
+ def subfolder_name
17
+ options['sub_folder'].try(:camelize).to_s
18
+ end
19
+
20
+ def service_class_name
21
+ object_name.camelize.to_s
22
+ end
23
+
24
+ def form_class_name
25
+ "#{object_name.camelize.to_s}Form"
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsServices
2
- VERSION = '2.5.0'.freeze
2
+ VERSION = '3.0.0'.freeze
3
3
  end
@@ -1,23 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../../../test/test_helper'
2
4
 
3
5
  class CreateGeneratorTest < Rails::Generators::TestCase
4
6
  tests ::RailsServices::Generators::CreateGenerator
5
7
 
6
- destination File.expand_path('../../tmp', __FILE__)
8
+ destination File.expand_path('../tmp', __dir__)
7
9
 
8
10
  setup do
9
11
  prepare_destination
10
12
  end
11
13
 
12
- test 'generates an old style service class' do
13
- run_generator(%w(TestService ParentModel SubFolder --style old))
14
- assert_file 'app/services/parent_models/sub_folder/test_service.rb'
15
- end
16
-
17
- test 'generates a new style service class' do
18
- run_generator(%w(TestBaseService ParentModel SubFolder --style new))
14
+ test 'generates a service class' do
15
+ run_generator(%w[TestBaseService ParentModel --sub_folder SubFolder])
19
16
  assert_file 'app/services/base_service.rb'
20
17
  assert_file 'app/services/parent_models/sub_folder/test_base_service.rb'
21
18
  end
22
-
23
- end
19
+ end
@@ -1,17 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../../../test/test_helper'
2
4
 
3
5
  class DestroyGeneratorTest < Rails::Generators::TestCase
4
6
  tests ::RailsServices::Generators::DestroyGenerator
5
7
 
6
- destination File.expand_path('../../tmp', __FILE__)
8
+ destination File.expand_path('../tmp', __dir__)
7
9
 
8
10
  setup do
9
11
  prepare_destination
10
- run_generator(%w(TestService ParentModel SubFolder))
12
+ run_generator(%w[TestService ParentModel --sub_folder SubFolder])
11
13
  end
12
14
 
13
15
  test 'removes an initializer' do
14
16
  assert_no_file 'app/services/parent_models/sub_folder/test_service.rb'
15
17
  end
16
-
17
- end
18
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../test/test_helper'
4
+
5
+ class FormGeneratorTest < Rails::Generators::TestCase
6
+ tests ::RailsServices::Generators::FormGenerator
7
+
8
+ destination File.expand_path('../tmp', __dir__)
9
+
10
+ setup do
11
+ prepare_destination
12
+ end
13
+
14
+ test 'generates a base form object' do
15
+ run_generator(%w[TestFormObject Parent --accessors first_name last_name])
16
+ assert_file 'app/forms/parents/test_form_object_form.rb'
17
+ end
18
+
19
+ test 'generates a subfoldered form object' do
20
+ run_generator(%w[TestFormObject Parent --sub_folder Child --accessors first_name last_name])
21
+ assert_file 'app/forms/parents/child/test_form_object_form.rb'
22
+ end
23
+ end
@@ -5,6 +5,7 @@ require 'rails/generators'
5
5
  # require 'rails_service_generator'
6
6
  require_relative '../lib/generators/rails_services/destroy_generator'
7
7
  require_relative '../lib/generators/rails_services/create_generator'
8
+ require_relative '../lib/generators/rails_services/form_generator'
8
9
  require 'shellwords'
9
10
  require 'minitest/autorun'
10
11
  require 'minitest/reporters'
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: 2.5.0
4
+ version: 3.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: 2019-02-14 00:00:00.000000000 Z
11
+ date: 2020-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -72,8 +72,8 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
- description: Speed up development when using a Service Layer by easily creating service
76
- classes and their attending test (gem) file.
75
+ description: Speed up development when using Service layers and Form objects by easily
76
+ creating those classes and their attending test file.
77
77
  email:
78
78
  - imageaid@gmail.com
79
79
  executables: []
@@ -86,15 +86,21 @@ files:
86
86
  - lib/generators/rails_services/USAGE
87
87
  - lib/generators/rails_services/create_generator.rb
88
88
  - lib/generators/rails_services/destroy_generator.rb
89
- - lib/generators/rails_services/templates/base_service.rb.erb
89
+ - lib/generators/rails_services/form_generator.rb
90
+ - lib/generators/rails_services/templates/base_form.rb.erb
91
+ - lib/generators/rails_services/templates/base_form_spec.rb.erb
92
+ - lib/generators/rails_services/templates/base_form_unit_test.rb.erb
93
+ - lib/generators/rails_services/templates/base_service_class.rb.erb
90
94
  - lib/generators/rails_services/templates/base_service_new.rb.erb
91
- - lib/generators/rails_services/templates/base_service_old.rb.erb
92
95
  - lib/generators/rails_services/templates/base_service_spec.rb.erb
93
96
  - lib/generators/rails_services/templates/base_service_unit_test.rb.erb
94
97
  - lib/rails_services.rb
98
+ - lib/rails_services/fileable.rb
99
+ - lib/rails_services/nameable.rb
95
100
  - lib/rails_services/version.rb
96
101
  - test/lib/generators/rails_services/create_generator_test.rb
97
102
  - test/lib/generators/rails_services/destroy_generator_test.rb
103
+ - test/lib/generators/rails_services/form_generator_test.rb
98
104
  - test/test_helper.rb
99
105
  homepage: https://github.com/imageaid/rails_service_generator
100
106
  licenses:
@@ -115,12 +121,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
121
  - !ruby/object:Gem::Version
116
122
  version: '0'
117
123
  requirements: []
118
- rubyforge_project:
119
- rubygems_version: 2.7.6
124
+ rubygems_version: 3.0.3
120
125
  signing_key:
121
126
  specification_version: 4
122
- summary: A Ruby gem that adds a rails generator for creating service classes.
127
+ summary: A Ruby gem that adds a rails generator for creating service classes and form
128
+ object.
123
129
  test_files:
124
130
  - test/lib/generators/rails_services/create_generator_test.rb
125
131
  - test/lib/generators/rails_services/destroy_generator_test.rb
132
+ - test/lib/generators/rails_services/form_generator_test.rb
126
133
  - test/test_helper.rb
@@ -1,19 +0,0 @@
1
- <%= "module #{module_name}" %>
2
- <% if subfolder_name.present? %><%= "module #{subfolder_name}" %><% end %>
3
- <%= '##' %>
4
- <%= "# #{qualified_name} Service Class" %>
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? %><%= 'end' %><% end %>
19
- <%= 'end' %>