rails_app_generator 0.2.30 → 0.2.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/after_templates/addons/brakeman/_.rb +39 -0
  4. data/after_templates/addons/brakeman/app/controllers/home_controller.rb +16 -0
  5. data/after_templates/addons/brakeman/app/controllers/posts_controller.rb +65 -0
  6. data/after_templates/addons/brakeman/app/views/home/examples.html.erb +43 -0
  7. data/after_templates/addons/brakeman/app/views/home/index.html.erb +93 -0
  8. data/after_templates/addons/brakeman/app/views/home/output.html.erb +145 -0
  9. data/after_templates/addons/brakeman/app/views/layouts/_footer.html.erb +1 -0
  10. data/after_templates/addons/brakeman/app/views/layouts/_navbar.html.erb +4 -0
  11. data/after_templates/addons/brakeman/app/views/layouts/application.html.erb +29 -0
  12. data/after_templates/addons/bundler_audit/_.rb +31 -0
  13. data/after_templates/addons/bundler_audit/app/assets/images/brakeman.png +0 -0
  14. data/after_templates/addons/bundler_audit/app/assets/images/curl.png +0 -0
  15. data/after_templates/addons/bundler_audit/app/assets/images/output.png +0 -0
  16. data/after_templates/addons/bundler_audit/app/controllers/home_controller.rb +4 -0
  17. data/after_templates/addons/bundler_audit/app/views/home/advisories.html.erb +10 -0
  18. data/after_templates/addons/bundler_audit/app/views/home/index.html.erb +20 -0
  19. data/{28: → after_templates/addons/bundler_audit/app/views/layouts/_footer.html.erb} +0 -0
  20. data/after_templates/addons/bundler_audit/app/views/layouts/_navbar.html.erb +3 -0
  21. data/after_templates/addons/bundler_audit/app/views/layouts/application.html.erb +29 -0
  22. data/after_templates/addons/kaminari/_.rb +70 -0
  23. data/after_templates/addons/kaminari/app/controllers/home_controller.rb +4 -0
  24. data/after_templates/addons/kaminari/app/views/home/index.html.erb +3 -0
  25. data/after_templates/addons/kaminari/app/views/layouts/_footer.html.erb +1 -0
  26. data/after_templates/addons/kaminari/app/views/layouts/_navbar.html.erb +5 -0
  27. data/after_templates/addons/kaminari/app/views/layouts/application.html.erb +29 -0
  28. data/after_templates/addons/kaminari/db/seeds.rb +7 -0
  29. data/docs/last_run/app_generator_class.json +24 -0
  30. data/docs/last_run/app_generator_data.json +8 -6
  31. data/docs/last_run/rails_options_class.json +24 -0
  32. data/docs/last_run/rails_options_data.json +8 -6
  33. data/lib/rails_app_generator/addons/brakeman.rb +2 -1
  34. data/lib/rails_app_generator/addons/bundler_audit.rb +13 -0
  35. data/lib/rails_app_generator/addons/kaminari.rb +21 -0
  36. data/lib/rails_app_generator/app_generator.rb +2 -0
  37. data/lib/rails_app_generator/rag_initializer.rb +2 -0
  38. data/lib/rails_app_generator/version.rb +1 -1
  39. data/package-lock.json +2 -2
  40. data/package.json +1 -1
  41. data/profiles/addons/brakeman.json +13 -0
  42. data/profiles/addons/bundler_audit.json +13 -0
  43. data/profiles/addons/kaminari.json +13 -0
  44. data/templates/thor_task/profile/profile.json.tt +1 -0
  45. metadata +32 -3
  46. data/app:template +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 72f1f3e53325e37778539aaed03998f681b4e181362bbcf445c497337cfae663
4
- data.tar.gz: 2ee7326e78b08012f18d660d94327a1b564ea9e4a94683d05c3845f4bea4ebaa
3
+ metadata.gz: 66f1a50226d59e7d8a1b2308aed113cf1b1580e1aa9d267c63af8319d821f41f
4
+ data.tar.gz: 00e8cddf0d07d555f291c792eb32c49c06f77b42a873d95acba5d2b749cd2f85
5
5
  SHA512:
