boring_generators 0.5.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +12 -0
  3. data/.github/workflows/ci.yml +7 -1
  4. data/CHANGELOG.md +27 -0
  5. data/Gemfile +5 -0
  6. data/Gemfile.lock +94 -21
  7. data/README.md +27 -6
  8. data/Rakefile +1 -0
  9. data/boring_generators.gemspec +1 -1
  10. data/exe/boring +5 -0
  11. data/lib/boring_generators.rb +1 -0
  12. data/lib/boring_generators/cli.rb +26 -0
  13. data/lib/boring_generators/version.rb +1 -1
  14. data/lib/generators/boring/active_storage/aws/install/install_generator.rb +10 -8
  15. data/lib/generators/boring/active_storage/azure/install/install_generator.rb +9 -7
  16. data/lib/generators/boring/active_storage/google/install/install_generator.rb +9 -7
  17. data/lib/generators/boring/ahoy/install/install_generator.rb +31 -0
  18. data/lib/generators/boring/ahoy/install/templates/README +10 -0
  19. data/lib/generators/boring/audit/install/install_generator.rb +12 -9
  20. data/lib/generators/boring/bullet/install/install_generator.rb +4 -8
  21. data/lib/generators/boring/ci/github_action/install/install_generator.rb +16 -2
  22. data/lib/generators/boring/ci/github_action/install/templates/ci.yml.tt +1 -11
  23. data/lib/generators/boring/devise/install/install_generator.rb +12 -10
  24. data/lib/generators/boring/font_awesome/ruby_gem/install/install_generator.rb +3 -8
  25. data/lib/generators/boring/graphql/install/install_generator.rb +3 -7
  26. data/lib/generators/boring/oauth/base_generator.rb +63 -0
  27. data/lib/generators/boring/oauth/facebook/install/install_generator.rb +36 -0
  28. data/lib/generators/boring/oauth/facebook/install/templates/README +23 -0
  29. data/lib/generators/boring/oauth/facebook/install/templates/omniauth.rb +3 -0
  30. data/lib/generators/boring/oauth/facebook/install/templates/omniauth_callbacks_controller.rb +21 -0
  31. data/lib/generators/boring/oauth/github/install/install_generator.rb +36 -0
  32. data/lib/generators/boring/oauth/github/install/templates/README +23 -0
  33. data/lib/generators/boring/oauth/github/install/templates/omniauth_callbacks_controller.rb +21 -0
  34. data/lib/generators/boring/oauth/google/install/install_generator.rb +36 -0
  35. data/lib/generators/boring/oauth/google/install/templates/README +23 -0
  36. data/lib/generators/boring/oauth/google/install/templates/omniauth_callbacks_controller.rb +21 -0
  37. data/lib/generators/boring/oauth/twitter/install/install_generator.rb +36 -0
  38. data/lib/generators/boring/oauth/twitter/install/templates/README +23 -0
  39. data/lib/generators/boring/oauth/twitter/install/templates/omniauth_callbacks_controller.rb +21 -0
  40. data/lib/generators/boring/payments/stripe/install/install_generator.rb +43 -0
  41. data/lib/generators/boring/payments/stripe/install/templates/README +21 -0
  42. data/lib/generators/boring/payments/stripe/install/templates/controllers/stripe/checkouts_controller.rb +63 -0
  43. data/lib/generators/boring/payments/stripe/install/templates/stripe.rb +1 -0
  44. data/lib/generators/boring/payments/stripe/install/templates/views/stripe/checkouts/create.js.erb +13 -0
  45. data/lib/generators/boring/payments/stripe/install/templates/views/stripe/checkouts/show.html.erb +8 -0
  46. data/lib/generators/boring/pry/install/install_generator.rb +4 -9
  47. data/lib/generators/boring/pundit/install/install_generator.rb +3 -9
  48. data/lib/generators/boring/rubocop/install/install_generator.rb +3 -1
  49. data/lib/generators/boring/simple_form/install/install_generator.rb +4 -8
  50. data/lib/generators/boring/tailwind/install/install_generator.rb +12 -11
  51. data/lib/generators/boring/tailwind/install/templates/README +13 -0
  52. data/lib/generators/boring/twilio/install/install_generator.rb +26 -0
  53. data/lib/generators/boring/twilio/install/templates/README +11 -0
  54. data/lib/generators/boring/twilio/install/templates/twilio.rb +4 -0
  55. metadata +33 -664
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+
5
+ module Boring
6
+ module Ahoy
7
+ class InstallGenerator < Rails::Generators::Base
8
+ desc "Adds Ahoy to the application"
9
+ source_root File.expand_path("templates", __dir__)
10
+
11
+ def add_twitter_omniauth_gem
12
+ say "Adding Ahoy gem", :green
13
+ Bundler.with_unbundled_env do
14
+ run "bundle add ahoy_matey"
15
+ end
16
+ end
17
+
18
+ def run_ahoy_generator
19
+ say "Running Ahoy generator", :green
20
+ Bundler.with_unbundled_env do
21
+ run "bundle exec rails generate ahoy:install"
22
+ run "bundle exec rails db:migrate"
23
+ end
24
+ end
25
+
26
+ def show_readme
27
+ readme "README"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ ===============================================================================
2
+
3
+ Some setup you must do manually based on your project requirement:
4
+
5
+ 1. To prevent Rails actions from tracking visits: `skip_before_action :track_ahoy_visit`
6
+ 2. To associate and add association in the model with ahoy. Add `visitable :ahoy_visit` in the model.
7
+
8
+ You could find more configuration options on Ahoy documentation: https://github.com/ankane/ahoy
9
+
10
+ ===============================================================================
@@ -7,15 +7,18 @@ module Boring
7
7
 
