File tree 5 files changed +131
-1
lines changed
generators/suspenders/install
test/generators/suspenders/install
5 files changed +131
-1
lines changed Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ Unreleased
18
18
* Introduce ` suspenders:prerequisites ` generator
19
19
* Introduce ` suspenders:ci ` generator
20
20
* Introduce ` suspenders:cleanup:organize_gemfile ` task
21
+ * Introduce ` suspenders:install:web ` generator
21
22
22
23
20230113.0 (January, 13, 2023)
23
24
Original file line number Diff line number Diff line change @@ -9,14 +9,24 @@ if you like missing deadlines.
9
9
10
10
## Usage
11
11
12
+ ### Existing Rails Applications
13
+
12
14
```
13
15
group :development, :test do
14
16
gem "suspenders"
15
17
end
16
18
```
17
19
18
20
```
19
- bin/rails g suspenders:all
21
+ bin/rails g suspenders:install:web
22
+ ```
23
+
24
+ ### New Rails Applications
25
+
26
+ ```
27
+ rails new my_app \
28
+ -d=postgresql \
29
+ -m=https://raw.githubusercontent.com/thoughtbot/suspenders/lib/install/web.rb
20
30
```
21
31
22
32
## Generators
Original file line number Diff line number Diff line change
1
+ module Suspenders
2
+ module Generators
3
+ module Install
4
+ class WebGenerator < Rails ::Generators ::Base
5
+ include Suspenders ::Generators ::APIAppUnsupported
6
+ include Suspenders ::Generators ::DatabaseUnsupported
7
+
8
+ def invoke_generators
9
+ # This needs to go first, since it configures `.node-version`
10
+ generate "suspenders:prerequisites"
11
+
12
+ generate "suspenders:accessibility"
13
+ generate "suspenders:advisories"
14
+ generate "suspenders:email"
15
+ generate "suspenders:factories"
16
+ generate "suspenders:inline_svg"
17
+ generate "suspenders:lint"
18
+ generate "suspenders:rake"
19
+ generate "suspenders:setup"
20
+ generate "suspenders:tasks"
21
+ generate "suspenders:testing"
22
+ generate "suspenders:views"
23
+
24
+ # jobs needs to be invoked before styles, since the syles generator
25
+ # creates Procfile.dev
26
+ generate "suspenders:styles"
27
+ generate "suspenders:jobs"
28
+
29
+ # Needs to be run last since it depends on lint, testing, and
30
+ # advisories
31
+ generate "suspenders:ci"
32
+ end
33
+
34
+ def cleanup
35
+ rake "suspenders:cleanup:organize_gemfile"
36
+ end
37
+
38
+ def lint
39
+ run "yarn run fix:prettier"
40
+ run "bundle exec rake standard:fix_unsafely"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
Original file line number Diff line number Diff line change
1
+ def apply_template!
2
+ if options [ :database ] == "postgresql" && options [ :skip_test ]
3
+ after_bundle do
4
+ gem_group :development , :test do
5
+ gem "suspenders" , github : "thoughtbot/suspenders" , branch : "suspenders-3-0-0-web-generator"
6
+ end
7
+
8
+ run "bundle install"
9
+
10
+ generate "suspenders:install:web"
11
+ rails_command "db:prepare"
12
+
13
+ say "\n Congratulations! You just pulled our suspenders."
14
+ end
15
+ else
16
+ message = <<~ERROR
17
+
18
+
19
+ === Please use the correct options ===
20
+
21
+ rails new <app_name> \\
22
+ --skip-test \\
23
+ -d=postgresql \\
24
+ -m=https://raw.githubusercontent.com/thoughtbot/suspenders/suspenders-3-0-0-web-generator/lib/install/web.rb
25
+ ERROR
26
+
27
+ fail Rails ::Generators ::Error , message
28
+ end
29
+ end
30
+
31
+ apply_template!
Original file line number Diff line number Diff line change
1
+ require "test_helper"
2
+ require "generators/suspenders/install/web_generator"
3
+
4
+ module Suspenders
5
+ module Generators
6
+ module Install
7
+ class WebGeneratorTest < Rails ::Generators ::TestCase
8
+ include Suspenders ::TestHelpers
9
+
10
+ tests Suspenders ::Generators ::Install ::WebGenerator
11
+ destination Rails . root
12
+ setup :prepare_destination
13
+ teardown :restore_destination
14
+
15
+ test "raises if API only application" do
16
+ within_api_only_app do
17
+ assert_raises Suspenders ::Generators ::APIAppUnsupported ::Error do
18
+ run_generator
19
+ end
20
+ end
21
+ end
22
+
23
+ test "raises if PostgreSQL is not the adapter" do
24
+ with_database "unsupported" do
25
+ assert_raises Suspenders ::Generators ::DatabaseUnsupported ::Error do
26
+ run_generator
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def prepare_destination
34
+ touch "Gemfile"
35
+ end
36
+
37
+ def restore_destination
38
+ remove_file_if_exists "Gemfile"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
You can’t perform that action at this time.
0 commit comments