next_rails_scaffold 0.4.0 → 0.4.2

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: 1d11278bd324e9d9e0578c45bdba6ad9c0593a1b0a840ace0d655bb174e1a896
4
+ data.tar.gz: f63cf1c37de59625a87a1bbb24698840987bdf78ab8d98880cfbdc9321326f9c
5
5
  SHA512:
6
- metadata.gz: 8904f7044947b2f53e55f71f37d7f47afe51b887f46fff09efb2b62e999aa5361d2f931c7601e27a35f5d4d3b51cf185cc0e63542e77b84665cfafd5d5d82d27
7
- data.tar.gz: 1202d6c99bc7bc359796e76d1367379b08f6e458f179ae43bf6238cdb8f486560ce0fa6c78b173ec4ca2c1d2b5fc830cda475a5232172b7b02e07a2ace8feb6f
6
+ metadata.gz: cc2256f5b2240fe34df82adfa383ad54c497de6c63994201d5fe4a4461d89ad85337e349e505ed411d1fab57485f2168f84604bd2a0e9a7df822b6edc6e5305e
7
+ data.tar.gz: '0079fa4d104f63c64e127dcbef1a0062bee283df99885a542a1f5b9b8da1a42d318c3d15a278e9f98ab042a3d460ece8d3dc867cc0fb8fd9eab2025d2ad6a386'
@@ -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?")
83
77
  run("#{selected_package_manager.run} build")
84
78
  end
85
79
  end
@@ -98,10 +92,34 @@ 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
 
104
- # Ingoring node modules for Rails and Next.js projects
122
+ # Ignoring node modules for Rails and Next.js projects
105
123
  node_modules/
106
124
  HEREDOC
107
125
 
@@ -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.2"
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.2
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