6
- metadata.gz: 3b879b3359b768aa7572df16f9c3cca82546e2045c33fe7b3c5f9ee7f0db83ee1c19f3ebdf1a1546d090f66a7af4ab178e0ce5a4bbe5c48889605f0a97bd063e
7
- data.tar.gz: '09e9bf15c218592f1f1e8a134aaade78f55b02e7ba048cb0bc87ae25ca163fc28ac623d3b130d7455a8dd5e723326807d9eb6ea91593cd3d6f3687e9779e7eec'
6
+ metadata.gz: 1b64d1128c409cdecbdef14b403782cafc44cecc9ad6e0880904189a904e35c8345b133bdeb0a5d4d89fe0a7f6b161c4b342a5f99c6c3bb73e58ea5e204355cd
7
+ data.tar.gz: 0cb3407c89cdb3edbfec3bfc944b59ce79eb2ce5939d93bdb0edfc4430ebe3fac353db2f5660213ee3d6d7fed8994848b93504fef1b593b5d22083956c5fcc9c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [0.2.32](https://github.com/klueless-io/rails_app_generator/compare/v0.2.31...v0.2.32) (2022-08-19)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add bundler-audit addon ([bb8c2bc](https://github.com/klueless-io/rails_app_generator/commit/bb8c2bce5b1925ffe0b4c745894d7cebfc25498d))
7
+
8
+ ## [0.2.31](https://github.com/klueless-io/rails_app_generator/compare/v0.2.30...v0.2.31) (2022-08-19)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add brakeman profile ([5cb8166](https://github.com/klueless-io/rails_app_generator/commit/5cb8166a4a1630edd07b7fcb70ca5eff6d2e7136))
14
+
15
+ ## [0.2.30](https://github.com/klueless-io/rails_app_generator/compare/v0.2.29...v0.2.30) (2022-08-19)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * add brakeman addon ([1dcc1c2](https://github.com/klueless-io/rails_app_generator/commit/1dcc1c2b904d35f557daa688111baeaa0fa71495))
21
+
1
22
  ## [0.2.29](https://github.com/klueless-io/rails_app_generator/compare/v0.2.28...v0.2.29) (2022-08-19)
2
23
 
3
24
 
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications
4
+ #
5
+ # exe/rag addons/brakeman
6
+
7
+ self.local_template_path = File.dirname(__FILE__)
8
+
9
+ gac 'base rails 7 image created'
10
+
11
+ prepare_environment
12
+
13
+ after_bundle do
14
+ scaffolds
15
+ setup_customizations
16
+ setup_db
17
+ end
18
+
19
+ def scaffolds
20
+ add_scaffold('post', 'title', 'body:text')
21
+ end
22
+
23
+ def setup_customizations
24
+ route("root 'home#index'")
25
+
26
+ force_copy
27
+
28
+ add_controller('home', 'index', 'examples', 'output')
29
+
30
+ directory "app/controllers"
31
+ directory "app/models"
32
+ directory "app/views"
33
+ template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
34
+ end
35
+
36
+ def setup_db
37
+ db_migrate
38
+ db_seed
39
+ end
@@ -0,0 +1,16 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ xmen_or_avengers = params[:xmen_or_avengers] || 'xmen'
4
+ puts send(xmen_or_avengers.to_sym)
5
+ end
6
+
7
+ private
8
+
9
+ def xmen
10
+ 'Wolverine'
11
+ end
12
+
13
+ def avengers
14
+ 'Captain America'
15
+ end
16
+ end
@@ -0,0 +1,65 @@
1
+ class PostsController < ApplicationController
2
+ before_action :set_post, only: %i[ show edit update destroy ]
3
+
4
+ def index
5
+ @posts = Post.all
6
+ end
7
+
8
+ # Dangerous Evaluation - User input in an eval statement is VERY dangerous
9
+ def show
10
+ message = params[:message] || 'hello world'
11
+
12
+ eval("echo '#{message}'")
13
+ end
14
+
15
+ def new
16
+ @post = Post.new
17
+ end
18
+
19
+ def edit
20
+ end
21
+
22
+ def create
23
+ @post = Post.new(post_params)
24
+
25
+ respond_to do |format|
26
+ if @post.save
27
+ format.html { redirect_to post_url(@post), notice: "Post was successfully created." }
28
+ format.json { render :show, status: :created, location: @post }
29
+ else
30
+ format.html { render :new, status: :unprocessable_entity }
31
+ format.json { render json: @post.errors, status: :unprocessable_entity }
32
+ end
33
+ end
34
+ end
35
+
36
+ def update
37
+ respond_to do |format|
38
+ if @post.update(post_params)
39
+ format.html { redirect_to post_url(@post), notice: "Post was successfully updated." }
40
+ format.json { render :show, status: :ok, location: @post }
41
+ else
42
+ format.html { render :edit, status: :unprocessable_entity }
43
+ format.json { render json: @post.errors, status: :unprocessable_entity }
44
+ end
45
+ end
46
+ end
47
+
48
+ def destroy
49
+ @post.destroy
50
+
51
+ respond_to do |format|
52
+ format.html { redirect_to posts_url, notice: "Post was successfully destroyed." }
53
+ format.json { head :no_content }
54
+ end
55
+ end
56
+
57
+ private
58
+ def set_post
59
+ @post = Post.find(params[:id])
60
+ end
61
+
62
+ def post_params
63
+ params.require(:post).permit(:title, :body)
64
+ end
65
+ end
@@ -0,0 +1,43 @@
1
+ <h1>Brakeman</h1>
2
+
3
+ <h2>Examples</h2>
4
+
5
+ <p>Run the brakeman command from the root of your rails application</p>
6
+
7
+ <pre><code>brakeman</code></pre>
8
+
9
+ <h2>Example code that fails analysis</h2>
10
+
11
+ <h3>Dangerous Evaluation - User input in an eval statement is VERY dangerous</h3>
12
+
13
+ <code>app/controllers/posts_controller.rb</code>
14
+
15
+ <pre><code> def show
16
+ message = params[:message] || 'hello world'
17
+
18
+ eval("echo '#{message}'")
19
+ end
20
+ </code></pre>
21
+
22
+
23
+ <h3>Dangerous Send - Using unfiltered user data to select a Class or Method to be dynamically sent is dangerous.</h3>
24
+
25
+ <code>app/controllers/home_controller.rb</code>
26
+
27
+ <pre><code>class HomeController < ApplicationController
28
+ def index
29
+ xmen_or_avengers = params[:xmen_or_avengers] || 'xmen'
30
+ puts send(xmen_or_avengers.to_sym)
31
+ end
32
+
33
+ private
34
+
35
+ def xmen
36
+ 'Wolverine'
37
+ end
38
+
39
+ def avengers
40
+ 'Captain America'
41
+ end
42
+ end
43
+ </code></pre>
@@ -0,0 +1,93 @@
1
+ <h1>Brakeman</h1>
2
+
3
+ <h2>Usage</h2>
4
+
5
+ <p>Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications</p>
6
+
7
+ <pre>
8
+ <code>
9
+ Usage: brakeman [options] rails/root/path
10
+ -n, --no-threads Run checks and file parsing sequentially
11
+ --[no-]progress Show progress reports
12
+ -p, --path PATH Specify path to Rails application
13
+ -q, --[no-]quiet Suppress informational messages
14
+ -z, --[no-]exit-on-warn Exit code is non-zero if warnings found (Default)
15
+ --[no-]exit-on-error Exit code is non-zero if errors raised (Default)
16
+ --ensure-latest Fail when Brakeman is outdated
17
+ --ensure-ignore-notes Fail when an ignored warnings does not include a note
18
+ -3, --rails3 Force Rails 3 mode
19
+ -4, --rails4 Force Rails 4 mode
20
+ -5, --rails5 Force Rails 5 mode
21
+ -6, --rails6 Force Rails 6 mode
22
+ -7, --rails7 Force Rails 7 mode
23
+
24
+ Scanning options:
25
+ -A, --run-all-checks Run all default and optional checks
26
+ -a, --[no-]assume-routes Assume all controller methods are actions (Default)
27
+ -e, --escape-html Escape HTML by default
28
+ --faster Faster, but less accurate scan
29
+ --ignore-model-output Consider model attributes XSS-safe
30
+ --ignore-protected Consider models with attr_protected safe
31
+ --[no-]index-libs Add libraries to call index (Default)
32
+ --interprocedural Process method calls to known methods
33
+ --no-branching Disable flow sensitivity on conditionals
34
+ --branch-limit LIMIT Limit depth of values in branches (-1 for no limit)
35
+ --parser-timeout SECONDS Set parse timeout (Default: 10)
36
+ -r, --report-direct Only report direct use of untrusted data
37
+ -s meth1,meth2,etc, Set methods as safe for unescaped output in views
38
+ --safe-methods
39
+ --sql-safe-methods meth1,meth2,etc
40
+ Do not warn of SQL if the input is wrapped in a safe method
41
+ --url-safe-methods method1,method2,etc
42
+ Do not warn of XSS if the link_to href parameter is wrapped in a safe method
43
+ --skip-files file1,path2,etc Skip processing of these files/directories. Directories are application relative and must end in "/"
44
+ --only-files file1,path2,etc Process only these files/directories. Directories are application relative and must end in "/"
45
+ --[no-]skip-vendor Skip processing vendor directory (Default)
46
+ --skip-libs Skip processing lib directory
47
+ --add-libs-path path1,path2,etc
48
+ An application relative lib directory (ex. app/mailers) to process
49
+ --add-engines-path path1,path2,etc
50
+ Include these engines in the scan
51
+ -E, --enable Check1,Check2,etc Enable the specified checks
52
+ -t, --test Check1,Check2,etc Only run the specified checks
53
+ -x, --except Check1,Check2,etc Skip the specified checks
54
+ --add-checks-path path1,path2,etc
55
+ A directory containing additional out-of-tree checks to run
56
+
57
+ Output options:
58
+ -d, --debug Lots of output
59
+ -f, --format TYPE Specify output formats. Default is text
60
+ --css-file CSSFile Specify CSS to use for HTML output
61
+ -i, --ignore-config IGNOREFILE Use configuration to ignore warnings
62
+ -I, --interactive-ignore Interactively ignore warnings
63
+ -l, --[no-]combine-locations Combine warning locations (Default)
64
+ --[no-]highlights Highlight user input in report
65
+ --[no-]color Use ANSI colors in report (Default)
66
+ -m, --routes Report controller information
67
+ --message-limit LENGTH Limit message length in HTML report
68
+ --[no-]pager Use pager for output to terminal (Default)
69
+ --table-width WIDTH Limit table width in text report
70
+ -o, --output FILE Specify files for output. Defaults to stdout. Multiple '-o's allowed
71
+ --[no-]separate-models Warn on each model without attr_accessible (Default)
72
+ --[no-]summary Only output summary of warnings
73
+ --absolute-paths Output absolute file paths in reports
74
+ --github-repo USER/REPO[/PATH][@REF]
75
+ Output links to GitHub in markdown and HTML reports using specified repo
76
+ --text-fields field1,field2,etc.
77
+ Specify fields for text report format
78
+ -w, --confidence-level LEVEL Set minimal confidence level (1 - 3)
79
+ --compare FILE Compare the results of a previous Brakeman scan (only JSON is supported)
80
+
81
+ Configuration files:
82
+ -c, --config-file FILE Use specified configuration file
83
+ -C, --create-config [FILE] Output configuration file based on options
84
+ --allow-check-paths-in-config
85
+ Allow loading checks from configuration file (Unsafe)
86
+
87
+ -k, --checks List all available vulnerability checks
88
+ --optional-checks List optional checks
89
+ -v, --version Show Brakeman version
90
+ --force-scan Scan application even if rails is not detected
91
+ -h, --help Display this message
92
+ </code>
93
+ </pre>
@@ -0,0 +1,145 @@
1
+ <h1>Brakeman</h1>
2
+
3
+ <h2>Output</h2>
4
+
5
+ <p>Run <code>brakeman</code> against this sample Rails 7 application</p>
6
+
7
+ <pre>
8
+ <code>brakeman
9
+ Loading scanner...
10
+ Processing application in /Users/davidcruwys/dev/kgems/rails_app_generator/a/addons/r7_brakeman
11
+ Processing gems...
12
+ [Notice] Detected Rails 7 application
13
+ Processing configuration...
14
+ [Notice] Escaping HTML by default
15
+ Parsing files...
16
+ Detecting file types...
17
+ Processing initializers...
18
+ Processing libs...
19
+ Processing routes...
20
+ Processing templates...
21
+ Processing data flow in templates...
22
+ Processing models...
23
+ Processing controllers...
24
+ Processing data flow in controllers...
25
+ Indexing call sites...
26
+ Running checks in parallel...
27
+ - CheckBasicAuth
28
+ - CheckBasicAuthTimingAttack
29
+ - CheckCrossSiteScripting
30
+ - CheckContentTag
31
+ - CheckCookieSerialization
32
+ - CheckCreateWith
33
+ - CheckCSRFTokenForgeryCVE
34
+ - CheckDefaultRoutes
35
+ - CheckDeserialize
36
+ - CheckDetailedExceptions
37
+ - CheckDigestDoS
38
+ - CheckDynamicFinders
39
+ - CheckEOLRails
40
+ - CheckEOLRuby
41
+ - CheckEscapeFunction
42
+ - CheckEvaluation
43
+ - CheckExecute
44
+ - CheckFileAccess
45
+ - CheckFileDisclosure
46
+ - CheckFilterSkipping
47
+ - CheckForgerySetting
48
+ - CheckHeaderDoS
49
+ - CheckI18nXSS
50
+ - CheckJRubyXML
51
+ - CheckJSONEncoding
52
+ - CheckJSONEntityEscape
53
+ - CheckJSONParsing
54
+ - CheckLinkTo
55
+ - CheckLinkToHref
56
+ - CheckMailTo
57
+ - CheckMassAssignment
58
+ - CheckMimeTypeDoS
59
+ - CheckModelAttrAccessible
60
+ - CheckModelAttributes
61
+ - CheckModelSerialize
62
+ - CheckNestedAttributes
63
+ - CheckNestedAttributesBypass
64
+ - CheckNumberToCurrency
65
+ - CheckPageCachingCVE
66
+ - CheckPermitAttributes
67
+ - CheckQuoteTableName
68
+ - CheckRedirect
69
+ - CheckRegexDoS
70
+ - CheckRender
71
+ - CheckRenderDoS
72
+ - CheckRenderInline
73
+ - CheckResponseSplitting
74
+ - CheckRouteDoS
75
+ - CheckSafeBufferManipulation
76
+ - CheckSanitizeConfigCve
77
+ - CheckSanitizeMethods
78
+ - CheckSelectTag
79
+ - CheckSelectVulnerability
80
+ - CheckSend
81
+ - CheckSendFile
82
+ - CheckSessionManipulation
83
+ - CheckSessionSettings
84
+ - CheckSimpleFormat
85
+ - CheckSingleQuotes
86
+ - CheckSkipBeforeFilter
87
+ - CheckSprocketsPathTraversal
88
+ - CheckSQL
89
+ - CheckSQLCVEs
90
+ - CheckSSLVerify
91
+ - CheckStripTags
92
+ - CheckSymbolDoSCVE
93
+ - CheckTemplateInjection
94
+ - CheckTranslateBug
95
+ - CheckUnsafeReflection
96
+ - CheckUnsafeReflectionMethods
97
+ - CheckValidationRegex
98
+ - CheckVerbConfusion
99
+ - CheckWithoutProtection
100
+ - CheckXMLDoS
101
+ - CheckYAMLParsing
102
+ Checks finished, collecting results...
103
+ Generating report...
104
+
105
+ == Brakeman Report ==
106
+
107
+ Application Path: /Users/davidcruwys/dev/kgems/rails_app_generator/a/addons/r7_brakeman
108
+ Rails Version: 7.0.3.1
109
+ Brakeman Version: 5.3.1
110
+ Scan Date: 2022-08-19 14:19:28 +1000
111
+ Duration: 0.228864 seconds
112
+ Checks Run: BasicAuth, BasicAuthTimingAttack, CSRFTokenForgeryCVE, ContentTag, CookieSerialization, CreateWith, CrossSiteScripting, DefaultRoutes, Deserialize, DetailedExceptions, DigestDoS, DynamicFinders, EOLRails, EOLRuby, EscapeFunction, Evaluation, Execute, FileAccess, FileDisclosure, FilterSkipping, ForgerySetting, HeaderDoS, I18nXSS, JRubyXML, JSONEncoding, JSONEntityEscape, JSONParsing, LinkTo, LinkToHref, MailTo, MassAssignment, MimeTypeDoS, ModelAttrAccessible, ModelAttributes, ModelSerialize, NestedAttributes, NestedAttributesBypass, NumberToCurrency, PageCachingCVE, PermitAttributes, QuoteTableName, Redirect, RegexDoS, Render, RenderDoS, RenderInline, ResponseSplitting, RouteDoS, SQL, SQLCVEs, SSLVerify, SafeBufferManipulation, SanitizeConfigCve, SanitizeMethods, SelectTag, SelectVulnerability, Send, SendFile, SessionManipulation, SessionSettings, SimpleFormat, SingleQuotes, SkipBeforeFilter, SprocketsPathTraversal, StripTags, SymbolDoSCVE, TemplateInjection, TranslateBug, UnsafeReflection, UnsafeReflectionMethods, ValidationRegex, VerbConfusion, WithoutProtection, XMLDoS, YAMLParsing
113
+
114
+ == Overview ==
115
+
116
+ Controllers: 3
117
+ Models: 2
118
+ Templates: 13
119
+ Errors: 0
120
+ Security Warnings: 2
121
+
122
+ == Warning Types ==
123
+
124
+ Dangerous Eval: 1
125
+ Dangerous Send: 1
126
+
127
+ == Warnings ==
128
+
129
+ Confidence: High
130
+ Category: Dangerous Eval
131
+ Check: Evaluation
132
+ Message: User input in eval
133
+ Code: eval("echo '#{(params[:message] or "hello world")}'")
134
+ File: app/controllers/posts_controller.rb
135
+ Line: 12
136
+
137
+ Confidence: High
138
+ Category: Dangerous Send
139
+ Check: Send
140
+ Message: User controlled method execution
141
+ Code: send((params[:xmen_or_avengers] or "xmen").to_sym)
142
+ File: app/controllers/home_controller.rb
143
+ Line: 4
144
+ </code>
145
+ </pre>
@@ -0,0 +1,4 @@
1
+ <%= link_to 'Home', root_path %>
2
+ | <%= link_to 'Examples', home_examples_path %>
3
+ | <%= link_to 'Output', home_output_path %>
4
+ <hr />
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%%= csrf_meta_tags %>
7
+ <%%= csp_meta_tag %>
8
+
9
+ <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
10
+ <%%= stylesheet_link_tag "application" %>
11
+ <%- else -%>
12
+ <%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
13
+ <%- end -%>
14
+ </head>
15
+
16
+ <body>
17
+ <header>
18
+ <%%= render 'layouts/navbar' %>
19
+ <hr />
20
+ </header>
21
+ <main>
22
+ <%%= yield %>
23
+ </main>
24
+ <footer>
25
+ <%%= render 'layouts/footer' %>
26
+ </footer>
27
+ </body>
28
+ </html>
29
+
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Patch-level verification for Bundler
4
+ #
5
+ # exe/rag addons/bundler_audit
6
+
7
+ self.local_template_path = File.dirname(__FILE__)
8
+
9
+ gac 'base rails 7 image created'
10
+
11
+ prepare_environment
12
+
13
+ gem "brakeman", "4.5.0"
14
+ gem "curl"
15
+
16
+ after_bundle do
17
+ setup_customizations
18
+ end
19
+
20
+ def setup_customizations
21
+ route("root 'home#index'")
22
+
23
+ force_copy
24
+
25
+ add_controller('home', 'index', 'advisories')
26
+
27
+ directory "app/controllers"
28
+ directory "app/assets"
29
+ directory "app/views"
30
+ template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
31
+ end
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ <h1>Example Advisories from <b>ruby-advisory-db</b></h1>
2
+
3
+ <h2>Brakeman</h2>
4
+
5
+ <%= image_tag("brakeman.png") %>
6
+
7
+
8
+ <h2>Curl</h2>
9
+
10
+ <%= image_tag("curl.png") %>
@@ -0,0 +1,20 @@
1
+ <h1>Bundler audit</h1>
2
+
3
+ <p>Provides patch-level verification for Bundler</p>
4
+
5
+ <p>The following two GEMs have vulnerabilities listed in the <b>ruby-advisory-db</b></p>
6
+
7
+ <p>If you add the following to your Gemfile</p>
8
+
9
+ <pre><code>gem "brakeman", "4.5.0"
10
+ gem "curl"</code></pre>
11
+
12
+ <p>And then run the following command</p>
13
+
14
+ <pre><code>rm -rf Gemfile.lock
15
+ bundle install
16
+ bundler-audit</code></pre>
17
+
18
+ <p>You will see this output</p>
19
+
20
+ <%= image_tag("output.png") %>
@@ -0,0 +1,3 @@
1
+ <%= link_to 'Home', root_path %>
2
+ | <%= link_to 'Sample Advisories', home_advisories_path %>
3
+ <hr />
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%%= csrf_meta_tags %>
7
+ <%%= csp_meta_tag %>
8
+
9
+ <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
10
+ <%%= stylesheet_link_tag "application" %>
11
+ <%- else -%>
12
+ <%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
13
+ <%- end -%>
14
+ </head>
15
+
16
+ <body>
17
+ <header>
18
+ <%%= render 'layouts/navbar' %>
19
+ <hr />
20
+ </header>
21
+ <main>
22
+ <%%= yield %>
23
+ </main>
24
+ <footer>
25
+ <%%= render 'layouts/footer' %>
26
+ </footer>
27
+ </body>
28
+ </html>
29
+
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Description goes here
4
+ #
5
+ # exe/rag addons/kaminari
6
+
7
+ self.local_template_path = File.dirname(__FILE__)
8
+
9
+ gac 'base rails 7 image created'
10
+
11
+ prepare_environment
12
+
13
+ after_bundle do
14
+ scaffolds
15
+ setup_customizations
16
+ setup_db
17
+ end
18
+
19
+ def scaffolds
20
+ # add_scaffold('post', 'title', 'body:text', 'user:references')
21
+ # add_scaffold('people', 'first_name', 'last_name', 'age:integer', 'address:text')
22
+ # add_scaffold('product', 'name', 'price:integer')
23
+ end
24
+
25
+ def setup_customizations
26
+ route("root 'home#index'")
27
+
28
+ force_copy
29
+
30
+ add_controller('home', 'index')
31
+
32
+ directory "app/controllers"
33
+ directory "app/models"
34
+ directory "app/views"
35
+ template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
36
+ end
37
+
38
+ def setup_db
39
+ template 'db/seeds.rb' , 'db/seeds.rb'
40
+
41
+ db_migrate
42
+ db_seed
43
+ end
44
+
45
+ # Other template command examples
46
+ # prepare_environment
47
+ # bundle_install
48
+ # css_install('tailwind')
49
+ # rails_command('db:migrate')
50
+ # rails_command('db:migrate')
51
+ # bundle_add('hotwire-rails')
52
+ # rails_command('hotwire:install')
53
+ # run('bin/importmap pin sortablejs')
54
+ # run('npm install daisyui')
55
+ # rubocop
56
+ #
57
+ # directory 'app/assets/images'
58
+ # create_file 'app/assets/stylesheets/custom-bootstrap-import.scss' , read_template('custom-bootstrap-import.scss')
59
+ # append_to_file 'app/assets/config/manifest.js' , read_template('manifest.js')
60
+ # insert_into_file 'app/views/layouts/application.html.erb', read_template('application.html.erb'),
61
+ # before: %( <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>)
62
+ # gsub_file 'app/views/layouts/application.html.erb', %(container mx-auto mt-28 px-5 flex), 'container mx-auto px-5'
63
+ # template 'home.css', 'app/assets/stylesheets/home.css'
64
+ #
65
+ # add_controller('page', 'benefits', 'faq', 'terms', 'privacy', '--skip-routes')
66
+ # route(<<-'RUBY')
67
+ # PageController.action_methods.each do |action|
68
+ # get "/#{action}", to: "page##{action}", as: "page_#{action}"
69
+ # end
70
+ # RUBY
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ <h1>Kaminari</h1>
2
+
3
+ <p>Description goes here</p>
@@ -0,0 +1,5 @@
1
+ <%= link_to 'Home', root_path %>
2
+ <%# link_to 'Products', products_path %>
3
+ <%# link_to 'Posts', posts_path %>
4
+ <%# link_to 'People', people_path %>
5
+ <hr />
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%%= csrf_meta_tags %>
7
+ <%%= csp_meta_tag %>
8
+
9
+ <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
10
+ <%%= stylesheet_link_tag "application" %>
11
+ <%- else -%>
12
+ <%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
13
+ <%- end -%>
14
+ </head>
15
+
16
+ <body>
17
+ <header>
18
+ <%%= render 'layouts/navbar' %>
19
+ <hr />
20
+ </header>
21
+ <main>
22
+ <%%= yield %>
23
+ </main>
24
+ <footer>
25
+ <%%= render 'layouts/footer' %>
26
+ </footer>
27
+ </body>
28
+ </html>
29
+
@@ -0,0 +1,7 @@
1
+ # david = User.create(email: 'david@site.com', name: 'david', password: 'password')
2
+ # james = User.create(email: 'james@site.com', name: 'james', password: 'password')
3
+ # sally = User.create(email: 'sally@site.com', name: 'sally', password: 'password')
4
+
5
+ # 10.times do |i|
6
+ # Post.create(title: "Post #{i}", body: "This is the body of post #{i}", user: User.all.sample)
7
+ # end
@@ -45,7 +45,9 @@
45
45
  "add_annotate",
46
46
  "add_avo",
47
47
  "add_bcrypt",
48
+ "add_brakeman",
48
49
  "add_browser",
50
+ "add_bundler_audit",
49
51
  "add_chartkick",
50
52
  "add_devise",
51
53
  "add_devise_masquerade",
@@ -55,6 +57,7 @@
55
57
  "add_hexapdf",
56
58
  "add_httparty",
57
59
  "add_honeybadger",
60
+ "add_kaminari",
58
61
  "add_lograge",
59
62
  "add_minimal_css",
60
63
  "minimal_css_library",
@@ -385,6 +388,13 @@
385
388
  "default": false,
386
389
  "required": false
387
390
  },
