LoginSignup
2
2

More than 5 years have passed since last update.

RailsでServiceクラスのジェネレータを作ってみる

Last updated at Posted at 2017-03-14
$ rails g generator Service

でジェネレータを生成する。
以下のファイルと

  • lib/generators/service/service_generator.rb
  • lib/generators/service/USAGE

以下のディレクトリが生成される。

  • lib/generators/service/templates

次のように修正して

lib/generators/service/service_generator.rb
class ServiceGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)

  def generate
    template 'app.erb', path_of_app
    template 'spec.erb', path_of_spec
  end

  private
    def path_of_app
      File.join('app/services', "#{file_name}_service.rb")
    end

    def path_of_spec
      File.join('spec/services', "#{file_name}_service_spec.rb")
    end
end
Description:
    Create a new service.

Example:
    `rails generate service IssueSearch`

    This will create:
        app/services/issue_search_service.rb
        spec/services/issue_search_service_spec.rb

以下のファイルを追加

lib/generators/service/templates/app.erb
class <%= class_name %>Service
  def initialize(params = {})
  end
end
lib/generators/service/templates/spec.erb
require 'rails_helper'

RSpec.describe <%= class_name %>Service do
  subject { <%= class_name %>Service.new(params) }
  let(:params) {
    {
      some_args: :write_here
    }
  }
  pending "add some examples to (or delete) #{__FILE__}"
end

以上

参考

Rails の GeneratorGenerator を使ってみる - Qiita

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2