boring_generators 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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 -%>