kaze 0.12.0 → 0.14.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c65dc7f1acffb3ae6d361fbd4f1172fb46b857611dc0cc96b9229219869a3576
4
- data.tar.gz: 5fa72ea32080be5c77a451bbc9cf24d6e8ff1c83af914c0b97004086cfd76e14
3
+ metadata.gz: 76266303b2438a2b8150e105b949336025535af3fd5333a6046b6cc304c1838f
4
+ data.tar.gz: 93c6e63fbd507419b506721869aaf2624057a9e27baf53c111ea6318a8dd9a40
5
5
  SHA512:
6
- metadata.gz: 51c93d3f462be29745003941d34a1d8d42da5ff6ab8127c59ae4fc9c3ab001cf23094cc5f298262b63d661507bb5e79d93657fce24ea1fd1c82d8de7d7e5ac7f
7
- data.tar.gz: 3abcbcda1957bf7415d10fc5c142183ca0227925843b6a1aeebd9c5a158fc5eeed0b855963c60cd785ce4201ac13dcbc169d27cdfe6d3dd12d9b41798d0e7931
6
+ metadata.gz: 94150da33b21e62478df0c05903f3405e3c15d3753d566f145726dd61e773d5074f9ccd4bd68df1f531ae30fd51390eedd80ec4b1805689b3a432f3513c72f3e
7
+ data.tar.gz: 0d14fa92c8c2929b6d1286acba751e62af9f807389b36ab9564e21b905bde434e186861b053e8367e04f21a26eb335b4aa5360abc876178b28c35241232e348d
data/bin/kaze CHANGED
@@ -3,7 +3,7 @@
3
3
  require "kaze"
4
4
 
5
5
  begin
6
- Kaze::Commands::InstallCommand.start(ARGV)
6
+ Kaze::Commands::App.start(ARGV)
7
7
  rescue => e
8
8
  puts " \e[31mERROR (#{e.class}): #{e.message}\e[0m"
9
9
  puts e.backtrace if ENV["VERBOSE"]
@@ -1,23 +1,10 @@
1
1
  require 'bundler'
2
2
  require 'fileutils'
3
3
  require 'open3'
4
- require 'thor'
5
4
 
6
- class Kaze::Commands::InstallCommand < Thor
7
- include Kaze::Commands::InstallsHotwireStack
8
- include Kaze::Commands::InstallsInertiaStacks
9
-
10
- desc 'install [STACK]', 'Install the Kaze controllers and resources. Supported stacks: hotwire, react, vue.'
11
- def install(stack = 'hotwire')
12
- return say 'Kaze must be run in a new Rails application.', :red unless File.exist?("#{Dir.pwd}/bin/rails")
13
-
14
- return install_hotwire_stack if stack == 'hotwire'
15
-
16
- return install_inertia_react_stack if stack == 'react'
17
-
18
- return install_inertia_vue_stack if stack == 'vue'
19
-
20
- say 'Invalid stack. Supported stacks are [hotwire], [react], [vue].', :red
5
+ class Kaze::Commands::App::BaseStack
6
+ def install
7
+ raise NotImplementedError
21
8
  end
22
9
 
23
10
  private
@@ -52,18 +39,16 @@ class Kaze::Commands::InstallCommand < Thor
52
39
  railsVersion = [ versions[0], versions[1] ].join('.')
53
40
 
54
41
  ensure_directory_exists("#{Dir.pwd}/db/migrate")
55
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/db/migrate", "#{Dir.pwd}/db/migrate")
56
- Dir.children("#{Dir.pwd}/db/migrate").each do |file|
57
- replace_in_file(/ActiveRecord::Migration$/, "ActiveRecord::Migration[#{railsVersion}]", "#{Dir.pwd}/db/migrate/#{file}")
58
- end
42
+ FileUtils.copy_entry("#{stubs_path}/default/db/migrate", "#{Dir.pwd}/db/migrate")
43
+ Dir.children("#{Dir.pwd}/db/migrate").each { |file| replace_in_file(/ActiveRecord::Migration$/, "ActiveRecord::Migration[#{railsVersion}]", "#{Dir.pwd}/db/migrate/#{file}") }
59
44
  end
60
45
 
61
46
  def install_tests
62
47
  ensure_directory_exists("#{Dir.pwd}/test/factories")
63
48
  ensure_directory_exists("#{Dir.pwd}/test/integration")
64
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/test/test_helper.rb", "#{Dir.pwd}/test/test_helper.rb")
65
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/test/factories", "#{Dir.pwd}/test/factories")
66
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/test/integration", "#{Dir.pwd}/test/integration")
49
+ FileUtils.copy_file("#{stubs_path}/default/test/test_helper.rb", "#{Dir.pwd}/test/test_helper.rb")
50
+ FileUtils.copy_entry("#{stubs_path}/default/test/factories", "#{Dir.pwd}/test/factories")
51
+ FileUtils.copy_entry("#{stubs_path}/default/test/integration", "#{Dir.pwd}/test/integration")
67
52
  end
68
53
 
69
54
  def ensure_directory_exists(path)
@@ -95,4 +80,12 @@ class Kaze::Commands::InstallCommand < Thor
95
80
  def run_commands(commands)
96
81
  commands.each { |command| run_command(command) }
97
82
  end
83
+
84
+ def say(message, color = nil)
85
+ THOR.say(message, color)
86
+ end
87
+
88
+ def stubs_path
89
+ "#{File.dirname(__FILE__)}/../../../../stubs"
90
+ end
98
91
  end
