Skip to content

Commit 47884ee

Browse files
committed
Add tty-prompt dependency and update version to 0.4.1
1 parent c11e605 commit 47884ee

File tree

5 files changed

+57
-17
lines changed

5 files changed

+57
-17
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ gemspec
88
gem "minitest", "~> 5.0"
99
gem "rake", "~> 13.0"
1010
gem "rubocop", "~> 1.21"
11+
gem "tty-prompt", "~> 0.23.1"

Gemfile.lock

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
PATH
22
remote: .
33
specs:
4-
next_rails_scaffold (0.4.0)
4+
next_rails_scaffold (0.4.1)
55
rails (>= 7.1.2)
6+
tty-prompt (~> 0.23.1)
67

78
GEM
89
remote: https://rubygems.org/
@@ -132,6 +133,8 @@ GEM
132133
parser (3.2.2.4)
133134
ast (~> 2.4.1)
134135
racc
136+
pastel (0.8.0)
137+
tty-color (~> 0.5)
135138
psych (5.1.1.1)
136139
stringio
137140
racc (1.7.3)
@@ -198,13 +201,24 @@ GEM
198201
stringio (3.0.9)
199202
thor (1.3.0)
200203
timeout (0.4.1)
204+
tty-color (0.6.0)
205+
tty-cursor (0.7.1)
206+
tty-prompt (0.23.1)
207+
pastel (~> 0.8)
208+
tty-reader (~> 0.8)
209+
tty-reader (0.9.0)
210+
tty-cursor (~> 0.7)
211+
tty-screen (~> 0.8)
212+
wisper (~> 2.0)
213+
tty-screen (0.8.2)
201214
tzinfo (2.0.6)
202215
concurrent-ruby (~> 1.0)
203216
unicode-display_width (2.5.0)
204217
webrick (1.8.1)
205218
websocket-driver (0.7.6)
206219
websocket-extensions (>= 0.1.0)
207220
websocket-extensions (0.1.5)
221+
wisper (2.0.1)
208222
zeitwerk (2.6.12)
209223

210224
PLATFORMS
@@ -218,6 +232,7 @@ DEPENDENCIES
218232
next_rails_scaffold!
219233
rake (~> 13.0)
220234
rubocop (~> 1.21)
235+
tty-prompt (~> 0.23.1)
221236

222237
BUNDLED WITH
223238
2.4.17

lib/generators/rails/next_rails_scaffold/next_rails_scaffold_generator.rb

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# frozen_string_literal: true
22

3-
PackageManager = Struct.new(:fetch, :run, :add, :lock_file) do
4-
def to_s = fetch
3+
require "tty-prompt"
4+
5+
PackageManager = Struct.new(:fetch, :run, :add, :lock_file, :version) do
6+
def to_s = run.split.first
57
end
68

79
module Rails
@@ -29,18 +31,9 @@ class NextRailsScaffoldGenerator < Rails::Generators::NamedBase
2931
def initialize(args, *options) # :nodoc:
3032
super
3133

32-
self.attributes = shell.base.attributes
33-
34-
package_manager = shell.base.options[:package_manager]
35-
until PACKAGE_MANAGERS.keys.include?(package_manager)
36-
puts "Invalid package manager" unless package_manager.nil?
37-
package_manager = ask(
38-
"Which package manager do you want to use? " \
39-
"(#{PACKAGE_MANAGERS.keys.to_sentence(words_connector: " or ")}): "
40-
)
41-
end
34+
@prompt = TTY::Prompt.new
4235

43-
self.selected_package_manager = PACKAGE_MANAGERS[package_manager]
36+
self.attributes = shell.base.attributes
4437
end
4538

4639
# Properly nests namespaces passed into a generator
@@ -67,19 +60,20 @@ def add_resource_route
6760
def create_frontend_project
6861
return say_status :remove, "skip frontend folder", :yellow if shell.base.behavior == :revoke
6962

70-
check_node!
7163
append_gitignore!
7264

7365
empty_directory "frontend"
7466

7567
inside("frontend") do
68+
check_node!
69+
check_pm_version!
7670
create_next_app!
7771
install_hygen!
7872

7973
language = File.exist?("tsconfig.json") ? "typescript" : "javascript"
8074

8175
run("#{selected_package_manager} hygen scaffold #{language} #{name} #{mapped_attributes.join(" ")}")
82-
if !options[:skip_build] && yes?("Do you want to build your Next.js project? (y/N)")
76+
if !options[:skip_build] && @prompt.no?("Do you want to build your Next.js project? (y/N)")
8377
run("#{selected_package_manager.run} build")
8478
end
8579
end
@@ -98,6 +92,30 @@ def check_node!
9892
end
9993
end
10094

95+
def check_pm_version!
96+
package_manager = shell.base.options[:package_manager]
97+
98+
unless package_manager
99+
PACKAGE_MANAGERS.each do |manager, details|
100+
if File.exist?(details.lock_file)
101+
package_manager = manager
102+
break
103+
end
104+
end
105+
end
106+
107+
until PACKAGE_MANAGERS.keys.include?(package_manager)
108+
puts "Invalid package manager" unless package_manager.nil?
109+
110+
package_manager = @prompt.select("Which package manager do you want to use?", PACKAGE_MANAGERS.keys)
111+
end
112+
113+
self.selected_package_manager = PACKAGE_MANAGERS[package_manager]
114+
115+
selected_package_manager.version = run("#{selected_package_manager} --version", capture: true).gsub(/[^0-9.]/, "")
116+
log :package_manager, "Using #{selected_package_manager} version '#{selected_package_manager.version}'"
117+
end
118+
101119
def append_gitignore!
102120
rows = <<~HEREDOC
103121
@@ -115,6 +133,11 @@ def create_next_app!
115133
"#{selected_package_manager.fetch} create-next-app@#{NEXT_VERSION} . " \
116134
"--no-app --src-dir --import-alias \"@/*\""
117135
)
136+
137+
if selected_package_manager.to_s == "yarn" &&
138+
Gem::Dependency.new("", ">= 2.0").match?("", selected_package_manager.version)
139+
run("yarn config set nodeLinker node-modules")
140+
end
118141
end
119142

120143
def install_hygen!

lib/next_rails_scaffold/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module NextRailsScaffold
4-
VERSION = "0.4.0"
4+
VERSION = "0.4.1"
55
end

next_rails_scaffold.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Gem::Specification.new do |spec|
4949
spec.require_paths = ["lib"]
5050

5151
spec.add_dependency "rails", ">= 7.1.2"
52+
spec.add_dependency "tty-prompt", "~> 0.23.1"
5253

5354
# For more information and examples about making a new gem, check out our
5455
# guide at: https://bundler.io/guides/creating_gem.html

0 commit comments

Comments
 (0)