boring_generators 0.13.0 → 0.15.0

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +83 -49
  3. data/Gemfile.lock +2 -2
  4. data/README.md +14 -0
  5. data/lib/boring_generators/generator_helper.rb +46 -0
  6. data/lib/boring_generators/version.rb +1 -1
  7. data/lib/generators/boring/active_storage/azure/install/install_generator.rb +1 -1
  8. data/lib/generators/boring/annotate/install/install_generator.rb +52 -0
  9. data/lib/generators/boring/audit/install/install_generator.rb +1 -1
  10. data/lib/generators/boring/avo/install/install_generator.rb +25 -0
  11. data/lib/generators/boring/cancancan/install/install_generator.rb +34 -0
  12. data/lib/generators/boring/ci/gitlab_ci/install/install_generator.rb +120 -0
  13. data/lib/generators/boring/ci/gitlab_ci/install/templates/README +10 -0
  14. data/lib/generators/boring/ci/gitlab_ci/install/templates/capybara_helper.rb.tt +42 -0
  15. data/lib/generators/boring/ci/gitlab_ci/install/templates/ci.yml.tt +94 -0
  16. data/lib/generators/boring/ci/gitlab_ci/install/templates/database.yml.ci.tt +20 -0
  17. data/lib/generators/boring/ci/gitlab_ci/install/templates/system_sample_spec.rb.tt +14 -0
  18. data/lib/generators/boring/ci/gitlab_ci/install/templates/system_sample_test.rb.tt +13 -0
  19. data/lib/generators/boring/ci/gitlab_ci/install/templates/unit_sample_spec.rb.tt +7 -0
  20. data/lib/generators/boring/ci/gitlab_ci/install/templates/unit_sample_test.rb.tt +7 -0
  21. data/lib/generators/boring/devise/doorkeeper/install/install_generator.rb +190 -0
  22. data/lib/generators/boring/devise/install/install_generator.rb +42 -9
  23. data/lib/generators/boring/dotenv/install/install_generator.rb +51 -0
  24. data/lib/generators/boring/dotenv/install/templates/.env +3 -0
  25. data/lib/generators/boring/factory_bot/install/install_generator.rb +1 -1
  26. data/lib/generators/boring/faker/install/install_generator.rb +1 -1
  27. data/lib/generators/boring/favicon/build/build_generator.rb +1 -1
  28. data/lib/generators/boring/figjam/install/install_generator.rb +33 -0
  29. data/lib/generators/boring/honeybadger/install/install_generator.rb +47 -0
  30. data/lib/generators/boring/honeybadger/install/templates/README +6 -0
  31. data/lib/generators/boring/honeybadger/install/templates/honeybadger.yml.tt +26 -0
  32. data/lib/generators/boring/letter_opener/install/install_generator.rb +8 -9
  33. data/lib/generators/boring/oauth/google/install/install_generator.rb +2 -2
  34. data/lib/generators/boring/pronto/base_generator.rb +78 -0
  35. data/lib/generators/boring/pronto/github_action/install/install_generator.rb +27 -0
  36. data/lib/generators/boring/pronto/github_action/install/templates/pronto.yml.tt +53 -0
  37. data/lib/generators/boring/pronto/gitlab_ci/install/install_generator.rb +112 -0
  38. data/lib/generators/boring/pronto/gitlab_ci/install/templates/.gitlab-ci.yml.tt +22 -0
  39. data/lib/generators/boring/pronto/gitlab_ci/install/templates/README +7 -0
  40. data/lib/generators/boring/rack_mini_profiler/install/install_generator.rb +38 -0
  41. data/lib/generators/boring/rails_erd/install/install_generator.rb +35 -0
  42. data/lib/generators/boring/rspec/install/install_generator.rb +1 -1
  43. data/lib/generators/boring/sentry/install/install_generator.rb +48 -0
  44. data/lib/generators/boring/sentry/install/templates/sentry.rb +7 -0
  45. data/lib/generators/boring/vcr/install/install_generator.rb +126 -0
  46. data/lib/generators/boring/vcr/install/templates/rspec/vcr.rb.tt +9 -0
  47. data/lib/generators/boring/webmock/install/install_generator.rb +7 -6
  48. metadata +34 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3e2cf89c148c10914b919c1f9be41275681aa3ba8eaed7a22df5beb6adbef55