@@ -0,0 +1,63 @@
1
+ class Kaze::Commands::App::HotwireStack < Kaze::Commands::App::BaseStack
2
+ def install
3
+ # Gems...
4
+ return unless remove_gems([ 'sprockets-rails', 'stimulus-rails' ])
5
+ return unless install_gems([ 'propshaft', 'view_component', 'tailwindcss-rails', 'turbo-rails', 'dotenv', 'bcrypt' ])
6
+ return unless install_gems([ 'hotwire-livereload' ], 'development')
7
+ return unless install_gems([ 'factory_bot_rails', 'faker' ], 'development, test')
8
+
9
+ # Controllers...
10
+ FileUtils.copy_entry("#{stubs_path}/hotwire/app/controllers", "#{Dir.pwd}/app/controllers")
11
+
12
+ # Models...
13
+ FileUtils.copy_entry("#{stubs_path}/default/app/models", "#{Dir.pwd}/app/models")
14
+
15
+ # Forms...
16
+ ensure_directory_exists("#{Dir.pwd}/app/forms")
17
+ FileUtils.copy_entry("#{stubs_path}/default/app/forms", "#{Dir.pwd}/app/forms")
18
+
19
+ # Validators...
20
+ ensure_directory_exists("#{Dir.pwd}/app/validators")
21
+ FileUtils.copy_entry("#{stubs_path}/default/app/validators", "#{Dir.pwd}/app/validators")
22
+
23
+ # Mailers...
24
+ ensure_directory_exists("#{Dir.pwd}/app/mailers")
25
+ FileUtils.copy_entry("#{stubs_path}/default/app/mailers", "#{Dir.pwd}/app/mailers")
26
+
27
+ # Views...
28
+ ensure_directory_exists("#{Dir.pwd}/app/views/layouts")
29
+ ensure_directory_exists("#{Dir.pwd}/app/views/user_mailer")
30
+ FileUtils.copy_entry("#{stubs_path}/hotwire/app/views", "#{Dir.pwd}/app/views")
31
+ FileUtils.copy_file("#{stubs_path}/default/app/views/layouts/mailer.html.erb", "#{Dir.pwd}/app/views/layouts/mailer.html.erb")
32
+ FileUtils.copy_file("#{stubs_path}/default/app/views/layouts/mailer.text.erb", "#{Dir.pwd}/app/views/layouts/mailer.text.erb")
33
+ FileUtils.copy_entry("#{stubs_path}/default/app/views/user_mailer", "#{Dir.pwd}/app/views/user_mailer")
34
+
35
+ # View Components + Alpine...
36
+ ensure_directory_exists("#{Dir.pwd}/app/components")
37
+ FileUtils.copy_entry("#{stubs_path}/hotwire/app/components", "#{Dir.pwd}/app/components")
38
+ ensure_directory_exists("#{Dir.pwd}/app/javascript")
39
+ FileUtils.copy_file("#{stubs_path}/hotwire/app/javascript/application.js", "#{Dir.pwd}/app/javascript/application.js")
40
+ FileUtils.copy_file("#{stubs_path}/hotwire/app/javascript/alpinejs.stub", "#{Dir.pwd}/app/javascript/alpinejs.js")
41
+ FileUtils.copy_file("#{stubs_path}/hotwire/config/importmap.rb", "#{Dir.pwd}/config/importmap.rb")
42
+
43
+ # Tests...
44
+ install_tests
45
+
46
+ # Routes...
47
+ FileUtils.copy_file("#{stubs_path}/default/config/routes.rb", "#{Dir.pwd}/config/routes.rb")
48
+
49
+ # Migrations...
50
+ install_migrations
51
+
52
+ # Tailwind...
53
+ FileUtils.copy_file("#{stubs_path}/default/app/assets/stylesheets/application.css", "#{Dir.pwd}/app/assets/stylesheets/application.css")
54
+ FileUtils.copy_file("#{stubs_path}/default/app/assets/stylesheets/application.tailwind.css", "#{Dir.pwd}/app/assets/stylesheets/application.tailwind.css")
55
+ FileUtils.copy_file("#{stubs_path}/hotwire/config/tailwind.config.js", "#{Dir.pwd}/config/tailwind.config.js")
56
+ FileUtils.copy_file("#{stubs_path}/default/bin/dev", "#{Dir.pwd}/bin/dev")
57
+ FileUtils.copy_file("#{stubs_path}/default/Procfile.dev", "#{Dir.pwd}/Procfile.dev")
58
+ run_command("#{Dir.pwd}/bin/rails tailwindcss:build")
59
+
60
+ say ''
61
+ say 'Kaze scaffolding installed successfully.', :green
62
+ end
63
+ end
@@ -0,0 +1,81 @@
1
+ class Kaze::Commands::App::InertiaReactStack < Kaze::Commands::App::BaseStack
2
+ def install
3
+ # Gems...
4
+ return unless remove_gems([ 'sprockets-rails', 'turbo-rails', 'stimulus-rails' ])
5
+ return unless install_gems([ 'propshaft', 'tailwindcss-rails', 'inertia_rails', 'vite_rails', 'dotenv', 'bcrypt', 'js-routes' ])
6
+ return unless install_gems([ 'factory_bot_rails', 'faker' ], 'development, test')
7
+
8
+ # NPM Packages...
9
+ FileUtils.copy_file("#{stubs_path}/inertia-react-ts/package.json", "#{Dir.pwd}/package.json")
10
+
11
+ # Controllers...
12
+ FileUtils.copy_entry("#{stubs_path}/inertia-common/app/controllers", "#{Dir.pwd}/app/controllers")
13
+
14
+ # Models...
15
+ FileUtils.copy_entry("#{stubs_path}/default/app/models", "#{Dir.pwd}/app/models")
16
+
17
+ # Forms...
18
+ ensure_directory_exists("#{Dir.pwd}/app/forms")
19
+ FileUtils.copy_entry("#{stubs_path}/default/app/forms", "#{Dir.pwd}/app/forms")
20
+
21
+ # Validators...
22
+ ensure_directory_exists("#{Dir.pwd}/app/validators")
23
+ FileUtils.copy_entry("#{stubs_path}/default/app/validators", "#{Dir.pwd}/app/validators")
24
+
25
+ # Mailers...
26
+ ensure_directory_exists("#{Dir.pwd}/app/mailers")
27
+ FileUtils.copy_entry("#{stubs_path}/default/app/mailers", "#{Dir.pwd}/app/mailers")
28
+
29
+ # Views...
30
+ ensure_directory_exists("#{Dir.pwd}/app/views/layouts")
31
+ ensure_directory_exists("#{Dir.pwd}/app/views/user_mailer")
32
+ FileUtils.copy_file("#{stubs_path}/inertia-react-ts/app/views/layouts/application.html.erb", "#{Dir.pwd}/app/views/layouts/application.html.erb")
33
+ FileUtils.copy_file("#{stubs_path}/default/app/views/layouts/mailer.html.erb", "#{Dir.pwd}/app/views/layouts/mailer.html.erb")
34
+ FileUtils.copy_file("#{stubs_path}/default/app/views/layouts/mailer.text.erb", "#{Dir.pwd}/app/views/layouts/mailer.text.erb")
35
+ FileUtils.copy_entry("#{stubs_path}/default/app/views/user_mailer", "#{Dir.pwd}/app/views/user_mailer")
36
+
37
+ # Components + Pages...
38
+ ensure_directory_exists("#{Dir.pwd}/app/javascript")
39
+ FileUtils.copy_entry("#{stubs_path}/inertia-react-ts/app/javascript", "#{Dir.pwd}/app/javascript")
40
+
41
+ # Tests...
42
+ install_tests
43
+ FileUtils.copy_entry("#{stubs_path}/inertia-common/test/integration", "#{Dir.pwd}/test/integration")
44
+
45
+ # Routes...
46
+ FileUtils.copy_file("#{stubs_path}/default/config/routes.rb", "#{Dir.pwd}/config/routes.rb")
47
+
48
+ # Migrations...
49
+ install_migrations
50
+
51
+ # Tailwind / Vite...
52
+ FileUtils.copy_file("#{stubs_path}/default/app/assets/stylesheets/application.css", "#{Dir.pwd}/app/assets/stylesheets/application.css")
53
+ FileUtils.copy_file("#{stubs_path}/default/app/assets/stylesheets/application.tailwind.css", "#{Dir.pwd}/app/assets/stylesheets/application.tailwind.css")
54
+ FileUtils.copy_file("#{stubs_path}/inertia-react-ts/config/tailwind.config.js", "#{Dir.pwd}/config/tailwind.config.js")
55
+ FileUtils.copy_file("#{stubs_path}/inertia-common/config/vite.json", "#{Dir.pwd}/config/vite.json")
56
+ FileUtils.copy_file("#{stubs_path}/inertia-react-ts/tsconfig.json", "#{Dir.pwd}/tsconfig.json")
57
+ FileUtils.copy_file("#{stubs_path}/inertia-react-ts/vite.config.ts", "#{Dir.pwd}/vite.config.ts")
58
+ FileUtils.copy_file("#{stubs_path}/default/bin/dev", "#{Dir.pwd}/bin/dev")
59
+ FileUtils.copy_file("#{stubs_path}/inertia-common/bin/vite", "#{Dir.pwd}/bin/vite")
60
+ FileUtils.copy_file("#{stubs_path}/default/Procfile.dev", "#{Dir.pwd}/Procfile.dev")
61
+ File.write("#{Dir.pwd}/Procfile.dev", "#{File.read("#{Dir.pwd}/Procfile.dev")}\nvite: bin/vite dev\n")
62
+ run_command("#{Dir.pwd}/bin/rails generate js_routes:middleware")
63
+ run_command("#{Dir.pwd}/bin/rails tailwindcss:build")
64
+
65
+ say ''
66
+ say 'Installing and building Node dependencies.', :magenta
67
+
68
+ if File.exist?("#{Dir.pwd}/pnpm-lock.yaml")
69
+ run_commands([ 'pnpm install', 'pnpm run build' ])
70
+ elsif File.exist?("#{Dir.pwd}/yarn.lock")
71
+ run_commands([ 'yarn install', 'yarn build' ])
72
+ elsif File.exist?("#{Dir.pwd}/bun.lockb")
73
+ run_commands([ 'bun install', 'bun run build' ])
74
+ else
75
+ run_commands([ 'npm install', 'npm run build' ])
76
+ end
77
+
78
+ say ''
79
+ say 'Kaze scaffolding installed successfully.', :green
80
+ end
81
+ end
@@ -0,0 +1,81 @@
1
+ class Kaze::Commands::App::InertiaVueStack < Kaze::Commands::App::BaseStack
2
+ def install
3
+ # Gems...
4
+ return unless remove_gems([ 'sprockets-rails', 'turbo-rails', 'stimulus-rails' ])
5
+ return unless install_gems([ 'propshaft', 'tailwindcss-rails', 'inertia_rails', 'vite_rails', 'dotenv', 'bcrypt', 'js-routes' ])
6
+ return unless install_gems([ 'factory_bot_rails', 'faker' ], 'development, test')
7
+
8
+ # NPM Packages...
9
+ FileUtils.copy_file("#{stubs_path}/inertia-vue-ts/package.json", "#{Dir.pwd}/package.json")
10
+
11
+ # Controllers...
12
+ FileUtils.copy_entry("#{stubs_path}/inertia-common/app/controllers", "#{Dir.pwd}/app/controllers")
13
+
14
+ # Models...
15
+ FileUtils.copy_entry("#{stubs_path}/default/app/models", "#{Dir.pwd}/app/models")
16
+
17
+ # Forms...
18
+ ensure_directory_exists("#{Dir.pwd}/app/forms")
19
+ FileUtils.copy_entry("#{stubs_path}/default/app/forms", "#{Dir.pwd}/app/forms")
20
+
21
+ # Validators...
22
+ ensure_directory_exists("#{Dir.pwd}/app/validators")
23
+ FileUtils.copy_entry("#{stubs_path}/default/app/validators", "#{Dir.pwd}/app/validators")
24
+
25
+ # Views...
26
+ ensure_directory_exists("#{Dir.pwd}/app/views/layouts")
27
+ ensure_directory_exists("#{Dir.pwd}/app/views/user_mailer")
28
+ FileUtils.copy_file("#{stubs_path}/inertia-vue-ts/app/views/layouts/application.html.erb", "#{Dir.pwd}/app/views/layouts/application.html.erb")
29
+ FileUtils.copy_file("#{stubs_path}/default/app/views/layouts/mailer.html.erb", "#{Dir.pwd}/app/views/layouts/mailer.html.erb")
30
+ FileUtils.copy_file("#{stubs_path}/default/app/views/layouts/mailer.text.erb", "#{Dir.pwd}/app/views/layouts/mailer.text.erb")
31
+ FileUtils.copy_file("#{stubs_path}/default/app/views/user_mailer/reset_password.html.erb", "#{Dir.pwd}/app/views/user_mailer/reset_password.html.erb")
32
+
33
+ # Mailers...
34
+ ensure_directory_exists("#{Dir.pwd}/app/mailers")
35
+ FileUtils.copy_entry("#{stubs_path}/default/app/mailers", "#{Dir.pwd}/app/mailers")
36
+
37
+ # Components + Pages...
38
+ ensure_directory_exists("#{Dir.pwd}/app/javascript")
39
+ FileUtils.copy_entry("#{stubs_path}/inertia-vue-ts/app/javascript", "#{Dir.pwd}/app/javascript")
40
+
41
+ # Tests...
42
+ install_tests
43
+ FileUtils.copy_entry("#{stubs_path}/inertia-common/test/integration", "#{Dir.pwd}/test/integration")
44
+
45
+ # Routes...
46
+ FileUtils.copy_file("#{stubs_path}/default/config/routes.rb", "#{Dir.pwd}/config/routes.rb")
47
+
48
+ # Migrations...
49
+ install_migrations
50
+
51
+ # Tailwind / Vite...
52
+ FileUtils.copy_file("#{stubs_path}/default/app/assets/stylesheets/application.css", "#{Dir.pwd}/app/assets/stylesheets/application.css")
53
+ FileUtils.copy_file("#{stubs_path}/default/app/assets/stylesheets/application.tailwind.css", "#{Dir.pwd}/app/assets/stylesheets/application.tailwind.css")
54
+ FileUtils.copy_file("#{stubs_path}/inertia-vue-ts/config/tailwind.config.js", "#{Dir.pwd}/config/tailwind.config.js")
55
+ FileUtils.copy_file("#{stubs_path}/inertia-common/config/vite.json", "#{Dir.pwd}/config/vite.json")
56
+ FileUtils.copy_file("#{stubs_path}/inertia-vue-ts/tsconfig.json", "#{Dir.pwd}/tsconfig.json")
57
+ FileUtils.copy_file("#{stubs_path}/inertia-vue-ts/vite.config.ts", "#{Dir.pwd}/vite.config.ts")
58
+ FileUtils.copy_file("#{stubs_path}/default/bin/dev", "#{Dir.pwd}/bin/dev")
59
+ FileUtils.copy_file("#{stubs_path}/inertia-common/bin/vite", "#{Dir.pwd}/bin/vite")
60
+ FileUtils.copy_file("#{stubs_path}/default/Procfile.dev", "#{Dir.pwd}/Procfile.dev")
61
+ File.write("#{Dir.pwd}/Procfile.dev", "#{File.read("#{Dir.pwd}/Procfile.dev")}\nvite: bin/vite dev\n")
62
+ run_command("#{Dir.pwd}/bin/rails generate js_routes:middleware")
63
+ run_command("#{Dir.pwd}/bin/rails tailwindcss:build")
64
+
65
+ say ''
66
+ say 'Installing and building Node dependencies.', :magenta
67
+
68
+ if File.exist?("#{Dir.pwd}/pnpm-lock.yaml")
69
+ run_commands([ 'pnpm install', 'pnpm run build' ])
70
+ elsif File.exist?("#{Dir.pwd}/yarn.lock")
71
+ run_commands([ 'yarn install', 'yarn build' ])
72
+ elsif File.exist?("#{Dir.pwd}/bun.lockb")
73
+ run_commands([ 'bun install', 'bun run build' ])
74
+ else
75
+ run_commands([ 'npm install', 'npm run build' ])
76
+ end
77
+
78
+ say ''
79
+ say 'Kaze scaffolding installed successfully.', :green
80
+ end
81
+ end
@@ -0,0 +1,13 @@
1
+ class Kaze::Commands::App::StackFactory
2
+ def self.make(stack)
3
+ available_stacks = {
4
+ hotwire: 'hotwire',
5
+ react: 'inertia_react',
6
+ vue: 'inertia_vue'
7
+ }
8
+
9
+ raise Kaze::Commands::InvalidStackError, "Invalid stack. Supported stacks are #{available_stacks.keys.map { |k| "[#{k}]" }.join(', ')}." unless available_stacks.key?(stack)
10
+
11
+ Object.const_get("Kaze::Commands::App::#{available_stacks[stack].split(/_/).map(&:capitalize).join}Stack").new
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ require 'thor'
2
+
3
+ THOR = Thor.new
4
+
5
+ class Kaze::Commands::App < Thor
6
+ def self.exit_on_failure?() true end
7
+
8
+ desc 'install [STACK]', 'Install the Kaze controllers and resources. Supported stacks: hotwire, react, vue.'
9
+ def install(stack = 'hotwire')
10
+ return say 'Kaze must be run in a new Rails application.', :red unless File.exist?("#{Dir.pwd}/bin/rails")
11
+
12
+ StackFactory.make(stack.to_sym).install
13
+ rescue => e
14
+ say e.message, :red
15
+ end
16
+
17
+ desc 'version', 'Show Kaze version'
18
+ def version
19
+ puts Kaze::VERSION
20
+ end
21
+ end
data/lib/kaze/commands.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  module Kaze::Commands
2
+ class InvalidStackError < StandardError; end
2
3
  end
data/lib/kaze/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kaze
2
- VERSION = '0.12.0'
2
+ VERSION = '0.14.0'
3
3
  end
@@ -29,6 +29,6 @@
29
29
  <p>Regards,<br>
30
30
  <%= ENV.fetch("APP_NAME", "Rails") %></p>
31
31
  <!-- Subcopy -->
32
- <% content_for :subcopy do %>
32
+ <% content_for(:subcopy) do %>
33
33
  <p>If you're having trouble clicking the "Reset Password" button, copy and paste the URL below into your web browser: <span class="break-all"><%= link_to @reset_url, @reset_url %><span></p>
34
34
  <% end %>
@@ -28,6 +28,6 @@
28
28
  <p>Regards,<br>
29
29
  <%= ENV.fetch("APP_NAME", "Rails") %></p>
30
30
  <!-- Subcopy -->
31
- <% content_for :subcopy do %>
31
+ <% content_for(:subcopy) do %>
32
32
  <p>If you're having trouble clicking the "Verify Email Address" button, copy and paste the URL below into your web browser: <span class="break-all"><%= link_to @verification_url, @verification_url %><span></p>
33
33
  <% end %>
@@ -57,7 +57,6 @@ class ProfileTest < ActionDispatch::IntegrationTest
57
57
  password: 'wrong-password'
58
58
  }
59
59
 
60
- assert_response :unprocessable_entity
61
60
  assert_not_nil user.reload
62
61
  end
63
62
  end
@@ -16,13 +16,13 @@ class ProfileController < ApplicationController
16
16
 
17
17
  @update_profile_information_form.update
18
18
 
19
- redirect_to profile_edit_path, flash: { status: 'profile-updated' }
19
+ redirect_back_or_to profile_edit_path, flash: { status: 'profile-updated' }
20
20
  end
21
21
 
22
22
  def destroy
23
23
  @delete_user_form = DeleteUserForm.new(params.permit(:password))
24
24
 
25
- return render turbo_stream: turbo_stream.replace('confirm_user_deletion_modal', partial: 'profile/partials/confirm_user_deletion_modal'), status: :unprocessable_entity if @delete_user_form.invalid?
25
+ return turbo_stream if @delete_user_form.invalid?
26
26
 
27
27
  user = Current.auth.user
28
28
 
@@ -0,0 +1,3 @@
1
+ <%= turbo_stream.replace 'confirm_user_deletion_modal' do %>
2
+ <%= render 'profile/partials/confirm_user_deletion_modal' %>
3
+ <% end %>
@@ -10,5 +10,5 @@
10
10
  <%= render(DangerButtonComponent.new({"x-data": "", "x-on:click.prevent": "$dispatch('open-modal', 'confirm-user-deletion')"})) do %>
11
11
  Delete Account
12
12
  <% end %>
13
- <%= render 'profile/partials/confirm_user_deletion_modal' %>
14
13
  </section>
14
+ <%= render 'profile/partials/confirm_user_deletion_modal' %>
@@ -1,4 +1,4 @@
1
- <turbo-frame id="update_password_form">
1
+ <%= turbo_frame_tag 'update_password_form' do %>
2
2
  <section>
3
3
  <header>
4
4
  <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
@@ -42,4 +42,4 @@
42
42
  </div>
43
43
  <% end %>
44
44
  </section>
45
- </turbo-frame>
45
+ <% end %>
@@ -1,4 +1,4 @@
1
- <turbo-frame id="update_profile_information_form">
1
+ <%= turbo_frame_tag 'update_profile_information_form' do %>
2
2
  <section>
3
3
  <header>
4
4
  <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
@@ -54,4 +54,4 @@
54
54
  </div>
55
55
  <% end %>
56
56
  </section>
57
- </turbo-frame>
57
+ <% end %>
@@ -1,4 +1,4 @@
1
- import { useState, createContext, useContext, Fragment, PropsWithChildren, Dispatch, SetStateAction } from 'react'
1
+ import { useState, createContext, useContext, PropsWithChildren, Dispatch, SetStateAction } from 'react'
2
2
  import { Link, InertiaLinkProps } from '@inertiajs/react'
3
3
  import { Transition } from '@headlessui/react'
4
4
 
@@ -43,11 +43,7 @@ const Content = ({
43
43
  width = '48',
44
44
  contentClasses = 'py-1 bg-white dark:bg-gray-700',
45
45
  children,
46
- }: PropsWithChildren<{
47
- align?: 'left' | 'right'
48
- width?: '48'
49
- contentClasses?: string
50
- }>) => {
46
+ }: PropsWithChildren<{ align?: 'left' | 'right'; width?: '48'; contentClasses?: string }>) => {
51
47
  const { open, setOpen } = useContext(DropDownContext)
52
48
 
53
49
  let alignmentClasses = 'origin-top'
@@ -67,7 +63,6 @@ const Content = ({
67
63
  return (
68
64
  <>
69
65
  <Transition
70
- as={Fragment}
71
66
  show={open}
72
67
  enter="transition ease-out duration-200"
73
68
  enterFrom="opacity-0 scale-95"
@@ -1,5 +1,5 @@
1
- import { Fragment, PropsWithChildren } from 'react'
2
- import { Dialog, Transition } from '@headlessui/react'
1
+ import { PropsWithChildren } from 'react'
2
+ import { Dialog, DialogPanel, Transition, TransitionChild } from '@headlessui/react'
3
3
 
4
4
  export default function Modal({
5
5
  children,
@@ -28,15 +28,14 @@ export default function Modal({
28
28
  }[maxWidth]
29
29
 
30
30
  return (
31
- <Transition show={show} as={Fragment} leave="duration-200">
31
+ <Transition show={show} leave="duration-200">
32
32
  <Dialog
33
33
  as="div"
34
34
  id="modal"
35
35
  className="fixed inset-0 flex overflow-y-auto px-4 py-6 sm:px-0 items-center z-50 transform transition-all"
36
36
  onClose={close}
37
37
  >
38
- <Transition.Child
39
- as={Fragment}
38
+ <TransitionChild
40
39
  enter="ease-out duration-300"
41
40
  enterFrom="opacity-0"
42
41
  enterTo="opacity-100"
@@ -45,10 +44,9 @@ export default function Modal({
45
44
  leaveTo="opacity-0"
46
45
  >
47
46
  <div className="absolute inset-0 bg-gray-500/75 dark:bg-gray-900/75" />
48
- </Transition.Child>
47
+ </TransitionChild>
49
48
 
50
- <Transition.Child
51
- as={Fragment}
49
+ <TransitionChild
52
50
  enter="ease-out duration-300"
53
51
  enterFrom="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
54
52
  enterTo="opacity-100 translate-y-0 sm:scale-100"
@@ -56,12 +54,12 @@ export default function Modal({
56
54
  leaveFrom="opacity-100 translate-y-0 sm:scale-100"
57
55
  leaveTo="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
58
56
  >
59
- <Dialog.Panel
57
+ <DialogPanel
60
58
  className={`mb-6 bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-xl transform transition-all sm:w-full sm:mx-auto ${maxWidthClass}`}
61
59
  >
62
60
  {children}
63
- </Dialog.Panel>
64
- </Transition.Child>
61
+ </DialogPanel>
62
+ </TransitionChild>
65
63
  </Dialog>
66
64
  </Transition>
67
65
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaze
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cuong Giang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-28 00:00:00.000000000 Z
11
+ date: 2024-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -65,10 +65,12 @@ files:
65
65
  - bin/kaze
66
66
  - lib/kaze.rb
67
67
  - lib/kaze/commands.rb
68
- - lib/kaze/commands/install_command.rb
69
- - lib/kaze/commands/installs_hotwire_stack.rb
70
- - lib/kaze/commands/installs_inertia_stacks.rb
71
- - lib/kaze/commands/version_command.rb
68
+ - lib/kaze/commands/app.rb
69
+ - lib/kaze/commands/app/base_stack.rb
70
+ - lib/kaze/commands/app/hotwire_stack.rb
71
+ - lib/kaze/commands/app/inertia_react_stack.rb
72
+ - lib/kaze/commands/app/inertia_vue_stack.rb
73
+ - lib/kaze/commands/app/stack_factory.rb
72
74
  - lib/kaze/version.rb
73
75
  - stubs/default/Procfile.dev
74
76
  - stubs/default/app/assets/stylesheets/application.css
@@ -150,6 +152,7 @@ files:
150
152
  - stubs/hotwire/app/views/layouts/_navigation.html.erb
151
153
  - stubs/hotwire/app/views/layouts/application.html.erb
152
154
  - stubs/hotwire/app/views/layouts/guest.html.erb
155
+ - stubs/hotwire/app/views/profile/destroy.turbo_stream.erb
153
156
  - stubs/hotwire/app/views/profile/edit.html.erb
154
157
  - stubs/hotwire/app/views/profile/partials/_confirm_user_deletion_modal.html.erb
155
158
  - stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb
@@ -269,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
269
272
  - !ruby/object:Gem::Version
270
273
  version: '0'
271
274
  requirements: []
272
- rubygems_version: 3.5.9
275
+ rubygems_version: 3.5.14
273
276
  signing_key:
274
277
  specification_version: 4
275
278
  summary: Opinionated minimal Rails authentication scaffolding with Hotwire, React,
@@ -1,65 +0,0 @@
1
- module Kaze::Commands::InstallsHotwireStack
2
- private
3
-
4
- def install_hotwire_stack
5
- # Gems...
6
- return unless remove_gems([ 'sprockets-rails', 'stimulus-rails' ])
7
- return unless install_gems([ 'propshaft', 'view_component', 'tailwindcss-rails', 'turbo-rails', 'dotenv', 'bcrypt' ])
8
- return unless install_gems([ 'hotwire-livereload' ], 'development')
9
- return unless install_gems([ 'factory_bot_rails', 'faker' ], 'development, test')
10
-
11
- # Controllers...
12
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/hotwire/app/controllers", "#{Dir.pwd}/app/controllers")
13
-
14
- # Models...
15
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/models", "#{Dir.pwd}/app/models")
16
-
17
- # Forms...
18
- ensure_directory_exists("#{Dir.pwd}/app/forms")
19
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/forms", "#{Dir.pwd}/app/forms")
20
-
21
- # Validators...
22
- ensure_directory_exists("#{Dir.pwd}/app/validators")
23
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/validators", "#{Dir.pwd}/app/validators")
24
-
25
- # Mailers...
26
- ensure_directory_exists("#{Dir.pwd}/app/mailers")
27
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/mailers", "#{Dir.pwd}/app/mailers")
28
-
29
- # Views...
30
- ensure_directory_exists("#{Dir.pwd}/app/views/layouts")
31
- ensure_directory_exists("#{Dir.pwd}/app/views/user_mailer")
32
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/hotwire/app/views", "#{Dir.pwd}/app/views")
33
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/layouts/mailer.html.erb", "#{Dir.pwd}/app/views/layouts/mailer.html.erb")
34
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/layouts/mailer.text.erb", "#{Dir.pwd}/app/views/layouts/mailer.text.erb")
35
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/user_mailer", "#{Dir.pwd}/app/views/user_mailer")
36
-
37
- # Components + Pages...
38
- ensure_directory_exists("#{Dir.pwd}/app/components")
39
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/hotwire/app/components", "#{Dir.pwd}/app/components")
40
- ensure_directory_exists("#{Dir.pwd}/app/javascript")
41
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/hotwire/app/javascript/application.js", "#{Dir.pwd}/app/javascript/application.js")
42
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/hotwire/app/javascript/alpinejs.stub", "#{Dir.pwd}/app/javascript/alpinejs.js")
43
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/hotwire/config/importmap.rb", "#{Dir.pwd}/config/importmap.rb")
44
-
45
- # Tests...
46
- install_tests
47
-
48
- # Routes...
49
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/config/routes.rb", "#{Dir.pwd}/config/routes.rb")
50
-
51
- # Migrations...
52
- install_migrations
53
-
54
- # Tailwind...
55
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/assets/stylesheets/application.css", "#{Dir.pwd}/app/assets/stylesheets/application.css")
56
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/assets/stylesheets/application.tailwind.css", "#{Dir.pwd}/app/assets/stylesheets/application.tailwind.css")
57
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/hotwire/config/tailwind.config.js", "#{Dir.pwd}/config/tailwind.config.js")
58
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/bin/dev", "#{Dir.pwd}/bin/dev")
59
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/Procfile.dev", "#{Dir.pwd}/Procfile.dev")
60
- run_command("#{Dir.pwd}/bin/rails tailwindcss:build")
61
-
62
- say ''
63
- say 'Kaze scaffolding installed successfully.', :green
64
- end
65
- end
@@ -1,163 +0,0 @@
1
- module Kaze::Commands::InstallsInertiaStacks
2
- private
3
-
4
- def install_inertia_react_stack
5
- # Gems...
6
- return unless remove_gems([ 'sprockets-rails', 'turbo-rails', 'stimulus-rails' ])
7
- return unless install_gems([ 'propshaft', 'tailwindcss-rails', 'inertia_rails', 'vite_rails', 'dotenv', 'bcrypt', 'js-routes' ])
8
- return unless install_gems([ 'factory_bot_rails', 'faker' ], 'development, test')
9
-
10
- # NPM Packages...
11
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-react-ts/package.json", "#{Dir.pwd}/package.json")
12
-
13
- # Controllers...
14
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/app/controllers", "#{Dir.pwd}/app/controllers")
15
-
16
- # Models...
17
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/models", "#{Dir.pwd}/app/models")
18
-
19
- # Forms...
20
- ensure_directory_exists("#{Dir.pwd}/app/forms")
21
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/forms", "#{Dir.pwd}/app/forms")
22
-
23
- # Validators...
24
- ensure_directory_exists("#{Dir.pwd}/app/validators")
25
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/validators", "#{Dir.pwd}/app/validators")
26
-
27
- # Mailers...
28
- ensure_directory_exists("#{Dir.pwd}/app/mailers")
29
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/mailers", "#{Dir.pwd}/app/mailers")
30
-
31
- # Views...
32
- ensure_directory_exists("#{Dir.pwd}/app/views/layouts")
33
- ensure_directory_exists("#{Dir.pwd}/app/views/user_mailer")
34
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-react-ts/app/views/layouts/application.html.erb", "#{Dir.pwd}/app/views/layouts/application.html.erb")
35
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/layouts/mailer.html.erb", "#{Dir.pwd}/app/views/layouts/mailer.html.erb")
36
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/layouts/mailer.text.erb", "#{Dir.pwd}/app/views/layouts/mailer.text.erb")
37
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/user_mailer", "#{Dir.pwd}/app/views/user_mailer")
38
-
39
- # Components + Pages...
40
- ensure_directory_exists("#{Dir.pwd}/app/javascript")
41
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/inertia-react-ts/app/javascript", "#{Dir.pwd}/app/javascript")
42
-
43
- # Tests...
44
- install_tests
45
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/test/integration", "#{Dir.pwd}/test/integration")
46
-
47
- # Routes...
48
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/config/routes.rb", "#{Dir.pwd}/config/routes.rb")
49
-
50
- # Migrations...
51
- install_migrations
52
-
53
- # Tailwind / Vite...
54
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/assets/stylesheets/application.css", "#{Dir.pwd}/app/assets/stylesheets/application.css")
55
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/assets/stylesheets/application.tailwind.css", "#{Dir.pwd}/app/assets/stylesheets/application.tailwind.css")
56
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-react-ts/config/tailwind.config.js", "#{Dir.pwd}/config/tailwind.config.js")
57
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/config/vite.json", "#{Dir.pwd}/config/vite.json")
58
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-react-ts/tsconfig.json", "#{Dir.pwd}/tsconfig.json")
59
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-react-ts/vite.config.ts", "#{Dir.pwd}/vite.config.ts")
60
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/bin/dev", "#{Dir.pwd}/bin/dev")
61
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/bin/vite", "#{Dir.pwd}/bin/vite")
62
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/Procfile.dev", "#{Dir.pwd}/Procfile.dev")
63
- File.write("#{Dir.pwd}/Procfile.dev", "#{File.read("#{Dir.pwd}/Procfile.dev")}\nvite: bin/vite dev\n")
64
- run_command("#{Dir.pwd}/bin/rails generate js_routes:middleware")
65
- run_command("#{Dir.pwd}/bin/rails tailwindcss:build")
66
-
67
- say ''
68
- say 'Installing and building Node dependencies.', :magenta
69
-
70
- if File.exist?("#{Dir.pwd}/pnpm-lock.yaml")
71
- run_commands([ 'pnpm install', 'pnpm run build' ])
72
- elsif File.exist?("#{Dir.pwd}/yarn.lock")
73
- run_commands([ 'yarn install', 'yarn build' ])
74
- elsif File.exist?("#{Dir.pwd}/bun.lockb")
75
- run_commands([ 'bun install', 'bun run build' ])
76
- else
77
- run_commands([ 'npm install', 'npm run build' ])
78
- end
79
-
80
- say ''
81
- say 'Kaze scaffolding installed successfully.', :green
82
- end
83
-
84
- def install_inertia_vue_stack
85
- # Gems...
86
- return unless remove_gems([ 'sprockets-rails', 'turbo-rails', 'stimulus-rails' ])
87
- return unless install_gems([ 'propshaft', 'tailwindcss-rails', 'inertia_rails', 'vite_rails', 'dotenv', 'bcrypt', 'js-routes' ])
88
- return unless install_gems([ 'factory_bot_rails', 'faker' ], 'development, test')
89
-
90
- # NPM Packages...
91
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-vue-ts/package.json", "#{Dir.pwd}/package.json")
92
-
93
- # Controllers...
94
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/app/controllers", "#{Dir.pwd}/app/controllers")
95
-
96
- # Models...
97
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/models", "#{Dir.pwd}/app/models")
98
-
99
- # Forms...
100
- ensure_directory_exists("#{Dir.pwd}/app/forms")
101
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/forms", "#{Dir.pwd}/app/forms")
102
-
103
- # Validators...
104
- ensure_directory_exists("#{Dir.pwd}/app/validators")
105
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/validators", "#{Dir.pwd}/app/validators")
106
-
107
- # Views...
108
- ensure_directory_exists("#{Dir.pwd}/app/views/layouts")
109
- ensure_directory_exists("#{Dir.pwd}/app/views/user_mailer")
110
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-vue-ts/app/views/layouts/application.html.erb", "#{Dir.pwd}/app/views/layouts/application.html.erb")
111
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/layouts/mailer.html.erb", "#{Dir.pwd}/app/views/layouts/mailer.html.erb")
112
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/layouts/mailer.text.erb", "#{Dir.pwd}/app/views/layouts/mailer.text.erb")
113
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/views/user_mailer/reset_password.html.erb", "#{Dir.pwd}/app/views/user_mailer/reset_password.html.erb")
114
-
115
- # Mailers...
116
- ensure_directory_exists("#{Dir.pwd}/app/mailers")
117
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/default/app/mailers", "#{Dir.pwd}/app/mailers")
118
-
119
- # Components + Pages...
120
- ensure_directory_exists("#{Dir.pwd}/app/javascript")
121
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/inertia-vue-ts/app/javascript", "#{Dir.pwd}/app/javascript")
122
-
123
- # Tests...
124
- install_tests
125
- FileUtils.copy_entry("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/test/integration", "#{Dir.pwd}/test/integration")
126
-
127
- # Routes...
128
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/config/routes.rb", "#{Dir.pwd}/config/routes.rb")
129
-
130
- # Migrations...
131
- install_migrations
132
-
133
- # Tailwind / Vite...
134
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/assets/stylesheets/application.css", "#{Dir.pwd}/app/assets/stylesheets/application.css")
135
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/app/assets/stylesheets/application.tailwind.css", "#{Dir.pwd}/app/assets/stylesheets/application.tailwind.css")
136
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-vue-ts/config/tailwind.config.js", "#{Dir.pwd}/config/tailwind.config.js")
137
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/config/vite.json", "#{Dir.pwd}/config/vite.json")
138
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-vue-ts/tsconfig.json", "#{Dir.pwd}/tsconfig.json")
139
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-vue-ts/vite.config.ts", "#{Dir.pwd}/vite.config.ts")
140
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/bin/dev", "#{Dir.pwd}/bin/dev")
141
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/inertia-common/bin/vite", "#{Dir.pwd}/bin/vite")
142
- FileUtils.copy_file("#{File.dirname(__FILE__)}/../../../stubs/default/Procfile.dev", "#{Dir.pwd}/Procfile.dev")
143
- File.write("#{Dir.pwd}/Procfile.dev", "#{File.read("#{Dir.pwd}/Procfile.dev")}\nvite: bin/vite dev\n")
144
- run_command("#{Dir.pwd}/bin/rails generate js_routes:middleware")
145
- run_command("#{Dir.pwd}/bin/rails tailwindcss:build")
146
-
147
- say ''
148
- say 'Installing and building Node dependencies.', :magenta
149
-
150
- if File.exist?("#{Dir.pwd}/pnpm-lock.yaml")
151
- run_commands([ 'pnpm install', 'pnpm run build' ])
152
- elsif File.exist?("#{Dir.pwd}/yarn.lock")
153
- run_commands([ 'yarn install', 'yarn build' ])
154
- elsif File.exist?("#{Dir.pwd}/bun.lockb")
155
- run_commands([ 'bun install', 'bun run build' ])
156
- else
157
- run_commands([ 'npm install', 'npm run build' ])
158
- end
159
-
160
- say ''
161
- say 'Kaze scaffolding installed successfully.', :green
162
- end
163
- end
@@ -1,6 +0,0 @@
1
- class Kaze::Commands::VersionCommand < Thor
2
- desc 'version', 'Show Kaze version'
3
- def version
4
- puts Kaze::VERSION
5
- end
6
- end