8
8
  def add_bullet_gem
9
9
  say "Adding audit gems", :green
10
- audit_gems_content = <<~RUBY
11
- \n
12
- \t# Patch-level verification for Bundler. https://github.com/rubysec/bundler-audit
13
- \tgem "bundler-audit", require: false
14
- \t# vulnerabity checker for Ruby itself. https://github.com/civisanalytics/ruby_audit
15
- \tgem "ruby_audit", require: false
16
- RUBY
17
- insert_into_file "Gemfile", audit_gems_content, after: /group :development do/
18
- run "bundle install"
10
+
11
+ Bundler.with_unbundled_env do
12
+ audit_gems_content = <<~RUBY
13
+ \n
14
+ \t# Patch-level verification for Bundler. https://github.com/rubysec/bundler-audit
15
+ \tgem "bundler-audit", require: false
16
+ \t# vulnerabity checker for Ruby itself. https://github.com/civisanalytics/ruby_audit
17
+ \tgem "ruby_audit", require: false
18
+ RUBY
19
+ insert_into_file "Gemfile", audit_gems_content, after: /group :development do/
20
+ run "bundle install"
21
+ end
19
22
  end
20
23
  end
21
24
  end
@@ -10,14 +10,10 @@ module Boring
10
10
  desc: "Skips adding bullet development configuration"
11
11
 
12
12
  def add_bullet_gem
13
- say "Adding Bullet gem", :green
14
- bullet_gem_content = <<~RUBY
15
- \n
16
- \t# reports N+1 queries
17
- \tgem "bullet"
18
- RUBY
19
- insert_into_file "Gemfile", bullet_gem_content, after: /group :development do/
20
- run "bundle install"
13
+ say "Adding bullet gem", :green
14
+ Bundler.with_unbundled_env do
15
+ run "bundle add bullet --group development"
16
+ end
21
17
  end
22
18
 
23
19
  def add_bullet_gem_configuration
@@ -7,12 +7,14 @@ module Boring
7
7
  desc "Adds Github Action to the application"
8
8
  source_root File.expand_path("templates", __dir__)
9
9
 
10
- DEFAULT_RUBY_VERSION = "2.7.1"
10
+ RUBY_VERSION_FILE = ".ruby-version"
11
+
12
+ DEFAULT_RUBY_VERSION = ".ruby-version"
11
13
  DEFAULT_NODE_VERSION = "10.13.0"
12
14
  DEFAULT_REPOSITORY_NAME = "boring_generators"
13
15
 
14
16
  class_option :ruby_version, type: :string, aliases: "-v",
15
- desc: "Tell us the ruby version which you use for the application. Default to Ruby #{DEFAULT_RUBY_VERSION}"
17
+ desc: "Tell us the ruby version which you use for the application. Default to Ruby #{DEFAULT_RUBY_VERSION}, which will cause the action to use the version specified in the #{RUBY_VERSION_FILE} file."
16
18
  class_option :node_version, type: :string, aliases: "-v",
