rails_services 2.5.0 → 3.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
  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' %>