schienenzeppelin 0.1 → 0.2

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +5 -1
  4. data/.tool-versions +1 -1
  5. data/CHANGELOG.md +1 -0
  6. data/Gemfile +1 -0
  7. data/Gemfile.lock +78 -71
  8. data/TODO.md +37 -25
  9. data/lib/schienenzeppelin.rb +5 -2
  10. data/lib/schienenzeppelin/add_on.rb +68 -0
  11. data/lib/schienenzeppelin/{helpers → addons}/annotate.rb +4 -2
  12. data/lib/schienenzeppelin/{helpers → addons}/capistrano.rb +2 -2
  13. data/lib/schienenzeppelin/{helpers → addons}/continuous_integration.rb +2 -2
  14. data/lib/schienenzeppelin/{helpers → addons}/credentials.rb +2 -2
  15. data/lib/schienenzeppelin/{helpers → addons}/devise.rb +6 -3
  16. data/lib/schienenzeppelin/addons/docker.rb +12 -0
  17. data/lib/schienenzeppelin/addons/docker_compose.rb +11 -0
  18. data/lib/schienenzeppelin/addons/dotenv.rb +11 -0
  19. data/lib/schienenzeppelin/{helpers → addons}/errors.rb +5 -2
  20. data/lib/schienenzeppelin/{helpers → addons}/factory_bot.rb +6 -2
  21. data/lib/schienenzeppelin/addons/foreman.rb +13 -0
  22. data/lib/schienenzeppelin/addons/generators.rb +30 -0
  23. data/lib/schienenzeppelin/{helpers → addons}/high_voltage.rb +4 -2
  24. data/lib/schienenzeppelin/addons/inline_svg.rb +9 -0
  25. data/lib/schienenzeppelin/{helpers/scaffold.rb → addons/irbrc.rb} +3 -3
  26. data/lib/schienenzeppelin/addons/jb.rb +9 -0
  27. data/lib/schienenzeppelin/{helpers/hotwire.rb → addons/lograge.rb} +3 -3
  28. data/lib/schienenzeppelin/addons/oj.rb +9 -0
  29. data/lib/schienenzeppelin/{helpers → addons}/pundit.rb +2 -2
  30. data/lib/schienenzeppelin/{helpers → addons}/rspec.rb +4 -2
  31. data/lib/schienenzeppelin/{helpers → addons}/rubocop.rb +2 -2
  32. data/lib/schienenzeppelin/addons/ruby_version.rb +11 -0
  33. data/lib/schienenzeppelin/addons/scaffold.rb +13 -0
  34. data/lib/schienenzeppelin/{helpers → addons}/services.rb +2 -2
  35. data/lib/schienenzeppelin/addons/shoulda.rb +13 -0
  36. data/lib/schienenzeppelin/{helpers → addons}/sidekiq.rb +3 -4
  37. data/lib/schienenzeppelin/{helpers → addons}/stimulus.rb +4 -2
  38. data/lib/schienenzeppelin/{helpers → addons}/stimulus_components.rb +4 -2
  39. data/lib/schienenzeppelin/{helpers → addons}/tailwind.rb +4 -2
  40. data/lib/schienenzeppelin/{helpers/home.rb → addons/views.rb} +5 -3
  41. data/lib/schienenzeppelin/app_builder.rb +2 -50
  42. data/lib/schienenzeppelin/app_generator.rb +53 -61
  43. data/lib/schienenzeppelin/context.rb +26 -0
  44. data/lib/schienenzeppelin/dependencies.rb +33 -0
  45. data/lib/schienenzeppelin/generator_utils.rb +77 -0
  46. data/lib/schienenzeppelin/version.rb +2 -2
  47. data/schienenzeppelin.gemspec +0 -1
  48. data/templates/.irbrc.erb +2 -2
  49. data/templates/Dockerfile.erb +1 -1
  50. data/templates/Gemfile.erb +39 -10
  51. data/templates/Procfile.dev.erb +5 -1
  52. data/templates/Procfile.erb +2 -0
  53. data/templates/app/views/shared/_navbar.html.erb.tt +19 -4
  54. data/templates/app/workers/application_worker.rb +5 -0
  55. data/templates/docker-compose.yml.erb +2 -2
  56. data/templates/spec/rails_helper.rb +1 -1
  57. metadata +41 -27
  58. data/.rspec_status +0 -3
  59. data/lib/schienenzeppelin/helper_base.rb +0 -28
  60. data/lib/schienenzeppelin/helpers/generators.rb +0 -26
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Capistrano < HelperBase
4
+ module AddOns
5
+ class Capistrano < AddOn
6
6
  def apply
