kowl 0.0.1
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 +7 -0
- data/LICENSE +7 -0
- data/README.md +383 -0
- data/bin/console +14 -0
- data/bin/kowl +106 -0
- data/bin/setup +13 -0
- data/lib/kowl/actions.rb +240 -0
- data/lib/kowl/docker.rb +447 -0
- data/lib/kowl/generators/README.md +5 -0
- data/lib/kowl/generators/action_generator.rb +113 -0
- data/lib/kowl/generators/admin_generator.rb +114 -0
- data/lib/kowl/generators/assets_generator.rb +188 -0
- data/lib/kowl/generators/base.rb +40 -0
- data/lib/kowl/generators/circleci_generator.rb +11 -0
- data/lib/kowl/generators/config_generator.rb +180 -0
- data/lib/kowl/generators/controller_generator.rb +64 -0
- data/lib/kowl/generators/database_generator.rb +42 -0
- data/lib/kowl/generators/decorators_generator.rb +16 -0
- data/lib/kowl/generators/docker_generator.rb +40 -0
- data/lib/kowl/generators/dotfiles_generator.rb +73 -0
- data/lib/kowl/generators/libs_generator.rb +19 -0
- data/lib/kowl/generators/mailer_generator.rb +58 -0
- data/lib/kowl/generators/misc_generator.rb +20 -0
- data/lib/kowl/generators/overrides/app_base.rb +15 -0
- data/lib/kowl/generators/overrides/app_builder.rb +58 -0
- data/lib/kowl/generators/overrides/app_generator.rb +249 -0
- data/lib/kowl/generators/pages_generator.rb +46 -0
- data/lib/kowl/generators/routes_generator.rb +20 -0
- data/lib/kowl/generators/sidekiq_generator.rb +31 -0
- data/lib/kowl/generators/staging_generator.rb +14 -0
- data/lib/kowl/generators/test_generator.rb +42 -0
- data/lib/kowl/generators/text_files_generator.rb +41 -0
- data/lib/kowl/generators/users_and_auth_generator.rb +143 -0
- data/lib/kowl/generators/uuid_generator.rb +39 -0
- data/lib/kowl/generators/views_and_helpers_generator.rb +104 -0
- data/lib/kowl/geodb.rb +96 -0
- data/lib/kowl/helpers.rb +139 -0
- data/lib/kowl/templates/Gemfile.erb.tt +253 -0
- data/lib/kowl/templates/README.md.erb +33 -0
- data/lib/kowl/templates/app/assets/javascripts/semantic.js.tt +26 -0
- data/lib/kowl/templates/app/assets/stylesheets/administrate/application.scss +44 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/_custom_styling.scss +38 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/application-mailer.scss +1 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/application.scss +14 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/components/_alerts.scss +7 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/components/_errors.scss +28 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/components/_navbar.scss +17 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/variables.scss +6 -0
- data/lib/kowl/templates/app/assets/stylesheets/semantic/_custom_styling.scss +20 -0
- data/lib/kowl/templates/app/assets/stylesheets/semantic/application.scss +24 -0
- data/lib/kowl/templates/app/controllers/admin/application_controller.rb +29 -0
- data/lib/kowl/templates/app/controllers/admin/login_activities_controller.rb +29 -0
- data/lib/kowl/templates/app/controllers/admin/users_controller.rb +37 -0
- data/lib/kowl/templates/app/controllers/concerns/auth/authentication.rb +18 -0
- data/lib/kowl/templates/app/controllers/concerns/auth/authorization.rb +20 -0
- data/lib/kowl/templates/app/controllers/concerns/auth/error_handlers.rb +27 -0
- data/lib/kowl/templates/app/controllers/concerns/noauth/error_handlers.rb +25 -0
- data/lib/kowl/templates/app/controllers/users_controller.rb +17 -0
- data/lib/kowl/templates/app/dashboards/login_activity_dashboard.rb.tt +59 -0
- data/lib/kowl/templates/app/dashboards/rich_text_body_dashboard.rb.tt +17 -0
- data/lib/kowl/templates/app/dashboards/user_dashboard.rb.tt +60 -0
- data/lib/kowl/templates/app/fields/gravatar_field.rb +10 -0
- data/lib/kowl/templates/app/fields/rich_text_area_field.rb +8 -0
- data/lib/kowl/templates/app/inputs/rich_text_area_input.rb +11 -0
- data/lib/kowl/templates/app/javascript/administrate/components/date_time_picker.js.tt +32 -0
- data/lib/kowl/templates/app/javascript/administrate/components/table.js.tt +49 -0
- data/lib/kowl/templates/app/javascript/administrate/index.js +3 -0
- data/lib/kowl/templates/app/javascript/packs/administrate.js.tt +21 -0
- data/lib/kowl/templates/app/javascript/packs/semantic.js +11 -0
- data/lib/kowl/templates/app/mailers/application_mailer.rb +7 -0
- data/lib/kowl/templates/app/mailers/devise_mailer.rb +5 -0
- data/lib/kowl/templates/app/models/login_activity.rb.tt +29 -0
- data/lib/kowl/templates/app/models/user.rb.tt +72 -0
- data/lib/kowl/templates/app/policies/application_policy.rb +38 -0
- data/lib/kowl/templates/app/policies/login_activity_policy.rb +35 -0
- data/lib/kowl/templates/app/policies/user_policy.rb +43 -0
- data/lib/kowl/templates/app/views/admin/templates/navigation.erb.tt +23 -0
- data/lib/kowl/templates/app/views/admin/views/application/_javascript.html.erb +21 -0
- data/lib/kowl/templates/app/views/admin/views/users/_collection.html.erb +102 -0
- data/lib/kowl/templates/app/views/admin/views/users/_form.html.erb +46 -0
- data/lib/kowl/templates/app/views/admin/views/users/edit.html.erb +36 -0
- data/lib/kowl/templates/app/views/admin/views/users/index.html.erb +66 -0
- data/lib/kowl/templates/app/views/fields/gravatar_field/_form.html.erb +6 -0
- data/lib/kowl/templates/app/views/fields/gravatar_field/_index.html.erb +1 -0
- data/lib/kowl/templates/app/views/fields/gravatar_field/_show.html.erb +1 -0
- data/lib/kowl/templates/app/views/fields/rich_text_area_field/_form.html.erb +6 -0
- data/lib/kowl/templates/app/views/fields/rich_text_area_field/_index.html.erb +1 -0
- data/lib/kowl/templates/app/views/fields/rich_text_area_field/_show.html.erb +1 -0
- data/lib/kowl/templates/app/views/layouts/admin.html.erb.tt +47 -0
- data/lib/kowl/templates/app/views/layouts/devise_mailer.html.erb +14 -0
- data/lib/kowl/templates/app/views/pages/welcome/bootstrap.html.erb +18 -0
- data/lib/kowl/templates/app/views/pages/welcome/bootstrap.html.haml +17 -0
- data/lib/kowl/templates/app/views/pages/welcome/bootstrap.html.slim +17 -0
- data/lib/kowl/templates/app/views/pages/welcome/default.html.erb +0 -0
- data/lib/kowl/templates/app/views/pages/welcome/default.html.haml +0 -0
- data/lib/kowl/templates/app/views/pages/welcome/default.html.slim +0 -0
- data/lib/kowl/templates/app/views/pages/welcome/semantic.html.erb +20 -0
- data/lib/kowl/templates/app/views/pages/welcome/semantic.html.haml +17 -0
- data/lib/kowl/templates/app/views/pages/welcome/semantic.html.slim +17 -0
- data/lib/kowl/templates/app/views/shared/footer/bootstrap.html.erb.tt +5 -0
- data/lib/kowl/templates/app/views/shared/footer/bootstrap.html.haml.tt +3 -0
- data/lib/kowl/templates/app/views/shared/footer/bootstrap.html.slim.tt +3 -0
- data/lib/kowl/templates/app/views/shared/footer/semantic.html.erb.tt +7 -0
- data/lib/kowl/templates/app/views/shared/footer/semantic.html.haml.tt +5 -0
- data/lib/kowl/templates/app/views/shared/footer/semantic.html.slim.tt +5 -0
- data/lib/kowl/templates/app/views/shared/navigation/bootstrap.html.erb.tt +51 -0
- data/lib/kowl/templates/app/views/shared/navigation/bootstrap.html.haml.tt +36 -0
- data/lib/kowl/templates/app/views/shared/navigation/bootstrap.html.slim.tt +36 -0
- data/lib/kowl/templates/app/views/shared/navigation/semantic.html.erb.tt +48 -0
- data/lib/kowl/templates/app/views/shared/navigation/semantic.html.haml.tt +36 -0
- data/lib/kowl/templates/app/views/shared/navigation/semantic.html.slim.tt +36 -0
- data/lib/kowl/templates/app/workers/scheduler/pghero_scheduler.rb +11 -0
- data/lib/kowl/templates/config/autoprefixer.yml +4 -0
- data/lib/kowl/templates/config/db/mysql.yml.tt +43 -0
- data/lib/kowl/templates/config/db/oracle.yml.tt +29 -0
- data/lib/kowl/templates/config/db/postgresql.yml.tt +37 -0
- data/lib/kowl/templates/config/db/sqlite3.yml.tt +20 -0
- data/lib/kowl/templates/config/db/sqlserver.yml.tt +28 -0
- data/lib/kowl/templates/config/initializers/administrate.rb.tt +9 -0
- data/lib/kowl/templates/config/initializers/bullet.rb +21 -0
- data/lib/kowl/templates/config/initializers/devise-security.rb +44 -0
- data/lib/kowl/templates/config/initializers/devise_argon2.rb +29 -0
- data/lib/kowl/templates/config/initializers/faker.rb +6 -0
- data/lib/kowl/templates/config/initializers/generators.rb.tt +31 -0
- data/lib/kowl/templates/config/initializers/geocoder.rb +10 -0
- data/lib/kowl/templates/config/initializers/letter_opener.rb +13 -0
- data/lib/kowl/templates/config/initializers/lockbox.rb +11 -0
- data/lib/kowl/templates/config/initializers/logging.rb +6 -0
- data/lib/kowl/templates/config/initializers/lograge.rb +7 -0
- data/lib/kowl/templates/config/initializers/logstop.rb +4 -0
- data/lib/kowl/templates/config/initializers/middleware.rb +9 -0
- data/lib/kowl/templates/config/initializers/oj.rb +7 -0
- data/lib/kowl/templates/config/initializers/pagy.rb.tt +16 -0
- data/lib/kowl/templates/config/initializers/postmark.rb +8 -0
- data/lib/kowl/templates/config/initializers/rack_attack.rb.tt +71 -0
- data/lib/kowl/templates/config/initializers/sass.rb +5 -0
- data/lib/kowl/templates/config/initializers/sidekiq.rb +11 -0
- data/lib/kowl/templates/config/initializers/simpleform/semantic.rb +225 -0
- data/lib/kowl/templates/config/initializers/slim.rb +6 -0
- data/lib/kowl/templates/config/initializers/sparkpost.rb +13 -0
- data/lib/kowl/templates/config/routes.rb.tt +28 -0
- data/lib/kowl/templates/config/sidekiq.yml.tt +17 -0
- data/lib/kowl/templates/db/migrations/create_action_text_tables.action_text.rb.tt +16 -0
- data/lib/kowl/templates/db/migrations/create_active_storage_tables.active_storage.rb.tt +29 -0
- data/lib/kowl/templates/db/migrations/devise.rb.tt +59 -0
- data/lib/kowl/templates/db/migrations/login_activities.rb.tt +41 -0
- data/lib/kowl/templates/db/seeds.rb.tt +14 -0
- data/lib/kowl/templates/docker/Dockerfile.alpine.tt +92 -0
- data/lib/kowl/templates/docker/Dockerfile.debian.tt +133 -0
- data/lib/kowl/templates/docker/docker-compose.yml.tt +55 -0
- data/lib/kowl/templates/docker/mysql/Dockerfile.tt +15 -0
- data/lib/kowl/templates/dotfiles/Aptfile.tt +34 -0
- data/lib/kowl/templates/dotfiles/Brewfile.tt +49 -0
- data/lib/kowl/templates/dotfiles/Procfile.tt +12 -0
- data/lib/kowl/templates/dotfiles/codeclimate.yml +76 -0
- data/lib/kowl/templates/dotfiles/coffeelint.json +10 -0
- data/lib/kowl/templates/dotfiles/coffeelintignore +15 -0
- data/lib/kowl/templates/dotfiles/dockerignore +23 -0
- data/lib/kowl/templates/dotfiles/editorconfig +13 -0
- data/lib/kowl/templates/dotfiles/env.tt +58 -0
- data/lib/kowl/templates/dotfiles/erb-lint.yml +10 -0
- data/lib/kowl/templates/dotfiles/erdconfig.tt +24 -0
- data/lib/kowl/templates/dotfiles/eslintignore +20 -0
- data/lib/kowl/templates/dotfiles/eslintrc.js +31 -0
- data/lib/kowl/templates/dotfiles/fasterer.yml +14 -0
- data/lib/kowl/templates/dotfiles/foreman +1 -0
- data/lib/kowl/templates/dotfiles/gitattributes +15 -0
- data/lib/kowl/templates/dotfiles/gitignore +69 -0
- data/lib/kowl/templates/dotfiles/haml-lint.yml +23 -0
- data/lib/kowl/templates/dotfiles/jsbeautifyrc +15 -0
- data/lib/kowl/templates/dotfiles/jshintrc +3 -0
- data/lib/kowl/templates/dotfiles/mailmap +3 -0
- data/lib/kowl/templates/dotfiles/nvmrc +1 -0
- data/lib/kowl/templates/dotfiles/prettierignore +21 -0
- data/lib/kowl/templates/dotfiles/prettierrc.js +62 -0
- data/lib/kowl/templates/dotfiles/pryrc +7 -0
- data/lib/kowl/templates/dotfiles/rspec +3 -0
- data/lib/kowl/templates/dotfiles/rubocop.yml.tt +78 -0
- data/lib/kowl/templates/dotfiles/scss-lint.yml +132 -0
- data/lib/kowl/templates/dotfiles/simplecov +19 -0
- data/lib/kowl/templates/dotfiles/slim-lint.yml +23 -0
- data/lib/kowl/templates/dotfiles/slugignore +10 -0
- data/lib/kowl/templates/dotfiles/yamllint +7 -0
- data/lib/kowl/templates/dotfiles/yarnclean +46 -0
- data/lib/kowl/templates/lib/tasks/stats.rake +42 -0
- data/lib/kowl/templates/tests/factories/README.md +0 -0
- data/lib/kowl/templates/tests/factories/login_activity.rb +11 -0
- data/lib/kowl/templates/tests/factories/user.rb +11 -0
- data/lib/kowl/templates/tests/minitest/README.md +3 -0
- data/lib/kowl/templates/tests/minitest/application_system_test_case.rb +7 -0
- data/lib/kowl/templates/tests/minitest/controllers/pages_controller_test.rb +10 -0
- data/lib/kowl/templates/tests/minitest/models/login_activity_test.rb +8 -0
- data/lib/kowl/templates/tests/minitest/models/user_test.rb +15 -0
- data/lib/kowl/templates/tests/minitest/policies/login_activity_policy_test.rb +7 -0
- data/lib/kowl/templates/tests/minitest/policies/user_policy_test.rb +7 -0
- data/lib/kowl/templates/tests/minitest/support/capybara.rb +38 -0
- data/lib/kowl/templates/tests/minitest/support/database_cleaner.rb +20 -0
- data/lib/kowl/templates/tests/minitest/support/database_cleaner_support.rb +15 -0
- data/lib/kowl/templates/tests/minitest/support/deferred_garbage_collection.rb +21 -0
- data/lib/kowl/templates/tests/minitest/support/devise.rb +16 -0
- data/lib/kowl/templates/tests/minitest/support/factories.rb +6 -0
- data/lib/kowl/templates/tests/minitest/support/formulaic.rb +8 -0
- data/lib/kowl/templates/tests/minitest/support/helpers/devise_helper.rb +57 -0
- data/lib/kowl/templates/tests/minitest/support/papertrail.rb +17 -0
- data/lib/kowl/templates/tests/minitest/support/pundit.rb +0 -0
- data/lib/kowl/templates/tests/minitest/support/shoulda.rb +11 -0
- data/lib/kowl/templates/tests/minitest/support/simplecov.rb +8 -0
- data/lib/kowl/templates/tests/minitest/test_helper.rb +17 -0
- data/lib/kowl/templates/tests/rspec/README.md +9 -0
- data/lib/kowl/templates/tests/rspec/controllers/admin/application_controller_spec.rb +12 -0
- data/lib/kowl/templates/tests/rspec/controllers/admin/users_controller_spec.rb +14 -0
- data/lib/kowl/templates/tests/rspec/controllers/pages_controller_spec.rb +10 -0
- data/lib/kowl/templates/tests/rspec/features/README.md +15 -0
- data/lib/kowl/templates/tests/rspec/features/visitor_sign_up_spec.rb +25 -0
- data/lib/kowl/templates/tests/rspec/helpers/application_helper_spec.rb +7 -0
- data/lib/kowl/templates/tests/rspec/helpers/pages_helper_spec.rb +15 -0
- data/lib/kowl/templates/tests/rspec/models/login_activity_spec.rb +11 -0
- data/lib/kowl/templates/tests/rspec/models/user_spec.rb +21 -0
- data/lib/kowl/templates/tests/rspec/policies/login_activity_policy_spec.rb +59 -0
- data/lib/kowl/templates/tests/rspec/policies/user_policy_spec.rb +56 -0
- data/lib/kowl/templates/tests/rspec/rails_helper.rb +72 -0
- data/lib/kowl/templates/tests/rspec/requests/pages_spec.rb +11 -0
- data/lib/kowl/templates/tests/rspec/spec_helper.rb +96 -0
- data/lib/kowl/templates/tests/rspec/support/bullet.rb +17 -0
- data/lib/kowl/templates/tests/rspec/support/capybara.rb +37 -0
- data/lib/kowl/templates/tests/rspec/support/controller_testing.rb +10 -0
- data/lib/kowl/templates/tests/rspec/support/database_cleaner.rb +55 -0
- data/lib/kowl/templates/tests/rspec/support/deferred_garbage_collection.rb +32 -0
- data/lib/kowl/templates/tests/rspec/support/devise.rb +21 -0
- data/lib/kowl/templates/tests/rspec/support/factories.rb +5 -0
- data/lib/kowl/templates/tests/rspec/support/formulaic.rb +8 -0
- data/lib/kowl/templates/tests/rspec/support/helpers/devise_helpers.rb +56 -0
- data/lib/kowl/templates/tests/rspec/support/papertrail.rb +5 -0
- data/lib/kowl/templates/tests/rspec/support/pi_ci.rb +6 -0
- data/lib/kowl/templates/tests/rspec/support/pundit.rb +6 -0
- data/lib/kowl/templates/tests/rspec/support/shoulda.rb +10 -0
- data/lib/kowl/templates/tests/rspec/support/sidekiq.rb +10 -0
- data/lib/kowl/templates/tests/rspec/support/simplecov.rb +7 -0
- data/lib/kowl/templates/tests/rspec/support/warden.rb +8 -0
- data/lib/kowl/templates/text_files/AUTHORS.md +4 -0
- data/lib/kowl/templates/text_files/CHANGELOG.md.tt +12 -0
- data/lib/kowl/templates/text_files/CODE_OF_CONDUCT.md +76 -0
- data/lib/kowl/templates/text_files/TODO.md +7 -0
- data/lib/kowl/templates/text_files/VERSION +1 -0
- data/lib/kowl/templates/text_files/humans.txt.tt +15 -0
- data/lib/kowl/templates/text_files/robots.txt.tt +6 -0
- data/lib/kowl/templates/text_files/security.txt +6 -0
- data/lib/kowl/version.rb +9 -0
- data/lib/kowl.rb +18 -0
- metadata +404 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module Kowl
|
7
|
+
class ControllerGenerator < Kowl::Generators::Base
|
8
|
+
hide!
|
9
|
+
source_root File.expand_path(File.join('..', 'templates', 'app', 'controllers'), File.dirname(__FILE__))
|
10
|
+
class_option :noauth, type: :boolean, default: false
|
11
|
+
|
12
|
+
# Add application_controller callbacks depending on if the application requires user auth or not
|
13
|
+
def app_controller_auth
|
14
|
+
if options[:noauth]
|
15
|
+
app_str = <<~APP
|
16
|
+
protect_from_forgery with: :exception
|
17
|
+
include ErrorHandlers # Application fallbacks
|
18
|
+
helper :all
|
19
|
+
APP
|
20
|
+
inject_into_file 'app/controllers/application_controller.rb', optimize_indentation(app_str, 2), after: "class ApplicationController < ActionController::Base\n"
|
21
|
+
copy_file('concerns/noauth/error_handlers.rb', 'app/controllers/concerns/error_handlers.rb')
|
22
|
+
else
|
23
|
+
app_str = <<~APP
|
24
|
+
protect_from_forgery with: :exception
|
25
|
+
before_action :authenticate_user!
|
26
|
+
impersonates :user
|
27
|
+
|
28
|
+
include Authentication # Devise/Authentication stuff
|
29
|
+
include Authorization # To determine if a user is authorized to do a specific action
|
30
|
+
include ErrorHandlers # Application fallbacks
|
31
|
+
helper :all
|
32
|
+
APP
|
33
|
+
|
34
|
+
inject_into_file 'app/controllers/application_controller.rb', optimize_indentation(app_str, 2), after: "class ApplicationController < ActionController::Base\n"
|
35
|
+
directory 'concerns/auth', 'app/controllers/concerns', force: true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def make_controller_immuatable
|
40
|
+
inject_into_file 'app/controllers/application_controller.rb', "# frozen_string_literal: true\n\n", before: "class ApplicationController < ActionController::Base\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
# This allows the application to dynamically assign the mail delivery host when running in development and staging
|
44
|
+
def set_default_url_options
|
45
|
+
mailer_str = <<~MAILER_STR
|
46
|
+
before_action :mailer_set_url_options unless Rails.env.production?
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def mailer_set_url_options
|
51
|
+
ActionMailer::Base.default_url_options[:host] = request.host_with_port
|
52
|
+
end
|
53
|
+
MAILER_STR
|
54
|
+
inject_into_file 'app/controllers/application_controller.rb', optimize_indentation(mailer_str, 2), after: "helper :all\n"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Enable additional flash_types to the application_controller
|
58
|
+
def enable_additional_flash_types
|
59
|
+
flash_str = "add_flash_types :success, :error # Enable additional flash types across the application\n"
|
60
|
+
|
61
|
+
inject_into_file 'app/controllers/application_controller.rb', optimize_indentation(flash_str, 2), after: "class ApplicationController < ActionController::Base\n"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
# Database configurations
|
7
|
+
# https://api.rubyonrails.org/v5.1/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html
|
8
|
+
# https://devcenter.heroku.com/articles/concurrency-and-database-connections
|
9
|
+
module Kowl
|
10
|
+
class DatabaseGenerator < Kowl::Generators::Base
|
11
|
+
hide!
|
12
|
+
source_root File.expand_path(File.join('..', 'templates'), File.dirname(__FILE__))
|
13
|
+
class_option :database, type: :string, aliases: '-d', default: 'sqlite3'
|
14
|
+
class_option :noauth, type: :boolean, default: false
|
15
|
+
class_option :uuid, type: :boolean, default: false
|
16
|
+
|
17
|
+
# Used to generate the config for automatically generating annotated models
|
18
|
+
def setup_annotate
|
19
|
+
generate('annotate:install')
|
20
|
+
end
|
21
|
+
|
22
|
+
# If the application is using postgresql this will add pghero to the application
|
23
|
+
def setup_pghero
|
24
|
+
return unless options[:database] == 'postgresql'
|
25
|
+
|
26
|
+
generate('pghero:config') # generate PGhero config
|
27
|
+
generate('pghero:query_stats') # generate pghero stats migrations
|
28
|
+
generate('pghero:space_stats')
|
29
|
+
add_to_assets('pghero/application.js pghero/application.css')
|
30
|
+
end
|
31
|
+
|
32
|
+
# Copy a base seef file to the application with sample users
|
33
|
+
def copy_seed_file
|
34
|
+
template('db/seeds.rb.tt', 'db/seeds.rb', force: true)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Add frozen_string_literal to application_record.rb
|
38
|
+
def make_ar_immutable
|
39
|
+
inject_into_file('app/models/application_record.rb', "# frozen_string_literal: true\n\n", before: "class ApplicationRecord < ActiveRecord::Base\n")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module Kowl
|
7
|
+
class DecoratorsGenerator < Kowl::Generators::Base
|
8
|
+
hide!
|
9
|
+
class_option :noauth, type: :boolean, default: false
|
10
|
+
|
11
|
+
# Generate a user decorator file for the applications users model
|
12
|
+
def users_decorator
|
13
|
+
generate('decorator user') unless options[:noauth]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module Kowl
|
7
|
+
class DockerGenerator < Kowl::Generators::Base
|
8
|
+
hide!
|
9
|
+
source_root File.expand_path(File.join('..', 'templates', 'docker'), File.dirname(__FILE__))
|
10
|
+
class_option :encrypt, type: :boolean, default: false
|
11
|
+
class_option :database, type: :string, default: 'sqlite3'
|
12
|
+
class_option :docker_distro, type: :string, default: 'alpine'
|
13
|
+
class_option :skip_erd, type: :boolean, default: false
|
14
|
+
class_option :skip_javascript, type: :boolean, default: false
|
15
|
+
class_option :skip_sidekiq, type: :boolean, default: false
|
16
|
+
|
17
|
+
# Generate the applications Dockerfile depending on the the specified distro
|
18
|
+
def setup_dockerfile
|
19
|
+
if options[:docker_distro] == 'debian' || options[:database] == 'oracle'
|
20
|
+
# This is here because Debian is very compatible with most Ruby/Rails gems
|
21
|
+
# => The Oracle InstantClient does have a number of issues when trying to build with Alpine
|
22
|
+
template 'Dockerfile.debian.tt', 'Dockerfile'
|
23
|
+
else
|
24
|
+
template 'Dockerfile.alpine.tt', 'Dockerfile'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Generate an applications docker-compose.yml file based on all it's specified requirements
|
29
|
+
def setup_docker_compose
|
30
|
+
template 'docker-compose.yml.tt', 'docker-compose.yml'
|
31
|
+
end
|
32
|
+
|
33
|
+
# If one of the specified databases are being used, generate a specific Dockerfile to generate the required tables
|
34
|
+
def setup_database_dockerfile
|
35
|
+
return nil unless options[:database] == 'mysql'
|
36
|
+
|
37
|
+
template 'mysql/Dockerfile.tt', 'docker/Dockerfile'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module Kowl
|
7
|
+
class DotfilesGenerator < Kowl::Generators::Base
|
8
|
+
hide!
|
9
|
+
source_root File.expand_path(File.join('..', 'templates', 'dotfiles'), File.dirname(__FILE__))
|
10
|
+
class_option :encrypt, type: :boolean
|
11
|
+
class_option :template_engine, type: :string
|
12
|
+
class_option :test_engine, type: :string
|
13
|
+
class_option :database, type: :string
|
14
|
+
class_option :mailer, type: :string
|
15
|
+
class_option :skip_docker, type: :boolean, default: false
|
16
|
+
class_option :skip_erd, type: :boolean, default: false
|
17
|
+
class_option :skip_javascript, type: :boolean
|
18
|
+
class_option :skip_mailer, type: :boolean
|
19
|
+
class_option :skip_sidekiq, type: :boolean
|
20
|
+
class_option :skip_pry, type: :boolean
|
21
|
+
class_option :skip_tests, type: :boolean
|
22
|
+
|
23
|
+
# Copy basic application linter dotfiles to the applications ROOT_PATH
|
24
|
+
def copy_dotfiles
|
25
|
+
files = %w[codeclimate.yml coffeelint.json coffeelintignore dockerignore editorconfig fasterer.yml foreman gitattributes mailmap nvmrc rspec scss-lint.yml simplecov slugignore yamllint]
|
26
|
+
files.reject! { |e| e =~ /dockerignore/ } if options[:skip_docker]
|
27
|
+
files.map { |dotfile| copy_file dotfile, ".#{dotfile}" }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Copy JS dotfiles for linterers over the applications ROOT_PATH
|
31
|
+
def copy_js_dotfiles
|
32
|
+
return if options[:skip_javascript]
|
33
|
+
|
34
|
+
js_files = %w[eslintignore eslintrc.js jsbeautifyrc jshintrc prettierignore prettierrc.js yarnclean]
|
35
|
+
js_files.map { |dotfile| copy_file dotfile, ".#{dotfile}" }
|
36
|
+
end
|
37
|
+
|
38
|
+
# Setup Rubocop and ERD dotfiles for the application
|
39
|
+
def setup_application_dotfiles
|
40
|
+
files = %w[erdconfig rubocop.yml]
|
41
|
+
files.reject! { |e| e =~ /erdconfig/ } if options[:skip_erd]
|
42
|
+
files.map { |dotfile| template "#{dotfile}.tt", ".#{dotfile}" }
|
43
|
+
end
|
44
|
+
|
45
|
+
# Setup application dotfiles for the applications specific template_engine [Erb, Slim, HAML]
|
46
|
+
def setup_linter_dotfiles
|
47
|
+
copy_file "#{options[:template_engine]}-lint.yml", ".#{options[:template_engine]}-lint.yml"
|
48
|
+
end
|
49
|
+
|
50
|
+
# Generate a Brewfile for the application based on it's specific requirerments (for macOS)
|
51
|
+
def setup_brewfile
|
52
|
+
template 'Brewfile.tt', 'Brewfile'
|
53
|
+
end
|
54
|
+
|
55
|
+
# Generate an Aptfile for the application based on it's specific requirements (for Debian/Ubuntu)
|
56
|
+
def setup_aptfile
|
57
|
+
template 'Aptfile.tt', 'Aptfile'
|
58
|
+
end
|
59
|
+
|
60
|
+
# Setup .env file for the application, which makes it easier to use this config with docker-compose as well
|
61
|
+
# Note: An .env file is setup instead of an .env.docker file because of the way env_file works with docker-compose
|
62
|
+
# => At the moment, when running a build with docker-compose if an env_file is anything other than .env the variables won't be consumed by the container build process
|
63
|
+
def setup_env_file
|
64
|
+
%w[development staging production test].map { |env| template 'env.tt', ".env.#{env}", env: env }
|
65
|
+
template 'env.tt', '.env', env: 'docker' unless options[:skip_docker]
|
66
|
+
end
|
67
|
+
|
68
|
+
# Generate a basic pry config file for the application
|
69
|
+
def pryrc
|
70
|
+
copy_file('pryrc', '.pryrc') unless options[:skip_pry]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module Kowl
|
7
|
+
class LibsGenerator < Kowl::Generators::Base
|
8
|
+
hide!
|
9
|
+
source_root File.expand_path(File.join('..', 'templates', 'lib', 'tasks'), File.dirname(__FILE__))
|
10
|
+
class_option :simpleform, type: :boolean, default: false
|
11
|
+
class_option :skip_javascript, type: :boolean, default: false
|
12
|
+
hide!
|
13
|
+
|
14
|
+
# Generate a Rake file for viewing additional Rails applications stats
|
15
|
+
def stats_task
|
16
|
+
copy_file 'stats.rake', 'lib/tasks/stats.rake', force: true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
# This class is for setting up the bootstrap mailer when using bootstrap framework and devise
|
7
|
+
module Kowl
|
8
|
+
class MailerGenerator < Kowl::Generators::Base
|
9
|
+
hide!
|
10
|
+
source_root File.expand_path(File.join('..', 'templates'), File.dirname(__FILE__))
|
11
|
+
class_option :encrypt, type: :boolean, default: false
|
12
|
+
class_option :mailer, type: :string, default: 'sparkpost', enum: %w[postmark sparkpost]
|
13
|
+
class_option :noauth, type: :boolean, default: false
|
14
|
+
|
15
|
+
# Add DeviseMailer layout view, to cleanup devise emails
|
16
|
+
def copy_mailer_layouts
|
17
|
+
copy_file('app/views/layouts/devise_mailer.html.erb', 'app/views/layouts/devise_mailer.html.erb') unless options[:noauth]
|
18
|
+
end
|
19
|
+
|
20
|
+
# Override the applications default application_mailer file with some basic config
|
21
|
+
def override_application_mailer
|
22
|
+
copy_file 'app/mailers/application_mailer.rb', 'app/mailers/application_mailer.rb', force: true
|
23
|
+
end
|
24
|
+
|
25
|
+
# Add a devise mailer layout the application if devise is to be used
|
26
|
+
def copy_devise_mailer_config
|
27
|
+
copy_file('app/mailers/devise_mailer.rb', 'app/mailers/devise_mailer.rb') unless options[:noauth]
|
28
|
+
end
|
29
|
+
|
30
|
+
# Add the applications assets that need to be compiled for the mailer
|
31
|
+
def add_mailer_assets
|
32
|
+
copy_file('app/assets/stylesheets/bootstrap/application-mailer.scss')
|
33
|
+
add_to_assets('application-mailer.scss')
|
34
|
+
end
|
35
|
+
|
36
|
+
# Setup letter_opener config and initializer to catch emails in development
|
37
|
+
def setup_letter_opener
|
38
|
+
smtp_config = <<~LETTER_OPENER
|
39
|
+
# Specify if you you have a preference which method you want SMTP responses to be handled in dev
|
40
|
+
# config.action_mailer.delivery_method = :letter_opener
|
41
|
+
config.action_mailer.delivery_method = :letter_opener_web
|
42
|
+
config.action_mailer.perform_deliveries = true
|
43
|
+
config.action_mailer.raise_delivery_errors = false
|
44
|
+
LETTER_OPENER
|
45
|
+
dev_config(smtp_config)
|
46
|
+
copy_file('config/initializers/letter_opener.rb', 'config/initializers/letter_opener.rb')
|
47
|
+
end
|
48
|
+
|
49
|
+
# Setup a mailer initializer for production, based on the application config
|
50
|
+
def setup_production_mailer
|
51
|
+
if options[:mailer] == 'postmark'
|
52
|
+
copy_file('config/initializers/postmark.rb', 'config/initializers/postmark.rb', force: true)
|
53
|
+
else
|
54
|
+
copy_file('config/initializers/sparkpost.rb', 'config/initializers/sparkpost.rb', force: true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module Kowl
|
7
|
+
class MiscGenerator < Kowl::Generators::Base
|
8
|
+
hide!
|
9
|
+
source_root File.expand_path(File.join('..', 'templates'), File.dirname(__FILE__))
|
10
|
+
|
11
|
+
# Create variables folders in the /apps path for services, workers, etc
|
12
|
+
def create_app_folders
|
13
|
+
folders = %w[serializers services workers]
|
14
|
+
|
15
|
+
folders.each do |d|
|
16
|
+
mk_appdir("app/#{d}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require 'rails/generators/rails/app/app_generator'
|
5
|
+
require 'rails/generators/app_base'
|
6
|
+
require_relative('../../actions')
|
7
|
+
|
8
|
+
# https://github.com/rails/rails/blob/master/railties/lib/rails/generators/app_base.rb
|
9
|
+
module Kowl
|
10
|
+
module Overrides
|
11
|
+
class AppBase < Rails::Generators::AppBase
|
12
|
+
# More stuff coming soon
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# https://www.rubydoc.info/gems/railties/5.0.0/Rails/AppBuilder
|
4
|
+
# https://github.com/rails/rails/blob/b2eb1d1c55a59fee1e6c4cba7030d8ceb524267c/railties/lib/rails/generators/rails/app/app_generator.rb#L45
|
5
|
+
# https://api.rubyonrails.org/v5.1/classes/Rails/AppBuilder.html
|
6
|
+
module Kowl
|
7
|
+
module Overrides
|
8
|
+
class AppBuilder < Rails::AppBuilder
|
9
|
+
# Override the applications .gitignore file with a more rails specific one
|
10
|
+
def gitignore
|
11
|
+
copy_file 'dotfiles/gitignore', '.gitignore', force: true
|
12
|
+
end
|
13
|
+
|
14
|
+
# Override the rails applications README with a new one (displaying application specific information in the readme)
|
15
|
+
def readme
|
16
|
+
template 'README.md.erb', 'README.md'
|
17
|
+
# This is here, because if --skip_tests is added, it skips running the gitignore function
|
18
|
+
# => since all projects have a readme this should just overwrite the gitignore file
|
19
|
+
copy_file 'dotfiles/gitignore', '.gitignore', force: true
|
20
|
+
end
|
21
|
+
|
22
|
+
# Generate procfile for anyone who uses foreman to run their rails application, sidekiq, and various other services at once
|
23
|
+
def procfile
|
24
|
+
# Generate base Procfile
|
25
|
+
template 'dotfiles/Procfile.tt', 'Procfile'
|
26
|
+
# Generate Procfile running foreman in development
|
27
|
+
template 'dotfiles/Procfile.tt', 'Procfile.dev', env: 'development'
|
28
|
+
end
|
29
|
+
|
30
|
+
# Regenerate the applications spring based binstubs
|
31
|
+
def setup_spring
|
32
|
+
bundle_command 'exec spring binstub --all'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Replace the applications Gemfile with gems that are made to get you started faster
|
36
|
+
def replace_gemfile
|
37
|
+
# Gemfile template needs to be 'Gemfile.erb' otherwise it attempts to fetch Gemfile template from the Rails gem
|
38
|
+
# https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/app/templates/Gemfile.tt#L9
|
39
|
+
template 'Gemfile.erb', 'Gemfile', force: true
|
40
|
+
end
|
41
|
+
|
42
|
+
# Override the default generated database.yml file
|
43
|
+
def database_yml
|
44
|
+
# Application will be defaulted to using sqlite3, until ready
|
45
|
+
# => Application will also have a database[database].yml file to replace and run once the application is read
|
46
|
+
template 'config/db/sqlite3.yml', 'config/database.yml', force: true
|
47
|
+
|
48
|
+
# The directory config/databases/** is already used by Rails. We don't want to override this, because it won't pull from the gems template files, because they already exist in the rails gem
|
49
|
+
# /Users/username/.rvm/gems/ruby-2.6.2/gems/railties-6.0.0/lib/rails/generators/rails/app/templates/config/databases
|
50
|
+
if %w[mysql oracle postgresql sqlite3 sqlserver].include? options[:database]
|
51
|
+
template "config/db/#{options[:database]}.yml", "config/database[#{options[:database]}].yml" unless options[:database] == 'sqlite3'
|
52
|
+
else
|
53
|
+
template "config/databases/#{options[:database]}.yml", "config/database[#{options[:database]}].yml"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|