391
+ {
392
+ "name": "add_brakeman",
393
+ "description": "Indicates when to generate add brakeman",
394
+ "type": "boolean",
395
+ "default": false,
396
+ "required": false
397
+ },
388
398
  {
389
399
  "name": "add_browser",
390
400
  "description": "Indicates when to generate add browser",
@@ -392,6 +402,13 @@
392
402
  "default": false,
393
403
  "required": false
394
404
  },
405
+ {
406
+ "name": "add_bundler_audit",
407
+ "description": "Indicates when to generate add bundler audit",
408
+ "type": "boolean",
409
+ "default": false,
410
+ "required": false
411
+ },
395
412
  {
396
413
  "name": "add_chartkick",
397
414
  "description": "Indicates when to generate add chartkick",
@@ -455,6 +472,13 @@
455
472
  "default": false,
456
473
  "required": false
457
474
  },
475
+ {
476
+ "name": "add_kaminari",
477
+ "description": "Indicates when to generate add kaminari",
478
+ "type": "boolean",
479
+ "default": false,
480
+ "required": false
481
+ },
458
482
  {
459
483
  "name": "add_lograge",
460
484
  "description": "Indicates when to generate add lograge",
@@ -26,21 +26,23 @@
26
26
  "main": false,
27
27
  "no_rc": false,
28
28
  "api": false,
29
- "javascript": "esbuild",
29
+ "javascript": "importmap",
30
30
  "skip_bundle": false,
31
31
  "note": "",
32
32
  "test": "rspec",
33
33
  "add_acts_as_list": false,
34
34
  "add_administrate": false,
35
- "add_annotate": true,
35
+ "add_annotate": false,
36
36
  "add_avo": false,
37
37
  "add_bcrypt": false,
38
+ "add_brakeman": false,
38
39
  "add_browser": false,
40
+ "add_bundler_audit": true,
39
41
  "add_chartkick": false,
40
- "add_devise": true,
42
+ "add_devise": false,
41
43
  "add_devise_masquerade": false,
42
44
  "add_dotenv": false,
43
- "add_faker": true,
45
+ "add_faker": false,
44
46
  "add_groupdate": false,
45
47
  "add_hexapdf": false,
46
48
  "add_httparty": false,
@@ -55,9 +57,9 @@
55
57
  "add_public_suffix": false,
56
58
  "add_rails_html_sanitizer": false,
57
59
  "add_redcarpet": false,
58
- "add_rolify": true,
60
+ "add_rolify": false,
59
61
  "add_rubocop": false,
60
62
  "add_twilio_ruby": false,
61
- "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/rolify/_.rb"
63
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/bundler_audit/_.rb"
62
64
  }