17
19
  desc: "Tell us the node version which you use for the application. Default to Node #{DEFAULT_NODE_VERSION}"
18
20
  class_option :repository_name, type: :string, aliases: "-rn",
@@ -24,6 +26,18 @@ module Boring
24
26
  @repository_name = options[:repository_name] ? options[:repository_name] : DEFAULT_REPOSITORY_NAME
25
27
 
26
28
  template("ci.yml", ".github/workflows/ci.yml")
29
+
30
+ if @ruby_version == DEFAULT_RUBY_VERSION && !ruby_version_file_exists?
31
+ say <<~WARNING, :red
32
+ WARNING: The action was configured to use the ruby version specified in the .ruby-version
33
+ file, but no such file was present. Either create an appropriate .ruby-version file, or
34
+ update .github/workflows/ci.yml to use an explicit ruby version.
35
+ WARNING
36
+ end
37
+ end
38
+
39
+ def ruby_version_file_exists?
40
+ Pathname.new(destination_root).join(RUBY_VERSION_FILE).exist?
27
41
  end
28
42
  end
29
43
  end
@@ -20,17 +20,7 @@ jobs:
20
20
  uses: ruby/setup-ruby@v1
21
21
  with:
22
22
  ruby-version: <%= @ruby_version %>
23
- - name: Ruby gem cache
24
- uses: actions/cache@v1
25
- with:
26
- path: vendor/bundle
27
- key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
28
- restore-keys: |
29
- ${{ runner.os }}-gems-
30
- - name: Install gems
31
- run: |
32
- bundle config path vendor/bundle
33
- bundle install --jobs 4 --retry 3
23
+ bundler-cache: true
34
24
  - name: Setup Node
35
25
  uses: actions/setup-node@v1
36
26
  with:
@@ -16,18 +16,16 @@ module Boring
16
16
 
17
17
  def add_devise_gem
18
18
  say "Adding devise gem", :green
19
- devise_gem = <<~RUBY
20
- \n
21
- # for authentication
22
- gem 'devise', '~> 4.7'
23
- RUBY
24
- append_to_file "Gemfile", devise_gem
25
- run "bundle install"
19
+ Bundler.with_unbundled_env do
20
+ run "bundle add devise"
21
+ end
26
22
  end
27
23
 
28
24
  def generating_devise_defaults
29
25
  say "Generating devise defaults", :green
30
- run "DISABLE_SPRING=1 rails generate devise:install"
26
+ Bundler.with_unbundled_env do
27
+ run "DISABLE_SPRING=1 bundle exec rails generate devise:install"
28
+ end
31
29
  end
32
30
 
33
31
  def add_devise_action_mailer_development_config
@@ -44,7 +42,9 @@ module Boring
44
42
  say "Adding devise user model", :green
45
43
  model_name = options[:model_name] || DEFAULT_DEVISE_MODEL_NAME
46
44
 
47
- run "DISABLE_SPRING=1 rails generate devise #{model_name}"
45
+ Bundler.with_unbundled_env do
46
+ run "DISABLE_SPRING=1 bundle exec rails generate devise #{model_name}"
47
+ end
48
48
  end
49
49
 
50
50
  def add_devise_authentication_filter_to_application_controller
@@ -60,7 +60,9 @@ module Boring
60
60
  say "Adding devise views", :green
61
61
  model_name = options[:model_name] || DEFAULT_DEVISE_MODEL_NAME
62
62
 
63
- run "rails generate devise:views #{model_name.pluralize}"
63
+ Bundler.with_unbundled_env do
64
+ run "DISABLE_SPRING=1 bundle exec rails generate devise:views #{model_name.pluralize}"
65
+ end
64
66
  end
65
67
  end
66
68
  end
@@ -8,14 +8,9 @@ module Boring
8
8
 
9
9
  def add_font_awesome_sass_gem
10
10
  say "Adding font_awesome_sass gem", :green
