schienenzeppelin 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7adad707ab6089892e02096e9cb15114ef2bb10b3c3d44d57d2a1eee7e9e1575
4
- data.tar.gz: 8363a2a2e485cf173e29586de11f23dfdfaace4817bf442495f9d2b8a0f5cc64
3
+ metadata.gz: ee71ebdb69f1db2ac35da5916949e0a712630861a068fc1b737a8d0e0d4cd045
4
+ data.tar.gz: 2cf011f2ed4d0ba7e9b172bf33fbcda4b2217b46058e4cb5ef8867f1a9a94ad5
5
5
  SHA512:
6
- metadata.gz: 17e4aedfd3e0b09c61cda41bd06fa8983f5e1f9ed675ad64351953a40de40024f99ad9aabf851c3af065f403b763a57937ee1a08fbc10b5dc2086a10a34b5ff2
7
- data.tar.gz: b599d828c04e3a0121350c9c6356eddc3b209e011501fcde4ea17da3a8cdc1d583323addaf3d10d8c526caa8f892eff583bc0f868cb39803aa346b3c0eb35680
6
+ metadata.gz: d50a1100d4d4467fc4e7ef03151a7fb2346d010b65782e209abaf6c3d5c3a40de8141ffe0c7d55fd2d2a31c8cecc8a408b6fab4b2ed2345bc2193d55c6e6213c
7
+ data.tar.gz: 3f497b097a977ebdc12caa3c2ac5b68f9fc7b6674c081a897099eaa4774b398da372dd9901d1dcf741a0a7010484421db0165dc48c7b800a11ca6c7d860309d5
data/.gitignore CHANGED
@@ -280,3 +280,5 @@ tags
280
280
 
281
281
  .bridgetown-cache/
282
282
  .bridgetown-webpack/
283
+
284
+ .rspec_status
data/.rubocop.yml CHANGED
@@ -5,9 +5,13 @@ AllCops:
5
5
  Naming/AccessorMethodName:
6
6
  Enabled: false
7
7
 
8
+ Metrics/ClassLength:
9
+ Max: 300
10
+
8
11
  Metrics/MethodLength:
9
12
  CountAsOne: ['array', 'heredoc']
10
13
  IgnoredMethods: ['describe', 'context']
14
+ Max: 20
11
15
 
12
16
  Metrics/BlockLength:
13
17
  IgnoredMethods: ['describe', 'context']
@@ -17,7 +21,7 @@ Layout/LineLength:
17
21
  Max: 120
18
22
 
19
23
  Layout/MultilineMethodCallIndentation:
20
- EnforcedStyle: indented
24
+ EnforcedStyle: indented_relative_to_receiver
21
25
 
22
26
  Style/BlockDelimiters:
23
27
  Exclude:
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 2.6.6
1
+ ruby 3.0.0
data/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+
data/Gemfile CHANGED
@@ -11,3 +11,4 @@ gem 'rspec', '~> 3.10'
11
11
 
12
12
  gem 'rubocop', '~> 1.9'
13
13
  gem 'rubocop-rspec', '~> 1.40'
14
+ gem 'super_diff'
data/Gemfile.lock CHANGED
@@ -1,72 +1,73 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- schienenzeppelin (0.1)
5
- rails (~> 6.1.2)
4
+ schienenzeppelin (0.2)
5
+ rails (~> 6.1.3)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (6.1.2.1)
11
- actionpack (= 6.1.2.1)
12
- activesupport (= 6.1.2.1)
10
+ actioncable (6.1.3.1)
11
+ actionpack (= 6.1.3.1)
12
+ activesupport (= 6.1.3.1)
13
13
  nio4r (~> 2.0)
14
14
  websocket-driver (>= 0.6.1)
