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

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)


73
74
75
# File 'lib/generators/pg_rls/install_generator.rb', line 73

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

#aplication_controller_already_included?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/generators/pg_rls/install_generator.rb', line 69

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

#copy_initializerObject

Raises:



45
46
47
48
49
50
51
# File 'lib/generators/pg_rls/install_generator.rb', line 45

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

#initialize_error_textObject



77
78
79
80
81
# File 'lib/generators/pg_rls/install_generator.rb', line 77

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

#inject_include_to_applicationObject



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

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



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

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

#orm_error_messageObject



34
35
36
37
38
39
40
41
42
43
# File 'lib/generators/pg_rls/install_generator.rb', line 34

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



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

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