4
- data.tar.gz: '083314c373aeb284b779aba16629fa36cbbeb9f60521161d0f1de081b7c1f99a'
3
+ metadata.gz: 69a40221e1b2d89fde7e887f6f0b92f8d972548c000b363b4eab025f613844bc
4
+ data.tar.gz: c0f61c22deabdb64366d9d11b9e01f8cd6f09ca6b576f01342c0c455e70325ba
5
5
  SHA512:
6
- metadata.gz: a2f943d1a4fdda23f2a1905a3491f11e5aa8adde05371b24f91c20daa3dc7355a4d1a51e9d82243b642c2ddb5e738a5885369b034c79e87f801078186cf645b5
7
- data.tar.gz: 4b1f672d170a27bd8782e423b228a45974ad5c6a2e8262adbfe91a109cc29b10f449d20176c8113201db119363fa3b035ce7707a71365ecfb391ee1a18a77cb8
6
+ metadata.gz: 65ac7ade20d72cc641bda7282f66fca33e330ff891fad2f4eaffce20914a0776e02e7afba1da2553308c54b56bd46362e1dd3c0c76ddae36c632013b72f36dc8
7
+ data.tar.gz: fc30ecc6102379477e7c05a97657318ed2e22560acf3098154a1da45d9d0ad2426677caa90a86e755b7a2080f0183be92f345aada6f89f8b39d923a61bbf4208
data/CHANGELOG.md CHANGED
@@ -2,81 +2,113 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.15.0 (Aug 4th, 2024)
6
+
7
+ * Adds Gitlab CI generator. ([@coolprobn][])
8
+
9
+ ## 0.14.0 (Aug 4th, 2024)
10
+
11
+ - Adds Figjam generator. ([@mausamp][])
12
+ - Adds Pronto Generator with Gitlab CI ([@coolprobn][])
13
+ - Adds Rack Mini Profiler generator. ([@mausamp][])
14
+ - Adds VCR generator. ([@TheZero0-ctrl][])
15
+ - Adds Pronto Generator with Gihub Action. ([@TheZero0-ctrl][])
16
+ - Adds Doorkeeper Generator with Devise. ([@TheZero0-ctrl][])
17
+ - Adds Avo generator. ([@mausamp][])
18
+ - Adds Sentry generator. ([@mausamp][])
19
+ - Adds Dotenv generator. ([@mausamp][])
20
+ - Adds Honeybadger generator. ([@mausamp][])
21
+ - Adds Rails ERD generator. ([@mausamp][])
22
+ - Adds Annotate Generator. ([@TheZero0-ctrl][])
23
+ - Adds CanCanCan generator. ([@TheZero0-ctrl][])
24
+
5
25
  ## 0.13.0 (March 26th, 2024)
6
- * Adds Letter Opener generator. ([@coolprobn][])
7
- * Adds Whenever generator. ([@aadil][])
8
- * Adds Rswag generator. ([@coolprobn][])
9
- * Adds Webmock generator. ([@aadil][])
26
+
27
+ - Adds Letter Opener generator. ([@coolprobn][])
28
+ - Adds Whenever generator. ([@aadil][])
29
+ - Adds Rswag generator. ([@coolprobn][])
30
+ - Adds Webmock generator. ([@aadil][])
10
31
 
11
32
  ## 0.12.0 (May 8th, 2023)
