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_already_included?Boolean

Returns:

  • (Boolean)


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

def aplication_already_included?
  File.readlines(APPLICATION_PATH).grep(/config.active_record.schema_format = :sql/).any?
end

#aplication_controller_already_included?Boolean

Returns:

  • (Boolean)


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

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
54
# 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
  inject_include_to_application_controller
  template 'pg_rls.rb.tt', 'config/initializers/pg_rls.rb'
end

#environment_already_included?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/generators/pg_rls/install_generator.rb', line 88

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

#initialize_error_textObject



92
93
94
95
96
# File 'lib/generators/pg_rls/install_generator.rb', line 92

def initialize_error_text
  <<~ERROR
    TO DO
  ERROR
end

#inject_include_to_applicationObject



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

def inject_include_to_application
  return if aplication_already_included?

  gsub_file(APPLICATION_PATH, /(#{Regexp.escape(APPLICATION_LINE)})/mio) do |match|
    "#{match}\n  config.active_record.schema_format = :sql\n"
  end
end

#inject_include_to_application_controllerObject



72
73
74
75
76
77
78
# File 'lib/generators/pg_rls/install_generator.rb', line 72

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



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

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
  <<~ERROR
    An ORM must be set to install PgRls in your application.
    Be sure to have an ORM like Active Record or loaded in your
    app or configure your own at `config/application.rb`.
      config.generators do |g|
        g.orm :your_orm_gem
      end
  ERROR
end

#show_readmeObject



98
99
100
# File 'lib/generators/pg_rls/install_generator.rb', line 98

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