Class: PgRls::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/pg_rls/install_generator.rb

Overview

Installer Generator

Constant Summary collapse

ENVIRONMENT_LINE =
'Rails.application.initialize!'
ENVIRONMENT_PATH =
'config/environment.rb'
APPLICATION_LINE =
'class Application < Rails::Application'
APPLICATION_PATH =
'config/application.rb'
APPLICATION_RECORD_LINE =
'class ApplicationRecord < ActiveRecord::Base'
APPLICATION_RECORD_PATH =
'app/models/application_record.rb'
APPLICATION_CONTROLLER_LINE =
'class ApplicationController < ActionController::Base'
APPLICATION_CONTROLLER_PATH =
'app/controllers/application_controller.rb'

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ InstallGenerator

Returns a new instance of InstallGenerator.



11
12
13
14
15
16
17
18
# File 'lib/generators/pg_rls/install_generator.rb', line 11

def initialize(*args)
  tenant_model_or_table = args.first
  if tenant_model_or_table.present?
    PgRls.table_name = tenant_model_or_table.first.pluralize
    PgRls.class_name = tenant_model_or_table.first.singularize
  end
  super
end

Instance Method Details

#aplication_controller_already_included?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/generators/pg_rls/install_generator.rb', line 71

def aplication_controller_already_included?
  File.readlines(APPLICATION_CONTROLLER_PATH).grep(/include PgRls::MultiTenancy/).any?
end

#copy_initializerObject

Raises:



48
49
50
51
52
53
# File 'lib/generators/pg_rls/install_generator.rb', line 48

def copy_initializer
  raise MissingORMError, orm_error_message unless options[:orm]

  inject_include_to_application_controller
  template 'pg_rls.rb.tt', 'config/initializers/pg_rls.rb'
end

#environment_already_included?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/generators/pg_rls/install_generator.rb', line 75

def environment_already_included?
  File.readlines(ENVIRONMENT_PATH).grep(%r{require_relative 'initializers/pg_rls'}).any?
end

#initialize_error_textObject



79
80
81
82
83
# File 'lib/generators/pg_rls/install_generator.rb', line 79

def initialize_error_text
  "    TO DO\n  ERROR\nend\n"

#inject_include_to_application_controllerObject



63
64
65
66
67
68
69
# File 'lib/generators/pg_rls/install_generator.rb', line 63

def inject_include_to_application_controller
  return if aplication_controller_already_included?

  gsub_file(APPLICATION_CONTROLLER_PATH, /(#{Regexp.escape(APPLICATION_CONTROLLER_LINE)})/mio) do |match|
    "#{match}\n  include PgRls::MultiTenancy\n"
  end
end

#inject_include_to_environmentObject



55
56
57
58
59
60
61
# File 'lib/generators/pg_rls/install_generator.rb', line 55

def inject_include_to_environment
  return if environment_already_included?

  gsub_file(ENVIRONMENT_PATH, /(#{Regexp.escape(ENVIRONMENT_LINE)})/mio) do |match|
    "require_relative 'initializers/pg_rls'\n#{match}"
  end
end

#orm_error_messageObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/generators/pg_rls/install_generator.rb', line 37

def orm_error_message
  "    An ORM must be set to install PgRls in your application.\n    Be sure to have an ORM like Active Record or loaded in your\n    app or configure your own at `config/application.rb`.\n      config.generators do |g|\n        g.orm :your_orm_gem\n      end\n  ERROR\nend\n"

#show_readmeObject



85
86
87
# File 'lib/generators/pg_rls/install_generator.rb', line 85

def show_readme
  readme 'README' if behavior == :invoke
end