class Clearance::Generators::InstallGenerator

Private Class Methods

next_migration_number(dir) click to toggle source

for generating a timestamp when using `create_migration`

# File lib/generators/clearance/install/install_generator.rb, line 117
def self.next_migration_number(dir)
  ActiveRecord::Generators::Base.next_migration_number(dir)
end

Public Instance Methods

create_clearance_initializer() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 10
def create_clearance_initializer
  copy_file 'clearance.rb', 'config/initializers/clearance.rb'
end
create_clearance_migration() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 35
def create_clearance_migration
  if users_table_exists?
    create_add_columns_migration
  else
    copy_migration "create_users"
  end
end
create_or_inject_clearance_into_user_model() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 22
def create_or_inject_clearance_into_user_model
  if File.exist? "app/models/user.rb"
    inject_into_file(
      "app/models/user.rb",
      "  include Clearance::User\n\n",
      after: "class User < #{models_inherit_from}\n",
    )
  else
    @inherit_from = models_inherit_from
    template("user.rb.erb", "app/models/user.rb")
  end
end
display_readme_in_terminal() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 43
def display_readme_in_terminal
  readme 'README'
end
inject_clearance_into_application_controller() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 14
def inject_clearance_into_application_controller
  inject_into_class(
    "app/controllers/application_controller.rb",
    ApplicationController,
    "  include Clearance::Controller\n"
  )
end

Private Instance Methods

configured_key_type() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 131
def configured_key_type
  active_record = Rails.configuration.generators.active_record
  active_record ||= Rails.configuration.generators.options[:active_record]

  active_record[:primary_key_type]
end
copy_migration(migration_name, config = {}) click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 60
def copy_migration(migration_name, config = {})
  unless migration_exists?(migration_name)
    migration_template(
      "db/migrate/#{migration_name}.rb.erb",
      "db/migrate/#{migration_name}.rb",
      config.merge(migration_version: migration_version),
    )
  end
end
create_add_columns_migration() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 49
def create_add_columns_migration
  if migration_needed?
    config = {
      new_columns: new_columns,
      new_indexes: new_indexes
    }

    copy_migration("add_clearance_to_users", config)
  end
end
existing_migrations() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 94
def existing_migrations
  @existing_migrations ||= Dir.glob("db/migrate/*.rb").map do |file|
    migration_name_without_timestamp(file)
  end
end
existing_users_columns() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 108
def existing_users_columns
  ActiveRecord::Base.connection.columns(:users).map(&:name)
end
existing_users_indexes() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 112
def existing_users_indexes
  ActiveRecord::Base.connection.indexes(:users).map(&:name)
end
migration_exists?(name) click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 90
def migration_exists?(name)
  existing_migrations.include?(name)
end
migration_name_without_timestamp(file) click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 100
def migration_name_without_timestamp(file)
  file.sub(%r{^.*(db/migrate/)(?:\d+_)?}, '')
end
migration_needed?() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 70
def migration_needed?
  new_columns.any? || new_indexes.any?
end
migration_primary_key_type_string() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 125
def migration_primary_key_type_string
  if configured_key_type
    ", id: :#{configured_key_type}"
  end
end
migration_version() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 121
def migration_version
  "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
end
models_inherit_from() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 138
def models_inherit_from
  "ApplicationRecord"
end
new_columns() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 74
def new_columns
  @new_columns ||= {
    email: 't.string :email',
    encrypted_password: 't.string :encrypted_password, limit: 128',
    confirmation_token: 't.string :confirmation_token, limit: 128',
    remember_token: 't.string :remember_token, limit: 128'
  }.reject { |column| existing_users_columns.include?(column.to_s) }
end
new_indexes() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 83
def new_indexes
  @new_indexes ||= {
    index_users_on_email: 'add_index :users, :email',
    index_users_on_remember_token: 'add_index :users, :remember_token'
  }.reject { |index| existing_users_indexes.include?(index.to_s) }
end
users_table_exists?() click to toggle source
# File lib/generators/clearance/install/install_generator.rb, line 104
def users_table_exists?
  ActiveRecord::Base.connection.data_source_exists?(:users)
end