rails_app_generator 0.2.30 → 0.2.33

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 (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