rails_app_generator 0.0.15 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/generators/project-plan.rb +15 -3
  3. data/.rubocop.yml +1 -0
  4. data/CHANGELOG.md +28 -0
  5. data/README.md +10 -1
  6. data/after_templates/rag_bootstrap/component-modal.html +18 -0
  7. data/after_templates/rag_bootstrap.rb +80 -0
  8. data/after_templates/rag_import_map/component-sortable.html +9 -0
  9. data/after_templates/rag_import_map/home.css +12 -0
  10. data/after_templates/rag_import_map/position_controller.js +10 -0
  11. data/after_templates/rag_import_map.rb +44 -0
  12. data/after_templates/rag_simple.rb +2 -13
  13. data/after_templates/rag_tailwind_hotwire/home/controller.rb +9 -0
  14. data/after_templates/rag_tailwind_hotwire/home/helper.rb +7 -0
  15. data/after_templates/rag_tailwind_hotwire/home/increment.html.erb +4 -0
  16. data/after_templates/rag_tailwind_hotwire/home/index.html +5 -0
  17. data/after_templates/rag_tailwind_hotwire.rb +23 -0
  18. data/docs/project-plan/project.drawio +62 -20
  19. data/docs/project-plan/project_done.svg +1 -1
  20. data/docs/project-plan/project_in_progress.svg +1 -1
  21. data/docs/project-plan/project_todo.svg +1 -1
  22. data/exe/rag +23 -51
  23. data/lib/rails_app_generator/app_generator.rb +4 -0
  24. data/lib/rails_app_generator/cli/diff.rb +49 -0
  25. data/lib/rails_app_generator/cli/profile.rb +37 -0
  26. data/lib/rails_app_generator/diff/processor.rb +4 -1
  27. data/lib/rails_app_generator/diff/report.rb +1 -1
  28. data/lib/rails_app_generator/starter.rb +4 -0
  29. data/lib/rails_app_generator/version.rb +1 -1
  30. data/lib/rails_app_generator.rb +2 -1
  31. data/package-lock.json +2 -2
  32. data/package.json +1 -1
  33. data/profiles/rag-import-map.json +11 -0
  34. data/profiles/rag-simple.json +1 -1
  35. data/profiles/rag-tailwind-hotwire.json +12 -0
  36. metadata +15 -4
  37. data/after_templates/___base_template.rb +0 -1
  38. data/after_templates/___r7_hotwire.rb +0 -1
  39. data/lib/rails_app_generator/cli.rb +0 -64
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cca2f1e34648c7901ae0a96f9b0f672aea90cf56c39454cdf8588df622df2597
4
- data.tar.gz: 3bf462300806d73a340fab47476c4f0b5999c26163ba82ef2253ffa8df99fd47
3
+ metadata.gz: 52910e6cbc4c2985a98a24d7786a1711e3004511d4047b97037c73f43355dd30
4
+ data.tar.gz: 7156016d4fc968fe23fa4c5068da48c5a5b087899822556c8484493a045026d8
5
5
  SHA512:
6
- metadata.gz: 26df78c51a7e7d73da6f6de478d0612c0244dc9ae36255486177ad0516332314de9dee46b5a82c3c572f71a26f47cb10015a62a23b39ca7ed113d6e509ab8d9e
7
- data.tar.gz: 719cd5df268fdcfe048f9c8002037192120d29792155d4bf53f5c76d5cb8e5fe2313a87bb8a3735dae52ec702205759d5f319916b8a65e90a37534fcdaf3b9f0
6
+ metadata.gz: 0767dd3e641b70864186624f83ac45c9210d6ba884258d648c28c048da2ea8b6b0a4edc708543d4bec09a08a38f272f1311f5ba5d4ac2a614143cab9517b2d26
7
+ data.tar.gz: 03bcd1e0dd42e3f21869a0ab807fd7d91975f00ca50c32d305987d99d3d68d8b7f923a482afa2265a9a68800e1e927374599a91006ff61958546f2936015de49
@@ -7,22 +7,34 @@ KManager.action :project_plan do
7
7
  .page('In progress', theme: :style_03, margin_left: 0, margin_top: 0) do