15
- actionmailbox (6.1.2.1)
16
- actionpack (= 6.1.2.1)
17
- activejob (= 6.1.2.1)
18
- activerecord (= 6.1.2.1)
19
- activestorage (= 6.1.2.1)
20
- activesupport (= 6.1.2.1)
15
+ actionmailbox (6.1.3.1)
16
+ actionpack (= 6.1.3.1)
17
+ activejob (= 6.1.3.1)
18
+ activerecord (= 6.1.3.1)
19
+ activestorage (= 6.1.3.1)
20
+ activesupport (= 6.1.3.1)
21
21
  mail (>= 2.7.1)
22
- actionmailer (6.1.2.1)
23
- actionpack (= 6.1.2.1)
24
- actionview (= 6.1.2.1)
25
- activejob (= 6.1.2.1)
26
- activesupport (= 6.1.2.1)
22
+ actionmailer (6.1.3.1)
23
+ actionpack (= 6.1.3.1)
24
+ actionview (= 6.1.3.1)
25
+ activejob (= 6.1.3.1)
26
+ activesupport (= 6.1.3.1)
27
27
  mail (~> 2.5, >= 2.5.4)
28
28
  rails-dom-testing (~> 2.0)
29
- actionpack (6.1.2.1)
30
- actionview (= 6.1.2.1)
31
- activesupport (= 6.1.2.1)
29
+ actionpack (6.1.3.1)
30
+ actionview (= 6.1.3.1)
31
+ activesupport (= 6.1.3.1)
32
32
  rack (~> 2.0, >= 2.0.9)
33
33
  rack-test (>= 0.6.3)
34
34
  rails-dom-testing (~> 2.0)
35
35
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
36
- actiontext (6.1.2.1)
37
- actionpack (= 6.1.2.1)
38
- activerecord (= 6.1.2.1)
39
- activestorage (= 6.1.2.1)
40
- activesupport (= 6.1.2.1)
36
+ actiontext (6.1.3.1)
37
+ actionpack (= 6.1.3.1)
38
+ activerecord (= 6.1.3.1)
39
+ activestorage (= 6.1.3.1)
40
+ activesupport (= 6.1.3.1)
41
41
  nokogiri (>= 1.8.5)
42
- actionview (6.1.2.1)
43
- activesupport (= 6.1.2.1)
42
+ actionview (6.1.3.1)
43
+ activesupport (= 6.1.3.1)
44
44
  builder (~> 3.1)
45
45
  erubi (~> 1.4)
46
46
  rails-dom-testing (~> 2.0)
47
47
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
48
- activejob (6.1.2.1)
49
- activesupport (= 6.1.2.1)
48
+ activejob (6.1.3.1)
49
+ activesupport (= 6.1.3.1)
50
50
  globalid (>= 0.3.6)
51
- activemodel (6.1.2.1)
52
- activesupport (= 6.1.2.1)
53
- activerecord (6.1.2.1)
54
- activemodel (= 6.1.2.1)
55
- activesupport (= 6.1.2.1)
56
- activestorage (6.1.2.1)
57
- actionpack (= 6.1.2.1)
58
- activejob (= 6.1.2.1)
59
- activerecord (= 6.1.2.1)
60
- activesupport (= 6.1.2.1)
61
- marcel (~> 0.3.1)
62
- mimemagic (~> 0.3.2)
63
- activesupport (6.1.2.1)
51
+ activemodel (6.1.3.1)
52
+ activesupport (= 6.1.3.1)
53
+ activerecord (6.1.3.1)
54
+ activemodel (= 6.1.3.1)
55
+ activesupport (= 6.1.3.1)
56
+ activestorage (6.1.3.1)
57
+ actionpack (= 6.1.3.1)
58
+ activejob (= 6.1.3.1)
59
+ activerecord (= 6.1.3.1)
60
+ activesupport (= 6.1.3.1)
61
+ marcel (~> 1.0.0)
62
+ mini_mime (~> 1.0.2)
63
+ activesupport (6.1.3.1)
64
64
  concurrent-ruby (~> 1.0, >= 1.0.2)