63
65
  }
@@ -45,7 +45,9 @@
45
45
  "add_annotate",
46
46
  "add_avo",
47
47
  "add_bcrypt",
48
+ "add_brakeman",
48
49
  "add_browser",
50
+ "add_bundler_audit",
49
51
  "add_chartkick",
50
52
  "add_devise",
51
53
  "add_devise_masquerade",
@@ -55,6 +57,7 @@
55
57
  "add_hexapdf",
56
58
  "add_httparty",
57
59
  "add_honeybadger",
60
+ "add_kaminari",
58
61
  "add_lograge",
59
62
  "add_minimal_css",
60
63
  "minimal_css_library",
@@ -385,6 +388,13 @@
385
388
  "default": false,
386
389
  "required": false
387
390
  },
391
+ {
392
+ "name": "add_brakeman",
393
+ "description": "",
394
+ "type": "boolean",
395
+ "default": false,
396
+ "required": false
397
+ },
388
398
  {
389
399
  "name": "add_browser",
390
400
  "description": "",
@@ -392,6 +402,13 @@
392
402
  "default": false,
393
403
  "required": false
394
404
  },
405
+ {
406
+ "name": "add_bundler_audit",
407
+ "description": "",
408
+ "type": "boolean",
409
+ "default": false,
410
+ "required": false
411
+ },
395
412
  {
396
413
  "name": "add_chartkick",
397
414
  "description": "",
@@ -455,6 +472,13 @@
455
472
  "default": false,
456
473
  "required": false
457
474
  },