8
8
  grid_layout(y: 90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
9
9
 
10
- todo(title: 'cli support for profile')
11
-
12
10
  end
13
11
  .page('To Do', theme: :style_02, margin_left: 0, margin_top: 0) do
14
12
 
15
13
  grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
16
14
 
15
+ todo(title: 'add auto open flag to profile and command line')
16
+ todo(title: 'add profile - stimulas')
17
+ todo(title: 'add profile - hotwire')
18
+ todo(title: 'add profile - turbo')
19
+ todo(title: 'add profile - vue')
20
+ todo(title: 'add profile - svelte')
21
+ todo(title: 'add profile - react')
22
+ todo(title: 'add profile - vite')
23
+ todo(title: 'add profile - docker') # https://www.youtube.com/watch?v=ZhrnqHVVo1g
24
+ todo(title: 'add encryption - https://youtu.be/ZmwNzod1trk?t=701')
17
25
  todo(title: 'cli help support for diff')
18
26
  todo(title: 'cli support for rails new (rag new should work like rails new) - buggy, need to work through')
19
27
  todo(title: 'need an option for deleting target project path') # FileUtils.rm_rf(instance.target_path)
20
-
21
28
  end
22
29
  .page('Done', theme: :style_06, margin_left: 0, margin_top: 0) do
23
30
 
24
31
  grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
25
32
 
33
+ todo(title: 'add profile - tailwind_hotwire')
34
+ todo(title: 'add profile - import_map') # vs esbuild - import_map is a replacement for webpacker
35
+ todo(title: 'profile - fix the bootstrap profile')
36
+ todo(title: 'cli support for profile')
37
+ todo(title: 'separate CLI methods into include modules')
26
38
  todo(title: 'cli support for diff')
27
39
  todo(title: 'add diff tool - open in editor')
28
40
  todo(title: 'add diff tool supporting lhs only, rhs only, same and different')
data/.rubocop.yml CHANGED
@@ -11,6 +11,7 @@ AllCops:
11
11
  - ".builders/**/*"
12
12
  - "spec/samples/**/*"
13
13
  - "a/**/*"
14
+ - "after_templates/**/*"
14
15
 
15
16
  Metrics/BlockLength:
16
17
  Exclude:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ ## [0.1.1](https://github.com/klueless-io/rails_app_generator/compare/v0.1.0...v0.1.1) (2022-07-26)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add profile import_map ([9cda9ec](https://github.com/klueless-io/rails_app_generator/commit/9cda9ecc85992a0903450dbd9245795fc471d9a5))
7
+
8
+ # [0.1.0](https://github.com/klueless-io/rails_app_generator/compare/v0.0.15...v0.1.0) (2022-07-26)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * fix cops ([caab557](https://github.com/klueless-io/rails_app_generator/commit/caab557ac6bd42df3e732024b8d71d97238c3a22))
14
+ * fix failing specs ([94dbc85](https://github.com/klueless-io/rails_app_generator/commit/94dbc85a898da8954927b8a0e2979f83d6850e79))
15
+ * separate CLI methods into include modules ([2357654](https://github.com/klueless-io/rails_app_generator/commit/235765457f736d56f5ee64b064d2fe666c71ead8))
16
+
17
+
18
+ ### Features
19
+
20
+ * first release ([0bf3adb](https://github.com/klueless-io/rails_app_generator/commit/0bf3adba504a8524c821b4497c9d5e001126e3d3))
21
+
22
+ ## [0.0.15](https://github.com/klueless-io/rails_app_generator/compare/v0.0.14...v0.0.15) (2022-07-26)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * update project plan documentation ([7ed1728](https://github.com/klueless-io/rails_app_generator/commit/7ed1728e081149e56eb4292f37825169a5f21690))
28
+
1
29
  ## [0.0.14](https://github.com/klueless-io/rails_app_generator/compare/v0.0.13...v0.0.14) (2022-07-26)
2
30
 
3
31
 
data/README.md CHANGED
@@ -22,6 +22,15 @@ Or install it yourself as:
22
22
  gem install rails_app_generator
23
23
  ```
24
24
 
25
+ Use the Gem
26
+
27
+ ```
28
+ rag rag-simple
29
+ rag rag-tailwind
30
+ rag rag-bootstrap
31
+ ```
32
+
33
+
25
34
  ## Notes
26
35
 
27
36
  You can use rails_app_generator to create Rails 7 applications
@@ -37,7 +46,7 @@ Templates for rails are separated from templates for addons
37
46
 
38
47
  As a Developer, I want to create new Rails application with flexible opinions so that I can build different rails proof of concepts
39
48
 
40
- See all [stories](./STORIES.md)
49
+ [Project Plan](./docs/project-plan.md)
41
50
 
42
51
 
43
52
  ## Usage
@@ -0,0 +1,18 @@
1
+ <!-- Modal -->
2
+ <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
3
+ <div class="modal-dialog">
4
+ <div class="modal-content">
5
+ <div class="modal-header">
6
+ <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
7
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
8
+ </div>
9
+ <div class="modal-body">
10
+ ...
11
+ </div>
12
+ <div class="modal-footer">
13
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
14
+ <button type="button" class="btn btn-primary">Save changes</button>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </div>
@@ -1 +1,81 @@
1
1
  # frozen_string_literal: true
2
+
3
+ # Rails 7 with Bootstrap CSS and custom CSS
4
+ # resources:
5
+ # https://www.youtube.com/watch?v=tYr8yn7yRKw
6
+ # https://youtu.be/phOUsR0dm5s?t=493
7
+ # https://www.youtube.com/watch?v=nxKDTtuKOo4
8
+
9
+ require 'pry'
10
+
11
+ def add_customizations
12
+ self.local_template_path = File.join(File.dirname(__FILE__), 'rag_bootstrap')
13
+
14
+ gac 'base rails 7 image created'
15
+
16
+ add_controller('home', 'index', 'about')
17
+ route("root 'home#index'")
18
+
19
+ # need a join template method
20
+ index_content = join_templates(
21
+ 'component-nav.html',
22
+ 'component-hero.html',
23
+ 'component-cards-fancy.html',
24
+ 'component-cards-staff.html',
25
+ 'component-cards-styled.html',
26
+ 'component-modal.html',
27
+ 'component-footer.html'
28
+ )
29
+
30
+ # move the nav bar into
31
+ # 'app/views/shared/_navbar.html.erb'
32
+ # and add the nav bar to the layout
33
+ # 'app/views/layouts/application.html.erb'
34
+ # <%= render partial: 'shared/navbar' %>
35
+
36
+ create_file 'app/views/home/index.html.erb', index_content, force: true
37
+
38
+ gem 'sassc-rails'
39
+
40
+ after_bundle do
41
+ add_css_customizations
42
+ add_crud_people
43
+
44
+ rails_command('db:migrate')
45
+ end
46
+ end
47
+
48
+ def add_css_customizations
49
+ # Update the manifest to include the stylesheets
50
+ append_to_file 'app/assets/config/manifest.js' , read_template('manifest.js')
51
+
52
+ # This is how you would add custom styling via @import in the application.bootstrap.css
53
+ append_to_file 'app/assets/stylesheets/application.bootstrap.scss' , "@import 'custom-bootstrap-import.scss';"
54
+ create_file 'app/assets/stylesheets/custom-bootstrap-import.scss' , read_template('custom-bootstrap-import.scss')
55
+
56
+ # This is how you would add custom styling using standard CSS
57
+ create_file 'app/assets/stylesheets/custom-using-css.css' , read_template('custom-using-css.css')
58
+
59
+ # This is how you would add custom styling using standard SAAS/SCSS
60
+ create_file 'app/assets/stylesheets/custom-using-scss.scss' , read_template('custom-using-scss.scss')
61
+
62
+ # This is custom CSS for the fancier components
63
+ create_file 'app/assets/stylesheets/custom-component.css' , join_templates('component-cards-fancy.css', 'component-cards-staff.css')
64
+
65
+ # Update the layout so that the stylesheets are included
66
+ insert_into_file 'app/views/layouts/application.html.erb', read_template('application.html.erb'),
67
+ before: %( <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>)
68
+ gsub_file 'app/views/layouts/application.html.erb', %( <%= yield %>), read_template('application-yield.html.erb')
69
+ end
70
+
71
+ def add_crud_people
72
+ # Need to get the bootstrap form styling working
73
+ # Follow the instructions at: https://youtu.be/phOUsR0dm5s?t=493
74
+ add_scaffold('people', 'first_name', 'last_name', 'age:integer', 'address:text')
75
+ end
76
+
77
+ begin
78
+ add_customizations
79
+ rescue StandardError => e
80
+ puts e.message
81
+ end
@@ -0,0 +1,9 @@
1
+
2
+ <h2>Drag the items into position</h2>
3
+
4
+ <ul data-controller="position">
5
+ <li>Item 1</li>
6
+ <li>Item 2</li>
7
+ <li>Item 3</li>
8
+ <li>Item 4</li>
9
+ </ul>
@@ -0,0 +1,12 @@
1
+ ul {
2
+ list-style: none;
3
+ margin: 1.75rem 0;;
4
+ padding-left: 0;
5
+ }
6
+
7
+ ul li {
8
+ background-color: lightgrey;
9
+ border-radius: 0.5rem;
10
+ margin-top: 1rem;
11
+ padding: 1rem;
12
+ }
@@ -0,0 +1,10 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import { Sortable } from "sortablejs"
3
+
4
+ export default class extends Controller {
5
+ connect() {
6
+ this.sortable = Sortable.create(this.element, {
7
+ animation: 150
8
+ })
9
+ }
10
+ }
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Episode #312 - Importmaps in Rails 7
4
+ # https://www.youtube.com/watch?v=veWpot6zfUQ
5
+
6
+ require 'pry'
7
+
8
+ def add_customizations
9
+ self.local_template_path = File.join(File.dirname(__FILE__), 'rag_import_map')
10
+
11
+ gac 'base rails 7 image created'
12
+
13
+ add_controller('home', 'index')
14
+ route("root 'home#index'")
15
+
16
+ # need a join template metehod
17
+ after_bundle do
18
+ # after bundle hook
19
+ bundle_add('importmap-rails')
20
+ rails_command('importmap:install')
21
+
22
+ bundle_add('hotwire-rails')
23
+ rails_command('hotwire:install')
24
+
25
+ # run("bin/importmap pin local-time --download")
26
+
27
+ # use CDN: ga.jsmp.io
28
+ run('bin/importmap pin sortablejs')
29
+ # => pin "sortablejs", to: "https://ga.jspm.io/npm:sortablejs@1.15.0/modular/sortable.esm.js"
30
+ # use CDN: jsdeliver
31
+ # run("bin/importmap pin sortablejs --from jsdelivr")
32
+ # => pin "sortablejs", to: "https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/modular/sortable.esm.js"
33
+
34
+ append_to_file 'app/views/home/index.html.erb', read_template('component-sortable.html')
35
+ template 'position_controller.js', 'app/javascript/controllers/position_controller.js'
36
+ template 'home.css', 'app/assets/stylesheets/home.css'
37
+ end
38
+ end
39
+
40
+ begin
41
+ add_customizations
42
+ rescue StandardError => e
43
+ puts e.message
44
+ end
@@ -9,17 +9,6 @@ self.local_template_path = File.join(File.dirname(__FILE__), 'rag_simple')
9
9
 
10
10
  gac 'base rails 7 image created'
11
11
 
12
- def application_html
13
- <<-HTML
14
- <div class="container">
15
- <div class="row">
16
- <%= yield %>
17
- </div>
18
- </div>
19
- HTML
12
+ after_bundle do
13
+ # if needed
20
14
  end
21
-
22
- gsub_file 'app/views/layouts/application.html.erb' , %( <%= yield %>), application_html
23
-
24
- # after_bundle do
25
- # end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class HomeController < ApplicationController
4
+ def index; end
5
+
6
+ def increment
7
+ @counter = (params[:counter]&.to_i || 0) + 1
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HomeHelper
4
+ def rand_color
5
+ format('#%06x', (rand * 0xffffff))
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ <turbo-frame id='counter'>
2
+ <div class='mt-4' style='color: <%= rand_color %>'>Current Count: <%= @counter %></div>
3
+ <div class="mt-4"><%= link_to 'Increment', increment_path(counter: @counter), class: 'bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded' %></div>
4
+ </turbo-frame>
@@ -0,0 +1,5 @@
1
+ <h1 class="text-3xl font-bold underline">
2
+ Hello World
3
+ </h1>
4
+
5
+ <%= turbo_frame_tag 'counter', src: increment_path %>
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # How to Start a Ruby on Rails 7 App With Hotwire and Tailwind CSS
4
+ # https://www.youtube.com/watch?v=7G0oWn2Gn5c
5
+
6
+ require 'pry'
7
+
8
+ self.local_template_path = File.join(File.dirname(__FILE__), 'rag_tailwind_hotwire')
9
+
10
+ gac 'base rails 7 image created'
11
+
12
+ add_controller('home', 'index')
13
+ route("get 'home/increment', as: :increment")
14
+ route("root 'home#index'")
15
+
16
+ copy_file 'home/controller.rb' , 'app/controllers/home_controller.rb' , force: true
17
+ copy_file 'home/helper.rb' , 'app/helpers/home_helper.rb' , force: true
18
+ copy_file 'home/index.html' , 'app/views/home/index.html.erb' , force: true
19
+ copy_file 'home/increment.html.erb', 'app/views/home/increment.html.erb' , force: true
20
+
21
+ after_bundle do
22
+ gsub_file 'app/views/layouts/application.html.erb', %(container mx-auto mt-28 px-5 flex), 'container mt-8 mx-auto'
23
+ end
@@ -1,49 +1,91 @@
1
- <mxfile host="3Xt">
2
- <diagram id="avE" name="In progress">
1
+ <mxfile host="hAT">
2
+ <diagram id="EXU" name="In progress">
3
3
  <mxGraphModel dx="0" dy="0" background="#FFFAFA" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
4
4
  <root>
5
- <mxCell id="page_root_avE" parent="avE"/>
6
- <mxCell id="node_root_avE" parent="page_root_avE"/>
7
- <mxCell id="avE-2" value="cli support for profile" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_avE">
8
- <mxGeometry x="10" y="10" width="300" height="60" as="geometry"/>
9
- </mxCell>
5
+ <mxCell id="page_root_EXU" parent="EXU"/>
6
+ <mxCell id="node_root_EXU" parent="page_root_EXU"/>
10
7
  </root>
11
8
  </mxGraphModel>
12
9
  </diagram>
13
- <diagram id="uOE" name="To Do">
10
+ <diagram id="c1l" name="To Do">
14
11
  <mxGraphModel dx="0" dy="0" background="#FFFAFA" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
15
12
  <root>
16
- <mxCell id="page_root_uOE" parent="uOE"/>
17
- <mxCell id="node_root_uOE" parent="page_root_uOE"/>
18
- <mxCell id="uOE-2" value="cli help support for diff" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_uOE">
13
+ <mxCell id="page_root_c1l" parent="c1l"/>
14
+ <mxCell id="node_root_c1l" parent="page_root_c1l"/>
15
+ <mxCell id="c1l-2" value="add auto open flag to profile and command line" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
19
16
  <mxGeometry x="10" y="10" width="300" height="60" as="geometry"/>
20
17
  </mxCell>
21
- <mxCell id="uOE-3" value="cli support for rails new (rag new should work like rails new) - buggy, need to work through" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_uOE">
18
+ <mxCell id="c1l-3" value="add profile - stimulas" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
22
19
  <mxGeometry x="330" y="10" width="300" height="60" as="geometry"/>
23
20
  </mxCell>
24
- <mxCell id="uOE-4" value="need an option for deleting target project path" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_uOE">
21
+ <mxCell id="c1l-4" value="add profile - hotwire" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
25
22
  <mxGeometry x="650" y="10" width="300" height="60" as="geometry"/>
26
23
  </mxCell>
24
+ <mxCell id="c1l-5" value="add profile - turbo" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
25
+ <mxGeometry x="10" y="90" width="300" height="60" as="geometry"/>
26
+ </mxCell>
27
+ <mxCell id="c1l-6" value="add profile - vue" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
28
+ <mxGeometry x="330" y="90" width="300" height="60" as="geometry"/>
29
+ </mxCell>
30
+ <mxCell id="c1l-7" value="add profile - svelte" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
31
+ <mxGeometry x="650" y="90" width="300" height="60" as="geometry"/>
32
+ </mxCell>
33
+ <mxCell id="c1l-8" value="add profile - react" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
34
+ <mxGeometry x="10" y="170" width="300" height="60" as="geometry"/>
35
+ </mxCell>
36
+ <mxCell id="c1l-9" value="add profile - vite" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
37
+ <mxGeometry x="330" y="170" width="300" height="60" as="geometry"/>
38
+ </mxCell>
39
+ <mxCell id="c1l-10" value="add profile - docker" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
40
+ <mxGeometry x="650" y="170" width="300" height="60" as="geometry"/>
41
+ </mxCell>
42
+ <mxCell id="c1l-11" value="add encryption - https://youtu.be/ZmwNzod1trk?t=701" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
43
+ <mxGeometry x="10" y="250" width="300" height="60" as="geometry"/>
44
+ </mxCell>
45
+ <mxCell id="c1l-12" value="cli help support for diff" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
46
+ <mxGeometry x="330" y="250" width="300" height="60" as="geometry"/>
47
+ </mxCell>
48
+ <mxCell id="c1l-13" value="cli support for rails new (rag new should work like rails new) - buggy, need to work through" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
49
+ <mxGeometry x="650" y="250" width="300" height="60" as="geometry"/>
50
+ </mxCell>
51
+ <mxCell id="c1l-14" value="need an option for deleting target project path" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_c1l">
52
+ <mxGeometry x="10" y="330" width="300" height="60" as="geometry"/>
53
+ </mxCell>
27
54
  </root>
28
55
  </mxGraphModel>
29
56
  </diagram>
30
- <diagram id="Oa0" name="Done">
57
+ <diagram id="oP6" name="Done">
31
58
  <mxGraphModel dx="0" dy="0" background="#FFFAFA" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
32
59
  <root>
33
- <mxCell id="page_root_Oa0" parent="Oa0"/>
34
- <mxCell id="node_root_Oa0" parent="page_root_Oa0"/>
35
- <mxCell id="Oa0-2" value="cli support for diff" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_Oa0">
60
+ <mxCell id="page_root_oP6" parent="oP6"/>
61
+ <mxCell id="node_root_oP6" parent="page_root_oP6"/>
62
+ <mxCell id="oP6-2" value="add profile - tailwind_hotwire" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
36
63
  <mxGeometry x="10" y="10" width="300" height="60" as="geometry"/>
37
64
  </mxCell>
38
- <mxCell id="Oa0-3" value="add diff tool - open in editor" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_Oa0">
65
+ <mxCell id="oP6-3" value="add profile - import_map" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
39
66
  <mxGeometry x="330" y="10" width="300" height="60" as="geometry"/>
40
67
  </mxCell>
41
- <mxCell id="Oa0-4" value="add diff tool supporting lhs only, rhs only, same and different" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_Oa0">
68
+ <mxCell id="oP6-4" value="profile - fix the bootstrap profile" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
42
69
  <mxGeometry x="650" y="10" width="300" height="60" as="geometry"/>
43
70
  </mxCell>
44
- <mxCell id="Oa0-5" value="add project plan to do list" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_Oa0">
71
+ <mxCell id="oP6-5" value="cli support for profile" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
45
72
  <mxGeometry x="10" y="90" width="300" height="60" as="geometry"/>
46
73
  </mxCell>
74
+ <mxCell id="oP6-6" value="separate CLI methods into include modules" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
75
+ <mxGeometry x="330" y="90" width="300" height="60" as="geometry"/>
76
+ </mxCell>
77
+ <mxCell id="oP6-7" value="cli support for diff" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
78
+ <mxGeometry x="650" y="90" width="300" height="60" as="geometry"/>
79
+ </mxCell>
80
+ <mxCell id="oP6-8" value="add diff tool - open in editor" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
81
+ <mxGeometry x="10" y="170" width="300" height="60" as="geometry"/>
82
+ </mxCell>
83
+ <mxCell id="oP6-9" value="add diff tool supporting lhs only, rhs only, same and different" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
84
+ <mxGeometry x="330" y="170" width="300" height="60" as="geometry"/>
85
+ </mxCell>
86
+ <mxCell id="oP6-10" value="add project plan to do list" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_oP6">
87
+ <mxGeometry x="650" y="170" width="300" height="60" as="geometry"/>
88
+ </mxCell>
47
89
  </root>
48
90
  </mxGraphModel>
49
91
  </diagram>
@@ -1,3 +1,3 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="942px" height="142px" viewBox="-0.5 -0.5 942 142"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli support for diff</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli support for diff</text></switch></g><rect x="320" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 -1 Q 319 -1 319 10.15 L 319 24 Q 470 42 621 24 L 621 10.15 Q 621 -1 609.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add diff tool - open in editor</div></div></div></foreignObject><text x="470" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add diff tool - open in editor</text></switch></g><rect x="640" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 -1 Q 639 -1 639 10.15 L 639 24 Q 790 42 941 24 L 941 10.15 Q 941 -1 929.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add diff tool supporting lhs only, rhs only, same and different</div></div></div></foreignObject><text x="790" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add diff tool supporting lhs only, rhs only, same...</text></switch></g><rect x="0" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 79 Q -1 79 -1 90.15 L -1 104 Q 150 122 301 104 L 301 90.15 Q 301 79 289.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add project plan to do list</div></div></div></foreignObject><text x="150" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add project plan to do list</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="942px" height="222px" viewBox="-0.5 -0.5 942 222"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - tailwind_hotwire</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - tailwind_hotwire</text></switch></g><rect x="320" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 -1 Q 319 -1 319 10.15 L 319 24 Q 470 42 621 24 L 621 10.15 Q 621 -1 609.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - import_map</div></div></div></foreignObject><text x="470" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - import_map</text></switch></g><rect x="640" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 -1 Q 639 -1 639 10.15 L 639 24 Q 790 42 941 24 L 941 10.15 Q 941 -1 929.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">profile - fix the bootstrap profile</div></div></div></foreignObject><text x="790" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">profile - fix the bootstrap profile</text></switch></g><rect x="0" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 79 Q -1 79 -1 90.15 L -1 104 Q 150 122 301 104 L 301 90.15 Q 301 79 289.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli support for profile</div></div></div></foreignObject><text x="150" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli support for profile</text></switch></g><rect x="320" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 79 Q 319 79 319 90.15 L 319 104 Q 470 122 621 104 L 621 90.15 Q 621 79 609.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">separate CLI methods into include modules</div></div></div></foreignObject><text x="470" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">separate CLI methods into include modules</text></switch></g><rect x="640" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 79 Q 639 79 639 90.15 L 639 104 Q 790 122 941 104 L 941 90.15 Q 941 79 929.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli support for diff</div></div></div></foreignObject><text x="790" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli support for diff</text></switch></g><rect x="0" y="160" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 159 Q -1 159 -1 170.15 L -1 184 Q 150 202 301 184 L 301 170.15 Q 301 159 289.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add diff tool - open in editor</div></div></div></foreignObject><text x="150" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add diff tool - open in editor</text></switch></g><rect x="320" y="160" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 159 Q 319 159 319 170.15 L 319 184 Q 470 202 621 184 L 621 170.15 Q 621 159 609.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add diff tool supporting lhs only, rhs only, same and different</div></div></div></foreignObject><text x="470" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add diff tool supporting lhs only, rhs only, same...</text></switch></g><rect x="640" y="160" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 159 Q 639 159 639 170.15 L 639 184 Q 790 202 941 184 L 941 170.15 Q 941 159 929.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add project plan to do list</div></div></div></foreignObject><text x="790" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add project plan to do list</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
@@ -1,3 +1,3 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="302px" height="62px" viewBox="-0.5 -0.5 302 62"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#d5e8d4" stroke="#82b366" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli support for profile</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli support for profile</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="302px" height="62px" viewBox="-0.5 -0.5 302 62"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#d5e8d4" stroke="#82b366" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - import maps</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - import maps</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
@@ -1,3 +1,3 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="942px" height="62px" viewBox="-0.5 -0.5 942 62"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli help support for diff</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli help support for diff</text></switch></g><rect x="320" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 330.15 -1 Q 319 -1 319 10.15 L 319 24 Q 470 42 621 24 L 621 10.15 Q 621 -1 609.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli support for rails new (rag new should work like rails new) - buggy, need to work through</div></div></div></foreignObject><text x="470" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli support for rails new (rag new should work lik...</text></switch></g><rect x="640" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 650.15 -1 Q 639 -1 639 10.15 L 639 24 Q 790 42 941 24 L 941 10.15 Q 941 -1 929.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">need an option for deleting target project path</div></div></div></foreignObject><text x="790" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">need an option for deleting target project path</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="942px" height="382px" viewBox="-0.5 -0.5 942 382"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add auto open flag to profile and command line</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add auto open flag to profile and command line</text></switch></g><rect x="320" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 330.15 -1 Q 319 -1 319 10.15 L 319 24 Q 470 42 621 24 L 621 10.15 Q 621 -1 609.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - stimulas</div></div></div></foreignObject><text x="470" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - stimulas</text></switch></g><rect x="640" y="0" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 650.15 -1 Q 639 -1 639 10.15 L 639 24 Q 790 42 941 24 L 941 10.15 Q 941 -1 929.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - hotwire</div></div></div></foreignObject><text x="790" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - hotwire</text></switch></g><rect x="0" y="80" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 79 Q -1 79 -1 90.15 L -1 104 Q 150 122 301 104 L 301 90.15 Q 301 79 289.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - turbo</div></div></div></foreignObject><text x="150" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - turbo</text></switch></g><rect x="320" y="80" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 330.15 79 Q 319 79 319 90.15 L 319 104 Q 470 122 621 104 L 621 90.15 Q 621 79 609.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - vue</div></div></div></foreignObject><text x="470" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - vue</text></switch></g><rect x="640" y="80" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 650.15 79 Q 639 79 639 90.15 L 639 104 Q 790 122 941 104 L 941 90.15 Q 941 79 929.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - svelte</div></div></div></foreignObject><text x="790" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - svelte</text></switch></g><rect x="0" y="160" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 159 Q -1 159 -1 170.15 L -1 184 Q 150 202 301 184 L 301 170.15 Q 301 159 289.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - react</div></div></div></foreignObject><text x="150" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - react</text></switch></g><rect x="320" y="160" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 330.15 159 Q 319 159 319 170.15 L 319 184 Q 470 202 621 184 L 621 170.15 Q 621 159 609.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - vite</div></div></div></foreignObject><text x="470" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - vite</text></switch></g><rect x="640" y="160" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 650.15 159 Q 639 159 639 170.15 L 639 184 Q 790 202 941 184 L 941 170.15 Q 941 159 929.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add profile - docker</div></div></div></foreignObject><text x="790" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add profile - docker</text></switch></g><rect x="0" y="240" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 239 Q -1 239 -1 250.15 L -1 264 Q 150 282 301 264 L 301 250.15 Q 301 239 289.85 239 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 270px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add encryption - https://youtu.be/ZmwNzod1trk?t=701</div></div></div></foreignObject><text x="150" y="274" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add encryption - https://youtu.be/ZmwNzod1trk?t=701</text></switch></g><rect x="320" y="240" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 330.15 239 Q 319 239 319 250.15 L 319 264 Q 470 282 621 264 L 621 250.15 Q 621 239 609.85 239 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 270px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli help support for diff</div></div></div></foreignObject><text x="470" y="274" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli help support for diff</text></switch></g><rect x="640" y="240" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 650.15 239 Q 639 239 639 250.15 L 639 264 Q 790 282 941 264 L 941 250.15 Q 941 239 929.85 239 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 270px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">cli support for rails new (rag new should work like rails new) - buggy, need to work through</div></div></div></foreignObject><text x="790" y="274" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">cli support for rails new (rag new should work lik...</text></switch></g><rect x="0" y="320" width="300" height="60" rx="9" ry="9" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><path d="M 10.15 319 Q -1 319 -1 330.15 L -1 344 Q 150 362 301 344 L 301 330.15 Q 301 319 289.85 319 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 350px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">need an option for deleting target project path</div></div></div></foreignObject><text x="150" y="354" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">need an option for deleting target project path</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
data/exe/rag CHANGED
@@ -9,62 +9,34 @@ $LOAD_PATH << source_path
9
9
 
10
10
  require 'rails_app_generator'
11
11
 
12
+ first = ARGV.first
13
+
12
14
  if ARGV.empty?
13
15
  puts 'Please provide a profile for the new application'
14
16
  puts
15
17
  puts 'See --help for more info'
16
- exit 0
17
- elsif %w[-v --version].include? ARGV[0]
18
+ elsif %w[-v --version].include?(first)
18
19
  puts RailsAppGenerator::VERSION
19
- exit 0
20
+ elsif first == 'diff'
21
+ RailsAppGenerator::Cli::Diff.start(ARGV)
22
+ elsif first == 'new'
23
+ puts 'TODO: NEW'
24
+
25
+ # # Use RAG with in the same way as the Rails generator (the following commands should be equivalent)
26
+ # # rails new args
27
+ # # rag new args
28
+ # if ARGV.first == 'new'
29
+ # # NOTE: This is not yet working
30
+ # RailsAppGenerator::Cli::Standard.start ARGV[1..]
31
+ # exit 0
32
+ # elsif !ARGV.first.nil?
33
+ # end
34
+
35
+ else
36
+ fallback_profile_path = File.expand_path("#{Pathname.new(__FILE__).dirname}/../profiles")
37
+ args = ['profile'] + ARGV + ["--fallback-profile-path=#{fallback_profile_path}"]
38
+
39
+ RailsAppGenerator::Cli::Profile.start(args)
20
40
  end
21
41
 
22
- RailsAppGenerator::Cli.start(ARGV)
23
-
24
42
  exit 0
25
-
26
- # # Use RAG with in the same way as the Rails generator (the following commands should be equivalent)
27
- # # rails new args
28
- # # rag new args
29
- # if ARGV.first == 'new'
30
- # # NOTE: This is not yet working
31
- # RailsAppGenerator::Cli::Standard.start ARGV[1..]
32
- # exit 0
33
- # elsif ARGV.first == 'diff'
34
- # # args, opts = Thor::Arguments.split(ARGV[1..])
35
- # RailsAppGenerator::Cli::Diff.start(ARGV[1..]) # , { lhs: true, rhs: true, compare: true } )
36
- # exit 0
37
- # elsif ARGV.first == 'diff_lhs'
38
- # RailsAppGenerator::Cli::Diff.start(ARGV[1..], { lhs: true })
39
- # exit 0
40
- # elsif ARGV.first == 'diff_rhs'
41
- # RailsAppGenerator::Cli::Diff.start(ARGV[1..], { rhs: true })
42
- # exit 0
43
- # elsif ARGV.first == 'diff_compare'
44
- # RailsAppGenerator::Cli::Diff.start(ARGV[1..], { compare: true })
45
- # exit 0
46
- # elsif !ARGV.first.nil?
47
- # profile_path = File.expand_path("#{Pathname.new(__FILE__).dirname}/../profiles")
48
- # profile_name = ARGV[0]
49
- # profile_name += '.json' unless profile_name.end_with?('.json')
50
- # profile_file = File.join(profile_path, profile_name)
51
-
52
- # RailsAppGenerator::Cli::Profile.start(profile_file)
53
-
54
- # exit 0
55
- # end
56
-
57
- # if File.exist?(profile_file)
58
- # puts "Using profile #{profile_file}"
59
-
60
- # profile = JSON.parse(File.read(profile_file), symbolize_names: true)
61
- # args = profile[:args]
62
- # opts = profile[:opts]
63
- # rails_options = RailsAppGenerator::RailsOptions.new(opts)
64
-
65
- # instance = RailsAppGenerator::Starter.new(args)
66
- # FileUtils.rm_rf(instance.target_path)
67
- # instance.start(rails_options)
68
- # else
69
- # puts "Profile #{profile_file} not found"
70
- # exit 1
@@ -187,6 +187,10 @@ module RailsAppGenerator
187
187
  generate(:scaffold, name, *args)
188
188
  end
189
189
 
190
+ def bundle_add(name)
191
+ run("bundle add #{name}")
192
+ end
193
+
190
194
  def read_template(template_file)
191
195
  path = find_in_source_paths(template_file)
192
196
 
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ module Cli
5
+ # Folder Diff
6
+ class Diff < Thor
7
+ desc 'diff lhs_folder rhs_folder [options]', 'Diff two different rails folders'
8
+
9
+ # Run report to console for following options
10
+ option :show_left_only , type: :boolean
11
+ option :show_right_only , type: :boolean
12
+ option :show_same , type: :boolean
13
+ option :show_different , type: :boolean
14
+
15
+ # Open files in VSCode for for following options
16
+ option :open_left_only , type: :boolean
17
+ option :open_right_only , type: :boolean
18
+ option :open_same , type: :boolean
19
+ option :open_different , type: :boolean
20
+
21
+ # rubocop:disable Metrics/AbcSize
22
+ def diff(lhs_folder, rhs_folder)
23
+ # puts "Diffing #{lhs_folder} and #{rhs_folder}"
24
+ # puts JSON.pretty_generate(options)
25
+ processor = RailsAppGenerator::Diff::Processor.new(lhs_folder, rhs_folder)
26
+ compare_info = processor.compare
27
+
28
+ report = RailsAppGenerator::Diff::Report.new(
29
+ compare_info,
30
+ show_left_only: options[:show_left_only],
31
+ show_right_only: options[:show_right_only],
32
+ show_same: options[:show_same],
33
+ show_different: options[:show_different]
34
+ )
35
+ report.display
36
+
37
+ vscode = RailsAppGenerator::Diff::OpenInEditor.new(
38
+ compare_info,
39
+ open_left_only: options[:open_left_only],
40
+ open_right_only: options[:open_right_only],
41
+ open_same: options[:open_same],
42
+ open_different: options[:show_different]
43
+ )
44
+ vscode.open
45
+ end
46
+ # rubocop:enable Metrics/AbcSize
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ module Cli
5
+ # Folder Diff
6
+ class Profile < Thor
7
+ desc 'xxx [options]', 'Create a new rails app based on a RAG profile'
8
+
9
+ option :profile_path , type: :string
10
+ option :fallback_profile_path , type: :string
11
+
12
+ # rubocop:disable Metrics/AbcSize
13
+ def profile(name)
14
+ path = options[:profile_path] || options[:fallback_profile_path]
15
+ profile_name = name.end_with?('.json') ? name : "#{name}.json"
16
+ profile_file = File.join(path, profile_name)
17
+
18
+ unless File.exist?(profile_file)
19
+ puts "Profile [#{profile_file}] not found"
20
+ exit 1
21
+ end
22
+
23
+ puts "Using profile #{profile_file}"
24
+
25
+ profile = JSON.parse(File.read(profile_file), symbolize_names: true)
26
+ args = profile[:args]
27
+ opts = RailsAppGenerator::RailsOptions.new(profile[:opts])
28
+
29
+ starter = RailsAppGenerator::Starter.new(args)
30
+
31
+ starter.delete_target_folder
32
+ starter.start(opts)
33
+ end
34
+ # rubocop:enable Metrics/AbcSize
35
+ end
36
+ end
37
+ end
@@ -8,7 +8,10 @@ module RailsAppGenerator
8
8
  attr_reader :rhs_path
9
9
 
10
10
  DEFAULT_EXCLUSION = lambda do |_file, relative_file|
11
- relative_file.start_with?('tmp') || relative_file.start_with?('node_modules')
11
+ relative_file.start_with?('tmp') ||
12
+ relative_file.start_with?('node_modules') ||
13
+ relative_file.start_with?('log') ||
14
+ relative_file == 'Gemfile.lock'
12
15
  end
13
16
 
14
17
  def initialize(lhs_path, rhs_path)
@@ -14,7 +14,7 @@ module RailsAppGenerator
14
14
  def initialize(compare_info, **opts)
15
15
  @info = compare_info
16
16
 
17
- @show_left_only = opts[:show_left_only].nil? ? false : opts[:show_left_only]
17
+ @show_left_only = opts[:show_left_only].nil? ? true : opts[:show_left_only]
18
18
  @show_right_only = opts[:show_right_only].nil? ? true : opts[:show_right_only]
19
19
  @show_same = opts[:show_same].nil? ? false : opts[:show_same]
20
20
  @show_different = opts[:show_different].nil? ? true : opts[:show_different]
@@ -56,6 +56,10 @@ module RailsAppGenerator
56
56
  end
57
57
  end
58
58
 
59
+ def delete_target_folder
60
+ FileUtils.rm_rf(target_path)
61
+ end
62
+
59
63
  private
60
64
 
61
65
  def capture_console
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.0.15'
4
+ VERSION = '0.1.2'
5
5
  end
@@ -8,7 +8,8 @@ require 'rails/generators/rails/app/app_generator'
8
8
  require 'bundler'
9
9
 
10
10
  require 'rails_app_generator/version'
11
- require 'rails_app_generator/cli'
11
+ require 'rails_app_generator/cli/diff'
12
+ require 'rails_app_generator/cli/profile'
12
13
  require 'rails_app_generator/util'
13
14
  require 'rails_app_generator/diff/file_pair'
14
15
  require 'rails_app_generator/diff/compare_info'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.0.15",
3
+ "version": "0.1.2",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "rails_app_generator",
9
- "version": "0.0.15",
9
+ "version": "0.1.2",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.0.15",
3
+ "version": "0.1.2",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
@@ -0,0 +1,11 @@
1
+ {
2
+ "args": {
3
+ "app_path": "import_map",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/rag"
5
+ },
6
+ "opts": {
7
+ "skip_test": true,
8
+ "skip_javascript": true,
9
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/rag_import_map.rb"
10
+ }
11
+ }
@@ -4,7 +4,7 @@
4
4
  "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/rag"
5
5
  },
6
6
  "opts": {
7
- "skip_git": true,
7
+ "skip_test": true,
8
8
  "skip_bundle": true,
9
9
  "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/rag_simple.rb"
10
10
  }
@@ -0,0 +1,12 @@
1
+ {
2
+ "args": {
3
+ "app_path": "tailwind_hotwire",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/rag"
5
+ },
6
+ "opts": {
7
+ "skip_test": true,
8
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/rag_tailwind_hotwire.rb",
9
+ "css": "tailwind",
10
+ "javascript": "esbuild"
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.0.15
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -146,8 +146,6 @@ files:
146
146
  - README.md
147
147
  - Rakefile
148
148
  - after_templates/README.md
149
- - after_templates/___base_template.rb
150
- - after_templates/___r7_hotwire.rb
151
149
  - after_templates/rag_bootstrap.rb
152
150
  - after_templates/rag_bootstrap/application-yield.html.erb
153
151
  - after_templates/rag_bootstrap/application.html.erb
@@ -158,11 +156,16 @@ files:
158
156
  - after_templates/rag_bootstrap/component-cards-styled.html
159
157
  - after_templates/rag_bootstrap/component-footer.html
160
158
  - after_templates/rag_bootstrap/component-hero.html
159
+ - after_templates/rag_bootstrap/component-modal.html
161
160
  - after_templates/rag_bootstrap/component-nav.html
162
161
  - after_templates/rag_bootstrap/custom-bootstrap-import.scss
163
162
  - after_templates/rag_bootstrap/custom-using-css.css
164
163
  - after_templates/rag_bootstrap/custom-using-scss.scss
165
164
  - after_templates/rag_bootstrap/manifest.js
165
+ - after_templates/rag_import_map.rb
166
+ - after_templates/rag_import_map/component-sortable.html
167
+ - after_templates/rag_import_map/home.css
168
+ - after_templates/rag_import_map/position_controller.js
166
169
  - after_templates/rag_simple.rb
167
170
  - after_templates/rag_tailwind.rb
168
171
  - after_templates/rag_tailwind/component-cta.html
@@ -172,6 +175,11 @@ files:
172
175
  - after_templates/rag_tailwind/component-nav.html
173
176
  - after_templates/rag_tailwind/component-section-begin.html
174
177
  - after_templates/rag_tailwind/component-section-end.html
178
+ - after_templates/rag_tailwind_hotwire.rb
179
+ - after_templates/rag_tailwind_hotwire/home/controller.rb
180
+ - after_templates/rag_tailwind_hotwire/home/helper.rb
181
+ - after_templates/rag_tailwind_hotwire/home/increment.html.erb
182
+ - after_templates/rag_tailwind_hotwire/home/index.html
175
183
  - bin/console
176
184
  - bin/setup
177
185
  - docs/project-plan.md
@@ -207,7 +215,8 @@ files:
207
215
  - lib/rails_app_generator/addons/views.rb
208
216
  - lib/rails_app_generator/app_builder.rb
209
217
  - lib/rails_app_generator/app_generator.rb
210
- - lib/rails_app_generator/cli.rb
218
+ - lib/rails_app_generator/cli/diff.rb
219
+ - lib/rails_app_generator/cli/profile.rb
211
220
  - lib/rails_app_generator/context.rb
212
221
  - lib/rails_app_generator/dependencies.rb
213
222
  - lib/rails_app_generator/diff/compare_info.rb
@@ -243,7 +252,9 @@ files:
243
252
  - package.json
244
253
  - profiles/rag-add-some-pages.json
245
254
  - profiles/rag-bootstrap.json
255
+ - profiles/rag-import-map.json
246
256
  - profiles/rag-simple.json
257
+ - profiles/rag-tailwind-hotwire.json
247
258
  - profiles/rag-tailwind.json
248
259
  - sig/rails_app_generator.rbs
249
260
  - templates/README.md.erb
@@ -1 +0,0 @@
1
- # frozen_string_literal: true
@@ -1 +0,0 @@
1
- # frozen_string_literal: true
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsAppGenerator
4
- # Thor CLI
5
- class Cli < Thor
6
- desc 'diff lhs_folder rhs_folder [options]', 'Diff two different rails folders'
7
-
8
- # Run report to console for following options
9
- option :show_left_only , type: :boolean
10
- option :show_right_only , type: :boolean
11
- option :show_same , type: :boolean
12
- option :show_different , type: :boolean
13
-
14
- # Open files in VSCode for for following options
15
- option :open_left_only , type: :boolean
16
- option :open_right_only , type: :boolean
17
- option :open_same , type: :boolean
18
- option :open_different , type: :boolean
19
-
20
- # rubocop:disable Metrics/AbcSize
21
- def diff(lhs_folder, rhs_folder)
22
- # puts "Diffing #{lhs_folder} and #{rhs_folder}"
23
- # puts JSON.pretty_generate(options)
24
- processor = RailsAppGenerator::Diff::Processor.new(lhs_folder, rhs_folder)
25
- compare_info = processor.compare
26
-
27
- report = RailsAppGenerator::Diff::Report.new(
28
- compare_info,
29
- show_left_only: options[:show_left_only],
30
- show_right_only: options[:show_right_only],
31
- show_same: options[:show_same],
32
- show_different: options[:show_different]
33
- )
34
- report.display
35
-
36
- vscode = RailsAppGenerator::Diff::OpenInEditor.new(
37
- compare_info,
38
- open_left_only: options[:open_left_only],
39
- open_right_only: options[:open_right_only],
40
- open_same: options[:open_same],
41
- open_different: options[:show_different]
42
- )
43
- vscode.open
44
- end
45
- # rubocop:enable Metrics/AbcSize
46
-
47
- # def initialize(profile_file)
48
- # @profile_file = profile_file
49
- # end
50
-
51
- # def run
52
- # puts "Using profile #{profile_file}"
53
-
54
- # profile = JSON.parse(File.read(profile_file), symbolize_names: true)
55
- # args = profile[:args]
56
- # opts = profile[:opts]
57
- # rails_options = RailsAppGenerator::RailsOptions.new(opts)
58
-
59
- # instance = RailsAppGenerator::Starter.new(args)
60
- # FileUtils.rm_rf(instance.target_path)
61
- # instance.start(rails_options)
62
- # end
63
- end
64
- end