65
65
  i18n (>= 1.6, < 2)
66
66
  minitest (>= 5.1)
67
67
  tzinfo (~> 2.0)
68
68
  zeitwerk (~> 2.3)
69
69
  ast (2.4.2)
70
+ attr_extras (6.2.4)
70
71
  builder (3.2.4)
71
72
  concurrent-ruby (1.1.8)
72
73
  crass (1.0.6)
@@ -74,58 +75,59 @@ GEM
74
75
  erubi (1.10.0)
75
76
  globalid (0.4.2)
76
77
  activesupport (>= 4.2.0)
77
- i18n (1.8.9)
78
+ i18n (1.8.10)
78
79
  concurrent-ruby (~> 1.0)
79
- loofah (2.9.0)
80
+ loofah (2.9.1)
80
81
  crass (~> 1.0.2)
81
82
  nokogiri (>= 1.5.9)
82
83
  mail (2.7.1)
83
84
  mini_mime (>= 0.1.1)
84
- marcel (0.3.3)
85
- mimemagic (~> 0.3.2)
85
+ marcel (1.0.1)
86
86
  method_source (1.0.0)
87
- mimemagic (0.3.5)
88
- mini_mime (1.0.2)
89
- minitest (5.14.3)
90
- nio4r (2.5.5)
91
- nokogiri (1.11.1-x86_64-linux)
87
+ mini_mime (1.0.3)
88
+ minitest (5.14.4)
89
+ nio4r (2.5.7)
90
+ nokogiri (1.11.3-x86_64-linux)
92
91
  racc (~> 1.4)
92
+ optimist (3.0.1)
93
93
  parallel (1.20.1)
94
94
  parser (3.0.0.0)
95
95
  ast (~> 2.4.1)
96
+ patience_diff (1.2.0)
97
+ optimist (~> 3.0)
96
98
  racc (1.5.2)
97
99
  rack (2.2.3)
98
100
  rack-test (1.1.0)
99
101
  rack (>= 1.0, < 3)
100
- rails (6.1.2.1)
101
- actioncable (= 6.1.2.1)
102
- actionmailbox (= 6.1.2.1)
103
- actionmailer (= 6.1.2.1)
104
- actionpack (= 6.1.2.1)
105
- actiontext (= 6.1.2.1)
106
- actionview (= 6.1.2.1)
107
- activejob (= 6.1.2.1)
108
- activemodel (= 6.1.2.1)
109
- activerecord (= 6.1.2.1)
110
- activestorage (= 6.1.2.1)
111
- activesupport (= 6.1.2.1)
102
+ rails (6.1.3.1)
103
+ actioncable (= 6.1.3.1)
104
+ actionmailbox (= 6.1.3.1)
105
+ actionmailer (= 6.1.3.1)
106
+ actionpack (= 6.1.3.1)
107
+ actiontext (= 6.1.3.1)
108
+ actionview (= 6.1.3.1)
109
+ activejob (= 6.1.3.1)
110
+ activemodel (= 6.1.3.1)
111
+ activerecord (= 6.1.3.1)
112
+ activestorage (= 6.1.3.1)
113
+ activesupport (= 6.1.3.1)
112
114
  bundler (>= 1.15.0)
113
- railties (= 6.1.2.1)
115
+ railties (= 6.1.3.1)
114
116
  sprockets-rails (>= 2.0.0)
115
117
  rails-dom-testing (2.0.3)
116
118
  activesupport (>= 4.2.0)
117
119
  nokogiri (>= 1.6)
118
120
  rails-html-sanitizer (1.3.0)
119
121
  loofah (~> 2.3)
120
- railties (6.1.2.1)
121
- actionpack (= 6.1.2.1)
122
- activesupport (= 6.1.2.1)
122
+ railties (6.1.3.1)
123
+ actionpack (= 6.1.3.1)
124
+ activesupport (= 6.1.3.1)
123
125
  method_source
