Class: Clearance::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration
Defined in:
lib/generators/clearance/install/install_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(dir) ⇒ Object

for generating a timestamp when using create_migration



49
50
51
# File 'lib/generators/clearance/install/install_generator.rb', line 49

def self.next_migration_number(dir)
  ActiveRecord::Generators::Base.next_migration_number(dir)
end

Instance Method Details

#configured_key_typeObject (private)



136
137
138
139
140
141
# File 'lib/generators/clearance/install/install_generator.rb', line 136

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 = {}) ⇒ Object (private)



66
67
68
69
70
71
72
73
74
# File 'lib/generators/clearance/install/install_generator.rb', line 66

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_migrationObject (private)



55
56
57
58
59
60
61
62
63
64
# File 'lib/generators/clearance/install/install_generator.rb', line 55

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

#create_clearance_initializerObject



11
12
13
# File 'lib/generators/clearance/install/install_generator.rb', line 11

def create_clearance_initializer
  copy_file "clearance.rb", "config/initializers/clearance.rb"
end

#create_clearance_migrationObject



36
37
38
39
40
41
42
# File 'lib/generators/clearance/install/install_generator.rb', line 36

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_modelObject



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/generators/clearance/install/install_generator.rb', line 23

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_terminalObject



44
45
46
# File 'lib/generators/clearance/install/install_generator.rb', line 44

def display_readme_in_terminal
  readme "README"
end

#existing_migrationsObject (private)



104
105
106
107
108
# File 'lib/generators/clearance/install/install_generator.rb', line 104

def existing_migrations
  @existing_migrations ||= Dir.glob("db/migrate/*.rb").map do |file|
    migration_name_without_timestamp(file)
  end
end

#existing_users_columnsObject (private)



118
119
120
# File 'lib/generators/clearance/install/install_generator.rb', line 118

def existing_users_columns
  ActiveRecord::Base.connection.columns(:users).map(&:name)
end

#existing_users_indexesObject (private)



122
123
124
# File 'lib/generators/clearance/install/install_generator.rb', line 122

def existing_users_indexes
  ActiveRecord::Base.connection.indexes(:users).map(&:name)
end

#inject_clearance_into_application_controllerObject



15
16
17
18
19
20
21
# File 'lib/generators/clearance/install/install_generator.rb', line 15

def inject_clearance_into_application_controller
  inject_into_class(
    "app/controllers/application_controller.rb",
    ApplicationController,
    "  include Clearance::Controller\n"
  )
end

#migration_exists?(name) ⇒ Boolean (private)



100
101
102
# File 'lib/generators/clearance/install/install_generator.rb', line 100

def migration_exists?(name)
  existing_migrations.include?(name)
end

#migration_name_without_timestamp(file) ⇒ Object (private)



110
111
112
# File 'lib/generators/clearance/install/install_generator.rb', line 110

def migration_name_without_timestamp(file)
  file.sub(%r{^.*(db/migrate/)(?:\d+_)?}, "")
end

#migration_needed?Boolean (private)



76
77
78
# File 'lib/generators/clearance/install/install_generator.rb', line 76

def migration_needed?
  new_columns.any? || new_indexes.any?
end

#migration_primary_key_type_stringObject (private)



130
131
132
133
134
# File 'lib/generators/clearance/install/install_generator.rb', line 130

def migration_primary_key_type_string
  if configured_key_type
    ", id: :#{configured_key_type}"
  end
end

#migration_versionObject (private)



126
127
128
# File 'lib/generators/clearance/install/install_generator.rb', line 126

def migration_version
  "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
end

#models_inherit_fromObject (private)



143
144
145
# File 'lib/generators/clearance/install/install_generator.rb', line 143

def models_inherit_from
  "ApplicationRecord"
end

#new_columnsObject (private)



80
81
82
83
84
85
86
87
# File 'lib/generators/clearance/install/install_generator.rb', line 80

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_indexesObject (private)



89
90
91
92
93
94
95
96
97
98
# File 'lib/generators/clearance/install/install_generator.rb', line 89

def new_indexes
  @new_indexes ||= {
    index_users_on_email:
      "add_index :users, :email",
    index_users_on_confirmation_token:
      "add_index :users, :confirmation_token, unique: true",
    index_users_on_remember_token:
      "add_index :users, :remember_token, unique: true"
  }.reject { |index| existing_users_indexes.include?(index.to_s) }
end

#users_table_exists?Boolean (private)



114
115
116
# File 'lib/generators/clearance/install/install_generator.rb', line 114

def users_table_exists?
  ActiveRecord::Base.connection.data_source_exists?(:users)
end