railties 7.1.3.4 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +128 -775
- data/lib/minitest/rails_plugin.rb +6 -3
- data/lib/rails/all.rb +1 -3
- data/lib/rails/api/task.rb +6 -4
- data/lib/rails/application/bootstrap.rb +5 -7
- data/lib/rails/application/configuration.rb +81 -43
- data/lib/rails/application/default_middleware_stack.rb +4 -0
- data/lib/rails/application/dummy_config.rb +2 -2
- data/lib/rails/application/finisher.rb +9 -3
- data/lib/rails/application/routes_reloader.rb +16 -2
- data/lib/rails/application.rb +27 -86
- data/lib/rails/backtrace_cleaner.rb +19 -4
- data/lib/rails/cli.rb +0 -1
- data/lib/rails/code_statistics.rb +128 -86
- data/lib/rails/code_statistics_calculator.rb +78 -76
- data/lib/rails/command/helpers/editor.rb +1 -1
- data/lib/rails/command.rb +0 -6
- data/lib/rails/commands/app/update_command.rb +94 -0
- data/lib/rails/commands/boot/boot_command.rb +14 -0
- data/lib/rails/commands/console/console_command.rb +2 -21
- data/lib/rails/commands/console/irb_console.rb +128 -0
- data/lib/rails/commands/credentials/USAGE +4 -4
- data/lib/rails/commands/credentials/credentials_command.rb +7 -3
- data/lib/rails/commands/dbconsole/dbconsole_command.rb +21 -30
- data/lib/rails/commands/dev/dev_command.rb +1 -1
- data/lib/rails/commands/devcontainer/devcontainer_command.rb +40 -0
- data/lib/rails/commands/rake/rake_command.rb +1 -1
- data/lib/rails/commands/runner/runner_command.rb +14 -3
- data/lib/rails/commands/server/server_command.rb +5 -3
- data/lib/rails/commands/stats/stats_command.rb +19 -0
- data/lib/rails/commands/test/test_command.rb +2 -0
- data/lib/rails/configuration.rb +10 -1
- data/lib/rails/console/methods.rb +7 -0
- data/lib/rails/dev_caching.rb +2 -2
- data/lib/rails/engine/configuration.rb +3 -1
- data/lib/rails/engine/lazy_route_set.rb +114 -0
- data/lib/rails/engine.rb +16 -12
- data/lib/rails/gem_version.rb +4 -4
- data/lib/rails/generators/actions.rb +3 -3
- data/lib/rails/generators/app_base.rb +115 -68
- data/lib/rails/generators/base.rb +1 -1
- data/lib/rails/generators/database.rb +263 -71
- data/lib/rails/generators/erb/authentication/authentication_generator.rb +15 -0
- data/lib/rails/generators/erb/authentication/templates/app/views/passwords/edit.html.erb +9 -0
- data/lib/rails/generators/erb/authentication/templates/app/views/passwords/new.html.erb +8 -0
- data/lib/rails/generators/erb/authentication/templates/app/views/sessions/new.html.erb +11 -0
- data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +2 -0
- data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +2 -0
- data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +2 -0
- data/lib/rails/generators/generated_attribute.rb +42 -12
- data/lib/rails/generators/migration.rb +3 -3
- data/lib/rails/generators/rails/app/app_generator.rb +75 -54
- data/lib/rails/generators/rails/app/templates/Dockerfile.tt +33 -17
- data/lib/rails/generators/rails/app/templates/Gemfile.tt +38 -23
- data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +6 -11
- data/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb.tt +4 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +17 -3
- data/lib/rails/generators/rails/app/templates/app/views/pwa/manifest.json.erb.tt +22 -0
- data/lib/rails/generators/rails/app/templates/app/views/pwa/service-worker.js +26 -0
- data/lib/rails/generators/rails/app/templates/bin/brakeman.tt +6 -0
- data/lib/rails/generators/rails/app/templates/bin/dev.tt +1 -0
- data/lib/rails/generators/rails/app/templates/bin/rubocop.tt +7 -0
- data/lib/rails/generators/rails/app/templates/bin/setup.tt +6 -5
- data/lib/rails/generators/rails/app/templates/bin/thrust.tt +4 -0
- data/lib/rails/generators/rails/app/templates/config/application.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +26 -3
- data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +30 -0
- data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +47 -0
- data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +26 -3
- data/lib/rails/generators/rails/app/templates/config/deploy.yml.tt +128 -0
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +22 -26
- data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +36 -48
- data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +7 -18
- data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +0 -7
- data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_8_0.rb.tt +30 -0
- data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +35 -27
- data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +6 -0
- data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +7 -1
- data/lib/rails/generators/rails/app/templates/dockerignore.tt +20 -2
- data/lib/rails/generators/rails/app/templates/github/ci.yml.tt +144 -0
- data/lib/rails/generators/rails/app/templates/github/dependabot.yml +12 -0
- data/lib/rails/generators/rails/app/templates/gitignore.tt +4 -5
- data/lib/rails/generators/rails/app/templates/kamal-secrets.tt +17 -0
- data/lib/rails/generators/rails/app/templates/public/400.html +114 -0
- data/lib/rails/generators/rails/app/templates/public/404.html +113 -66
- data/lib/rails/generators/rails/app/templates/public/406-unsupported-browser.html +114 -0
- data/lib/rails/generators/rails/app/templates/public/422.html +113 -66
- data/lib/rails/generators/rails/app/templates/public/500.html +113 -65
- data/lib/rails/generators/rails/app/templates/public/icon.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/icon.svg +3 -0
- data/lib/rails/generators/rails/app/templates/rubocop.yml.tt +8 -0
- data/lib/rails/generators/rails/app/templates/test/application_system_test_case.rb.tt +1 -1
- data/lib/rails/generators/rails/authentication/USAGE +6 -0
- data/lib/rails/generators/rails/authentication/authentication_generator.rb +58 -0
- data/lib/rails/generators/rails/authentication/templates/app/channels/application_cable/connection.rb.tt +16 -0
- data/lib/rails/generators/rails/authentication/templates/app/controllers/concerns/authentication.rb.tt +52 -0
- data/lib/rails/generators/rails/authentication/templates/app/controllers/passwords_controller.rb.tt +33 -0
- data/lib/rails/generators/rails/authentication/templates/app/controllers/sessions_controller.rb.tt +21 -0
- data/lib/rails/generators/rails/authentication/templates/app/mailers/passwords_mailer.rb.tt +6 -0
- data/lib/rails/generators/rails/authentication/templates/app/models/current.rb.tt +4 -0
- data/lib/rails/generators/rails/authentication/templates/app/models/session.rb.tt +3 -0
- data/lib/rails/generators/rails/authentication/templates/app/models/user.rb.tt +6 -0
- data/lib/rails/generators/rails/authentication/templates/app/views/passwords_mailer/reset.html.erb.tt +4 -0
- data/lib/rails/generators/rails/authentication/templates/app/views/passwords_mailer/reset.text.erb.tt +2 -0
- data/lib/rails/generators/rails/authentication/templates/test/mailers/previews/passwords_mailer_preview.rb.tt +7 -0
- data/lib/rails/generators/rails/controller/controller_generator.rb +1 -1
- data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +4 -0
- data/lib/rails/generators/rails/db/system/change/change_generator.rb +132 -21
- data/lib/rails/generators/rails/devcontainer/devcontainer_generator.rb +176 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/Dockerfile.tt +3 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/compose.yaml.tt +47 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/devcontainer.json.tt +37 -0
- data/lib/rails/generators/rails/migration/migration_generator.rb +4 -0
- data/lib/rails/generators/rails/plugin/plugin_generator.rb +47 -16
- data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +2 -2
- data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +6 -2
- data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +2 -0
- data/lib/rails/generators/rails/plugin/templates/bin/rubocop.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/github/ci.yml.tt +103 -0
- data/lib/rails/generators/rails/plugin/templates/github/dependabot.yml +12 -0
- data/lib/rails/generators/rails/plugin/templates/rubocop.yml.tt +8 -0
- data/lib/rails/generators/rails/plugin/templates/test/application_system_test_case.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +2 -2
- data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +2 -2
- data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +3 -3
- data/lib/rails/generators/rails/script/USAGE +18 -0
- data/lib/rails/generators/rails/script/script_generator.rb +18 -0
- data/lib/rails/generators/rails/script/templates/script.rb.tt +3 -0
- data/lib/rails/generators/test_unit/authentication/authentication_generator.rb +14 -0
- data/lib/rails/generators/test_unit/authentication/templates/test/fixtures/users.yml.tt +9 -0
- data/lib/rails/generators/test_unit/authentication/templates/test/models/user_test.rb.tt +7 -0
- data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb.tt +6 -4
- data/lib/rails/generators/test_unit/mailer/templates/preview.rb.tt +3 -2
- data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +15 -1
- data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +2 -2
- data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +2 -2
- data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +2 -0
- data/lib/rails/generators/test_unit/system/templates/application_system_test_case.rb.tt +1 -1
- data/lib/rails/generators/testing/assertions.rb +20 -0
- data/lib/rails/generators/testing/behavior.rb +7 -6
- data/lib/rails/generators.rb +7 -2
- data/lib/rails/health_controller.rb +1 -1
- data/lib/rails/info.rb +2 -2
- data/lib/rails/info_controller.rb +10 -2
- data/lib/rails/mailers_controller.rb +14 -1
- data/lib/rails/paths.rb +2 -2
- data/lib/rails/pwa_controller.rb +15 -0
- data/lib/rails/rack/logger.rb +15 -7
- data/lib/rails/rack/silence_request.rb +33 -0
- data/lib/rails/rack.rb +1 -0
- data/lib/rails/railtie/configurable.rb +2 -2
- data/lib/rails/railtie.rb +15 -16
- data/lib/rails/source_annotation_extractor.rb +31 -14
- data/lib/rails/tasks/framework.rake +0 -26
- data/lib/rails/tasks/statistics.rake +13 -28
- data/lib/rails/tasks/tmp.rake +1 -1
- data/lib/rails/templates/layouts/application.html.erb +1 -1
- data/lib/rails/templates/rails/info/notes.html.erb +65 -0
- data/lib/rails/templates/rails/mailers/email.html.erb +12 -8
- data/lib/rails/templates/rails/welcome/index.html.erb +4 -2
- data/lib/rails/test_help.rb +2 -4
- data/lib/rails/test_unit/reporter.rb +8 -2
- data/lib/rails/test_unit/runner.rb +27 -2
- data/lib/rails/test_unit/test_parser.rb +48 -0
- data/lib/rails.rb +7 -4
- metadata +77 -45
- data/lib/rails/app_updater.rb +0 -40
- data/lib/rails/commands/secrets/USAGE +0 -61
- data/lib/rails/commands/secrets/secrets_command.rb +0 -47
- data/lib/rails/console/app.rb +0 -35
- data/lib/rails/console/helpers.rb +0 -19
- data/lib/rails/generators/rails/app/templates/app/assets/config/manifest.js.tt +0 -2
- data/lib/rails/generators/rails/app/templates/app/channels/application_cable/channel.rb.tt +0 -4
- data/lib/rails/generators/rails/app/templates/app/channels/application_cable/connection.rb.tt +0 -4
- data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +0 -68
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +0 -54
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +0 -70
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +0 -24
- data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +0 -62
- data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +0 -53
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +0 -284
- data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +0 -13
- data/lib/rails/generators/rails/app/templates/public/apple-touch-icon-precomposed.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/apple-touch-icon.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/favicon.ico +0 -0
- data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +0 -13
- data/lib/rails/generators/rails/plugin/templates/rails/dummy_manifest.js.tt +0 -10
- data/lib/rails/generators/rails/plugin/templates/rails/engine_manifest.js.tt +0 -6
- data/lib/rails/generators/rails/plugin/templates/rails/javascripts.js.tt +0 -17
- data/lib/rails/ruby_version_check.rb +0 -17
- data/lib/rails/secrets.rb +0 -110
@@ -2,83 +2,33 @@
|
|
2
2
|
|
3
3
|
module Rails
|
4
4
|
module Generators
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
convert_database_option_for_jruby
|
12
|
-
end
|
13
|
-
|
14
|
-
def gem_for_database(database = options[:database])
|
15
|
-
case database
|
16
|
-
when "mysql" then ["mysql2", ["~> 0.5"]]
|
17
|
-
when "trilogy" then ["trilogy", ["~> 2.4"]]
|
18
|
-
when "postgresql" then ["pg", ["~> 1.1"]]
|
19
|
-
when "sqlite3" then ["sqlite3", ["~> 1.4"]]
|
20
|
-
when "oracle" then ["activerecord-oracle_enhanced-adapter", nil]
|
21
|
-
when "sqlserver" then ["activerecord-sqlserver-adapter", nil]
|
22
|
-
when "jdbcmysql" then ["activerecord-jdbcmysql-adapter", nil]
|
23
|
-
when "jdbcsqlite3" then ["activerecord-jdbcsqlite3-adapter", nil]
|
24
|
-
when "jdbcpostgresql" then ["activerecord-jdbcpostgresql-adapter", nil]
|
25
|
-
when "jdbc" then ["activerecord-jdbc-adapter", nil]
|
26
|
-
else [database, nil]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def docker_for_database_build(database = options[:database])
|
31
|
-
case database
|
32
|
-
when "mysql" then "build-essential default-libmysqlclient-dev git"
|
33
|
-
when "trilogy" then "build-essential default-libmysqlclient-dev git"
|
34
|
-
when "postgresql" then "build-essential git libpq-dev"
|
35
|
-
when "sqlite3" then "build-essential git"
|
36
|
-
else nil
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def docker_for_database_deploy(database = options[:database])
|
41
|
-
case database
|
42
|
-
when "mysql" then "curl default-mysql-client libvips"
|
43
|
-
when "trilogy" then "curl default-mysql-client libvips"
|
44
|
-
when "postgresql" then "curl libvips postgresql-client"
|
45
|
-
when "sqlite3" then "curl libsqlite3-0 libvips"
|
46
|
-
else nil
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def convert_database_option_for_jruby
|
51
|
-
if defined?(JRUBY_VERSION)
|
52
|
-
opt = options.dup
|
53
|
-
case opt[:database]
|
54
|
-
when "postgresql" then opt[:database] = "jdbcpostgresql"
|
55
|
-
when "mysql" then opt[:database] = "jdbcmysql"
|
56
|
-
when "sqlite3" then opt[:database] = "jdbcsqlite3"
|
57
|
-
end
|
58
|
-
self.options = opt.freeze
|
5
|
+
class Database
|
6
|
+
DATABASES = %w( mysql trilogy postgresql sqlite3 mariadb-mysql mariadb-trilogy )
|
7
|
+
|
8
|
+
module MySQL
|
9
|
+
def name
|
10
|
+
"mysql"
|
59
11
|
end
|
60
|
-
end
|
61
12
|
|
62
|
-
|
63
|
-
|
64
|
-
when "mysql" then "default-libmysqlclient-dev"
|
65
|
-
when "postgresql" then "libpq-dev"
|
66
|
-
else nil
|
13
|
+
def port
|
14
|
+
3306
|
67
15
|
end
|
68
|
-
end
|
69
16
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
17
|
+
def service
|
18
|
+
{
|
19
|
+
"image" => "mysql/mysql-server:8.0",
|
20
|
+
"restart" => "unless-stopped",
|
21
|
+
"environment" => {
|
22
|
+
"MYSQL_ALLOW_EMPTY_PASSWORD" => "true",
|
23
|
+
"MYSQL_ROOT_HOST" => "%"
|
24
|
+
},
|
25
|
+
"volumes" => ["mysql-data:/var/lib/mysql"],
|
26
|
+
"networks" => ["default"],
|
27
|
+
}
|
76
28
|
end
|
77
|
-
end
|
78
29
|
|
79
|
-
|
80
|
-
|
81
|
-
@mysql_socket ||= [
|
30
|
+
def socket
|
31
|
+
@socket ||= [
|
82
32
|
"/tmp/mysql.sock", # default
|
83
33
|
"/var/run/mysqld/mysqld.sock", # debian/gentoo
|
84
34
|
"/var/tmp/mysql.sock", # freebsd
|
@@ -90,6 +40,248 @@ module Rails
|
|
90
40
|
"/opt/lampp/var/mysql/mysql.sock" # xampp for linux
|
91
41
|
].find { |f| File.exist?(f) } unless Gem.win_platform?
|
92
42
|
end
|
43
|
+
|
44
|
+
def host
|
45
|
+
"127.0.0.1"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
module MariaDB
|
50
|
+
def name
|
51
|
+
"mariadb"
|
52
|
+
end
|
53
|
+
|
54
|
+
def port
|
55
|
+
3306
|
56
|
+
end
|
57
|
+
|
58
|
+
def service
|
59
|
+
{
|
60
|
+
"image" => "mariadb:10.5",
|
61
|
+
"restart" => "unless-stopped",
|
62
|
+
"networks" => ["default"],
|
63
|
+
"volumes" => ["mariadb-data:/var/lib/mysql"],
|
64
|
+
"environment" => {
|
65
|
+
"MARIADB_ALLOW_EMPTY_ROOT_PASSWORD" => "true",
|
66
|
+
},
|
67
|
+
}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class << self
|
72
|
+
def build(database_name)
|
73
|
+
case database_name
|
74
|
+
when "mysql" then MySQL2.new
|
75
|
+
when "postgresql" then PostgreSQL.new
|
76
|
+
when "trilogy" then Trilogy.new
|
77
|
+
when "sqlite3" then SQLite3.new
|
78
|
+
when "mariadb-mysql" then MariaDBMySQL2.new
|
79
|
+
when "mariadb-trilogy" then MariaDBTrilogy.new
|
80
|
+
else Null.new
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def all
|
85
|
+
@all ||= [
|
86
|
+
MySQL2.new,
|
87
|
+
PostgreSQL.new,
|
88
|
+
SQLite3.new,
|
89
|
+
MariaDBMySQL2.new,
|
90
|
+
MariaDBTrilogy.new
|
91
|
+
]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def name
|
96
|
+
raise NotImplementedError
|
97
|
+
end
|
98
|
+
|
99
|
+
def template
|
100
|
+
raise NotImplementedError
|
101
|
+
end
|
102
|
+
|
103
|
+
def service
|
104
|
+
raise NotImplementedError
|
105
|
+
end
|
106
|
+
|
107
|
+
def port
|
108
|
+
raise NotImplementedError
|
109
|
+
end
|
110
|
+
|
111
|
+
def feature_name
|
112
|
+
raise NotImplementedError
|
113
|
+
end
|
114
|
+
|
115
|
+
def gem
|
116
|
+
raise NotImplementedError
|
117
|
+
end
|
118
|
+
|
119
|
+
def base_package
|
120
|
+
raise NotImplementedError
|
121
|
+
end
|
122
|
+
|
123
|
+
def build_package
|
124
|
+
raise NotImplementedError
|
125
|
+
end
|
126
|
+
|
127
|
+
def socket; end
|
128
|
+
def host; end
|
129
|
+
|
130
|
+
def feature
|
131
|
+
return unless feature_name
|
132
|
+
|
133
|
+
{ feature_name => {} }
|
134
|
+
end
|
135
|
+
|
136
|
+
def volume
|
137
|
+
return unless service
|
138
|
+
|
139
|
+
"#{name}-data"
|
140
|
+
end
|
141
|
+
|
142
|
+
class MySQL2 < Database
|
143
|
+
include MySQL
|
144
|
+
|
145
|
+
def template
|
146
|
+
"config/databases/mysql.yml"
|
147
|
+
end
|
148
|
+
|
149
|
+
def gem
|
150
|
+
["mysql2", ["~> 0.5"]]
|
151
|
+
end
|
152
|
+
|
153
|
+
def base_package
|
154
|
+
"default-mysql-client"
|
155
|
+
end
|
156
|
+
|
157
|
+
def build_package
|
158
|
+
"default-libmysqlclient-dev"
|
159
|
+
end
|
160
|
+
|
161
|
+
def feature_name
|
162
|
+
"ghcr.io/rails/devcontainer/features/mysql-client"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
class PostgreSQL < Database
|
167
|
+
def name
|
168
|
+
"postgres"
|
169
|
+
end
|
170
|
+
|
171
|
+
def template
|
172
|
+
"config/databases/postgresql.yml"
|
173
|
+
end
|
174
|
+
|
175
|
+
def service
|
176
|
+
{
|
177
|
+
"image" => "postgres:16.1",
|
178
|
+
"restart" => "unless-stopped",
|
179
|
+
"networks" => ["default"],
|
180
|
+
"volumes" => ["postgres-data:/var/lib/postgresql/data"],
|
181
|
+
"environment" => {
|
182
|
+
"POSTGRES_USER" => "postgres",
|
183
|
+
"POSTGRES_PASSWORD" => "postgres"
|
184
|
+
}
|
185
|
+
}
|
186
|
+
end
|
187
|
+
|
188
|
+
def port
|
189
|
+
5432
|
190
|
+
end
|
191
|
+
|
192
|
+
def gem
|
193
|
+
["pg", ["~> 1.1"]]
|
194
|
+
end
|
195
|
+
|
196
|
+
def base_package
|
197
|
+
"postgresql-client"
|
198
|
+
end
|
199
|
+
|
200
|
+
def build_package
|
201
|
+
"libpq-dev"
|
202
|
+
end
|
203
|
+
|
204
|
+
def feature_name
|
205
|
+
"ghcr.io/rails/devcontainer/features/postgres-client"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
class Trilogy < Database
|
210
|
+
include MySQL
|
211
|
+
|
212
|
+
def template
|
213
|
+
"config/databases/trilogy.yml"
|
214
|
+
end
|
215
|
+
|
216
|
+
def gem
|
217
|
+
["trilogy", ["~> 2.7"]]
|
218
|
+
end
|
219
|
+
|
220
|
+
def base_package
|
221
|
+
nil
|
222
|
+
end
|
223
|
+
|
224
|
+
def build_package
|
225
|
+
nil
|
226
|
+
end
|
227
|
+
|
228
|
+
def feature_name
|
229
|
+
nil
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
class SQLite3 < Database
|
234
|
+
def name
|
235
|
+
"sqlite3"
|
236
|
+
end
|
237
|
+
|
238
|
+
def template
|
239
|
+
"config/databases/sqlite3.yml"
|
240
|
+
end
|
241
|
+
|
242
|
+
def service
|
243
|
+
nil
|
244
|
+
end
|
245
|
+
|
246
|
+
def port
|
247
|
+
nil
|
248
|
+
end
|
249
|
+
|
250
|
+
def gem
|
251
|
+
["sqlite3", [">= 2.1"]]
|
252
|
+
end
|
253
|
+
|
254
|
+
def base_package
|
255
|
+
"sqlite3"
|
256
|
+
end
|
257
|
+
|
258
|
+
def build_package
|
259
|
+
nil
|
260
|
+
end
|
261
|
+
|
262
|
+
def feature_name
|
263
|
+
"ghcr.io/rails/devcontainer/features/sqlite3"
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
class MariaDBMySQL2 < MySQL2
|
268
|
+
include MariaDB
|
269
|
+
end
|
270
|
+
|
271
|
+
class MariaDBTrilogy < Trilogy
|
272
|
+
include MariaDB
|
273
|
+
end
|
274
|
+
|
275
|
+
class Null < Database
|
276
|
+
def name; end
|
277
|
+
def template; end
|
278
|
+
def service; end
|
279
|
+
def port; end
|
280
|
+
def volume; end
|
281
|
+
def base_package; end
|
282
|
+
def build_package; end
|
283
|
+
def feature_name; end
|
284
|
+
end
|
93
285
|
end
|
94
286
|
end
|
95
287
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators/erb"
|
4
|
+
|
5
|
+
module Erb # :nodoc:
|
6
|
+
module Generators # :nodoc:
|
7
|
+
class AuthenticationGenerator < Rails::Generators::Base # :nodoc:
|
8
|
+
def create_files
|
9
|
+
template "app/views/passwords/new.html.erb"
|
10
|
+
template "app/views/passwords/edit.html.erb"
|
11
|
+
template "app/views/sessions/new.html.erb"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1>Update your password</h1>
|
2
|
+
|
3
|
+
<%%= tag.div(flash[:alert], style: "color:red") if flash[:alert] %>
|
4
|
+
|
5
|
+
<%%= form_with url: password_path(params[:token]), method: :put do |form| %>
|
6
|
+
<%%= form.password_field :password, required: true, autocomplete: "new-password", placeholder: "Enter new password", maxlength: 72 %><br>
|
7
|
+
<%%= form.password_field :password_confirmation, required: true, autocomplete: "new-password", placeholder: "Repeat new password", maxlength: 72 %><br>
|
8
|
+
<%%= form.submit "Save" %>
|
9
|
+
<%% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<h1>Forgot your password?</h1>
|
2
|
+
|
3
|
+
<%%= tag.div(flash[:alert], style: "color:red") if flash[:alert] %>
|
4
|
+
|
5
|
+
<%%= form_with url: passwords_path do |form| %>
|
6
|
+
<%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address] %><br>
|
7
|
+
<%%= form.submit "Email reset instructions" %>
|
8
|
+
<%% end %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%%= tag.div(flash[:alert], style: "color:red") if flash[:alert] %>
|
2
|
+
<%%= tag.div(flash[:notice], style: "color:green") if flash[:notice] %>
|
3
|
+
|
4
|
+
<%%= form_with url: session_path do |form| %>
|
5
|
+
<%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address] %><br>
|
6
|
+
<%%= form.password_field :password, required: true, autocomplete: "current-password", placeholder: "Enter your password", maxlength: 72 %><br>
|
7
|
+
<%%= form.submit "Sign in" %>
|
8
|
+
<%% end %>
|
9
|
+
<br>
|
10
|
+
|
11
|
+
<%%= link_to "Forgot password?", new_password_path %>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "active_support/time"
|
4
|
+
require "active_support/core_ext/string/starts_ends_with"
|
4
5
|
|
5
6
|
module Rails
|
6
7
|
module Generators
|
@@ -72,7 +73,7 @@ module Rails
|
|
72
73
|
def valid_type?(type)
|
73
74
|
DEFAULT_TYPES.include?(type.to_s) ||
|
74
75
|
!defined?(ActiveRecord::Base) ||
|
75
|
-
ActiveRecord::Base.
|
76
|
+
ActiveRecord::Base.lease_connection.valid_type?(type)
|
76
77
|
end
|
77
78
|
|
78
79
|
def valid_index_type?(index_type)
|
@@ -89,20 +90,24 @@ module Rails
|
|
89
90
|
def parse_type_and_options(type)
|
90
91
|
case type
|
91
92
|
when /(text|binary)\{([a-z]+)\}/
|
92
|
-
|
93
|
+
parsed_type, parsed_options = $1, { size: $2.to_sym }
|
93
94
|
when /(string|text|binary|integer)\{(\d+)\}/
|
94
|
-
|
95
|
+
parsed_type, parsed_options = $1, { limit: $2.to_i }
|
95
96
|
when /decimal\{(\d+)[,.-](\d+)\}/
|
96
|
-
|
97
|
+
parsed_type, parsed_options = :decimal, { precision: $1.to_i, scale: $2.to_i }
|
97
98
|
when /(references|belongs_to)\{(.+)\}/
|
98
|
-
|
99
|
+
parsed_type = $1
|
99
100
|
provided_options = $2.split(/[,.-]/)
|
100
|
-
|
101
|
-
|
102
|
-
return type, options
|
101
|
+
parsed_options = Hash[provided_options.map { |opt| [opt.to_sym, true] }]
|
103
102
|
else
|
104
|
-
|
103
|
+
parsed_type, parsed_options = type&.remove("!"), {}
|
104
|
+
end
|
105
|
+
|
106
|
+
if type&.ends_with?("!")
|
107
|
+
parsed_options[:null] = false
|
105
108
|
end
|
109
|
+
|
110
|
+
return parsed_type, parsed_options
|
106
111
|
end
|
107
112
|
end
|
108
113
|
|
@@ -121,9 +126,9 @@ module Rails
|
|
121
126
|
when :time then :time_field
|
122
127
|
when :datetime, :timestamp then :datetime_field
|
123
128
|
when :date then :date_field
|
124
|
-
when :text then :
|
125
|
-
when :rich_text then :
|
126
|
-
when :boolean then :
|
129
|
+
when :text then :textarea
|
130
|
+
when :rich_text then :rich_textarea
|
131
|
+
when :boolean then :checkbox
|
127
132
|
when :attachment, :attachments then :file_field
|
128
133
|
else
|
129
134
|
:text_field
|
@@ -239,6 +244,31 @@ module Rails
|
|
239
244
|
end
|
240
245
|
end
|
241
246
|
end
|
247
|
+
|
248
|
+
def to_s
|
249
|
+
if has_uniq_index?
|
250
|
+
"#{name}:#{type}#{print_attribute_options}:uniq"
|
251
|
+
elsif has_index?
|
252
|
+
"#{name}:#{type}#{print_attribute_options}:index"
|
253
|
+
else
|
254
|
+
"#{name}:#{type}#{print_attribute_options}"
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
private
|
259
|
+
def print_attribute_options
|
260
|
+
if attr_options.empty?
|
261
|
+
""
|
262
|
+
elsif attr_options[:size]
|
263
|
+
"{#{attr_options[:size]}}"
|
264
|
+
elsif attr_options[:limit]
|
265
|
+
"{#{attr_options[:limit]}}"
|
266
|
+
elsif attr_options[:precision] && attr_options[:scale]
|
267
|
+
"{#{attr_options[:precision]},#{attr_options[:scale]}}"
|
268
|
+
else
|
269
|
+
"{#{attr_options.keys.join(",")}}"
|
270
|
+
end
|
271
|
+
end
|
242
272
|
end
|
243
273
|
end
|
244
274
|
end
|
@@ -7,7 +7,7 @@ module Rails
|
|
7
7
|
module Generators
|
8
8
|
# Holds common methods for migrations. It assumes that migrations have the
|
9
9
|
# [0-9]*_name format and can be used by other frameworks (like Sequel)
|
10
|
-
# just by implementing the
|
10
|
+
# just by implementing the +next_migration_number+ method.
|
11
11
|
module Migration
|
12
12
|
extend ActiveSupport::Concern
|
13
13
|
attr_reader :migration_number, :migration_file_name, :migration_class_name
|
@@ -46,10 +46,10 @@ module Rails
|
|
46
46
|
end
|
47
47
|
|
48
48
|
# Creates a migration template at the given destination. The difference
|
49
|
-
# to the default template method is that the migration
|
49
|
+
# to the default template method is that the migration number is prepended
|
50
50
|
# to the destination file name.
|
51
51
|
#
|
52
|
-
# The migration
|
52
|
+
# The migration number, migration file name, migration class name are
|
53
53
|
# available as instance variables in the template to be rendered.
|
54
54
|
#
|
55
55
|
# migration_template "migration.rb", "db/migrate/add_foo_to_bar.rb"
|