7
7
  say 'Installing and configuring Capistrano'
8
8
  run('bundle exec cap install', capture: true)
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class ContinuousIntegration < HelperBase
4
+ module AddOns
5
+ class ContinuousIntegration < AddOn
6
6
  def apply
7
7
  say 'Setting up GitHub CI'
8
8
  template('.github/workflows/build.yml.erb', '.github/workflows/build.yml')
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Credentials < HelperBase
4
+ module AddOns
5
+ class Credentials < AddOn
6
6
  def apply
7
7
  key_path = Pathname.new('config/credentials/production.key')
8
8
  create_credential_files(key_path, 'config/credentials/production.yml.enc')
@@ -1,12 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Devise < HelperBase
4
+ module AddOns
5
+ class Devise < AddOn
6
+ depends_on :active_record
7
+
6
8
  def apply
7
9
  generate('devise:install', capture: true)
8
10
  generate(:devise, 'User', 'name', 'admin:boolean', capture: true)
9
- directory('app/views/devise', 'app/views/devise')
11
+
12
+ directory('app/views/devise', 'app/views/devise') if uses?(:views)
10
13
 
11
14
  inject_into_file 'config/environments/development.rb', before: /^end/ do
12
15
  <<-RUBY
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Docker < AddOn
6
+ def apply
7
+ template 'Dockerfile.erb', 'Dockerfile'
8
+ template '.dockerignore.erb', '.dockerignore'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class DockerCompose < AddOn
6
+ def apply
7
+ template 'docker-compose.yml.erb', 'docker-compose.yml'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Dotenv < AddOn
6
+ def apply
7
+ template '.env.development.erb', '.env.development'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Errors < HelperBase
4
+ module AddOns
5
+ class Errors < AddOn
6
+ depends_on :tailwind
7
+
6
8
  def apply
7
9
  say 'Setting up custom error pages'
8
10
  add_errors
@@ -43,6 +45,7 @@ module Schienenzeppelin
43
45
  def patch_turbolinks
44
46
  inject_into_file 'app/javascript/packs/application.js' do
45
47
  <<~JS
48
+
46
49
  // Patching turbolinks to allow custom errors
47
50
  // See https://github.com/turbolinks/turbolinks/issues/179