475
+ {
476
+ "name": "add_kaminari",
477
+ "description": "",
478
+ "type": "boolean",
479
+ "default": false,
480
+ "required": false
481
+ },
458
482
  {
459
483
  "name": "add_lograge",
460
484
  "description": "",
@@ -7,7 +7,7 @@
7
7
  "quiet": false,
8
8
  "skip": false,
9
9
  "ruby": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
10
- "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/rolify/_.rb",
10
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/bundler_audit/_.rb",
11
11
  "database": "sqlite3",
12
12
  "skip_git": true,
13
13
  "skip_keeps": false,
@@ -35,22 +35,24 @@
35
35
  "version": false,
36
36
  "api": false,
37
37
  "minimal": false,
38
- "javascript": "esbuild",
38
+ "javascript": "importmap",
39
39
  "css": "",
40
40
  "skip_bundle": false,
41
41
  "note": "",
42
42
  "test": "rspec",
43
43
  "add_acts_as_list": false,
44
44
  "add_administrate": false,
45
- "add_annotate": true,
45
+ "add_annotate": false,
46
46
  "add_avo": false,
47
47
  "add_bcrypt": false,
48
+ "add_brakeman": false,
48
49
  "add_browser": false,
50
+ "add_bundler_audit": true,
49
51
  "add_chartkick": false,
50
- "add_devise": true,
52
+ "add_devise": false,
51
53
  "add_devise_masquerade": false,
52
54
  "add_dotenv": false,
53
- "add_faker": true,
55
+ "add_faker": false,
54
56
  "add_groupdate": false,
55
57
  "add_hexapdf": false,
56
58
  "add_httparty": false,
@@ -65,7 +67,7 @@
65
67
  "add_public_suffix": false,
66
68
  "add_rails_html_sanitizer": false,
67
69
  "add_redcarpet": false,
68
- "add_rolify": true,
70
+ "add_rolify": false,
69
71
  "add_rubocop": false,
70
72
  "add_twilio_ruby": false
71
73
  }
