bullet_train-super_scaffolding 1.8.2 → 1.8.3
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a205bbac5111136b98f7af3d1a87f76a1fbd20449e8c8c2329caeed751df896
|
4
|
+
data.tar.gz: 4707519e317c5b3a605010d528485cd90e44c54566aa201bd35848b0cc6d47ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0cd1a2f64f9e7c96f81b950e44089885446f3988cc1e8552b392785464f2a034010c5117e5c26343d5c275143d49eea10756ae266d6cb043c29c7b237af1f3f
|
7
|
+
data.tar.gz: f7909f319a4ffc2563d5a66cb5ed35c0ee769eb639c671356b34fdd796700ccb34fdfe448aa1b051c6b01f6d1682f450bc18b2ba933e658c96b083d9fd20c479
|
@@ -158,6 +158,33 @@ class Scaffolding::RoutesFileManipulator
|
|
158
158
|
namespace_block_start.present? ? {namespace => namespace_block_start} : {}
|
159
159
|
end
|
160
160
|
|
161
|
+
def find_last_in_namespace(needle, namespaces, within = nil, ignore = nil)
|
162
|
+
if namespaces.any?
|
163
|
+
namespace_lines = find_namespaces(namespaces, within)
|
164
|
+
within = namespace_lines[namespaces.last]
|
165
|
+
end
|
166
|
+
|
167
|
+
lines_within = Scaffolding::FileManipulator.lines_within(lines, within)
|
168
|
+
lines_within.reverse.each_with_index do |line, line_number|
|
169
|
+
reversed_line_number = lines_within.count - line_number - 1
|
170
|
+
# + 2 because line_number starts from 0, and within starts one line after
|
171
|
+
actual_line_number = (within + reversed_line_number + 2)
|
172
|
+
|
173
|
+
# The lines we want to ignore may be a a series of blocks, so we check each Range here.
|
174
|
+
ignore_line = false
|
175
|
+
if ignore.present?
|
176
|
+
ignore.each do |lines_to_ignore|
|
177
|
+
ignore_line = true if lines_to_ignore.include?(actual_line_number)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
next if ignore_line
|
182
|
+
return (within + (within ? 1 : 0) + reversed_line_number) if line.match?(needle)
|
183
|
+
end
|
184
|
+
|
185
|
+
nil
|
186
|
+
end
|
187
|
+
|
161
188
|
def find_in_namespace(needle, namespaces, within = nil, ignore = nil)
|
162
189
|
if namespaces.any?
|
163
190
|
namespace_lines = find_namespaces(namespaces, within)
|
@@ -187,15 +214,26 @@ class Scaffolding::RoutesFileManipulator
|
|
187
214
|
within = options[:within]
|
188
215
|
parts = parts.dup
|
189
216
|
resource = parts.pop
|
217
|
+
needle = /resources :#{resource}#{options[:options] ? ", #{options[:options].gsub(/({)(.*)(})/, '{\2}')}" : ""}(,?\s.*)? do(\s.*)?$/
|
218
|
+
|
190
219
|
# TODO this doesn't take into account any options like we do in `find_resource`.
|
191
|
-
|
220
|
+
if options[:find_last]
|
221
|
+
find_last_in_namespace(needle, parts, within)
|
222
|
+
else
|
223
|
+
find_in_namespace(needle, parts, within)
|
224
|
+
end
|
192
225
|
end
|
193
226
|
|
194
227
|
def find_resource(parts, options = {})
|
195
228
|
parts = parts.dup
|
196
229
|
resource = parts.pop
|
197
230
|
needle = /resources :#{resource}#{options[:options] ? ", #{options[:options].gsub(/({)(.*)(})/, '{\2}')}" : ""}(,?\s.*)?$/
|
198
|
-
|
231
|
+
|
232
|
+
if options[:find_last]
|
233
|
+
find_last_in_namespace(needle, parts, options[:within], options[:ignore])
|
234
|
+
else
|
235
|
+
find_in_namespace(needle, parts, options[:within], options[:ignore])
|
236
|
+
end
|
199
237
|
end
|
200
238
|
|
201
239
|
def find_or_create_resource(parts, options = {})
|
@@ -278,17 +316,18 @@ class Scaffolding::RoutesFileManipulator
|
|
278
316
|
end
|
279
317
|
|
280
318
|
def find_or_convert_resource_block(parent_resource, options = {})
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
raise BulletTrain::SuperScaffolding::CannotFindParentResourceException.new("the parent resource (`#{parent_resource}`) doesn't appear to exist in `#{@filename}`.")
|
319
|
+
resource_statement_line = find_resource([parent_resource], options)
|
320
|
+
if resource_statement_line
|
321
|
+
resource_statement = lines[resource_statement_line]
|
322
|
+
if !resource_statement.match?(/ do(\s.*)?$/)
|
323
|
+
lines[resource_statement_line].gsub!("\n", " do\n")
|
324
|
+
insert_after(["end"], resource_statement_line)
|
288
325
|
end
|
326
|
+
else
|
327
|
+
raise BulletTrain::SuperScaffolding::CannotFindParentResourceException.new("the parent resource (`#{parent_resource}`) doesn't appear to exist in `#{@filename}`.")
|
289
328
|
end
|
290
329
|
|
291
|
-
#
|
330
|
+
# capture the line number of the block of code we're working within.
|
292
331
|
unless (within = find_resource_block([parent_resource], options))
|
293
332
|
raise "tried to convert the parent resource to a block, but failed?"
|
294
333
|
end
|
@@ -328,13 +367,18 @@ class Scaffolding::RoutesFileManipulator
|
|
328
367
|
# end
|
329
368
|
# end
|
330
369
|
|
331
|
-
parent_within =
|
370
|
+
parent_within = find_resource([parent_resource], within: within)
|
371
|
+
|
372
|
+
# With deeply nested namespaces we end up with mutliple resource blocks and some things need
|
373
|
+
# to go into the last block. See this issue for details:
|
374
|
+
# https://github.com/bullet-train-co/bullet_train/issues/1655
|
375
|
+
last_parent_within = find_or_convert_resource_block(parent_resource, within: within, find_last: true)
|
332
376
|
|
333
377
|
# add the new resource within that namespace.
|
334
378
|
line = "scope module: '#{parent_resource}' do"
|
335
379
|
# TODO you haven't tested this yet.
|
336
|
-
unless (scope_within = Scaffolding::FileManipulator.find(lines, /#{line}/,
|
337
|
-
scope_within = insert([line, "end"],
|
380
|
+
unless (scope_within = Scaffolding::FileManipulator.find(lines, /#{line}/, last_parent_within))
|
381
|
+
scope_within = insert([line, "end"], last_parent_within)
|
338
382
|
end
|
339
383
|
|
340
384
|
if child_namespaces.size > 1
|
@@ -361,7 +405,9 @@ class Scaffolding::RoutesFileManipulator
|
|
361
405
|
else
|
362
406
|
routing_options = "only: collection_actions"
|
363
407
|
routing_options += ", #{formatted_concerns}" if formatted_concerns
|
364
|
-
|
408
|
+
# We find last here for this reason:
|
409
|
+
# https://github.com/bullet-train-co/bullet_train/issues/1655
|
410
|
+
find_or_create_resource([child_resource], options: routing_options, within: scope_within, find_last: true)
|
365
411
|
|
366
412
|
# namespace :projects do
|
367
413
|
# resources :deliverables, except: collection_actions
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bullet_train-super_scaffolding
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Culver
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: standard
|