124
126
  rake (>= 0.8.7)
125
127
  thor (~> 1.0)
126
128
  rainbow (3.0.0)
127
129
  rake (13.0.3)
128
- regexp_parser (2.0.3)
130
+ regexp_parser (2.1.1)
129
131
  rexml (3.2.4)
130
132
  rspec (3.10.0)
131
133
  rspec-core (~> 3.10.0)
@@ -136,11 +138,11 @@ GEM
136
138
  rspec-expectations (3.10.1)
137
139
  diff-lcs (>= 1.2.0, < 2.0)
138
140
  rspec-support (~> 3.10.0)
139
- rspec-mocks (3.10.1)
141
+ rspec-mocks (3.10.2)
140
142
  diff-lcs (>= 1.2.0, < 2.0)
141
143
  rspec-support (~> 3.10.0)
142
- rspec-support (3.10.1)
143
- rubocop (1.9.1)
144
+ rspec-support (3.10.2)
145
+ rubocop (1.11.0)
144
146
  parallel (~> 1.10)
145
147
  parser (>= 3.0.0.0)
146
148
  rainbow (>= 2.2.2, < 4.0)
@@ -161,6 +163,10 @@ GEM
161
163
  actionpack (>= 4.0)
162
164
  activesupport (>= 4.0)
163
165
  sprockets (>= 3.0.0)
166
+ super_diff (0.6.1)
167
+ attr_extras (>= 6.2.4)
168
+ diff-lcs
169
+ patience_diff
164
170
  thor (1.1.0)
165
171
  tzinfo (2.0.4)
166
172
  concurrent-ruby (~> 1.0)
@@ -179,6 +185,7 @@ DEPENDENCIES
179
185
  rubocop (~> 1.9)
180
186
  rubocop-rspec (~> 1.40)
181
187
  schienenzeppelin!
188
+ super_diff
182
189
 
183
190
  BUNDLED WITH
184
- 2.2.7
191
+ 2.2.14
data/TODO.md CHANGED
@@ -1,32 +1,44 @@
1
-
2
1
  # TODO
3
2
 
4
- ## Phase 2
5
- - Schienenzeppelin Repo CI (notify gem releases, tests)
6
- - Loads of testing
7
- - Hide generators and scaffolds in sz gem, don't copy as templates. See JB, use railtie
3
+ ## Next up
8
4
 
9
- ## Phase 3
10
- - Make everything skippable, manage dependencies between items
5
+ - Dependency management for options e.g.
6
+ - Testing framework
7
+ - Deployment framework
8
+ - Background processing
11
9
  - Take advantage of saved config (as rails new does)
12
- - Licensing?
13
- - Homepage & Newsletter
14
- - Goodies for Business:
15
- - Admin pages
16
- - Social Logins
17
- - Cloud Storage ?
18
- - Payments
19
- - Monitoring (Skylight, ...)
20
- - Email Providers (Mailgun, ...)
21
- - Reporting (Bugsnag, ...)
22
- - Dockerfile
23
- - https://dev.to/citronak/modern-rails-flash-messages-part-1-viewcomponent-stimulus-tailwind-css-3alm
24
- - Configuration wizard via command line
25
- - Alternative configurations:
26
- - Differernt DB
27
- - Different BG Jobs
28
- - Different Deployment
29
-
30
10
  - Additional Gems:
31
11
  - Pagy
