Class: Serviceable::Generators::BaseGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Defined in:
lib/generators/serviceable/base_generator.rb

Overview

BaseGenerator - Generate a base service class for a resource namespace

Creates a ResourceBaseService that centralizes:

  • Repository initialization via RepositoryAware concern

  • Cache configuration

  • Messages namespace (I18n)

  • Presenter configuration

Usage:

rails generate serviceable:base Articles
rails generate serviceable:base Admin::Articles
rails generate serviceable:base Articles --skip_repository
rails generate serviceable:base Articles --skip_locale

This generates:

app/services/articles/base_service.rb
app/repositories/articles_repository.rb
config/locales/articles_services.en.yml
test/services/articles/base_service_test.rb
test/repositories/articles_repository_test.rb

Instance Method Summary collapse

Instance Method Details

#create_base_serviceObject



41
42
43
44
# File 'lib/generators/serviceable/base_generator.rb', line 41

def create_base_service
  template "base_service.rb.tt",
           File.join("app/services", class_path, file_name, "base_service.rb")
end

#create_base_service_testObject



60
61
62
63
64
65
# File 'lib/generators/serviceable/base_generator.rb', line 60

def create_base_service_test
  return if options[:skip_test]

  template "base_service_test.rb.tt",
           File.join("test/services", class_path, file_name, "base_service_test.rb")
end

#create_localeObject



53
54
55
56
57
58
# File 'lib/generators/serviceable/base_generator.rb', line 53

def create_locale
  return if options[:skip_locale]

  template "base_locale.en.yml.tt",
           File.join("config/locales", "#{file_name}_services.en.yml")
end

#create_repositoryObject



46
47
48
49
50
51
# File 'lib/generators/serviceable/base_generator.rb', line 46

def create_repository
  return if options[:skip_repository]

  template "repository.rb.tt",
           File.join("app/repositories", class_path, "#{file_name}_repository.rb")
end

#create_repository_testObject



67
68
69
70
71
72
# File 'lib/generators/serviceable/base_generator.rb', line 67

def create_repository_test
  return if options[:skip_test] || options[:skip_repository]

  template "repository_test.rb.tt",
           File.join("test/repositories", class_path, "#{file_name}_repository_test.rb")
end

#show_completion_messageObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/generators/serviceable/base_generator.rb', line 74

def show_completion_message
  say "\n" + "=" * 80
  say "Base service generation completed! 🎉", :green
  say "=" * 80
  say "\nGenerated files:"
  say "  - #{class_name}::BaseService (app/services/#{file_path}/base_service.rb)"
  say "  - #{class_name}Repository (app/repositories/#{file_path}_repository.rb)" unless options[:skip_repository]
  say "  - I18n locale (config/locales/#{file_name}_services.en.yml)" unless options[:skip_locale]
  say "\nNext steps:"
  say "  1. Customize the base service with resource-specific methods"
  say "  2. Add custom repository methods for your queries"
  say "  3. Generate CRUD services that inherit from BaseService:"
  say "     rails generate serviceable:scaffold #{name} --base"
  say "\nServices will inherit like: #{class_name}::IndexService < #{class_name}::BaseService\n\n"
end