next_rails_scaffold 0.4.0 → 0.4.1

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