next_rails_scaffold 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 35a1af872af2ffdab09af7df8cf1e5f337554642acd6e9325b9cf112ac4ff76c
4
- data.tar.gz: 811159cc9f59924938ebeacfab6ce6ab39fd225c563f5f75babaf2d64ee0b418
3
+ metadata.gz: 7cfc0dd5220ecc60e9781e9844d08a3636b858e013572d66bbc8097b4928fa26
4
+ data.tar.gz: b93eb19cd0e4d9ea2effa6cef7ff11fd5a4d4f792d5925ccb2baaad9eee5f5d4
5
5
  SHA512:
6
- metadata.gz: 8904f7044947b2f53e55f71f37d7f47afe51b887f46fff09efb2b62e999aa5361d2f931c7601e27a35f5d4d3b51cf185cc0e63542e77b84665cfafd5d5d82d27
7
- data.tar.gz: 1202d6c99bc7bc359796e76d1367379b08f6e458f179ae43bf6238cdb8f486560ce0fa6c78b173ec4ca2c1d2b5fc830cda475a5232172b7b02e07a2ace8feb6f
6
+ metadata.gz: 79bc08d233802b69d1a1b6745dc561d95c8c8e1c1f138eadf4116840ee11d95e55b3c03447e843740eb05ea88298a94e3141e152b184330d142a9afa5b2839fd
7
+ data.tar.gz: 3f6245dd4badbfced192b0474541a27f14de49435fa43ed137afc2b0bb17542cc41d8d054396ba21614bcf211fcb37db980c37f710b60035029fe5e37cb41aa5
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
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
5
7
  end
6
8
 
7
9
  module Rails
@@ -29,18 +31,9 @@ module Rails
29
31
  def initialize(args, *options) # :nodoc:
30
32
  super
31
33
 
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
42
35
 
43
- self.selected_package_manager = PACKAGE_MANAGERS[package_manager]
36
+ self.attributes = shell.base.attributes
44
37
  end
45
38
 
46
39
  # Properly nests namespaces passed into a generator
@@ -67,19 +60,20 @@ module Rails
67
60
  def create_frontend_project
68
61
  return say_status :remove, "skip frontend folder", :yellow if shell.base.behavior == :revoke
69
62
 
70
- check_node!
71
63
  append_gitignore!
72
64
 
73
65
  empty_directory "frontend"
74
66
 
75
67
  inside("frontend") do
68
+ check_node!
69
+ check_pm_version!
76
70
  create_next_app!
77
71
  install_hygen!
78
72
 
79
73
  language = File.exist?("tsconfig.json") ? "typescript" : "javascript"
80
74
 
81
75
  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)")
83
77
  run("#{selected_package_manager.run} build")
84
78
  end
85
79
  end
@@ -98,6 +92,30 @@ module Rails
98
92
  end
99
93
  end
100
94
 
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
+
101
119
  def append_gitignore!
102
120
  rows = <<~HEREDOC
103
121
 
@@ -115,6 +133,11 @@ module Rails
115
133
  "#{selected_package_manager.fetch} create-next-app@#{NEXT_VERSION} . " \
116
134
  "--no-app --src-dir --import-alias \"@/*\""
117
135
  )
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
118
141
  end
119
142
 
120
143
  def install_hygen!
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NextRailsScaffold
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: next_rails_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raphael Araújo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-02-02 00:00:00.000000000 Z
11
+ date: 2025-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 7.1.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: tty-prompt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.23.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.23.1
27
41
  description: |
28
42
  The `next_rails_scaffold` gem is a powerful extension to the standard Ruby on Rails scaffold generator. It streamlines the development workflow by not only creating the backend structure with Rails but also automating the setup of a frontend directory using Next.js. Upon running the scaffold generator, this gem intelligently generates a Next.js application within the specified frontend directory.
29
43