12
- * Adds Flipper generator. ([@abhaynikam][])
13
- * Adds FactoryBot generator. ([@abhaynikam][])
14
- * Adds Faker generator. ([@abhaynikam][])
15
- * Adds RSpec generator. ([@abhaynikam][])
16
- * Update default node-version for GitHub Action generator and fixes PG setup issues. ([@abhaynikam][])
17
- * Updates Bootstrap generator for supporting Bootstrap 5 with popper.js. ([@abhaynikam][])
18
- * Adds Overcommit generator for RuboCop. ([@coolprobn][])
19
- * Updates RuboCop generator to add rubocop-rake extension and support test frameworks ([@coolprobn][])
33
+
34
+ - Adds Flipper generator. ([@abhaynikam][])
35
+ - Adds FactoryBot generator. ([@abhaynikam][])
36
+ - Adds Faker generator. ([@abhaynikam][])
37
+ - Adds RSpec generator. ([@abhaynikam][])
38
+ - Update default node-version for GitHub Action generator and fixes PG setup issues. ([@abhaynikam][])
39
+ - Updates Bootstrap generator for supporting Bootstrap 5 with popper.js. ([@abhaynikam][])
40
+ - Adds Overcommit generator for RuboCop. ([@coolprobn][])
41
+ - Updates RuboCop generator to add rubocop-rake extension and support test frameworks ([@coolprobn][])
20
42
 
21
43
  ## 0.11.0 (June 23rd, 2021)
22
- * Adds Stimulus generator. ([@abhaynikam][])
23
- * Adds Rails Admin generator. ([@abhaynikam][])
24
- * Adds Paper Trail generator. ([@abhaynikam][])
44
+
45
+ - Adds Stimulus generator. ([@abhaynikam][])
46
+ - Adds Rails Admin generator. ([@abhaynikam][])
47
+ - Adds Paper Trail generator. ([@abhaynikam][])
25
48
 
26
49
  ## 0.10.0 (May 26th, 2021)
27
- * Updates Stripe payment generator. ([@abhaynikam][])
28
- * Fixes many generators which install ruby gems to not hardcode gem version. ([@abhaynikam][])
50
+
51
+ - Updates Stripe payment generator. ([@abhaynikam][])
52
+ - Fixes many generators which install ruby gems to not hardcode gem version. ([@abhaynikam][])
29
53
 
30
54
  ## 0.9.0 (April 14th, 2021)
31
- * Adds Ahoy generator. ([@abhaynikam][])
32
- * Adds Stripe payment generator. ([@abhaynikam][])
55
+
56
+ - Adds Ahoy generator. ([@abhaynikam][])
57
+ - Adds Stripe payment generator. ([@abhaynikam][])
33
58
 
34
59
  ## 0.8.0 (February 28th, 2021)
35
- * Adds Devise Google Omniauth generator. ([@abhaynikam][])
36
- * Adds Devise Twitter Omniauth generator. ([@abhaynikam][])
37
- * Adds Twilio generator. ([@abhaynikam][])
60
+
61
+ - Adds Devise Google Omniauth generator. ([@abhaynikam][])
62
+ - Adds Devise Twitter Omniauth generator. ([@abhaynikam][])
63
+ - Adds Twilio generator. ([@abhaynikam][])
38
64
 
39
65
  ## 0.7.0 (January 30th, 2021)
40
- * Upgrade the Tailwind CSS generator to support Tailwind V2.0. ([@abhaynikam][])
41
- * Adds Devise GitHub Omniauth generator. ([@abhaynikam][])
66
+
67
+ - Upgrade the Tailwind CSS generator to support Tailwind V2.0. ([@abhaynikam][])
68
+ - Adds Devise GitHub Omniauth generator. ([@abhaynikam][])
42
69
 
43
70
  ## 0.6.0 (January 10th, 2021)
