boring_generators 0.13.0 → 0.14.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +79 -49
- data/Gemfile.lock +2 -2
- data/README.md +13 -0
- data/lib/boring_generators/generator_helper.rb +34 -0
- data/lib/boring_generators/version.rb +1 -1
- data/lib/generators/boring/active_storage/azure/install/install_generator.rb +1 -1
- data/lib/generators/boring/annotate/install/install_generator.rb +52 -0
- data/lib/generators/boring/audit/install/install_generator.rb +1 -1
- data/lib/generators/boring/avo/install/install_generator.rb +25 -0
- data/lib/generators/boring/cancancan/install/install_generator.rb +34 -0
- data/lib/generators/boring/devise/doorkeeper/install/install_generator.rb +190 -0
- data/lib/generators/boring/devise/install/install_generator.rb +11 -0
- data/lib/generators/boring/dotenv/install/install_generator.rb +51 -0
- data/lib/generators/boring/dotenv/install/templates/.env +3 -0
- data/lib/generators/boring/factory_bot/install/install_generator.rb +1 -1
- data/lib/generators/boring/faker/install/install_generator.rb +1 -1
- data/lib/generators/boring/favicon/build/build_generator.rb +1 -1
- data/lib/generators/boring/figjam/install/install_generator.rb +33 -0
- data/lib/generators/boring/honeybadger/install/install_generator.rb +47 -0
- data/lib/generators/boring/honeybadger/install/templates/README +6 -0
- data/lib/generators/boring/honeybadger/install/templates/honeybadger.yml.tt +26 -0
- data/lib/generators/boring/letter_opener/install/install_generator.rb +8 -9
- data/lib/generators/boring/oauth/google/install/install_generator.rb +2 -2
- data/lib/generators/boring/pronto/base_generator.rb +78 -0
- data/lib/generators/boring/pronto/github_action/install/install_generator.rb +27 -0
- data/lib/generators/boring/pronto/github_action/install/templates/pronto.yml.tt +53 -0
- data/lib/generators/boring/pronto/gitlab_ci/install/install_generator.rb +112 -0
- data/lib/generators/boring/pronto/gitlab_ci/install/templates/.gitlab-ci.yml.tt +22 -0
- data/lib/generators/boring/pronto/gitlab_ci/install/templates/README +7 -0
- data/lib/generators/boring/rack_mini_profiler/install/install_generator.rb +38 -0
- data/lib/generators/boring/rails_erd/install/install_generator.rb +35 -0
- data/lib/generators/boring/rspec/install/install_generator.rb +1 -1
- data/lib/generators/boring/sentry/install/install_generator.rb +48 -0
- data/lib/generators/boring/sentry/install/templates/sentry.rb +7 -0
- data/lib/generators/boring/vcr/install/install_generator.rb +125 -0
- data/lib/generators/boring/vcr/install/templates/rspec/vcr.rb.tt +8 -0
- data/lib/generators/boring/webmock/install/install_generator.rb +6 -5
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1c4e7578120facf94b1e17cadcb9e62f008ffec728658d650842d19ee931b82
|
4
|
+
data.tar.gz: 7a026a5987aec9f8e3ee38dd1218e48908e0df5891fcb0d8e9f91a904f9985f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aae856dd9081e7ab70e7d750f585474de515baf8a09c79d0ffef180162aeb1bb5317703ffc0f392ca6bc997ee36775ac1fe5f12e442339a73b5d50ac1df1fa5d
|
7
|
+
data.tar.gz: d4cce2e4bf333a907e7ace4fdb56c0218c4832f047aa644f019246fa3504ab6d21c2c49713d95df289d6507c76e9772a80dec965eb2657445d641833a3e69a00
|
data/CHANGELOG.md
CHANGED
@@ -2,81 +2,109 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.14.0 (Aug 4th, 2024)
|
6
|
+
|
7
|
+
- Adds Figjam generator. ([@mausamp][])
|
8
|
+
- Adds Pronto Generator with Gitlab CI ([@coolprobn][])
|
9
|
+
- Adds Rack Mini Profiler generator. ([@mausamp][])
|
10
|
+
- Adds VCR generator. ([@TheZero0-ctrl][])
|
11
|
+
- Adds Pronto Generator with Gihub Action. ([@TheZero0-ctrl][])
|
12
|
+
- Adds Doorkeeper Generator with Devise. ([@TheZero0-ctrl][])
|
13
|
+
- Adds Avo generator. ([@mausamp][])
|
14
|
+
- Adds Sentry generator. ([@mausamp][])
|
15
|
+
- Adds Dotenv generator. ([@mausamp][])
|
16
|
+
- Adds Honeybadger generator. ([@mausamp][])
|
17
|
+
- Adds Rails ERD generator. ([@mausamp][])
|
18
|
+
- Adds Annotate Generator. ([@TheZero0-ctrl][])
|
19
|
+
- Adds CanCanCan generator. ([@TheZero0-ctrl][])
|
20
|
+
|
5
21
|
## 0.13.0 (March 26th, 2024)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
22
|
+
|
23
|
+
- Adds Letter Opener generator. ([@coolprobn][])
|
24
|
+
- Adds Whenever generator. ([@aadil][])
|
25
|
+
- Adds Rswag generator. ([@coolprobn][])
|
26
|
+
- Adds Webmock generator. ([@aadil][])
|
10
27
|
|
11
28
|
## 0.12.0 (May 8th, 2023)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
29
|
+
|
30
|
+
- Adds Flipper generator. ([@abhaynikam][])
|
31
|
+
- Adds FactoryBot generator. ([@abhaynikam][])
|
32
|
+
- Adds Faker generator. ([@abhaynikam][])
|
33
|
+
- Adds RSpec generator. ([@abhaynikam][])
|
34
|
+
- Update default node-version for GitHub Action generator and fixes PG setup issues. ([@abhaynikam][])
|
35
|
+
- Updates Bootstrap generator for supporting Bootstrap 5 with popper.js. ([@abhaynikam][])
|
36
|
+
- Adds Overcommit generator for RuboCop. ([@coolprobn][])
|
37
|
+
- Updates RuboCop generator to add rubocop-rake extension and support test frameworks ([@coolprobn][])
|
20
38
|
|
21
39
|
## 0.11.0 (June 23rd, 2021)
|
22
|
-
|
23
|
-
|
24
|
-
|
40
|
+
|
41
|
+
- Adds Stimulus generator. ([@abhaynikam][])
|
42
|
+
- Adds Rails Admin generator. ([@abhaynikam][])
|
43
|
+
- Adds Paper Trail generator. ([@abhaynikam][])
|
25
44
|
|
26
45
|
## 0.10.0 (May 26th, 2021)
|
27
|
-
|
28
|
-
|
46
|
+
|
47
|
+
- Updates Stripe payment generator. ([@abhaynikam][])
|
48
|
+
- Fixes many generators which install ruby gems to not hardcode gem version. ([@abhaynikam][])
|
29
49
|
|
30
50
|
## 0.9.0 (April 14th, 2021)
|
31
|
-
|
32
|
-
|
51
|
+
|
52
|
+
- Adds Ahoy generator. ([@abhaynikam][])
|
53
|
+
- Adds Stripe payment generator. ([@abhaynikam][])
|
33
54
|
|
34
55
|
## 0.8.0 (February 28th, 2021)
|
35
|
-
|
36
|
-
|
37
|
-
|
56
|
+
|
57
|
+
- Adds Devise Google Omniauth generator. ([@abhaynikam][])
|
58
|
+
- Adds Devise Twitter Omniauth generator. ([@abhaynikam][])
|
59
|
+
- Adds Twilio generator. ([@abhaynikam][])
|
38
60
|
|
39
61
|
## 0.7.0 (January 30th, 2021)
|
40
|
-
|
41
|
-
|
62
|
+
|
63
|
+
- Upgrade the Tailwind CSS generator to support Tailwind V2.0. ([@abhaynikam][])
|
64
|
+
- Adds Devise GitHub Omniauth generator. ([@abhaynikam][])
|
42
65
|
|
43
66
|
## 0.6.0 (January 10th, 2021)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
67
|
+
|
68
|
+
- Updates default ruby version of GitHub Actions install generator. ([@jamesglover][])
|
69
|
+
- Simplify generated GitHub Actions install ([@jamesglover][])
|
70
|
+
- Adds boring generator CLI ([@luathn][])
|
71
|
+
- Adds Devise Facebook Omniauth generator. ([@abhaynikam][])
|
48
72
|
|
49
73
|
## 0.5.0 (December 20th, 2020)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
74
|
+
|
75
|
+
- Adds favicon build generator. ([@abhaynikam][])
|
76
|
+
- Adds Pundit install generator. ([@CiTroNaK][])
|
77
|
+
- Adds GraphQL generator. ([@abhaynikam][])
|
78
|
+
- Adds SimpleForm generator. ([@abhaynikam][])
|
79
|
+
- Adds Devise generator. ([@abhaynikam][])
|
55
80
|
|
56
81
|
## 0.4.0 (October 23rd, 2020)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
82
|
+
|
83
|
+
- Adds CircleCI install generator. ([@abhaynikam][])
|
84
|
+
- Adds GitHub Actions install generator. ([@abhaynikam][])
|
85
|
+
- Adds Travis CI install generator. ([@abhaynikam][])
|
86
|
+
- Adds Rubocop install generator. ([@abhaynikam][])
|
61
87
|
|
62
88
|
## 0.3.0 (September 19th, 2020)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
89
|
+
|
90
|
+
- Adds Bullet install generator. ([@abhaynikam][])
|
91
|
+
- Adds Audit gems(bundler-audit, ruby_audit) install generator. ([@abhaynikam][])
|
92
|
+
- Adds Pry install generator. ([@abhaynikam][])
|
93
|
+
- Adds Active Storage Google install generator. ([@abhaynikam][])
|
94
|
+
- Adds Active Storage AWS install generator. ([@abhaynikam][])
|
95
|
+
- Adds Active Storage Microsoft Azure install generator. ([@abhaynikam][])
|
69
96
|
|
70
97
|
## 0.2.0 (September 16th, 2020)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
98
|
+
|
99
|
+
- Adds JQuery install generator. ([@abhaynikam][])
|
100
|
+
- Adds Bootstrap install generator. ([@abhaynikam][])
|
101
|
+
- Adds FontAwesome install generator via Yarn. ([@abhaynikam][])
|
102
|
+
- Adds FontAwesome install generator via RubyGems. ([@abhaynikam][])
|
75
103
|
|
76
104
|
## 0.1.0 (September 5th, 2020)
|
77
105
|
|
78
|
-
|
79
|
-
|
106
|
+
- Adds Tailwind CSS install generator. ([@abhaynikam][])
|
107
|
+
- Initial release. ([@abhaynikam][])
|
80
108
|
|
81
109
|
[@abhaynikam]: https://github.com/abhaynikam
|
82
110
|
[@CiTroNaK]: https://github.com/CiTroNaK
|
@@ -84,3 +112,5 @@
|
|
84
112
|
[@luathn]: https://github.com/luathn
|
85
113
|
[@coolprobn]: https://github.com/coolprobn
|
86
114
|
[@aadil]: https://github.com/AdilRT
|
115
|
+
[@mausamp]: https://github.com/mausamp
|
116
|
+
[@TheZero0-ctrl]: https://github.com/TheZero0-ctrl
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -84,6 +84,19 @@ 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`
|
87
100
|
|
88
101
|
## Screencasts
|
89
102
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module BoringGenerators
|
2
|
+
module GeneratorHelper
|
3
|
+
include Rails::Generators::Actions
|
4
|
+
|
5
|
+
def app_ruby_version
|
6
|
+
with_ruby_string = `grep "^ruby.*$" Gemfile` || `cat .ruby-version`
|
7
|
+
|
8
|
+
# only keep 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
|
+
end
|
34
|
+
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
|
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#
|
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,190 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'boring_generators/generator_helper'
|
4
|
+
|
5
|
+
module Boring
|
6
|
+
module Devise
|
7
|
+
module Doorkeeper
|
8
|
+
class InstallGenerator < Rails::Generators::Base
|
9
|
+
include BoringGenerators::GeneratorHelper
|
10
|
+
|
11
|
+
desc "Adds doorkeeper with devise to the application"
|
12
|
+
|
13
|
+
class_option :model_name, type: :string, aliases: "-m", default: "User",
|
14
|
+
desc: "Tell us the user model name which will be used for authentication. Defaults to User"
|
15
|
+
class_option :grant_flows, type: :array, aliases: "-gf", default: %w[authorization_code client_credentials],
|
16
|
+
enum: %w[authorization_code client_credentials password],
|
17
|
+
desc: "Tell us the grant flows you want to use separated by space. Defaults to authorization_code and client_credentials"
|
18
|
+
class_option :api_only, type: :boolean, aliases: "-a", default: false,
|
19
|
+
desc: "Tell us if you want to setup doorkeeper for API only application. Defaults to false"
|
20
|
+
class_option :skip_applications_routes, type: :boolean, aliases: "-sr", default: false,
|
21
|
+
desc: "Tell us if you want to skip adding doorkeeper routes to manage applications. Defaults to false"
|
22
|
+
class_option :use_refresh_token, type: :boolean, aliases: "-rt", default: false,
|
23
|
+
desc: "Keep user logged in with refresh tokens. Defaults to false"
|
24
|
+
|
25
|
+
def verify_presence_of_devise_gem
|
26
|
+
return if gem_installed?("devise")
|
27
|
+
|
28
|
+
say "We couldn't find devise gem. Please configure devise gem and rerun the generator. Consider running `rails generate boring:devise:install` to set up Devise.",
|
29
|
+
:red
|
30
|
+
|
31
|
+
abort
|
32
|
+
end
|
33
|
+
|
34
|
+
def verify_presence_of_devise_model
|
35
|
+
return if File.exist?("app/models/#{options[:model_name].underscore}.rb")
|
36
|
+
|
37
|
+
say "We couldn't find the #{options[:model_name]} model. Maybe there is a typo? Please provide the correct model name and run the generator again.",
|
38
|
+
:red
|
39
|
+
|
40
|
+
abort
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_doorkeeper_gem
|
44
|
+
say "Adding doorkeeper gem", :green
|
45
|
+
|
46
|
+
check_and_install_gem "doorkeeper"
|
47
|
+
end
|
48
|
+
|
49
|
+
def run_doorkeeper_generators
|
50
|
+
say "Running doorkeeper generators", :green
|
51
|
+
|
52
|
+
Bundler.with_unbundled_env do
|
53
|
+
run "bundle exec rails generate doorkeeper:install"
|
54
|
+
run "bundle exec rails generate doorkeeper:migration"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def add_doorkeeper_related_association_to_model
|
59
|
+
model_name = options[:model_name].underscore
|
60
|
+
say "Adding doorkeeper related associations to the model file app/models/#{model_name}.rb",
|
61
|
+
:green
|
62
|
+
model_content = <<~RUBY
|
63
|
+
has_many :access_grants,
|
64
|
+
class_name: 'Doorkeeper::AccessGrant',
|
65
|
+
foreign_key: :resource_owner_id,
|
66
|
+
dependent: :delete_all # or :destroy if you need callbacks
|
67
|
+
|
68
|
+
has_many :access_tokens,
|
69
|
+
class_name: 'Doorkeeper::AccessToken',
|
70
|
+
foreign_key: :resource_owner_id,
|
71
|
+
dependent: :delete_all # or :destroy if you need callbacks
|
72
|
+
RUBY
|
73
|
+
|
74
|
+
inject_into_file "app/models/#{model_name}.rb",
|
75
|
+
optimize_indentation(model_content, 2),
|
76
|
+
after: "ApplicationRecord\n"
|
77
|
+
end
|
78
|
+
|
79
|
+
def update_doorkeeper_initializer
|
80
|
+
say "Updating doorkeeper initializer", :green
|
81
|
+
|
82
|
+
configure_resource_owner_authenticator if options[:grant_flows].include?("authorization_code")
|
83
|
+
configure_admin_authenticator unless options[:api_only] || options[:skip_applications_routes]
|
84
|
+
configure_resource_owner_from_credentials if options[:grant_flows].include?("password")
|
85
|
+
|
86
|
+
gsub_file "config/initializers/doorkeeper.rb",
|
87
|
+
/# grant_flows %w\[authorization_code client_credentials\]/,
|
88
|
+
"grant_flows %w[#{options[:grant_flows].uniq.join(' ')}]"
|
89
|
+
|
90
|
+
if options[:api_only]
|
91
|
+
gsub_file "config/initializers/doorkeeper.rb",
|
92
|
+
/# api_only/,
|
93
|
+
"api_only"
|
94
|
+
end
|
95
|
+
|
96
|
+
if options[:skip_applications_routes]
|
97
|
+
doorkeeper_routes_content = <<~RUBY
|
98
|
+
use_doorkeeper do
|
99
|
+
skip_controllers :applications, :authorized_applications
|
100
|
+
end
|
101
|
+
RUBY
|
102
|
+
|
103
|
+
gsub_file "config/routes.rb",
|
104
|
+
/.*use_doorkeeper/,
|
105
|
+
optimize_indentation(doorkeeper_routes_content, 2)
|
106
|
+
end
|
107
|
+
|
108
|
+
if options[:use_refresh_token]
|
109
|
+
uncomment_lines "config/initializers/doorkeeper.rb",
|
110
|
+
/use_refresh_token/
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def update_doorkeeper_migration
|
115
|
+
say "Updating doorkeeper migration", :green
|
116
|
+
model_name = options[:model_name].underscore
|
117
|
+
|
118
|
+
uncomment_lines Dir["db/migrate/*_create_doorkeeper_tables.rb"].first,
|
119
|
+
/add_foreign_key :oauth/
|
120
|
+
|
121
|
+
gsub_file Dir["db/migrate/*_create_doorkeeper_tables.rb"].first,
|
122
|
+
/<model>/,
|
123
|
+
":#{model_name.pluralize}"
|
124
|
+
|
125
|
+
return unless (%w[password client_credentials] & options[:grant_flows]).any?
|
126
|
+
|
127
|
+
gsub_file Dir["db/migrate/*_create_doorkeeper_tables.rb"].first,
|
128
|
+
/t.text :redirect_uri, null: false/,
|
129
|
+
"t.text :redirect_uri"
|
130
|
+
end
|
131
|
+
|
132
|
+
def show_message
|
133
|
+
return if options[:api_only] || options[:skip_applications_routes]
|
134
|
+
|
135
|
+
model_name = options[:model_name].underscore
|
136
|
+
admin_authenticator_content = "current_#{model_name} || warden.authenticate!(scope: :#{model_name})"
|
137
|
+
|
138
|
+
say "\nWe've implemented `#{admin_authenticator_content}` in the admin_authenticator block of config/initializers/doorkeeper.rb to manage access to application routes. Please adjust it as necessary to suit your requirements.",
|
139
|
+
:yellow
|
140
|
+
end
|
141
|
+
|
142
|
+
private
|
143
|
+
|
144
|
+
def configure_resource_owner_authenticator
|
145
|
+
model_name = options[:model_name].underscore
|
146
|
+
resource_owner_authenticator_content = <<~RUBY
|
147
|
+
resource_owner_authenticator do
|
148
|
+
current_#{model_name} || warden.authenticate!(scope: :#{model_name})
|
149
|
+
end
|
150
|
+
RUBY
|
151
|
+
|
152
|
+
gsub_file "config/initializers/doorkeeper.rb",
|
153
|
+
/.*resource_owner_authenticator do\n(?:\s|.)*?end/,
|
154
|
+
optimize_indentation(resource_owner_authenticator_content, 2)
|
155
|
+
end
|
156
|
+
|
157
|
+
def configure_admin_authenticator
|
158
|
+
model_name = options[:model_name].underscore
|
159
|
+
gsub_file "config/initializers/doorkeeper.rb",
|
160
|
+
/(?:# admin_authenticator do\n*)((?:\s|.)*?)(?:# end)/,
|
161
|
+
"admin_authenticator do\n" + "\\1" + "end"
|
162
|
+
|
163
|
+
admin_authenticator_content = "current_#{model_name} || warden.authenticate!(scope: :#{model_name})"
|
164
|
+
inject_into_file "config/initializers/doorkeeper.rb",
|
165
|
+
optimize_indentation(admin_authenticator_content, 4),
|
166
|
+
after: /admin_authenticator do\n/,
|
167
|
+
force: true
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
def configure_resource_owner_from_credentials
|
172
|
+
model_name = options[:model_name].underscore
|
173
|
+
resource_owner_for_credentials_content = <<~RUBY
|
174
|
+
resource_owner_from_credentials do |routes|
|
175
|
+
#{model_name} = #{options[:model_name]}.find_for_database_authentication(email: params[:email])
|
176
|
+
if #{model_name}&.valid_for_authentication? { #{model_name}.valid_password?(params[:password]) } && #{model_name}&.active_for_authentication?
|
177
|
+
request.env['warden'].set_user(#{model_name}, scope: :#{model_name}, store: false)
|
178
|
+
#{model_name}
|
179
|
+
end
|
180
|
+
end
|
181
|
+
RUBY
|
182
|
+
|
183
|
+
inject_into_file "config/initializers/doorkeeper.rb",
|
184
|
+
optimize_indentation(resource_owner_for_credentials_content, 2),
|
185
|
+
after: /resource_owner_authenticator do\n(?:\s|.)*?end\n/
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
@@ -13,6 +13,9 @@ module Boring
|
|
13
13
|
desc: "Skip generating devise views"
|
14
14
|
class_option :skip_devise_model, type: :boolean, aliases: "-sm",
|
15
15
|
desc: "Skip generating devise model"
|
16
|
+
class_option :run_db_migrate, type: :boolean, aliases: "-rdm",
|
17
|
+
desc: "Run migrations after generating user table",
|
18
|
+
default: false
|
16
19
|
|
17
20
|
def add_devise_gem
|
18
21
|
say "Adding devise gem", :green
|
@@ -64,6 +67,14 @@ module Boring
|
|
64
67
|
run "DISABLE_SPRING=1 bundle exec rails generate devise:views #{model_name.pluralize}"
|
65
68
|
end
|
66
69
|
end
|
70
|
+
|
71
|
+
def run_db_migrate
|
72
|
+
return unless options[:run_db_migrate]
|
73
|
+
|
74
|
+
Bundler.with_unbundled_env do
|
75
|
+
rails_command "db:migrate"
|
76
|
+
end
|
77
|
+
end
|
67
78
|
end
|
68
79
|
end
|
69
80
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "boring_generators/generator_helper"
|
4
|
+
|
5
|
+
module Boring
|
6
|
+
module Dotenv
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
include BoringGenerators::GeneratorHelper
|
9
|
+
|
10
|
+
desc "Adds dotenv gem to the application"
|
11
|
+
source_root File.expand_path("templates", __dir__)
|
12
|
+
|
13
|
+
def add_dotenv_gem
|
14
|
+
return if gem_installed?("dotenv-rails")
|
15
|
+
|
16
|
+
say "Adding dotenv gem", :green
|
17
|
+
|
18
|
+
check_and_install_gem "dotenv-rails", group: :development
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure_dotenv_gem
|
22
|
+
say "Configuring dotenv gem", :green
|
23
|
+
|
24
|
+
template ".env", ".env"
|
25
|
+
|
26
|
+
create_file ".gitignore" unless File.exist?(".gitignore")
|
27
|
+
|
28
|
+
FileUtils.cp(".env", ".env.sample")
|
29
|
+
|
30
|
+
add_env_files_to_gitignore
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def add_env_files_to_gitignore
|
36
|
+
if File.readlines(".gitignore").any? { |line| line.include?(".env") }
|
37
|
+
return
|
38
|
+
end
|
39
|
+
|
40
|
+
ignore_content = <<~ENV_FILE_NAMES
|
41
|
+
\n
|
42
|
+
# Ignore all environment files (except templates).
|
43
|
+
/.env
|
44
|
+
!/.env.*
|
45
|
+
ENV_FILE_NAMES
|
46
|
+
|
47
|
+
insert_into_file(".gitignore", ignore_content)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|