Class: Rails::AppBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/rails/generators/rails/app/app_generator.rb

Overview

The application builder allows you to override elements of the application generator without being forced to reverse the operations of the default generator.

This allows you to override entire operations, like the creation of the Gemfile, README, or JavaScript files, without needing to know exactly what those operations do so you can create another template action.

class CustomAppBuilder < Rails::AppBuilder
  def test
    @generator.gem "rspec-rails", group: [:development, :test]
    run "bundle install"
    generate "rspec:install"
  end
end

Instance Method Summary collapse

Instance Method Details

#appObject



70
71
72
73
74
75
76
77
78
# File 'lib/rails/generators/rails/app/app_generator.rb', line 70

def app
  directory "app"

  keep_file "app/assets/images"
  empty_directory_with_keep_file "app/assets/javascripts/channels" unless options[:skip_action_cable]

  keep_file  "app/controllers/concerns"
  keep_file  "app/models/concerns"
end

#binObject



80
81
82
83
84
85
# File 'lib/rails/generators/rails/app/app_generator.rb', line 80

def bin
  directory "bin" do |content|
    "#{shebang}\n" + content
  end
  chmod "bin", 0755 & ~File.umask, verbose: false
end

#bin_when_updatingObject



87
88
89
90
91
92
93
94
95
# File 'lib/rails/generators/rails/app/app_generator.rb', line 87

def bin_when_updating
  bin_yarn_exist = File.exist?("bin/yarn")

  bin

  if options[:api] && !bin_yarn_exist
    remove_file "bin/yarn"
  end
end

#configObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/rails/generators/rails/app/app_generator.rb', line 97

def config
  empty_directory "config"

  inside "config" do
    template "routes.rb"
    template "application.rb"
    template "environment.rb"
    template "secrets.yml"
    template "cable.yml" unless options[:skip_action_cable]
    template "puma.rb"   unless options[:skip_puma]
    template "spring.rb" if spring_install?

    directory "environments"
    directory "initializers"
    directory "locales"
  end
end

#config_when_updatingObject



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/rails/generators/rails/app/app_generator.rb', line 115

def config_when_updating
  cookie_serializer_config_exist = File.exist?("config/initializers/cookies_serializer.rb")
  action_cable_config_exist = File.exist?("config/cable.yml")
  rack_cors_config_exist = File.exist?("config/initializers/cors.rb")
  assets_config_exist = File.exist?("config/initializers/assets.rb")
  new_framework_defaults_5_1_exist = File.exist?("config/initializers/new_framework_defaults_5_1.rb")

  config

  unless cookie_serializer_config_exist
    gsub_file "config/initializers/cookies_serializer.rb", /json(?!,)/, "marshal"
  end

  unless action_cable_config_exist
    template "config/cable.yml"
  end

  unless rack_cors_config_exist
    remove_file "config/initializers/cors.rb"
  end

  if options[:api]
    unless cookie_serializer_config_exist
      remove_file "config/initializers/cookies_serializer.rb"
    end

    unless assets_config_exist
      remove_file "config/initializers/assets.rb"
    end

    # Sprockets owns the only new default for 5.1:
    # In API-only Applications, we don't want the file.
    unless new_framework_defaults_5_1_exist
      remove_file "config/initializers/new_framework_defaults_5_1.rb"
    end
  end
end

#configruObject



56
57
58
# File 'lib/rails/generators/rails/app/app_generator.rb', line 56

def configru
  template "config.ru"
end

#database_ymlObject



153
154
155
# File 'lib/rails/generators/rails/app/app_generator.rb', line 153

def database_yml
  template "config/databases/#{options[:database]}.yml", "config/database.yml"
end

#dbObject



157
158
159
# File 'lib/rails/generators/rails/app/app_generator.rb', line 157

def db
  directory "db"
end

#gemfileObject



52
53
54
# File 'lib/rails/generators/rails/app/app_generator.rb', line 52

def gemfile
  template "Gemfile"
end

#gitignoreObject



60
61
62
# File 'lib/rails/generators/rails/app/app_generator.rb', line 60

def gitignore
  template "gitignore", ".gitignore"
end

#libObject



161
162
163
164
165
# File 'lib/rails/generators/rails/app/app_generator.rb', line 161

def lib
  empty_directory "lib"
  empty_directory_with_keep_file "lib/tasks"
  empty_directory_with_keep_file "lib/assets"
end

#logObject



167
168
169
# File 'lib/rails/generators/rails/app/app_generator.rb', line 167

def log
  empty_directory_with_keep_file "log"
end

#public_directoryObject



171
172
173
# File 'lib/rails/generators/rails/app/app_generator.rb', line 171

def public_directory
  directory "public", "public", recursive: false
end

#rakefileObject



44
45
46
# File 'lib/rails/generators/rails/app/app_generator.rb', line 44

def rakefile
  template "Rakefile"
end

#readmeObject



48
49
50
# File 'lib/rails/generators/rails/app/app_generator.rb', line 48

def readme
  copy_file "README.md", "README.md"
end

#system_testObject



187
188
189
190
191
# File 'lib/rails/generators/rails/app/app_generator.rb', line 187

def system_test
  empty_directory_with_keep_file "test/system"

  template "test/application_system_test_case.rb"
end

#testObject



175
176
177
178
179
180
181
182
183
184
185
# File 'lib/rails/generators/rails/app/app_generator.rb', line 175

def test
  empty_directory_with_keep_file "test/fixtures"
  empty_directory_with_keep_file "test/fixtures/files"
  empty_directory_with_keep_file "test/controllers"
  empty_directory_with_keep_file "test/mailers"
  empty_directory_with_keep_file "test/models"
  empty_directory_with_keep_file "test/helpers"
  empty_directory_with_keep_file "test/integration"

  template "test/test_helper.rb"
end

#tmpObject



193
194
195
196
197
# File 'lib/rails/generators/rails/app/app_generator.rb', line 193

def tmp
  empty_directory_with_keep_file "tmp"
  empty_directory "tmp/cache"
  empty_directory "tmp/cache/assets"
end

#vendorObject



199
200
201
202
203
204
205
# File 'lib/rails/generators/rails/app/app_generator.rb', line 199

def vendor
  empty_directory_with_keep_file "vendor"

  unless options[:skip_yarn]
    template "package.json"
  end
end

#version_controlObject



64
65
66
67
68
# File 'lib/rails/generators/rails/app/app_generator.rb', line 64

def version_control
  if !options[:skip_git] && !options[:pretend]
    run "git init"
  end
end