@@ -5,7 +5,8 @@ module RailsAppGenerator
5
5
  module AddOns
6
6
  # Add Brakeman to rails application
7
7
  class Brakeman < RailsAppGenerator::Addon
8
- required_gem gem.version('brakeman', '5.3.1', 'Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications')
8
+ # TODO: This needs to go into the development group
9
+ required_gem gem.version('brakeman', '5.3.1', 'Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications')
9
10
 
10
11
  def apply; end
11
12
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add BundlerAudit to rails application
7
+ class BundlerAudit < RailsAppGenerator::Addon
8
+ required_gem gem.version('bundler-audit', '0.9.1', 'Patch-level verification for Bundler')
9
+
10
+ def apply; end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add Kaminari to rails application
7
+ class Kaminari < RailsAppGenerator::Addon
8
+ required_gem gem.version('kaminari', '1.2.2', 'Easily add pagination to your Ruby web apps')
9
+
10
+ def apply
11
+ say 'Setting up Kaminari'
12
+ end
13
+
14
+ def before_template; end
15
+
16
+ def before_bundle; end
17
+
18
+ def after_bundle; end
19
+ end
20
+ end
21
+ end
@@ -174,6 +174,7 @@ module RailsAppGenerator
174
174
  add_if(:bcrypt) # tested