44
- * Updates default ruby version of GitHub Actions install generator. ([@jamesglover][])
45
- * Simplify generated GitHub Actions install ([@jamesglover][])
46
- * Adds boring generator CLI ([@luathn][])
47
- * Adds Devise Facebook Omniauth generator. ([@abhaynikam][])
71
+
72
+ - Updates default ruby version of GitHub Actions install generator. ([@jamesglover][])
73
+ - Simplify generated GitHub Actions install ([@jamesglover][])
74
+ - Adds boring generator CLI ([@luathn][])
75
+ - Adds Devise Facebook Omniauth generator. ([@abhaynikam][])
48
76
 
49
77
  ## 0.5.0 (December 20th, 2020)
50
- * Adds favicon build generator. ([@abhaynikam][])
51
- * Adds Pundit install generator. ([@CiTroNaK][])
52
- * Adds GraphQL generator. ([@abhaynikam][])
53
- * Adds SimpleForm generator. ([@abhaynikam][])
54
- * Adds Devise generator. ([@abhaynikam][])
78
+
79
+ - Adds favicon build generator. ([@abhaynikam][])
80
+ - Adds Pundit install generator. ([@CiTroNaK][])
81
+ - Adds GraphQL generator. ([@abhaynikam][])
82
+ - Adds SimpleForm generator. ([@abhaynikam][])
83
+ - Adds Devise generator. ([@abhaynikam][])
55
84
 
56
85
  ## 0.4.0 (October 23rd, 2020)
57
- * Adds CircleCI install generator. ([@abhaynikam][])
58
- * Adds GitHub Actions install generator. ([@abhaynikam][])
59
- * Adds Travis CI install generator. ([@abhaynikam][])
60
- * Adds Rubocop install generator. ([@abhaynikam][])
86
+
87
+ - Adds CircleCI install generator. ([@abhaynikam][])
88
+ - Adds GitHub Actions install generator. ([@abhaynikam][])
89
+ - Adds Travis CI install generator. ([@abhaynikam][])
90
+ - Adds Rubocop install generator. ([@abhaynikam][])
61
91
 
62
92
  ## 0.3.0 (September 19th, 2020)
63
- * Adds Bullet install generator. ([@abhaynikam][])
64
- * Adds Audit gems(bundler-audit, ruby_audit) install generator. ([@abhaynikam][])
65
- * Adds Pry install generator. ([@abhaynikam][])
66
- * Adds Active Storage Google install generator. ([@abhaynikam][])
67
- * Adds Active Storage AWS install generator. ([@abhaynikam][])
68
- * Adds Active Storage Microsoft Azure install generator. ([@abhaynikam][])
93
+
94
+ - Adds Bullet install generator. ([@abhaynikam][])
95
+ - Adds Audit gems(bundler-audit, ruby_audit) install generator. ([@abhaynikam][])
96
+ - Adds Pry install generator. ([@abhaynikam][])
97
+ - Adds Active Storage Google install generator. ([@abhaynikam][])
98
+ - Adds Active Storage AWS install generator. ([@abhaynikam][])
99
+ - Adds Active Storage Microsoft Azure install generator. ([@abhaynikam][])
69
100
 
70
101
  ## 0.2.0 (September 16th, 2020)
71
- * Adds JQuery install generator. ([@abhaynikam][])
72
- * Adds Bootstrap install generator. ([@abhaynikam][])
73
- * Adds FontAwesome install generator via Yarn. ([@abhaynikam][])
74
- * Adds FontAwesome install generator via RubyGems. ([@abhaynikam][])
102
+
103
+ - Adds JQuery install generator. ([@abhaynikam][])
104
+ - Adds Bootstrap install generator. ([@abhaynikam][])
105
+ - Adds FontAwesome install generator via Yarn. ([@abhaynikam][])
106
+ - Adds FontAwesome install generator via RubyGems. ([@abhaynikam][])
75
107
 
76
108
  ## 0.1.0 (September 5th, 2020)
77
109
 
78
- * Adds Tailwind CSS install generator. ([@abhaynikam][])
79
- * Initial release. ([@abhaynikam][])
110
+ - Adds Tailwind CSS install generator. ([@abhaynikam][])
111
+ - Initial release. ([@abhaynikam][])
80
112
 
