rockstart 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +100 -0
  4. data/Rakefile +19 -0
  5. data/lib/generators/rockstart/USAGE +13 -0
  6. data/lib/generators/rockstart/devise/USAGE +9 -0
  7. data/lib/generators/rockstart/devise/devise_generator.rb +258 -0
  8. data/lib/generators/rockstart/devise/templates/controllers/passwords_controller.rb +56 -0
  9. data/lib/generators/rockstart/devise/templates/controllers/registrations_controller.rb +88 -0
  10. data/lib/generators/rockstart/devise/templates/controllers/sessions_controller.rb +32 -0
  11. data/lib/generators/rockstart/devise/templates/create_user_migration.rb.tt +11 -0
  12. data/lib/generators/rockstart/devise/templates/models/user.rb +42 -0
  13. data/lib/generators/rockstart/devise/templates/spec/factories/users.rb +17 -0
  14. data/lib/generators/rockstart/devise/templates/spec/models/user_spec.rb +64 -0
  15. data/lib/generators/rockstart/devise/templates/spec/requests/users/passwords_spec.rb +202 -0
  16. data/lib/generators/rockstart/devise/templates/spec/requests/users/registrations_spec.rb +445 -0
  17. data/lib/generators/rockstart/devise/templates/spec/requests/users/sessions_spec.rb +171 -0
  18. data/lib/generators/rockstart/devise/templates/spec/support/devise_request_spec_helper.rb +29 -0
  19. data/lib/generators/rockstart/devise/templates/translations.en.yml +4 -0
  20. data/lib/generators/rockstart/docker/USAGE +10 -0
  21. data/lib/generators/rockstart/docker/docker_generator.rb +86 -0
  22. data/lib/generators/rockstart/docker/templates/app/Dockerfile-app +47 -0
  23. data/lib/generators/rockstart/docker/templates/docker-compose.test.yml +29 -0
  24. data/lib/generators/rockstart/docker/templates/docker-compose.yml +47 -0
  25. data/lib/generators/rockstart/docker/templates/dockerignore +16 -0
  26. data/lib/generators/rockstart/docker/templates/dotenv.docker.tt +4 -0
  27. data/lib/generators/rockstart/docker/templates/localhost_domains.ext.tt +7 -0
  28. data/lib/generators/rockstart/docker/templates/setup-localhost.tt +27 -0
  29. data/lib/generators/rockstart/docker/templates/web/Dockerfile-web +15 -0
  30. data/lib/generators/rockstart/docker/templates/web/nginx.conf +62 -0
  31. data/lib/generators/rockstart/frontend_helpers/USAGE +8 -0
  32. data/lib/generators/rockstart/frontend_helpers/frontend_helpers_generator.rb +65 -0
  33. data/lib/generators/rockstart/frontend_helpers/templates/application_urls.rb +26 -0
  34. data/lib/generators/rockstart/frontend_helpers/templates/application_urls_helper.rb +20 -0
  35. data/lib/generators/rockstart/frontend_helpers/templates/titles.en.yml.tt +5 -0
  36. data/lib/generators/rockstart/logging/USAGE +8 -0
  37. data/lib/generators/rockstart/logging/logging_generator.rb +12 -0
  38. data/lib/generators/rockstart/logging/templates/rockstart/lograge_initializer.rb +50 -0
  39. data/lib/generators/rockstart/postgres/USAGE +8 -0
  40. data/lib/generators/rockstart/postgres/postgres_generator.rb +32 -0
  41. data/lib/generators/rockstart/postgres/templates/config/database.yml.tt +18 -0
  42. data/lib/generators/rockstart/postgres/templates/migration.rb.tt +7 -0
  43. data/lib/generators/rockstart/pundit/USAGE +8 -0
  44. data/lib/generators/rockstart/pundit/pundit_generator.rb +32 -0
  45. data/lib/generators/rockstart/pundit/templates/app/controllers/concerns/pundit_error_handling.rb +29 -0
  46. data/lib/generators/rockstart/pundit/templates/app/policies/application_policy.rb +71 -0
  47. data/lib/generators/rockstart/pundit/templates/app/policies/user_policy.rb +47 -0
  48. data/lib/generators/rockstart/pundit/templates/config/locales/pundit.en.yml +6 -0
  49. data/lib/generators/rockstart/pundit/templates/lib/templates/pundit/policy/policy.rb +36 -0
  50. data/lib/generators/rockstart/pundit/templates/lib/templates/rspec/policy/policy_spec.rb +58 -0
  51. data/lib/generators/rockstart/pundit/templates/spec/policies/user_policy_spec.rb +95 -0
  52. data/lib/generators/rockstart/pundit/templates/spec/support/pundit_matchers.rb +7 -0
  53. data/lib/generators/rockstart/quality/USAGE +10 -0
  54. data/lib/generators/rockstart/quality/quality_generator.rb +28 -0
  55. data/lib/generators/rockstart/quality/templates/quality.rake +4 -0
  56. data/lib/generators/rockstart/quality/templates/rubocop.rake +4 -0
  57. data/lib/generators/rockstart/quality/templates/rubocop.yml +45 -0
  58. data/lib/generators/rockstart/rockstart_generator.rb +77 -0
  59. data/lib/generators/rockstart/rspec/USAGE +8 -0
  60. data/lib/generators/rockstart/rspec/rspec_generator.rb +70 -0
  61. data/lib/generators/rockstart/rspec/templates/dotenv.development +1 -0
  62. data/lib/generators/rockstart/rspec/templates/dotenv.test +1 -0
  63. data/lib/generators/rockstart/rspec/templates/rspec_templates/model/model_spec.rb +13 -0
  64. data/lib/generators/rockstart/rspec/templates/support/factory_bot.rb +6 -0
  65. data/lib/generators/rockstart/rspec/templates/support/shoulda_matchers.rb +9 -0
  66. data/lib/generators/rockstart/rspec/templates/support/test_helpers.rb +9 -0
  67. data/lib/generators/rockstart/scaffold_templates/USAGE +8 -0
  68. data/lib/generators/rockstart/scaffold_templates/scaffold_templates_generator.rb +39 -0
  69. data/lib/generators/rockstart/scaffold_templates/templates/api_controller.rb.tt +96 -0
  70. data/lib/generators/rockstart/scaffold_templates/templates/controller.rb.tt +126 -0
  71. data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/api_request_spec.rb +139 -0
  72. data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/request_spec.rb +408 -0
  73. data/lib/generators/rockstart/security/USAGE +13 -0
  74. data/lib/generators/rockstart/security/security_generator.rb +108 -0
  75. data/lib/generators/rockstart/security/templates/brakeman.rake +6 -0
  76. data/lib/generators/rockstart/security/templates/bundler_audit.rake +4 -0
  77. data/lib/generators/rockstart/security/templates/cache_support.rb +18 -0
  78. data/lib/generators/rockstart/security/templates/content_security_policy_initializer.rb.tt +56 -0
  79. data/lib/generators/rockstart/security/templates/content_security_spec.rb.tt +83 -0
  80. data/lib/generators/rockstart/security/templates/csp_violations_controller.rb +39 -0
  81. data/lib/generators/rockstart/security/templates/rack_attack.rb +98 -0
  82. data/lib/generators/rockstart/security/templates/security.rake +9 -0
  83. data/lib/generators/rockstart/security/templates/session_store_initializer.rb.tt +7 -0
  84. data/lib/generators/rockstart/smtp_mailer/USAGE +8 -0
  85. data/lib/generators/rockstart/smtp_mailer/smtp_mailer_generator.rb +30 -0
  86. data/lib/generators/rockstart/smtp_mailer/templates/config/initializers/action_mailer.rb +10 -0
  87. data/lib/generators/rockstart/tailwindcss/USAGE +8 -0
  88. data/lib/generators/rockstart/tailwindcss/tailwindcss_generator.rb +30 -0
  89. data/lib/generators/rockstart/tailwindcss/templates/application.css +3 -0
  90. data/lib/generators/rockstart/tailwindcss/templates/postcss.config.js +32 -0
  91. data/lib/rockstart/base_generator.rb +32 -0
  92. data/lib/rockstart/env.rb +16 -0
  93. data/lib/rockstart/railtie.rb +6 -0
  94. data/lib/rockstart/version.rb +5 -0
  95. data/lib/rockstart.rb +9 -0
  96. data/lib/tasks/rockstart_tasks.rake +5 -0
  97. metadata +187 -0
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper"
4
+
5
+ RSpec.describe "ContentSecurity", type: :request do
6
+ describe "HTTP Headers" do
7
+ context "after sign in" do
8
+ before do
9
+ user = create(:user)
10
+ post user_session_path params: { user: { email: user.email, password: user.password } }
11
+ end
12
+
13
+ it "includes all expected secure headers", :aggregate_failures do
14
+ # Cookies
15
+ session_cookie = cookies.get_cookie("<%= session_name %>")
16
+ expect(session_cookie).to be_http_only
17
+ expect(session_cookie.to_h["SameSite"]).to eq("Lax")
18
+
19
+ follow_redirect!
20
+
21
+ # Security Headers
22
+ expect(response.headers["X-Frame-Options"]).to eq "SAMEORIGIN"
23
+ expect(response.headers["X-XSS-Protection"]).to eq "1; mode=block"
24
+ expect(response.headers["X-Content-Type-Options"]).to eq "nosniff"
25
+ expect(response.headers["X-Download-Options"]).to eq "noopen"
26
+ expect(response.headers["X-Permitted-Cross-Domain-Policies"]).to eq "none"
27
+ expect(response.headers["Referrer-Policy"]).to eq "strict-origin-when-cross-origin"
28
+
29
+ # Content Security Policy
30
+ content_security_policy = response.headers["Content-Security-Policy"]
31
+ expect(content_security_policy).to have_content("default-src 'none'")
32
+ expect(content_security_policy).to have_content("connect-src 'self'")
33
+ expect(content_security_policy).to have_content("font-src 'self'<% if font_hosts.any? %> <%= font_hosts.join(' ') %><% end %>")
34
+ expect(content_security_policy).to have_content("img-src 'self' data:<% if image_hosts.any? %> <%= image_hosts.join(' ') %><% end %>")
35
+ expect(content_security_policy).to have_content("object-src 'none'")
36
+ expect(content_security_policy).to have_content("script-src 'self'<% if script_hosts.any? %> <%= script_hosts.join(' ') %><% end %>")
37
+ expect(content_security_policy).to have_content("style-src 'self'<% if style_hosts.any? %> <%= style_hosts.join(' ') %><% end %>")
38
+ expect(content_security_policy).to have_content("block-all-mixed-content")
39
+ expect(content_security_policy).to have_content("upgrade-insecure-requests")
40
+ expect(content_security_policy).to have_content("report-uri /csp_violations")
41
+
42
+ # Content Security Policy should not require any unsafe exceptions
43
+ expect(content_security_policy).not_to have_content("unsafe")
44
+ end
45
+ end
46
+ end
47
+
48
+ describe "POST /csp_violations" do
49
+ context "with a csp violations" do
50
+ let(:csp_violation) do
51
+ {
52
+ "csp-report": {
53
+ "document-uri": "http://example.com/signup.html",
54
+ "referrer": "",
55
+ "blocked-uri": "http://example.com/css/style.css",
56
+ "violated-directive": "style-src cdn.example.com",
57
+ "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /csp_violations"
58
+ }
59
+ }.to_json
60
+ end
61
+
62
+ it "responds with ok" do
63
+ post "/csp_violations", params: csp_violation, headers: { "CONTENT_TYPE" => "application/json" }
64
+
65
+ expect(response).to have_http_status(:ok)
66
+ expect(response.body).to be_blank
67
+ end
68
+ end
69
+
70
+ context "with an invalid payload" do
71
+ let(:invalid_csp_violation) do
72
+ {}.to_json
73
+ end
74
+
75
+ it "responds with ok" do
76
+ post "/csp_violations", params: invalid_csp_violation, headers: { "CONTENT_TYPE" => "application/json" }
77
+
78
+ expect(response).to have_http_status(:ok)
79
+ expect(response.body).to be_blank
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Handle violations from the Content Security Policy
4
+ class CspViolationsController < ApplicationController
5
+ skip_before_action :verify_authenticity_token
6
+
7
+ def create
8
+ report_base = JSON.parse(request.body.read)
9
+ if report_base.key? "csp-report"
10
+ report = report_base["csp-report"]
11
+ message = build_content_security_message(report)
12
+
13
+ # Post message using Lograge formatter
14
+ Rails.logger.error(message.to_json)
15
+ end
16
+ head :ok
17
+ end
18
+
19
+ private
20
+
21
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
22
+ def build_content_security_message(report)
23
+ {
24
+ "@timestamp" => ::Time.now.utc,
25
+ type: "csp-report",
26
+ blocked_uri: report["blocked-uri"].try(:downcase),
27
+ disposition: report["disposition"].try(:downcase),
28
+ document_uri: report["document-uri"],
29
+ effective_directive: report["effective-directive"].try(:downcase),
30
+ violated_directive: report["violated-directive"].try(:downcase),
31
+ referrer: report["referrer"].try(:downcase),
32
+ status_code: (report["status-code"].presence || 0).to_i,
33
+ request_id: request.request_id,
34
+ user_agent: request.headers["User-Agent"],
35
+ raw_report: report
36
+ }
37
+ end
38
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
39
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "digest/md5"
4
+
5
+ # Configuration for rack_attack
6
+ class Rack::Attack
7
+ LOGIN_PATH = "/users/sign_in"
8
+ REGISTRATION_PATH = "/users"
9
+
10
+ ### Configure Cache ###
11
+
12
+ # If you don't want to use Rails.cache (Rack::Attack's default), then
13
+ # configure it here.
14
+ #
15
+ # Note: The store is only used for throttling (not blocklisting and
16
+ # safelisting). It must implement .increment and .write like
17
+ # ActiveSupport::Cache::Store
18
+
19
+ # Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new
20
+
21
+ ### Throttle Spammy Clients ###
22
+
23
+ # If any single client IP is making tons of requests, then they're
24
+ # probably malicious or a poorly-configured scraper. Either way, they
25
+ # don't deserve to hog all of the app server's CPU. Cut them off!
26
+ #
27
+ # Note: If you're serving assets through rack, those requests may be
28
+ # counted by rack-attack and this throttle may be activated too
29
+ # quickly. If so, enable the condition to exclude them from tracking.
30
+
31
+ # Throttle all requests by IP (60rpm)
32
+ #
33
+ # Key: "rack::attack:#{Time.now.to_i/:period}:req/ip:#{req.ip}"
34
+ throttle("req/ip", limit: 300, period: 5.minutes, &:ip)
35
+
36
+ ### Prevent Brute-Force Login Attacks ###
37
+
38
+ # The most common brute-force login attack is a brute-force password
39
+ # attack where an attacker simply tries a large number of emails and
40
+ # passwords to see if any credentials match.
41
+ #
42
+ # Another common method of attack is to use a swarm of computers with
43
+ # different IPs to try brute-forcing a password for a specific account.
44
+
45
+ # Throttle POST requests to /users/sign_in by IP address
46
+ #
47
+ # Key: "rack::attack:#{Time.now.to_i/:period}:logins/ip:#{req.ip}"
48
+ throttle("logins/ip", limit: 5, period: 20.seconds) do |req|
49
+ req.ip if req.path == LOGIN_PATH && req.post?
50
+ end
51
+
52
+ # Throttle POST requests to /users/sign_in by email param
53
+ #
54
+ # Key: "rack::attack:#{Time.now.to_i/:period}:logins/email:#{req.email}"
55
+ #
56
+ # Note: This creates a problem where a malicious user could intentionally
57
+ # throttle logins for another user and force their login requests to be
58
+ # denied, but that's not very common and shouldn't happen to you. (Knock
59
+ # on wood!)
60
+ throttle("logins/email", limit: 5, period: 20.seconds) do |req|
61
+ if req.path == LOGIN_PATH && req.post?
62
+ # return a filtered email if present, nil otherwise
63
+ email_address = req.params.dig("user", "email").presence
64
+ email_address && Digest::MD5.hexdigest(email_address)
65
+ end
66
+ end
67
+
68
+ ### Prevent Brute-Force Email Harvesting ###
69
+
70
+ # For most authentication endpoints, we attempt to hide the presence of an
71
+ # email address from any outside users.
72
+ #
73
+ # However our registration form will not allow known email addresses to be used.
74
+ # Which can be used as a potential method of verifying email addresses.
75
+ #
76
+ # Throttling this endpoint is an attempt to limit the effectiveness of this farming.
77
+
78
+ # Throttle POST requests to /users by IP address
79
+ #
80
+ # Key: "rack::attack:#{Time.now.to_i/:period}:registrations/ip:#{req.ip}"
81
+ throttle("registrations/ip", limit: 5, period: 20.seconds) do |req|
82
+ req.ip if req.path == REGISTRATION_PATH && (req.post? || req.put? || req.patch?)
83
+ end
84
+
85
+ ### Custom Throttle Response ###
86
+
87
+ # By default, Rack::Attack returns an HTTP 429 for throttled responses,
88
+ # which is just fine.
89
+ #
90
+ # If you want to return 503 so that the attacker might be fooled into
91
+ # believing that they've successfully broken your app (or you just want to
92
+ # customize the response), then uncomment these lines.
93
+ # self.throttled_response = lambda do |env|
94
+ # [ 503, # status
95
+ # {}, # headers
96
+ # ['']] # body
97
+ # end
98
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ SECURITY_TASKS = %w[
4
+ bundle:audit
5
+ brakeman
6
+ ].freeze
7
+
8
+ desc "Run all security checks"
9
+ task security: SECURITY_TASKS
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Use Cookies as the session store, and lock them down to the current domain
4
+ Rails.application.config.session_store :cookie_store, key: "<%= session_name %>",
5
+ http_only: true,
6
+ same_site: :lax,
7
+ secure: Rails.application.config.force_ssl
@@ -0,0 +1,8 @@
1
+ Description:
2
+ A Generator for pre-configuring a basic SMTP Mailer
3
+
4
+ Example:
5
+ rails generate rockstart:smtp_mailer
6
+
7
+ This will create:
8
+ config/initializers/action_mailer.rb
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Rockstart::SmtpMailerGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("templates", __dir__)
5
+
6
+ def configure_test_environment
7
+ application(nil, env: :test) do
8
+ 'config.action_mailer.default_url_options = { host: "www.example.com" }'
9
+ end
10
+ end
11
+
12
+ def configure_development_environment
13
+ application(nil, env: :development) do
14
+ 'config.action_mailer.default_url_options = { host: "localhost", port: 3000 }'
15
+ end
16
+ end
17
+
18
+ def configure_production_environment
19
+ application(nil, env: :production) do
20
+ <<~MAILER
21
+ config.action_mailer.default_url_options = { host: ENV["APP_HOST"] }
22
+ config.action_mailer.delivery_method = :smtp
23
+ MAILER
24
+ end
25
+ end
26
+
27
+ def add_initializers
28
+ directory "config/initializers"
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ ActionMailer::Base.smtp_settings = {
4
+ port: ENV["SMTP_PORT"],
5
+ address: ENV["SMTP_SERVER"],
6
+ user_name: ENV["SMTP_LOGIN"].presence,
7
+ password: ENV["SMTP_PASSWORD"].presence,
8
+ domain: ENV["APP_HOST"],
9
+ authentication: :plain
10
+ }
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Installs Tailwind CSS (https://tailwindcss.com/)
3
+
4
+ Example:
5
+ rails generate rockstart:tailwindcss
6
+
7
+ This will create:
8
+ Tailwind CSS through Webpacker, and adds it to the application pack.
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Rockstart::TailwindcssGenerator < Rails::Generators::Base
4
+ include Rails::Generators::AppName
5
+
6
+ source_root File.expand_path("templates", __dir__)
7
+
8
+ def install_tailwindcss
9
+ run "yarn add tailwindcss"
10
+ run "yarn tailwind init tailwind.config.js"
11
+ end
12
+
13
+ def install_purge_css
14
+ run "yarn add @fullhuman/postcss-purgecss"
15
+ end
16
+
17
+ def update_postcss_config
18
+ template "postcss.config.js"
19
+ end
20
+
21
+ def update_application_layout
22
+ gsub_file "app/views/layouts/application.html.erb", /stylesheet_link_tag/, "stylesheet_pack_tag"
23
+ end
24
+
25
+ def add_stylesheet_to_application_js
26
+ template "application.css", "app/javascript/#{app_name}/application.css"
27
+ append_file "app/javascript/packs/application.js",
28
+ "\nimport '../#{app_name}/application.css';\n"
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ @import "tailwindcss/base";
2
+ @import "tailwindcss/components";
3
+ @import "tailwindcss/utilities";
@@ -0,0 +1,32 @@
1
+ let environment = {
2
+ plugins: [
3
+ require('tailwindcss')('tailwind.config.js'),
4
+ require('autoprefixer'),
5
+ require('postcss-import'),
6
+ require('postcss-flexbugs-fixes'),
7
+ require('postcss-preset-env')({
8
+ autoprefixer: {
9
+ flexbox: 'no-2009'
10
+ },
11
+ stage: 3
12
+ })
13
+ ]
14
+ }
15
+
16
+ // Only run PurgeCSS in production
17
+ if (process.env.RAILS_ENV === "production") {
18
+ environment.plugins.push(
19
+ require('@fullhuman/postcss-purgecss')({
20
+ content: [
21
+ './app/**/*.html.erb',
22
+ './app/helpers/**/*.rb',
23
+ './app/javascript/**/*.js',
24
+ './app/javascript/**/*.vue',
25
+ './app/javascript/**/*.jsx',
26
+ ],
27
+ defaultExtractor: content => content.match(/[A-Za-z0-9-_:/]+/g) || []
28
+ })
29
+ )
30
+ }
31
+
32
+ module.exports = environment
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rockstart
4
+ # Base class for defining rockstart generators
5
+ class BaseGenerator < Rails::Generators::Base
6
+ protected
7
+
8
+ def bundle_install(&block)
9
+ Bundler.clean_system("bundle install --quiet")
10
+ Bundler.with_clean_env(&block) if block_given?
11
+ end
12
+
13
+ def gsub_method(file, method_name, replacement_code = null)
14
+ existing_method_regex = / def #{method_name}...+?end$/m.freeze
15
+ replacement_code = yield if block_given?
16
+ replacement = replacement_code.split("\n").map { |line| " #{line}".rstrip }.join("\n")
17
+ gsub_file file, existing_method_regex, replacement
18
+ end
19
+
20
+ def change_application_url(name, target_url)
21
+ method_definition = url_method_template(name, target_url)
22
+ gsub_method "app/controllers/concerns/application_urls.rb", name, method_definition
23
+ gsub_method "spec/support/application_urls_helper.rb", name, method_definition
24
+ end
25
+
26
+ private
27
+
28
+ def url_method_template(method_name, target_url)
29
+ ["def #{method_name}", " #{target_url}", "end"].join("\n")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rockstart
4
+ # Helpers for analysing the current environment
5
+ module Env
6
+ # Default session name used in a Rails App
7
+ def self.default_session_name
8
+ "_#{Rails.application.class.module_parent.name.underscore}_session"
9
+ end
10
+
11
+ # Indicates Postgres is currently in use
12
+ def self.postgres_db?
13
+ (Rails.configuration.database_configuration[Rails.env]["adapter"] =~ /postgres/) && true
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rockstart
4
+ class Railtie < ::Rails::Railtie
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rockstart
4
+ VERSION = "0.1.0"
5
+ end
data/lib/rockstart.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/env"
4
+ require "rockstart/railtie"
5
+
6
+ # Rockstart: Generators for getting Rails Ready to Rock!
7
+ module Rockstart
8
+ # Your code goes here...
9
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # desc "Explaining what the task does"
3
+ # task :rockstart do
4
+ # # Task goes here
5
+ # end
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rockstart
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Morrall
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 6.0.2
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 6.0.2.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 6.0.2
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 6.0.2.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: rubocop
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: sqlite3
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ description: A collection of generators to rapidly start and update ready-to-run Rails
62
+ Applications.
63
+ email:
64
+ - bemo56@hotmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - MIT-LICENSE
70
+ - README.md
71
+ - Rakefile
72
+ - lib/generators/rockstart/USAGE
73
+ - lib/generators/rockstart/devise/USAGE
74
+ - lib/generators/rockstart/devise/devise_generator.rb
75
+ - lib/generators/rockstart/devise/templates/controllers/passwords_controller.rb
76
+ - lib/generators/rockstart/devise/templates/controllers/registrations_controller.rb
77
+ - lib/generators/rockstart/devise/templates/controllers/sessions_controller.rb
78
+ - lib/generators/rockstart/devise/templates/create_user_migration.rb.tt
79
+ - lib/generators/rockstart/devise/templates/models/user.rb
80
+ - lib/generators/rockstart/devise/templates/spec/factories/users.rb
81
+ - lib/generators/rockstart/devise/templates/spec/models/user_spec.rb
82
+ - lib/generators/rockstart/devise/templates/spec/requests/users/passwords_spec.rb
83
+ - lib/generators/rockstart/devise/templates/spec/requests/users/registrations_spec.rb
84
+ - lib/generators/rockstart/devise/templates/spec/requests/users/sessions_spec.rb
85
+ - lib/generators/rockstart/devise/templates/spec/support/devise_request_spec_helper.rb
86
+ - lib/generators/rockstart/devise/templates/translations.en.yml
87
+ - lib/generators/rockstart/docker/USAGE
88
+ - lib/generators/rockstart/docker/docker_generator.rb
89
+ - lib/generators/rockstart/docker/templates/app/Dockerfile-app
90
+ - lib/generators/rockstart/docker/templates/docker-compose.test.yml
91
+ - lib/generators/rockstart/docker/templates/docker-compose.yml
92
+ - lib/generators/rockstart/docker/templates/dockerignore
93
+ - lib/generators/rockstart/docker/templates/dotenv.docker.tt
94
+ - lib/generators/rockstart/docker/templates/localhost_domains.ext.tt
95
+ - lib/generators/rockstart/docker/templates/setup-localhost.tt
96
+ - lib/generators/rockstart/docker/templates/web/Dockerfile-web
97
+ - lib/generators/rockstart/docker/templates/web/nginx.conf
98
+ - lib/generators/rockstart/frontend_helpers/USAGE
99
+ - lib/generators/rockstart/frontend_helpers/frontend_helpers_generator.rb
100
+ - lib/generators/rockstart/frontend_helpers/templates/application_urls.rb
101
+ - lib/generators/rockstart/frontend_helpers/templates/application_urls_helper.rb
102
+ - lib/generators/rockstart/frontend_helpers/templates/titles.en.yml.tt
103
+ - lib/generators/rockstart/logging/USAGE
104
+ - lib/generators/rockstart/logging/logging_generator.rb
105
+ - lib/generators/rockstart/logging/templates/rockstart/lograge_initializer.rb
106
+ - lib/generators/rockstart/postgres/USAGE
107
+ - lib/generators/rockstart/postgres/postgres_generator.rb
108
+ - lib/generators/rockstart/postgres/templates/config/database.yml.tt
109
+ - lib/generators/rockstart/postgres/templates/migration.rb.tt
110
+ - lib/generators/rockstart/pundit/USAGE
111
+ - lib/generators/rockstart/pundit/pundit_generator.rb
112
+ - lib/generators/rockstart/pundit/templates/app/controllers/concerns/pundit_error_handling.rb
113
+ - lib/generators/rockstart/pundit/templates/app/policies/application_policy.rb
114
+ - lib/generators/rockstart/pundit/templates/app/policies/user_policy.rb
115
+ - lib/generators/rockstart/pundit/templates/config/locales/pundit.en.yml
116
+ - lib/generators/rockstart/pundit/templates/lib/templates/pundit/policy/policy.rb
117
+ - lib/generators/rockstart/pundit/templates/lib/templates/rspec/policy/policy_spec.rb
118
+ - lib/generators/rockstart/pundit/templates/spec/policies/user_policy_spec.rb
119
+ - lib/generators/rockstart/pundit/templates/spec/support/pundit_matchers.rb
120
+ - lib/generators/rockstart/quality/USAGE
121
+ - lib/generators/rockstart/quality/quality_generator.rb
122
+ - lib/generators/rockstart/quality/templates/quality.rake
123
+ - lib/generators/rockstart/quality/templates/rubocop.rake
124
+ - lib/generators/rockstart/quality/templates/rubocop.yml
125
+ - lib/generators/rockstart/rockstart_generator.rb
126
+ - lib/generators/rockstart/rspec/USAGE
127
+ - lib/generators/rockstart/rspec/rspec_generator.rb
128
+ - lib/generators/rockstart/rspec/templates/dotenv.development
129
+ - lib/generators/rockstart/rspec/templates/dotenv.test
130
+ - lib/generators/rockstart/rspec/templates/rspec_templates/model/model_spec.rb
131
+ - lib/generators/rockstart/rspec/templates/support/factory_bot.rb
132
+ - lib/generators/rockstart/rspec/templates/support/shoulda_matchers.rb
133
+ - lib/generators/rockstart/rspec/templates/support/test_helpers.rb
134
+ - lib/generators/rockstart/scaffold_templates/USAGE
135
+ - lib/generators/rockstart/scaffold_templates/scaffold_templates_generator.rb
136
+ - lib/generators/rockstart/scaffold_templates/templates/api_controller.rb.tt
137
+ - lib/generators/rockstart/scaffold_templates/templates/controller.rb.tt
138
+ - lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/api_request_spec.rb
139
+ - lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/request_spec.rb
140
+ - lib/generators/rockstart/security/USAGE
141
+ - lib/generators/rockstart/security/security_generator.rb
142
+ - lib/generators/rockstart/security/templates/brakeman.rake
143
+ - lib/generators/rockstart/security/templates/bundler_audit.rake
144
+ - lib/generators/rockstart/security/templates/cache_support.rb
145
+ - lib/generators/rockstart/security/templates/content_security_policy_initializer.rb.tt
146
+ - lib/generators/rockstart/security/templates/content_security_spec.rb.tt
147
+ - lib/generators/rockstart/security/templates/csp_violations_controller.rb
148
+ - lib/generators/rockstart/security/templates/rack_attack.rb
149
+ - lib/generators/rockstart/security/templates/security.rake
150
+ - lib/generators/rockstart/security/templates/session_store_initializer.rb.tt
151
+ - lib/generators/rockstart/smtp_mailer/USAGE
152
+ - lib/generators/rockstart/smtp_mailer/smtp_mailer_generator.rb
153
+ - lib/generators/rockstart/smtp_mailer/templates/config/initializers/action_mailer.rb
154
+ - lib/generators/rockstart/tailwindcss/USAGE
155
+ - lib/generators/rockstart/tailwindcss/tailwindcss_generator.rb
156
+ - lib/generators/rockstart/tailwindcss/templates/application.css
157
+ - lib/generators/rockstart/tailwindcss/templates/postcss.config.js
158
+ - lib/rockstart.rb
159
+ - lib/rockstart/base_generator.rb
160
+ - lib/rockstart/env.rb
161
+ - lib/rockstart/railtie.rb
162
+ - lib/rockstart/version.rb
163
+ - lib/tasks/rockstart_tasks.rake
164
+ homepage: https://github.com/bmorrall/rockstart
165
+ licenses:
166
+ - MIT
167
+ metadata: {}
168
+ post_install_message:
169
+ rdoc_options: []
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ required_rubygems_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubygems_version: 3.1.2
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Generators for getting Rails Ready to Rock!
187
+ test_files: []