175
175
  add_if(:brakeman) # tested
176
176
  add_if(:browser) # tested
177
+ add_if(:bundler_audit) # tested
177
178
  add_if(:chartkick) # tested
178
179
  add_if(:continuous_integration) # TODO: needs work
179
180
  add_if(:devise) # tested
@@ -189,6 +190,7 @@ module RailsAppGenerator
189
190
  add_if(:httparty) # tested
190
191
  add_if(:high_voltage) # TODO: needs testing
191
192
  add_if(:honeybadger) # tested
193
+ add_if(:kaminari) # tested
192
194
  add_if(:lograge) # tested
193
195
  add_if(:minimal_css) # tested (this is NOT a GEM)
194
196
  add_if(:mini_magick) # tested
@@ -109,6 +109,7 @@ KConfig.configure do |config|
109
109
  rag.add_option :add_bcrypt , type: :boolean, default: false
110
110
  rag.add_option :add_brakeman , type: :boolean, default: false
111
111
  rag.add_option :add_browser , type: :boolean, default: false
112
+ rag.add_option :add_bundler_audit , type: :boolean, default: false
112
113
  rag.add_option :add_chartkick , type: :boolean, default: false
113
114
  # continuous_integration
114
115
  rag.add_option :add_devise , type: :boolean, default: false
@@ -124,6 +125,7 @@ KConfig.configure do |config|
124
125
  rag.add_option :add_httparty , type: :boolean, default: false
125
126
  # high_voltage
126
127
  rag.add_option :add_honeybadger , type: :boolean, default: false
128
+ rag.add_option :add_kaminari , type: :boolean, default: false
127
129
  rag.add_option :add_lograge , type: :boolean, default: false
128
130
  rag.add_option :add_minimal_css , type: :boolean, default: false
129
131
  rag.add_option :minimal_css_library , type: :string, default: 'water.css', description: "Minimal CSS library to get you started. [options: water.css (default)]"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.2.30'
