rails_template_18f 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +2 -1
- data/README.md +12 -15
- data/exe/rails_template_18f +29 -0
- data/lib/generators/rails_template18f/i18n/i18n_generator.rb +107 -0
- data/{templates → lib/generators/rails_template18f/i18n/templates}/config/locales/en.yml.tt +3 -3
- data/{templates → lib/generators/rails_template18f/i18n/templates}/config/locales/es.yml +3 -3
- data/{templates → lib/generators/rails_template18f/i18n/templates}/config/locales/fr.yml +3 -6
- data/{templates → lib/generators/rails_template18f/i18n/templates}/config/locales/zh.yml +0 -0
- data/lib/rails_template18f/version.rb +1 -1
- data/rails-template-18f.gemspec +1 -0
- data/template.rb +59 -95
- metadata +24 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c732c75ebc9f84d2f730c43042eb922392954f18e8a2500722e4f2e070f329a
|
4
|
+
data.tar.gz: 0fca28e40b443de8032d7a76f38f889449238c62ffeb15444b78a73d9482eaf0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3900e08a7ae9227bad8e4f341b867556ddbaae1614a526ab64be758cd0c78ad0b09e4be1587da1038623151a045f05aa7a7fe3ea82676479f29d54d4cc4d94f
|
7
|
+
data.tar.gz: 7da9792ec9280f443a5bfa2bfc6ffca23a60cf984cb64c0773019dd27ea130b02fcd331647493b81ffcac434fbc8bb5cdf064c1d3e5a5714617a4bcac5335c90
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -7,35 +7,32 @@ See the `rails-6` branch for Rails 6.1.x
|
|
7
7
|
|
8
8
|
## Use for new Rails Project
|
9
9
|
|
10
|
-
1.
|
11
|
-
1.
|
12
|
-
1. Run `rails new <<PATH_TO_PROJECT>> --rc=<<RC_FILE>>` with the appropriate rc file for your needs. The path should not be a subdirectory of this repository.
|
10
|
+
1. `gem install rails_template_18f`
|
11
|
+
1. `rails_template_18f help new` for usage instructions
|
13
12
|
|
14
|
-
### Choosing
|
15
|
-
|
16
|
-
You should run this template with either `railsrc` or `railsrc-hotwire` depending on your development needs.
|
13
|
+
### Choosing whether to use `--hotwire`
|
17
14
|
|
18
15
|
#### Server Rendered _or_ Single Page Applications
|
19
16
|
|
20
|
-
`
|
17
|
+
`rails_template_18f new <<PATH_TO_PROJECT>>` _or_ `rails_template_18f new <<PATH_TO_PROJECT>> --no-hotwire`
|
21
18
|
|
22
|
-
|
19
|
+
This creates a Rails application that is appropriate for both server-rendered applications,
|
23
20
|
as well as a basis for installing a separate Single Page Application (SPA) library such as React.
|
24
21
|
|
25
22
|
#### A bit more JavaScript needed
|
26
23
|
|
27
|
-
`
|
24
|
+
`rails_template_18f new <<PATH_TO_PROJECT>> --hotwire`
|
28
25
|
|
29
|
-
|
26
|
+
This creates a Rails application that includes the [Hotwire](https://hotwired.dev/) JavaScript framework.
|
30
27
|
|
31
28
|
Hotwire can be used to add [a bit of JavaScript](https://engineering.18f.gov/web-architecture/#:~:text=are%20more%20complex-,If%20your%20use%20case%20requires%20a%20bit%20of%20client%2Dside%20interactivity%2C%20use%20the%20above%20options%20with%20a%20bit%20of%20JavaScript.,-You%20might%20use)
|
32
29
|
for more interactivity than server-rendered apps, but less than a full SPA.
|
33
30
|
|
34
31
|
### Available Options
|
35
32
|
|
36
|
-
The following options can be added
|
33
|
+
The following options can be added to change how the template behaves.
|
37
34
|
|
38
|
-
**Important:** You must not pass `--skip-bundle` or `--skip-javascript` to `
|
35
|
+
**Important:** You must not pass `--skip-bundle` or `--skip-javascript` to `rails_template_18f` or various aspects of the template will be broken
|
39
36
|
|
40
37
|
#### `--javascript=esbuild`
|
41
38
|
|
@@ -46,7 +43,7 @@ maintaining IE11 support with esbuild may be tricky.
|
|
46
43
|
|
47
44
|
Each of the skipped frameworks in `railsrc` can be overridden on the command line. For example: `--no-skip-active-storage` will include support for `ActiveStorage` document uploads
|
48
45
|
|
49
|
-
### What `
|
46
|
+
### What default use or `--no-hotwire` does
|
50
47
|
|
51
48
|
```
|
52
49
|
--skip-active-storage # don't include ActiveStorage for document upload
|
@@ -61,9 +58,9 @@ Each of the skipped frameworks in `railsrc` can be overridden on the command lin
|
|
61
58
|
--database=postgresql # default to PostgreSQL
|
62
59
|
```
|
63
60
|
|
64
|
-
### What
|
61
|
+
### What `--hotwire` does
|
65
62
|
|
66
|
-
|
63
|
+
Identical to `--no-hotwire` except that [Hotwire](https://hotwired.dev/) and [ActionCable](https://guides.rubyonrails.org/action_cable_overview.html) are not skipped.
|
67
64
|
|
68
65
|
ActionCable is included to enable the [Turbo Streams](https://turbo.hotwired.dev/handbook/streams) functionality of Hotwire.
|
69
66
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "thor"
|
5
|
+
|
6
|
+
class CLI < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
desc "new APP_DIRECTORY [options] [rails new arguments]", "Run rails new with 18F flavor"
|
10
|
+
option :hotwire, type: :boolean, default: false, desc: "Enable hotwire JS framework"
|
11
|
+
long_desc <<-LONGDESC
|
12
|
+
Create a new rails application in <APP_DIRECTORY> as customized by
|
13
|
+
|
14
|
+
* railsrc: https://github.com/18F/rails-template/blob/main/railsrc
|
15
|
+
|
16
|
+
* template.rb: https://github.com/18F/rails-template/blob/main/template.rb
|
17
|
+
|
18
|
+
with --hotwire option, includes the Hotwire JS framework
|
19
|
+
|
20
|
+
all other arguments will be passed as-is to `rails new`
|
21
|
+
LONGDESC
|
22
|
+
def new(app_directory, *rails_arguments)
|
23
|
+
gem_path = File.expand_path("..", __dir__)
|
24
|
+
railsrc = options[:hotwire] ? "railsrc-hotwire" : "railsrc"
|
25
|
+
run "rails new #{app_directory} --rc=#{File.join(gem_path, railsrc)} --template=#{File.join(gem_path, "template.rb")} #{rails_arguments.join(" ")}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
CLI.start(ARGV)
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
require "bundler"
|
5
|
+
|
6
|
+
module RailsTemplate18f
|
7
|
+
module Generators
|
8
|
+
class I18nGenerator < ::Rails::Generators::Base
|
9
|
+
include Base
|
10
|
+
|
11
|
+
class_option :languages, default: "es,fr,zh", desc: "Comma separated list of supported language short codes"
|
12
|
+
|
13
|
+
desc <<~DESC
|
14
|
+
Description:
|
15
|
+
Install translation framework and configuration for given languages.
|
16
|
+
Always installs configuration for English
|
17
|
+
DESC
|
18
|
+
|
19
|
+
def install_helper_gem_and_tasks
|
20
|
+
return if file_content("Gemfile").match?(/gem "i18n-tasks"/)
|
21
|
+
gem_group :development, :test do
|
22
|
+
gem "i18n-tasks", "~> 0.9"
|
23
|
+
end
|
24
|
+
Bundler.with_original_env do
|
25
|
+
in_root do
|
26
|
+
run "bundle install"
|
27
|
+
run "cp $(i18n-tasks gem-path)/templates/config/i18n-tasks.yml config/"
|
28
|
+
run "cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
insert_into_file "config/i18n-tasks.yml", "\n#{indent("- app/assets/builds", 4)}", after: "exclude:"
|
32
|
+
uncomment_lines "config/i18n-tasks.yml", "ignore_missing:"
|
33
|
+
insert_into_file "config/i18n-tasks.yml", indent(<<~EOM), after: "ignore_missing:\n"
|
34
|
+
- 'shared.languages.*'
|
35
|
+
- 'shared.header.{title,close,demo_banner,menu}'
|
36
|
+
EOM
|
37
|
+
end
|
38
|
+
|
39
|
+
def install_translations
|
40
|
+
inside "config/locales" do
|
41
|
+
template "en.yml"
|
42
|
+
languages.each do |lang|
|
43
|
+
copy_file "#{lang}.yml"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def configure_i18n
|
49
|
+
application "config.i18n.fallbacks = [:en]"
|
50
|
+
available_regex = /^(\s*config.i18n.available_locales).*$/
|
51
|
+
if file_content("config/application.rb").match?(available_regex)
|
52
|
+
gsub_file "config/application.rb", available_regex, "\\1 = #{supported_languages}"
|
53
|
+
else
|
54
|
+
application "config.i18n.available_locales = #{supported_languages}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def install_nav_helper
|
59
|
+
inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper", indent(<<~'EOH')
|
60
|
+
def format_active_locale(locale_string)
|
61
|
+
link_classes = "usa-nav__link"
|
62
|
+
if locale_string.to_sym == I18n.locale
|
63
|
+
link_classes = "#{link_classes} usa-current"
|
64
|
+
end
|
65
|
+
link_to t("shared.languages.#{locale_string}"), root_path(locale: locale_string), class: link_classes
|
66
|
+
end
|
67
|
+
EOH
|
68
|
+
end
|
69
|
+
|
70
|
+
def install_around_action
|
71
|
+
return if languages.empty?
|
72
|
+
inject_into_class "app/controllers/application_controller.rb", "ApplicationController", indent(<<~EOM)
|
73
|
+
around_action :switch_locale
|
74
|
+
|
75
|
+
def switch_locale(&action)
|
76
|
+
locale = params[:locale] || I18n.default_locale
|
77
|
+
I18n.with_locale(locale, &action)
|
78
|
+
end
|
79
|
+
EOM
|
80
|
+
end
|
81
|
+
|
82
|
+
def install_route
|
83
|
+
return if languages.empty?
|
84
|
+
return if file_content("config/routes.rb").match?(/scope "\(:locale\)"/)
|
85
|
+
regex = /(^.+\.routes\.draw do\s*$)\n(.*)^end$/m
|
86
|
+
gsub_file "config/routes.rb", regex, <<~'EOR'
|
87
|
+
\1
|
88
|
+
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
|
89
|
+
# Your application routes go here
|
90
|
+
\2
|
91
|
+
end
|
92
|
+
end
|
93
|
+
EOR
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def supported_languages
|
99
|
+
@supported_languages ||= [:en, *languages]
|
100
|
+
end
|
101
|
+
|
102
|
+
def languages
|
103
|
+
@languages ||= options[:languages].split(",").map(&:to_sym)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -12,11 +12,11 @@ en:
|
|
12
12
|
secure_heading: Secure .gov websites use HTTPS
|
13
13
|
us_flag: U.S. Flag
|
14
14
|
header:
|
15
|
-
title: <%= app_name.titleize %>
|
16
|
-
menu: Menu
|
17
15
|
close: Close
|
18
|
-
primary: Primary navigation
|
19
16
|
demo_banner: TEST SITE - Do not use real personal information (demo purposes only) - TEST SITE
|
17
|
+
menu: Menu
|
18
|
+
primary: Primary navigation
|
19
|
+
title: <%= app_name.titleize %>
|
20
20
|
languages:
|
21
21
|
en: English
|
22
22
|
es: Español
|
@@ -12,8 +12,8 @@ es:
|
|
12
12
|
secure_heading: Los sitios web seguros .gov usan HTTPS
|
13
13
|
us_flag: Bandera de Estados Unidos
|
14
14
|
header:
|
15
|
-
menu: Menú
|
16
15
|
close: Cerrar
|
17
|
-
primary: Navegacion primaria
|
18
16
|
demo_banner: SITIO DE PRUEBA - No utilice información personal real (sólo para propósitos de demostración) - SITIO DE PRUEBA
|
19
|
-
|
17
|
+
menu: Menú
|
18
|
+
primary: Navegacion primaria
|
19
|
+
skip_link: Salte al contenido principal
|
@@ -8,15 +8,12 @@ fr:
|
|
8
8
|
lock: Verrou
|
9
9
|
locked_padlock: Verrou fermé
|
10
10
|
official_site: Un site web officiel du gouvernement des États-Unis
|
11
|
-
secure_description_html: Un <strong>verrou</strong> (%{lock_icon}) ou
|
12
|
-
<strong>https://</strong> signifie que vous êtes connecté en toute
|
13
|
-
sécurité au site Web .gov. Partagez des informations sensibles
|
14
|
-
uniquement sur des sites Web officiels et sécurisés.
|
11
|
+
secure_description_html: Un <strong>verrou</strong> (%{lock_icon}) ou <strong>https://</strong> signifie que vous êtes connecté en toute sécurité au site Web .gov. Partagez des informations sensibles uniquement sur des sites Web officiels et sécurisés.
|
15
12
|
secure_heading: Les sites Web sécurisés .gov utilisent HTTPS
|
16
13
|
us_flag: Drapeau américain
|
17
14
|
header:
|
18
|
-
menu: Menu
|
19
15
|
close: Fermer
|
20
|
-
primary: Navigation primaire
|
21
16
|
demo_banner: SITE DE TEST - N’utilisez pas de véritables données personnelles (il s’agit d’une démonstration seulement) - SITE DE TEST
|
17
|
+
menu: Menu
|
18
|
+
primary: Navigation primaire
|
22
19
|
skip_link: Passer au contenu principal
|
File without changes
|
data/rails-template-18f.gemspec
CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
# guide at: https://bundler.io/guides/creating_gem.html
|
34
34
|
spec.add_dependency "railties", "~> 7.0.0"
|
35
35
|
spec.add_dependency "activesupport", "~> 7.0.0"
|
36
|
+
spec.add_dependency "thor", "~> 1.0"
|
36
37
|
|
37
38
|
spec.add_development_dependency "rspec", "~> 3.11"
|
38
39
|
spec.add_development_dependency "ammeter", "~> 1.1"
|
data/template.rb
CHANGED
@@ -48,24 +48,24 @@ unless Gem::Dependency.new("rails", "~> 7.0.0").match?("rails", Rails.gem_versio
|
|
48
48
|
end
|
49
49
|
|
50
50
|
# ask setup questions
|
51
|
-
|
51
|
+
terraform = yes?("Create terraform files for cloud.gov services? (y/n)")
|
52
52
|
@cloud_gov_organization = ask("What is your cloud.gov organization name? (Leave blank to fill in later)")
|
53
53
|
default_staging_space = "staging"
|
54
|
-
|
54
|
+
cloud_gov_staging_space = ask("What is your cloud.gov staging space name? (Default: #{default_staging_space})")
|
55
55
|
default_prod_space = "prod"
|
56
|
-
|
56
|
+
cloud_gov_production_space = ask("What is your cloud.gov production space name? (Default: #{default_prod_space})")
|
57
57
|
@cloud_gov_organization = "TKTK-cloud.gov-org-name" if @cloud_gov_organization.blank?
|
58
|
-
|
59
|
-
|
58
|
+
cloud_gov_staging_space = default_staging_space if cloud_gov_staging_space.blank?
|
59
|
+
cloud_gov_production_space = default_prod_space if cloud_gov_production_space.blank?
|
60
60
|
|
61
61
|
@github_actions = yes?("Create Github Actions? (y/n)")
|
62
62
|
@circleci_pipeline = yes?("Create CircleCI config? (y/n)")
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
63
|
+
newrelic = yes?("Create FEDRAMP New Relic config files? (y/n)")
|
64
|
+
dap = yes?("If this will be a public site, should we include Digital Analytics Program code? (y/n)")
|
65
|
+
supported_languages = []
|
66
|
+
supported_languages.push(:es) if yes?("Add Spanish to supported locales, with starter es.yml? (y/n)")
|
67
|
+
supported_languages.push(:fr) if yes?("Add French to supported locales, with starter fr.yml? (y/n)")
|
68
|
+
supported_languages.push(:zh) if yes?("Add Simplified Chinese to supported locales, with starter zh.yml? (y/n)")
|
69
69
|
|
70
70
|
running_node_version = `node --version`.gsub(/^v/, "").strip
|
71
71
|
@node_version = ask("What version of NodeJS are you using? (Default: #{running_node_version})")
|
@@ -168,24 +168,13 @@ uncomment_lines csp_initializer, "Rails.application"
|
|
168
168
|
uncomment_lines csp_initializer, /end$/
|
169
169
|
uncomment_lines csp_initializer, "content_security_policy_nonce"
|
170
170
|
|
171
|
-
|
172
|
-
after_bundle do
|
173
|
-
generate "rails_template18f:newrelic"
|
174
|
-
end
|
175
|
-
register_announcement("New Relic", <<~EOM)
|
176
|
-
A New Relic config file has been written to `config/newrelic.yml`
|
177
|
-
|
178
|
-
See instructions in README to get started sending data to New Relic
|
179
|
-
EOM
|
180
|
-
end
|
181
|
-
|
171
|
+
# install development & testing gems
|
182
172
|
gem_group :development, :test do
|
183
173
|
gem "rspec-rails", "~> 5.1"
|
184
174
|
gem "dotenv-rails", "~> 2.7"
|
185
175
|
gem "brakeman", "~> 5.2"
|
186
176
|
gem "bundler-audit", "~> 0.9"
|
187
177
|
gem "standard", "~> 1.7"
|
188
|
-
gem "i18n-tasks", "~> 0.9"
|
189
178
|
end
|
190
179
|
if ENV["RT_DEV"] == "true"
|
191
180
|
gem "rails_template_18f", group: :development, path: ENV["PWD"]
|
@@ -213,27 +202,7 @@ unless skip_git?
|
|
213
202
|
EOM
|
214
203
|
end
|
215
204
|
|
216
|
-
#
|
217
|
-
@supported_languages.each do |language|
|
218
|
-
template "config/locales/#{language}.yml", force: true
|
219
|
-
end
|
220
|
-
application "config.i18n.available_locales = #{@supported_languages}"
|
221
|
-
application "config.i18n.fallbacks = [:en]"
|
222
|
-
after_bundle do
|
223
|
-
# Recommended by i18n-tasks
|
224
|
-
run "cp $(i18n-tasks gem-path)/templates/config/i18n-tasks.yml config/"
|
225
|
-
end
|
226
|
-
insert_into_file "app/helpers/application_helper.rb", <<'EOH', before: /^end$/
|
227
|
-
def format_active_locale(locale_string)
|
228
|
-
link_classes = "usa-nav__link"
|
229
|
-
if locale_string.to_sym == I18n.locale
|
230
|
-
link_classes = "#{link_classes} usa-current"
|
231
|
-
end
|
232
|
-
link_to t("shared.languages.#{locale_string}"), root_path(locale: locale_string), class: link_classes
|
233
|
-
end
|
234
|
-
EOH
|
235
|
-
|
236
|
-
# setup USWDS
|
205
|
+
# setup USWDS and asset pipeline
|
237
206
|
copy_file "browserslistrc", ".browserslistrc" if webpack?
|
238
207
|
uncomment_lines "Gemfile", "sassc-rails" # use sassc-rails for asset minification in prod
|
239
208
|
after_bundle do
|
@@ -285,7 +254,7 @@ after_bundle do
|
|
285
254
|
@import "uswds-settings.scss";
|
286
255
|
@import "../../../node_modules/uswds/dist/scss/uswds.scss";
|
287
256
|
EOCSS
|
288
|
-
gsub_file "app/views/layouts/application.html.erb", "<html>",
|
257
|
+
gsub_file "app/views/layouts/application.html.erb", "<html>", '<html lang="<%= I18n.locale %>">'
|
289
258
|
gsub_file "app/views/layouts/application.html.erb", /^\s+<%= yield %>/, <<-EOHTML
|
290
259
|
<%= render "application/usa_banner" %>
|
291
260
|
<%= render "application/header" %>
|
@@ -300,32 +269,14 @@ end
|
|
300
269
|
directory "app/views/application"
|
301
270
|
|
302
271
|
after_bundle do
|
272
|
+
# install and configure RSpec
|
303
273
|
generate "rspec:install"
|
304
274
|
gsub_file "spec/spec_helper.rb", /^=(begin|end)$/, ""
|
305
275
|
|
306
|
-
# Setup the PagesController
|
276
|
+
# Setup the PagesController and home (root) route
|
307
277
|
generate :controller, "pages", "home", "--skip-routes", "--no-helper", "--no-assets"
|
278
|
+
route "root 'pages#home'"
|
308
279
|
|
309
|
-
if @supported_languages.count > 1
|
310
|
-
locale_switching = <<~EOM
|
311
|
-
around_action :switch_locale
|
312
|
-
|
313
|
-
def switch_locale(&action)
|
314
|
-
locale = params[:locale] || I18n.default_locale
|
315
|
-
I18n.with_locale(locale, &action)
|
316
|
-
end
|
317
|
-
EOM
|
318
|
-
insert_into_file "app/controllers/application_controller.rb", locale_switching, before: /^end/
|
319
|
-
|
320
|
-
route <<-'EOM'
|
321
|
-
scope "(:locale)", locale: /#{I18n.available_locales.join('|')}/ do
|
322
|
-
# Your application routes here
|
323
|
-
root 'pages#home'
|
324
|
-
end
|
325
|
-
EOM
|
326
|
-
else
|
327
|
-
route "root 'pages#home'"
|
328
|
-
end
|
329
280
|
gsub_file "spec/requests/pages_spec.rb", "/pages/home", "/"
|
330
281
|
gsub_file "spec/views/pages/home.html.erb_spec.rb", " pending \"add some examples to (or delete) \#{__FILE__}\"", <<-EOM
|
331
282
|
it "displays the gov banner" do
|
@@ -334,26 +285,46 @@ after_bundle do
|
|
334
285
|
end
|
335
286
|
EOM
|
336
287
|
|
337
|
-
|
338
|
-
|
339
|
-
|
288
|
+
# Setup translations
|
289
|
+
generate "rails_template18f:i18n", "--languages=#{supported_languages.join(",")}", "--force"
|
290
|
+
end
|
291
|
+
|
292
|
+
# install ADRs and compliance documentation
|
293
|
+
directory "doc"
|
294
|
+
register_announcement("Documentation", <<~EOM)
|
295
|
+
* Include a short description of your application in doc/compliance/apps/application.boundary.md
|
296
|
+
* Remember to keep your Logical Data Model up to date in doc/compliance/apps/data.logical.md
|
297
|
+
EOM
|
298
|
+
|
299
|
+
if newrelic
|
300
|
+
after_bundle do
|
301
|
+
generate "rails_template18f:newrelic"
|
302
|
+
end
|
303
|
+
register_announcement("New Relic", <<~EOM)
|
304
|
+
A New Relic config file has been written to `config/newrelic.yml`
|
305
|
+
|
306
|
+
See instructions in README to get started sending data to New Relic
|
307
|
+
EOM
|
308
|
+
end
|
309
|
+
|
310
|
+
if dap
|
311
|
+
after_bundle do
|
312
|
+
generate "rails_template18f:dap"
|
340
313
|
end
|
314
|
+
register_announcement("Digital Analytics Program", "Update the DAP agency code in app/views/layouts/application.html.erb")
|
341
315
|
end
|
342
316
|
|
343
317
|
# infrastructure & deploy
|
344
318
|
template "manifest.yml"
|
345
319
|
copy_file "lib/tasks/cf.rake"
|
346
320
|
directory "config/deployment"
|
347
|
-
after_bundle do
|
348
|
-
run "cp .gitignore .cfignore" unless skip_git?
|
349
|
-
end
|
350
321
|
|
351
|
-
if
|
322
|
+
if terraform
|
352
323
|
after_bundle do
|
353
324
|
generator_arguments = [
|
354
325
|
"--cg-org=#{@cloud_gov_organization}",
|
355
|
-
"--cg-staging=#{
|
356
|
-
"--cg-prod=#{
|
326
|
+
"--cg-staging=#{cloud_gov_staging_space}",
|
327
|
+
"--cg-prod=#{cloud_gov_production_space}"
|
357
328
|
]
|
358
329
|
generate "rails_template18f:terraform", *generator_arguments
|
359
330
|
end
|
@@ -371,10 +342,10 @@ end
|
|
371
342
|
if @github_actions
|
372
343
|
after_bundle do
|
373
344
|
generator_arguments = [
|
374
|
-
(
|
345
|
+
(terraform ? "--terraform" : "--no-terraform"),
|
375
346
|
"--cg-org=#{@cloud_gov_organization}",
|
376
|
-
"--cg-staging=#{
|
377
|
-
"--cg-prod=#{
|
347
|
+
"--cg-staging=#{cloud_gov_staging_space}",
|
348
|
+
"--cg-prod=#{cloud_gov_production_space}"
|
378
349
|
]
|
379
350
|
generate "rails_template18f:github_actions", *generator_arguments
|
380
351
|
end
|
@@ -391,10 +362,10 @@ end
|
|
391
362
|
if @circleci_pipeline
|
392
363
|
after_bundle do
|
393
364
|
generator_arguments = [
|
394
|
-
(
|
365
|
+
(terraform ? "--terraform" : "--no-terraform"),
|
395
366
|
"--cg-org=#{@cloud_gov_organization}",
|
396
|
-
"--cg-staging=#{
|
397
|
-
"--cg-prod=#{
|
367
|
+
"--cg-staging=#{cloud_gov_staging_space}",
|
368
|
+
"--cg-prod=#{cloud_gov_production_space}"
|
398
369
|
]
|
399
370
|
generate "rails_template18f:circleci", *generator_arguments
|
400
371
|
end
|
@@ -403,19 +374,6 @@ if @circleci_pipeline
|
|
403
374
|
EOM
|
404
375
|
end
|
405
376
|
|
406
|
-
directory "doc"
|
407
|
-
register_announcement("Documentation", <<~EOM)
|
408
|
-
* Include a short description of your application in doc/compliance/apps/application.boundary.md
|
409
|
-
* Remember to keep your Logical Data Model up to date in doc/compliance/apps/data.logical.md
|
410
|
-
EOM
|
411
|
-
|
412
|
-
if @dap
|
413
|
-
after_bundle do
|
414
|
-
generate "rails_template18f:dap"
|
415
|
-
end
|
416
|
-
register_announcement("Digital Analytics Program", "Update the DAP agency code in app/views/layouts/application.html.erb")
|
417
|
-
end
|
418
|
-
|
419
377
|
# setup production credentials file
|
420
378
|
require "rails/generators"
|
421
379
|
require "rails/generators/rails/encryption_key_file/encryption_key_file_generator"
|
@@ -444,6 +402,11 @@ EOM
|
|
444
402
|
|
445
403
|
# ensure this is the very last step
|
446
404
|
after_bundle do
|
405
|
+
if run_db_setup
|
406
|
+
rails_command "db:create"
|
407
|
+
rails_command "db:migrate"
|
408
|
+
end
|
409
|
+
|
447
410
|
# x86_64-linux is required to install gems on any linux system such as cloud.gov or CI pipelines
|
448
411
|
run "bundle lock --add-platform x86_64-linux"
|
449
412
|
|
@@ -453,10 +416,11 @@ after_bundle do
|
|
453
416
|
run "bundle exec standardrb --fix"
|
454
417
|
|
455
418
|
unless skip_git?
|
419
|
+
run "cp .gitignore .cfignore"
|
456
420
|
git add: "."
|
457
421
|
git commit: "-a -m 'Initial commit'"
|
458
422
|
end
|
459
423
|
|
460
|
-
# Post-install
|
424
|
+
# Post-install announcements
|
461
425
|
print_announcements
|
462
426
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_template_18f
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Ahearn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 7.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +97,8 @@ dependencies:
|
|
83
97
|
description:
|
84
98
|
email:
|
85
99
|
- ryan.ahearn@gsa.gov
|
86
|
-
executables:
|
100
|
+
executables:
|
101
|
+
- rails_template_18f
|
87
102
|
extensions: []
|
88
103
|
extra_rdoc_files: []
|
89
104
|
files:
|
@@ -98,6 +113,7 @@ files:
|
|
98
113
|
- Rakefile
|
99
114
|
- bin/console
|
100
115
|
- bin/setup
|
116
|
+
- exe/rails_template_18f
|
101
117
|
- lib/generators/rails_template18f/circleci/circleci_generator.rb
|
102
118
|
- lib/generators/rails_template18f/circleci/templates/Dockerfile.tt
|
103
119
|
- lib/generators/rails_template18f/circleci/templates/bin/ci-server-start
|
@@ -118,6 +134,11 @@ files:
|
|
118
134
|
- lib/generators/rails_template18f/github_actions/templates/github/workflows/rspec.yml.tt
|
119
135
|
- lib/generators/rails_template18f/github_actions/templates/github/workflows/terraform-production.yml
|
120
136
|
- lib/generators/rails_template18f/github_actions/templates/github/workflows/terraform-staging.yml
|
137
|
+
- lib/generators/rails_template18f/i18n/i18n_generator.rb
|
138
|
+
- lib/generators/rails_template18f/i18n/templates/config/locales/en.yml.tt
|
139
|
+
- lib/generators/rails_template18f/i18n/templates/config/locales/es.yml
|
140
|
+
- lib/generators/rails_template18f/i18n/templates/config/locales/fr.yml
|
141
|
+
- lib/generators/rails_template18f/i18n/templates/config/locales/zh.yml
|
121
142
|
- lib/generators/rails_template18f/newrelic/newrelic_generator.rb
|
122
143
|
- lib/generators/rails_template18f/newrelic/templates/config/newrelic.yml.tt
|
123
144
|
- lib/generators/rails_template18f/terraform/templates/terraform/README.md.tt
|
@@ -170,10 +191,6 @@ files:
|
|
170
191
|
- templates/config/deployment/staging.yml
|
171
192
|
- templates/config/environments/ci.rb
|
172
193
|
- templates/config/environments/staging.rb
|
173
|
-
- templates/config/locales/en.yml.tt
|
174
|
-
- templates/config/locales/es.yml
|
175
|
-
- templates/config/locales/fr.yml
|
176
|
-
- templates/config/locales/zh.yml
|
177
194
|
- templates/doc/adr/0001-record-architecture-decisions.md.tt
|
178
195
|
- templates/doc/adr/0002-initial-architecture-decisions.md.tt
|
179
196
|
- templates/doc/adr/0003-security-scans.md.tt
|