11
-
12
- font_awesome_sass_gem = <<~RUBY
13
- \n
14
- # for adding font-awesome icons
15
- gem 'font-awesome-sass', '~> 5.13'
16
- RUBY
17
- append_to_file "Gemfile", font_awesome_sass_gem
18
- run "bundle install"
11
+ Bundler.with_unbundled_env do
12
+ run "bundle add font-awesome-sass"
13
+ end
19
14
  end
20
15
 
21
16
  def import_font_awesome_stylesheet
@@ -13,13 +13,9 @@ module Boring
13
13
 
14
14
  def add_graphql_gem
15
15
  say "Adding graphql gem", :green
16
- graphql_gem = <<~RUBY
17
- \n
18
- # for building APIs
19
- gem 'graphql', '~> 1.11'
20
- RUBY
21
- append_to_file "Gemfile", graphql_gem
22
- run "bundle install"
16
+ Bundler.with_unbundled_env do
17
+ run "bundle add graphql"
18
+ end
23
19
  end
24
20
 
25
21
  def run_graphql_generator
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+
5
+ module Boring
6
+ module Oauth
7
+ module BaseGenerator
8
+ def add_provider_and_uuid_user_details
9
+ say "Adding migration to add provider and uuid columns to users", :green
10
+ Bundler.with_unbundled_env do
11
+ run "DISABLE_SPRING=1 bundle exec rails generate migration AddOmniauthToUsers provider:string uid:string"
12
+ end
13
+ end
14
+
15
+ def configure_devise_omniauth
16
+ say "Adding omniauth devise configuration", :green
17
+ if File.exist?("config/initializers/devise.rb")
18
+ insert_into_file "config/initializers/devise.rb", <<~RUBY, after: /Devise.setup do \|config\|/
19
+ \n
20
+ \tconfig.omniauth :#{@oauth_name}, "APP_ID", "APP_SECRET"
21
+ RUBY
22
+ else
23
+ raise MissingDeviseConfigurationError, <<~ERROR
24
+ Looks like the devise installation is incomplete. Could not find devise.rb in config/initializers.
25
+ ERROR
26
+ end
27
+ end
28
+
29
+ def add_omniauth_callback_routes
30
+ devise_route = '# devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" }'.dup
31
+ route devise_route
32
+ end
33
+
34
+ def add_omniauth_callback_controller
35
+ say "Copying omniauth_callbacks_controller.rb", :green
36
+ template("omniauth_callbacks_controller.rb", "app/controllers/users/omniauth_callbacks_controller.rb")
37
+ end
38
+
39
+ def configure_and_add_devise_setting_in_user_model
40
+ say "Configuring #{@oauth_name.to_s} omniauth for user model", :green
41
+ insert_into_file "app/models/user.rb", <<~RUBY, after: /class User < ApplicationRecord/
42
+ \n\tdevise :omniauthable, omniauth_providers: %i[#{@oauth_name}]
43
+
44
+ \tdef self.from_omniauth(auth)
45
+ \twhere(provider: auth.provider, uid: auth.uid).first_or_create do |user|
46
+ \tuser.email = auth.info.email
47
+ \tuser.password = Devise.friendly_token[0, 20]
48
+ \t# user.name = auth.info.name # assuming the user model has a name
49
+ \t# user.image = auth.info.image # assuming the user model has an image
50
+ \t# If you are using confirmable and the provider(s) you use validate emails,
51
+ \t# uncomment the line below to skip the confirmation emails.
52
+ \t# user.skip_confirmation!
53
+ \tend
54
+ \tend
55
+ RUBY
56
+ end
57
+
58
+ def show_readme
59
+ readme "README"
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ require 'generators/boring/oauth/base_generator'
5
+
6
+ module Boring
7
+ module Oauth
8
+ module Facebook
9
+ class InstallGenerator < Rails::Generators::Base
10
+ include Boring::Oauth::BaseGenerator
11
+
12
+ class MissingDeviseConfigurationError < StandardError; end
13
+
14
+ desc "Adds facebook OmniAuth to the application"
15
+ source_root File.expand_path("templates", __dir__)
16
+
17
+ def add_facebook_omniauth_gem
18
+ say "Adding Facebook OmniAuth gem", :green
19
+ Bundler.with_unbundled_env do
20
+ run "bundle add omniauth-facebook"
21
+ end
22
+ end
23
+
24
+ def invoke_common_generator_methods
25
+ @oauth_name = :facebook
26
+ add_provider_and_uuid_user_details
27
+ configure_devise_omniauth
28
+ add_omniauth_callback_routes
29
+ add_omniauth_callback_controller
30
+ configure_and_add_devise_setting_in_user_model
31
+ show_readme
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ ===============================================================================
2
+
3
+ Some setup you must do manually if you haven't yet:
4
+
5
+ 1. Ensure you have overridden or uncommented the routes for generated omniauth callback controllers in your routes.rb.
6
+ For example:
7
+
8
+ Rails.application.routes.draw do
9
+ devise_for :users, controllers: {
10
+ omniauth_callbacks: "users/omniauth_callbacks"
11
+ }
12
+ end
13
+
14
+ 2. Update the devise facebook omniauth APP_ID and APP_SECRET in "config/initializers/devise.rb"
15
+ after registering the Rails application on: https://developers.facebook.com/apps/
16
+ For example:
17
+
18
+ config.omniauth :facebook, "APP_ID", "APP_SECRET"
19
+
20
+ 3. Your omniauth callback URL will be: `<host>/users/auth/facebook/callback`. Please update
21
+ callback URL in Facebook after registering your omniauth application.
22
+
23
+ ===============================================================================
@@ -0,0 +1,3 @@
1
+ Devise.setup do |config|
2
+ config.omniauth :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
3
+ end
@@ -0,0 +1,21 @@
1
+ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
2
+ # See https://github.com/omniauth/omniauth/wiki/FAQ#rails-session-is-clobbered-after-callback-on-developer-strategy
3
+ skip_before_action :verify_authenticity_token, only: :facebook
4
+
5
+ def facebook
6
+ # You need to implement the method below in your model (e.g. app/models/user.rb)
7
+ @user = User.from_omniauth(request.env["omniauth.auth"])
8
+
9
+ if @user.persisted?
10
+ sign_in_and_redirect @user, event: :authentication #this will throw if @user is not activated
11
+ set_flash_message(:notice, :success, kind: "Facebook") if is_navigational_format?
12
+ else
13
+ session["devise.facebook_data"] = request.env["omniauth.auth"].except(:extra) # Removing extra as it can overflow some session stores
14
+ redirect_to new_user_registration_url
15
+ end
16
+ end
17
+
18
+ def failure
19
+ redirect_to root_path
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ require 'generators/boring/oauth/base_generator'
5
+
6
+ module Boring
7
+ module Oauth
8
+ module Github
9
+ class InstallGenerator < Rails::Generators::Base
10
+ include Boring::Oauth::BaseGenerator
11
+
12
+ class MissingDeviseConfigurationError < StandardError; end
13
+
14
+ desc "Adds GitHub OmniAuth to the application"
15
+ source_root File.expand_path("templates", __dir__)
16
+
17
+ def add_github_omniauth_gem
18
+ say "Adding GitHub OmniAuth gem", :green
19
+ Bundler.with_unbundled_env do
20
+ run "bundle add omniauth-github"
21
+ end
22
+ end
23
+
24
+ def invoke_common_generator_methods
25
+ @oauth_name = :github
26
+ add_provider_and_uuid_user_details
27
+ configure_devise_omniauth
28
+ add_omniauth_callback_routes
29
+ add_omniauth_callback_controller
30
+ configure_and_add_devise_setting_in_user_model
31
+ show_readme
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ ===============================================================================
2
+
3
+ Some setup you must do manually if you haven't yet:
4
+
5
+ 1. Ensure you have overridden or uncommented the routes for generated omniauth callback controllers in your routes.rb.
6
+ For example:
7
+
8
+ Rails.application.routes.draw do
9
+ devise_for :users, controllers: {
10
+ omniauth_callbacks: "users/omniauth_callbacks"
11
+ }
12
+ end
13
+
14
+ 2. Update the devise github omniauth APP_ID and APP_SECRET in "config/initializers/devise.rb"
15
+ after registering the Rails application on: https://github.com/settings/applications/new
16
+ For example:
17
+
18
+ config.omniauth :github, "APP_ID", "APP_SECRET"
19
+
20
+ 3. Your omniauth callback URL will be: `<host>/users/auth/github/callback`. Please update
21
+ callback URL in Github after registering your omniauth application.
22
+
23
+ ===============================================================================