4
+ VERSION = '0.2.33'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.30",
3
+ "version": "0.2.33",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "rails_app_generator",
9
- "version": "0.2.30",
9
+ "version": "0.2.33",
10
10
  "dependencies": {
11
11
  "daisyui": "^2.20.0"
12
12
  },
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.30",
3
+ "version": "0.2.33",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
@@ -0,0 +1,13 @@
1
+ {
2
+ "args": {
3
+ "app_path": "r7_brakeman",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "add_minimal_css": true,
10
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/brakeman/_.rb",
11
+ "add_brakeman": true
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "args": {
3
+ "app_path": "r7_bundler_audit",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "add_minimal_css": true,
10
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/bundler_audit/_.rb",
11
+ "add_bundler_audit": true
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "args": {
3
+ "app_path": "r7_kaminari",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "add_minimal_css": true,
10
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/kaminari/_.rb",
11
+ "add_kaminari": true
12
+ }
13
+ }
@@ -6,6 +6,7 @@
6
6
  "opts": {
7
7
  "skip_git": true,
8
8
  "skip_test": true,
9
+ "add_minimal_css": true,
9
10
  "template": "<%= data.template_file %>",
10
11
  "add_<%= data.name_snake %>": true
11
12
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_app_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.30
4
+ version: 0.2.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -166,7 +166,6 @@ files:
166
166
  - ".rspec"
167
167
  - ".rubocop.yml"
168
168
  - ".vscode/settings.json"
169
- - '28:'
170
169
  - CHANGELOG.md
171
170
  - CODE_OF_CONDUCT.md
172
171
  - Gemfile
@@ -224,9 +223,28 @@ files:
224
223
  - after_templates/addons/bcrypt/app/views/users/_form.html.erb
225
224
  - after_templates/addons/bcrypt/app/views/users/_user.html.erb
226
225
  - after_templates/addons/bcrypt/db/seeds.rb
226
+ - after_templates/addons/brakeman/_.rb
227
+ - after_templates/addons/brakeman/app/controllers/home_controller.rb
228
+ - after_templates/addons/brakeman/app/controllers/posts_controller.rb
229
+ - after_templates/addons/brakeman/app/views/home/examples.html.erb
230
+ - after_templates/addons/brakeman/app/views/home/index.html.erb
231
+ - after_templates/addons/brakeman/app/views/home/output.html.erb
232
+ - after_templates/addons/brakeman/app/views/layouts/_footer.html.erb
233
+ - after_templates/addons/brakeman/app/views/layouts/_navbar.html.erb
234
+ - after_templates/addons/brakeman/app/views/layouts/application.html.erb
227
235
  - after_templates/addons/browser/_.rb
228
236
  - after_templates/addons/browser/app/controllers/home_controller.rb
229
237
  - after_templates/addons/browser/app/views/home/index.html.erb
238
+ - after_templates/addons/bundler_audit/_.rb
239
+ - after_templates/addons/bundler_audit/app/assets/images/brakeman.png
240
+ - after_templates/addons/bundler_audit/app/assets/images/curl.png
241
+ - after_templates/addons/bundler_audit/app/assets/images/output.png
242
+ - after_templates/addons/bundler_audit/app/controllers/home_controller.rb
243
+ - after_templates/addons/bundler_audit/app/views/home/advisories.html.erb
244
+ - after_templates/addons/bundler_audit/app/views/home/index.html.erb
245
+ - after_templates/addons/bundler_audit/app/views/layouts/_footer.html.erb
246
+ - after_templates/addons/bundler_audit/app/views/layouts/_navbar.html.erb
247
+ - after_templates/addons/bundler_audit/app/views/layouts/application.html.erb
230
248
  - after_templates/addons/chartkick/_.rb
231
249
  - after_templates/addons/chartkick/app/controllers/home_controller.rb
232
250
  - after_templates/addons/chartkick/app/views/home/index.html.erb
@@ -295,6 +313,13 @@ files:
295
313
  - after_templates/addons/httparty/app/views/layouts/_footer.html.erb
296
314
  - after_templates/addons/httparty/app/views/layouts/_navbar.html.erb
297
315
  - after_templates/addons/httparty/app/views/layouts/application.html.erb
316
+ - after_templates/addons/kaminari/_.rb
317
+ - after_templates/addons/kaminari/app/controllers/home_controller.rb
318
+ - after_templates/addons/kaminari/app/views/home/index.html.erb
319
+ - after_templates/addons/kaminari/app/views/layouts/_footer.html.erb
320
+ - after_templates/addons/kaminari/app/views/layouts/_navbar.html.erb
321
+ - after_templates/addons/kaminari/app/views/layouts/application.html.erb
322
+ - after_templates/addons/kaminari/db/seeds.rb
298
323
  - after_templates/addons/lograge/_.rb
299
324
  - after_templates/addons/lograge/app/controllers/home_controller.rb
300
325
  - after_templates/addons/lograge/app/views/home/index.html.erb
@@ -568,7 +593,6 @@ files:
568
593
  - after_templates/rag/testy/app/views/layouts/_navbar.html.erb
569
594
  - after_templates/rag/testy/app/views/layouts/application.html.erb
570
595
  - after_templates/rag/testy/db/seeds.rb
571
- - app:template
572
596
  - bin/console
573
597
  - bin/setup
574
598
  - docs/images/tailwind.png
@@ -598,6 +622,7 @@ files:
598
622
  - lib/rails_app_generator/addons/bcrypt.rb
599
623
  - lib/rails_app_generator/addons/brakeman.rb
600
624
  - lib/rails_app_generator/addons/browser.rb
625
+ - lib/rails_app_generator/addons/bundler_audit.rb
601
626
  - lib/rails_app_generator/addons/chartkick.rb
602
627
  - lib/rails_app_generator/addons/continuous_integration.rb
603
628
  - lib/rails_app_generator/addons/devise.rb
@@ -616,6 +641,7 @@ files:
616
641
  - lib/rails_app_generator/addons/httparty.rb
617
642
  - lib/rails_app_generator/addons/inline_svg.rb
618
643
  - lib/rails_app_generator/addons/irbrc.rb
644
+ - lib/rails_app_generator/addons/kaminari.rb
619
645
  - lib/rails_app_generator/addons/lograge.rb
620
646
  - lib/rails_app_generator/addons/mini_magick.rb
621
647
  - lib/rails_app_generator/addons/minimal_css.rb
@@ -677,7 +703,9 @@ files:
677
703
  - profiles/addons/annotate.json
678
704
  - profiles/addons/avo.json
679
705
  - profiles/addons/bcrypt.json
706
+ - profiles/addons/brakeman.json
680
707
  - profiles/addons/browser.json
708
+ - profiles/addons/bundler_audit.json
681
709
  - profiles/addons/chartkick.json
682
710
  - profiles/addons/devise.json
683
711
  - profiles/addons/devise_masquerade.json
@@ -686,6 +714,7 @@ files:
686
714
  - profiles/addons/hexapdf.json
687
715
  - profiles/addons/honeybadger.json
688
716
  - profiles/addons/httparty.json
717
+ - profiles/addons/kaminari.json
689
718
  - profiles/addons/lograge.json
690
719
  - profiles/addons/mini_magick.json
691
720
  - profiles/addons/minimal_css.json
data/app:template DELETED
File without changes