12
+
13
+ - More dependency stuff:
14
+ - Adapt test command in CI
15
+ - Adapt capfile for skips (sidekiq)
16
+ - Adapt docker-compose for skips (database, webpack...)
17
+ - Adapt dockerfile & entrypoint for skips (database, webpack...)
18
+ - Adapt dotenv for skips (database)
19
+ - Adapt setup for skips (database, sidekiq...)
20
+
21
+ ## Future
22
+
23
+ - Proper Icon
24
+ - Homepage & Newsletter & Docs
25
+
26
+ ## Far Future
27
+
28
+ - Licensing?
29
+ - Goodies for Business:
30
+ - Admin pages
31
+ - Social Logins
32
+ - Cloud Storage ?
33
+ - Payments
34
+ - Monitoring (Skylight, ...)
35
+ - Email Providers (Mailgun, ...)
36
+ - Reporting (Bugsnag, ...)
37
+ - Dockerfile
38
+ - https://dev.to/citronak/modern-rails-flash-messages-part-1-viewcomponent-stimulus-tailwind-css-3alm
39
+ - Configuration wizard via command line
40
+ - Alternative configurations:
41
+ - Differernt DB
42
+ - Different BG Jobs
43
+ - Different Deployment
32
44
  - Ansible repo setup if deploy is Capistrano
@@ -8,8 +8,11 @@ require 'rails/generators/rails/app/app_generator'
8
8
  require 'bundler'
9
9
 
10
10
  require_relative 'schienenzeppelin/version'
11
- require_relative 'schienenzeppelin/helper_base'
12
- Dir[File.join(__dir__, 'schienenzeppelin', 'helpers', '*.rb')].sort.each { |file| require file }
11
+ require_relative 'schienenzeppelin/context'
12
+ require_relative 'schienenzeppelin/dependencies'
13
+ require_relative 'schienenzeppelin/add_on'
14
+ Dir[File.join(__dir__, 'schienenzeppelin', 'addons', '*.rb')].each { |file| require file }
15
+ require_relative 'schienenzeppelin/generator_utils'
13
16
  require_relative 'schienenzeppelin/app_generator'
14
17
  require_relative 'schienenzeppelin/app_builder'
15
18
 
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Schienenzeppelin
4
+ class AddOn < Rails::Generators::Base
5
+ include Thor::Actions
6
+ include Rails::Generators::Actions
7
+ include Rails::Generators::AppName
8
+
9
+ attr_reader :dependencies, :context
10
+
11
+ def initialize(context)
12
+ super
13
+ @context = context
14
+ @dependencies = self.class.dependencies || []
15
+ end
16
+
17
+ def apply; end
18
+
19
+ no_commands do
20
+ def options
21
+ @context.options
22
+ end
23
+
24
+ def uses?(identifier = nil)
25
+ identifier ||= self.class.identifier
26
+ options = @context.options
27
+ return false if options["skip_#{identifier}".to_sym]
28
+
29
+ return true if @context.default_addons.include?(identifier)
30
+
31
+ clazz = identifier.nil? ? self.class : self.class.get(identifier)
32
+ Dependencies.new(clazz, @context).satisfied?
33
+ end
34
+ end
35
+
36
+ class << self
37
+ def default_source_root
38
+ File.expand_path(File.join('..', '..', 'templates'), __dir__)
39
+ end
40
+
41
+ def apply(context = Context.new({}))
42
+ instance = new(context)
43
+ return unless instance.uses?
44
+
45
+ instance.apply
46
+ end
47
+
48
+ def get(addon)
49
+ addon = addon.to_s.capitalize.camelize
50
+ "Schienenzeppelin::AddOns::#{addon}".constantize
51
+ end
52
+
53
+ def identifier
54
+ name.demodulize.underscore.to_sym
55
+ end
56
+
57
+ def dependencies
58
+ @dependencies ||= []
59
+ end
60
+
61
+ protected
62
+
63
+ def depends_on(*addon)
64
+ @dependencies = addon.map(&:to_sym)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schienenzeppelin
4
- module Helpers
5
- class Annotate < HelperBase
4
+ module AddOns
5
+ class Annotate < AddOn
6
+ depends_on :active_record
7
+
6
8
  def apply
7
9
  template('lib/tasks/auto_annotate_models.rake', force: true)
8
10
  end