81
113
  [@abhaynikam]: https://github.com/abhaynikam
82
114
  [@CiTroNaK]: https://github.com/CiTroNaK
@@ -84,3 +116,5 @@
84
116
  [@luathn]: https://github.com/luathn
85
117
  [@coolprobn]: https://github.com/coolprobn
86
118
  [@aadil]: https://github.com/AdilRT
119
+ [@mausamp]: https://github.com/mausamp
120
+ [@TheZero0-ctrl]: https://github.com/TheZero0-ctrl
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- boring_generators (0.12.0)
4
+ boring_generators (0.14.0)
5
5
  railties
6
6
 
7
7
  GEM
@@ -143,4 +143,4 @@ DEPENDENCIES
143
143
  sqlite3 (~> 1.4)
144
144
 
145
145
  BUNDLED WITH
146
- 2.1.4
146
+ 2.4.10
data/README.md CHANGED
@@ -84,6 +84,20 @@ The boring generator introduces following generators:
84
84
  - Install Whenever: `rails generate boring:whenever:install`
85
85
  - Install Rswag: `rails generate boring:rswag:install --rails_port=<rails_app_port> --authentication_type=<api_authentication_type> --skip_api_authentication=<skip_api_authentication> --api_authentication_options=<api_authentication_options> --enable_swagger_ui_authentication=<enable_swagger_ui_authentication>`
86
86
  - Install Webmock: `rails generate boring:webmock:install --app_test_framework=<test_framework>`
87
+ - Install Figjam: `rails generate boring:figjam:install`
88
+ - Install Pronto with Gitlab CI: `rails generate boring:pronto:gitlab_ci:install`
89
+ - Install Pronto with Github Action: `rails generate boring:pronto:github_action:install`
90
+ - Install Rack Mini Profiler: `rails generate boring:rack_mini_profiler:install`
91
+ - Install VCR: `rails generate boring:vcr:install --testing_framework=<testing_framework> --stubbing_libraries=<stubbing_libraries>`
92
+ - Install Avo: `rails generate boring:avo:install`
93
+ - Install Doorkeeper with devise: `rails generate boring:devise:doorkeeper:install`
94
+ - Install Sentry: `rails generate boring:sentry:install --use_env_variable --breadcrumbs_logger=<breadcrumbs_logger_options>`
95
+ - Install Dotenv: `rails generate boring:dotenv:install`
96
+ - Install Honeybadger: `rails generate boring:honeybadger:install`
97
+ - Install Rails ERD: `rails generate boring:rails_erd:install`
98
+ - Install Annotate: `rails generate boring:annotate:install`
99
+ - Install CanCanCan: `rails generate boring:cancancan:install`
100
+ - Install Gitlab CI: `rails generate boring:ci:gitlab_ci:install`
87
101
 
88
102
  ## Screencasts
89
103
 