48
51
  window.Turbolinks.HttpRequest.prototype.requestLoaded = function() {
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class FactoryBot < HelperBase
4
+ module AddOns
5
+ class FactoryBot < AddOn
6
+ depends_on :active_record, :test
7
+
6
8
  def apply
7
9
  # TODO: Make this work for minitest
10
+ return unless uses?(:factory_bot)
11
+
8
12
  empty_directory 'spec/factories'
9
13
  template('spec/support/factory_bot.rb')
10
14
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Foreman < AddOn
6
+ def apply
7
+ template '.foreman.erb', '.foreman'
8
+ template 'Procfile.erb', 'Procfile'
9
+ template 'Procfile.dev.erb', 'Procfile.dev'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Generators < AddOn
6
+ def apply
7
+ directory('lib/generators/rails/navigation', 'lib/generators/rails/navigation') if uses?(:views)
8
+
9
+ template = 'lib/generators/rails/scaffold_controller_generator.rb'
10
+ template(template) if uses?(:scaffold)
11
+
12
+ generators = <<-RUBY
13
+ config.generators do |generate|
14
+ #{"require_relative '../lib/generators/rails/scaffold_controller_generator'" if uses?(:scaffold)}
15
+ generate.helper false
16
+ generate.javascripts false
17
+ generate.request_specs false
18
+ generate.routing_specs false
19
+ generate.stylesheets false
20
+ #{'generate.test_framework :rspec' if uses?(:rspec)}
21
+ generate.view_specs false
22
+ #{'generate.jb true' if uses?(:jb)}
23
+ #{'generate.factory_bot true' if uses?(:factory_bot)}
24
+ end
25
+ RUBY
26
+ inject_into_file 'config/application.rb', generators, before: /^ {2}end\n/
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class HighVoltage < HelperBase
4
+ module AddOns
5
+ class HighVoltage < AddOn
6
+ depends_on :views
7
+
6
8
  def apply
7
9
  template('config/initializers/high_voltage.rb')
8
10
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class InlineSvg < AddOn
6
+ depends_on :views
7
+ end
8
+ end
9
+ end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Scaffold < HelperBase
4
+ module AddOns
5
+ class Irbrc < AddOn
6
6
  def apply
7
- directory 'lib', 'lib'
7
+ template '.irbrc.erb', '.irbrc'
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Jb < AddOn
6
+ # Placeholder
7
+ end
8
+ end
9
+ end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Hotwire < HelperBase
4
+ module AddOns
5
+ class Lograge < AddOn
6
6
  def apply
7
- rails_command('hotwire:install')
7
+ template 'config/initializers/lograge.rb'
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Oj < AddOn
6
+ # Placeholder
7
+ end
8
+ end
9
+ end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Pundit < HelperBase
4
+ module AddOns
5
+ class Pundit < AddOn
6
6
  def apply
7
7
  directory 'app/policies', 'app/policies'
8
8
  template 'app/controllers/authorized_controller.rb.erb', 'app/controllers/authorized_controller.rb'
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Rspec < HelperBase
4
+ module AddOns
5
+ class Rspec < AddOn
6
+ depends_on :test
7
+
6
8
  def apply
7
9
  create_file('.rspec', '--require spec_helper')
8
10
  template('spec/rails_helper.rb')
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Rubocop < HelperBase
4
+ module AddOns
5
+ class Rubocop < AddOn
6
6
  def apply
7
7
  template '.rubocop.yml.erb', '.rubocop.yml'
8
8
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class RubyVersion < AddOn
6
+ def apply
7
+ template '.tool-versions.erb', '.tool-versions'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Scaffold < AddOn
6
+ depends_on :tailwind
7
+
8
+ def apply
9
+ directory 'lib/templates/erb/scaffold', 'lib/templates/erb/scaffold'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Services < HelperBase
4
+ module AddOns
5
+ class Services < AddOn
6
6
  def apply
7
7
  directory 'app/services', 'app/services'
8
8
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ module AddOns
5
+ class Shoulda < AddOn
6
+ depends_on :rspec
7
+
8
+ def apply
9
+ template 'spec/support/shoulda_matchers.rb'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Sidekiq < HelperBase
4
+ module AddOns
5
+ class Sidekiq < AddOn
6
6
  def apply
7
7
  say 'Setting up sidekiq'
8
- empty_directory('app/workers')
9
- create_file('app/workers/.keep')
8
+ directory('app/workers', 'app/workers')
10
9
  end
11
10
  end
12
11
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Stimulus < HelperBase
4
+ module AddOns
5
+ class Stimulus < AddOn
6
+ depends_on :javascript
7
+
6
8
  def apply
7
9
  rails_command('stimulus:install')
8
10
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class StimulusComponents < HelperBase
4
+ module AddOns
5
+ class StimulusComponents < AddOn
6
+ depends_on :stimulus
7
+
6
8
  def apply
7
9
  run('yarn add tailwindcss-stimulus-components')
8
10
  inject_into_file('app/javascript/packs/application.js') do
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Tailwind < HelperBase
4
+ module AddOns
5
+ class Tailwind < AddOn
6
+ depends_on :javascript
7
+
6
8
  def apply
7
9
  rails_command('tailwindcss:install')
8
10
  template('app/javascript/stylesheets/components.scss')
@@ -1,13 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Home < HelperBase
4
+ module AddOns
5
+ class Views < AddOn
6
+ depends_on :tailwind
7
+
6
8
  def apply
7
9
  say 'Setting up custom landing page'
8
10
  directory 'app/views/layouts', 'app/views/layouts', force: true
9
- directory 'app/views/pages', 'app/views/pages'
10
11
  directory 'app/views/shared', 'app/views/shared'
12
+ directory 'app/views/pages', 'app/views/pages' if uses?(:high_voltage)
11
13
  # Make sure we can access any images put into the images folder
12
14
  inject_into_file('app/javascript/packs/application.js', "require.context('../images', true)")
13
15
  directory 'app/javascript/images', 'app/javascript/images'
@@ -10,7 +10,7 @@ module Schienenzeppelin
10
10
  def credentials
11
11
  super
12
12
  # This sets up credentials using a custom template for both development and production use
13
- Schienenzeppelin::Helpers::Credentials.apply
13
+ Schienenzeppelin::AddOns::Credentials.apply
14
14
  end
15
15
 
16
16
  def readme
@@ -18,7 +18,7 @@ module Schienenzeppelin
18
18
  end
19
19
 
20
20
  def ruby_version
21
- template '.tool-versions.erb', '.tool-versions'
21
+ Schienenzeppelin::AddOns::RubyVersion.new(Context.new(options)).apply
22
22
  end
23
23
 
24
24
  def gemfile
@@ -29,26 +29,6 @@ module Schienenzeppelin
29
29
  template '.gitignore.erb', '.gitignore'
30
30
  end
31
31
 
32
- def irbrc
33
- template '.irbrc.erb', '.irbrc'
34
- end
35
-
36
- def docker
37
- template 'Dockerfile.erb', 'Dockerfile'
38
- template '.dockerignore.erb', '.dockerignore'
39
- template 'docker-compose.yml.erb', 'docker-compose.yml'
40
- end
41
-
42
- def dotenv
43
- template '.env.development.erb', '.env.development'
44
- end
45
-
46
- def foreman
47
- template '.foreman.erb', '.foreman'
48
- template 'Procfile.erb', 'Procfile'
49
- template 'Procfile.dev.erb', 'Procfile.dev'
50
- end
51
-
52
32
  def database_yml
53
33
  if options[:database] == 'postgresql'
54
34
  template 'config/postgresql.yml.erb', 'config/database.yml'
@@ -56,33 +36,5 @@ module Schienenzeppelin
56
36
  super
57
37
  end
58
38
  end
59
-
60
- def lograge
61
- template 'config/initializers/lograge.rb'
62
- end
63
-
64
- def sidekiq
65
- Schienenzeppelin::Helpers::Sidekiq.apply
66
- end
67
-
68
- def pundit
69
- Schienenzeppelin::Helpers::Pundit.apply
70
- end
71
-
72
- def rspec
73
- Schienenzeppelin::Helpers::Rspec.apply
74
- end
75
-
76
- def shoulda
77
- template 'spec/support/shoulda_matchers.rb'
78
- end
79
-
80
- def high_voltage
81
- Schienenzeppelin::Helpers::HighVoltage.apply
82
- end
83
-
84
- def factory_bot
85
- Schienenzeppelin::Helpers::FactoryBot.apply
86
- end
87
39
  end
88
40
  end