@@ -0,0 +1,46 @@
1
+ module BoringGenerators
2
+ module GeneratorHelper
3
+ include Rails::Generators::Actions
4
+
5
+ def app_ruby_version
6
+ with_ruby_string = File.read("Gemfile")[/^ruby\s+["']?([\d.]+)["']?/] || File.read(".ruby-version").strip
7
+
8
+ # only keep 3.3.0 from ruby-3.3.0
9
+ with_ruby_string.gsub(/[^\d\.]/, "").squish
10
+ end
11
+
12
+ def gem_installed?(gem_name)
13
+ gem_regex = /^\s*gem\s*['"]#{gem_name}['"]/
14
+
15
+ File.read("Gemfile").match?(gem_regex)
16
+ end
17
+
18
+ def bundle_install
19
+ Bundler.with_unbundled_env { run "bundle install" }
20
+ end
21
+
22
+ def check_and_install_gem(*args)
23
+ gem_name, = args
24
+
25
+ if gem_installed?(gem_name)
26
+ say "#{gem_name} is already in the Gemfile, skipping it...", :yellow
27
+ else
28
+ gem *args unless gem_installed?(gem_name)
29
+ end
30
+
31
+ bundle_install
32
+ end
33
+
34
+ def inject_into_file_if_new(*args)
35
+ file_name, content_to_add, = args
36
+
37
+ file_content = File.read(file_name)
38
+
39
+ content_exists = file_content.include?(content_to_add)
40
+
41
+ return if content_exists
42
+
43
+ inject_into_file *args
44
+ end
45
+ end
46
+ end
@@ -1,3 +1,3 @@
1
1
  module BoringGenerators
2
- VERSION = "0.13.0"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -2,7 +2,7 @@ module Boring
2
2
  module ActiveStorage
3
3
  module Azure
4
4
  class InstallGenerator < Rails::Generators::Base
5
- desc "Adds ActiveStorage Mircosoft Azure the application"
5
+ desc "Adds ActiveStorage Microsoft Azure the application"
6
6
 
7
7
  class_option :skip_active_storage, type: :boolean, aliases: "-s",
8
8
  desc: "Skips running ActiveStorage installer"
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'boring_generators/generator_helper'
4
+
5
+ module Boring
6
+ module Annotate
7
+ class InstallGenerator < Rails::Generators::Base
8
+ include BoringGenerators::GeneratorHelper
9
+
10
+ desc "Adds Annotate gem to the application"
11
+
12
+ class_option :skip_on_db_migrate,
13
+ type: :boolean,
14
+ alias: "-sm",
15
+ default: false,
16
+ desc: "Skip annotate on db:migrate. Defaults to false"
17
+
18
+ def add_annotate_gem
19
+ if gem_installed?("annotate")
20
+ say "annotate is already in the Gemfile, skipping it ...", :yellow
21
+ else
22
+ say "Adding annotate gem", :green
23
+ gem_content = <<~RUBY
24
+ \n
25
+ \tgem "annotate"
26
+ RUBY
27
+ insert_into_file "Gemfile", gem_content, after: /group :development do/
28
+ bundle_install
29
+ end
30
+ end
31
+
32
+ def configure_annotate
33
+ say "Configuring annotate", :green
34
+
35
+ Bundler.with_unbundled_env do
36
+ run "bundle exec rails g annotate:install"
37
+ end
38
+ end
39
+
40
+ def update_auto_annotate_models_rake
41
+ return unless options[:skip_on_db_migrate]
42
+
43
+ say "Setting skip_on_db_migrate to false on file 'lib/tasks/auto_annotate_models.rake'",
44
+ :green
45
+
46
+ gsub_file "lib/tasks/auto_annotate_models.rake",
47
+ "'skip_on_db_migrate' => 'false'",
48
+ "'skip_on_db_migrate' => 'true'"
49
+ end
50
+ end
51
+ end
52
+ end
@@ -13,7 +13,7 @@ module Boring
13
13
  \n
14
14
  \t# Patch-level verification for Bundler. https://github.com/rubysec/bundler-audit
15
15
  \tgem "bundler-audit", require: false
16
- \t# vulnerabity checker for Ruby itself. https://github.com/civisanalytics/ruby_audit
16
+ \t# vulnerability checker for Ruby itself. https://github.com/civisanalytics/ruby_audit
17
17
  \tgem "ruby_audit", require: false
18
18
  RUBY
19
19
  insert_into_file "Gemfile", audit_gems_content, after: /group :development do/
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Boring
4
+ module Avo
5
+ class InstallGenerator < Rails::Generators::Base
6
+ desc 'Adds Avo to the application'
7
+
8
+ def add_avo_gem
9
+ say 'Adding Avo gem', :green
10
+
11
+ Bundler.with_unbundled_env do
12
+ run 'bundle add avo'
13
+ end
14
+ end
15
+
16
+ def configure_avo
17
+ say 'Setting up Avo', :green
18
+
19
+ Bundler.with_unbundled_env do
20
+ run 'bundle exec rails generate avo:install'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'boring_generators/generator_helper'
4
+
5
+ module Boring
6
+ module Cancancan
7
+ class InstallGenerator < Rails::Generators::Base
8
+ include BoringGenerators::GeneratorHelper
9
+
10
+ desc "Adds cancancan gem to the application"
11
+
12
+ class_option :skip_config,
13
+ type: :boolean,
14
+ default: false,
15
+ desc: "Skip adding cancancan configuration. Default to false"
16
+
17
+ def add_cancancan_gem
18
+ say "Adding cancancan gem", :green
19
+ check_and_install_gem("cancancan")
20
+ bundle_install
21
+ end
22
+
23
+ def configure_cancancan
24
+ return if options[:skip_config]
25
+
26
+ say "Configuring cancancan", :green
27
+
28
+ Bundler.with_unbundled_env do
29
+ run "bundle exec rails g cancan:ability"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "boring_generators/generator_helper"
4
+
5
+ module Boring
6
+ module Ci
7
+ module GitlabCi
8
+ class InstallGenerator < Rails::Generators::Base
9
+ desc "Adds Gitlab CI to the application"
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ class_option :ruby_version,
13
+ aliases: "-rv",
14
+ type: :string,
15
+ desc:
16
+ "Ruby version used by your app. Defaults to .ruby_version or the version specified in your Gemfile."
17
+ class_option :app_test_framework,
18
+ aliases: "-tf",
19
+ type: :string,
20
+ enum: %w[minitest rspec],
21
+ default: "minitest",
22
+ desc:
23
+ "Tell us the test framework you use for the application. Defaults to Minitest."
24
+ class_option :environment_variable_manager,
25
+ aliases: "-evm",
26
+ type: :string,
27
+ enum: %w[rails_credentials dotenv figjam],
28
+ default: "rails_credentials",
29
+ desc:
30
+ "Tell us the environment variable manager you use. Defaults to Rails Credentials"
31
+ class_option :database,
32
+ aliases: "-d",
33
+ type: :string,
34
+ enum: %w[sqlite3 postgresql mysql],
35
+ default: "sqlite3",
36
+ desc: "Tell us the database you use in your app"
37
+ class_option :skip_sample_tests,
38
+ aliases: "-stt",
39
+ type: :boolean,
40
+ default: false,
41
+ desc:
42
+ "Skip sample tests. Useful when you are configuring Gitlab CI for existing Rails app"
43
+
44
+ include BoringGenerators::GeneratorHelper
45
+
46
+ def add_gitlab_ci_configurations
47
+ @ruby_version = options[:ruby_version] || app_ruby_version
48
+ @app_test_framework = options[:app_test_framework]
49
+ @environment_variable_manager = options[:environment_variable_manager]
50
+ @database = options[:database]
51
+
52
+ template("ci.yml", ".gitlab-ci.yml")
53
+ template("database.yml.ci", "config/database.yml.ci")
54
+ end
55
+
56
+ def add_gems_for_system_test
57
+ check_and_install_gem "capybara", group: :test
58
+ check_and_install_gem "selenium-webdriver", group: :test
59
+ end
60
+
61
+ def add_capybara_configurations
62
+ if options[:app_test_framework] == "minitest"
63
+ template("capybara_helper.rb", "test/helpers/capybara.rb")
64
+
65
+ inject_into_file_if_new "test/application_system_test_case.rb",
66
+ "require \"helpers/capybara\"\n",
67
+ before: "class ApplicationSystemTestCase"
68
+ gsub_file "test/application_system_test_case.rb",
69
+ /driven_by :selenium, using: :(?:chrome|headless_chrome).*\n/,
70
+ "driven_by :selenium_chrome_custom"
71
+
72
+ capybara_setup = <<-RUBY
73
+ \n
74
+ def setup
75
+ Capybara.server_host = "0.0.0.0" # bind to all interfaces
76
+ Capybara.server_port = 3000
77
+
78
+ if ENV["SELENIUM_REMOTE_URL"].present?
79
+ ip = Socket.ip_address_list.detect(&:ipv4_private?).ip_address
80
+ Capybara.app_host = "http://\#{ip}:\#{Capybara.server_port}"
81
+ end
82
+
83
+ super
84
+ end
85
+ RUBY
86
+
87
+ inject_into_file_if_new "test/application_system_test_case.rb",
88
+ optimize_indentation(
89
+ capybara_setup,
90
+ amount = 2
91
+ ),
92
+ after: "driven_by :selenium_chrome_custom"
93
+ else
94
+ template("capybara_helper.rb", "spec/support/capybara.rb")
95
+
96
+ inject_into_file_if_new "spec/rails_helper.rb",
97
+ "require_relative \"./support/capybara\"\n\n",
98
+ before: "RSpec.configure do |config|"
99
+ end
100
+ end
101
+
102
+ def add_sample_tests
103
+ return if options[:skip_sample_tests]
104
+
105
+ if options[:app_test_framework] == "minitest"
106
+ template("unit_sample_test.rb", "test/models/sample_test.rb")
107
+ template("system_sample_test.rb", "test/system/sample_test.rb")
108
+ else
109
+ template("unit_sample_spec.rb", "spec/models/sample_spec.rb")
110
+ template("system_sample_spec.rb", "spec/system/sample_spec.rb")
111
+ end
112
+ end
113
+
114
+ def show_readme
115
+ readme "README"
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,10 @@
1
+
2
+ ===============================================================================
3
+
4
+ You need to update your project's Gitlab CI variable configurations for the Gitlab CI to work correctly. Please take care of the following:
5
+
6
+ - Add your Gitlab personal access token under the variable `PRONTO_ACCESS_TOKEN`
7
+ - Copy your application's environment variables under `env` variable in CI/CD
8
+ - Add your Master Key required for decoding secret values under the variable `MASTER_KEY`
9
+
10
+ ===============================================================================
@@ -0,0 +1,42 @@
1
+ require "selenium-webdriver"
2
+
3
+ Capybara.register_driver :selenium_chrome_custom do |app|
4
+ options = Selenium::WebDriver::Chrome::Options.new
5
+
6
+ options.add_argument("--headless=new") unless ENV["SELENIUM_HEADFUL"]
7
+
8
+ options.add_argument("--window-size=1400,1400")
9
+ options.add_argument("--no-sandbox")
10
+ options.add_argument("--disable-dev-shm-usage")
11
+
12
+ remote_url = ENV.fetch("SELENIUM_REMOTE_URL", nil)
13
+
14
+ if remote_url
15
+ Capybara::Selenium::Driver.new(
16
+ app,
17
+ browser: :remote,
18
+ url: remote_url,
19
+ options:
20
+ )
21
+ else
22
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options:)
23
+ end
24
+ end
25
+
26
+ <%- if @app_test_framework == "rspec" -%>
27
+ RSpec.configure do |config|
28
+ config.before(:each, type: :system, js: true) do
29
+ # Make the test app listen to outside requests, required for the remote Selenium instance
30
+ Capybara.server_host = "0.0.0.0"
31
+ Capybara.server_port = 3000
32
+
33
+ if ENV.fetch("SELENIUM_REMOTE_URL", nil)
34
+ # Use the application container's IP instead of localhost so Capybara knows where to direct Selenium
35
+ ip = Socket.ip_address_list.detect(&:ipv4_private?).ip_address
36
+ Capybara.app_host = "http://#{ip}:#{Capybara.server_port}"
37
+ end
38
+
39
+ driven_by :selenium_chrome_custom
40
+ end
41
+ end
42
+ <%- end -%>