bullet_train-super_scaffolding 1.7.10 → 1.7.11

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: 1cb0c43b459719314294d6a24a43e7054faa3d5e6cb1df3984182dae0a282bef
4
- data.tar.gz: ccaf9c746b32982475c90daadf370fadc1c2633ddf5c31ff81cda454fcf95d23
3
+ metadata.gz: 16465881966c5cc7bfb8056943d036dea6ee5e2284a4000a2f6182c41c1eb22d
4
+ data.tar.gz: aa40db2f84412ec08860dd6387f096c5e53622526ab17700bb66be85e8f0dd6b
5
5
  SHA512:
6
- metadata.gz: a936d0fdf8d8845179cf12682c51d4ad6016ee7d1a8ab1661b3127ad5d75ee67caa9d1007fb793ee68e59e00d2641d6851902f133b483f0b98fccd7e24e24838
7
- data.tar.gz: 7de0542e5f1e40660015e6188e1dd28b7fe35678153516b138f923e76cd60f16f3998914a3bbfc5acf5e197439e8f62afe175704bb270a375199fe9bd31dce80
6
+ metadata.gz: 4c78f397e90c8c4175ab3b5c02fbd841ab8a6f1f6c6f2929bdf4d850f88822ac6ce50f0359b51a88ee2ffde1f2a445b3084d1d23433122fd454e65e361795e43
7
+ data.tar.gz: 033dd98dd593f934b77f39214f35876da85ae9a9716c7e11d4b7ca93e2ba169d5e217e63326551f941a77a69277cf7a8598d140babd2c60d001186791a48f2e6
@@ -28,6 +28,8 @@ module BulletTrain
28
28
  end
29
29
 
30
30
  child = argv[0]
31
+ check_class_name_for_namespace_conflict(child)
32
+
31
33
  parents = argv[1] ? argv[1].split(",") : []
32
34
 
33
35
  # Raise an error if the developer skipped adding the parent and went straight to the attributes.
@@ -30,6 +30,8 @@ module BulletTrain
30
30
  end
31
31
 
32
32
  child = argv[0]
33
+ check_class_name_for_namespace_conflict(child)
34
+
33
35
  primary_parent = argv[1].split("class_name=").last.split(",").first.split("}").first
34
36
  secondary_parent = argv[2].split("class_name=").last.split(",").first.split("}").first
35
37
 
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module SuperScaffolding
3
- VERSION = "1.7.10"
3
+ VERSION = "1.7.11"
4
4
  end
5
5
  end
@@ -51,6 +51,13 @@ class Scaffolding::Attribute
51
51
  options[:required] || is_first_attribute?
52
52
  end
53
53
 
54
+ def association_class_name
55
+ if options[:class_name].present?
56
+ return options[:class_name].underscore.split("/").last
57
+ end
58
+ name.split("_id").first
59
+ end
60
+
54
61
  def is_association?
55
62
  is_belongs_to? || is_has_many?
56
63
  end
@@ -49,6 +49,39 @@ def get_untracked_files
49
49
  `git ls-files --other --exclude-standard`.split("\n")
50
50
  end
51
51
 
52
+ # class_name is a potentially namespaced class like
53
+ # "Tasks::Widget" or "Task::Widget". Here we ensure that
54
+ # the namespace doesn't clobber an existing model. If it does
55
+ # we suggest that the namespace could be pluralized.
56
+ def check_class_name_for_namespace_conflict(class_name)
57
+ if class_name.include?("::")
58
+ parts = class_name.split("::") # ["Task", "Widget"]
59
+ # We drop the last segment because that's tne new model we're trying to create
60
+ parts.pop # ["Task"]
61
+ possible_conflicted_class_name = ""
62
+ parts.each do |part|
63
+ possible_conflicted_class_name += "::#{part}"
64
+ begin
65
+ klass = possible_conflicted_class_name.constantize
66
+ is_active_record_class = klass&.ancestors&.include?(ActiveRecord::Base)
67
+ is_aactive_hash_class = klass&.ancestors&.include?(ActiveHash::Base)
68
+ if klass && (is_active_record_class || is_aactive_hash_class)
69
+ problematic_namespace = possible_conflicted_class_name[2..]
70
+ puts "It looks like the namespace you gave for this model conflicts with an existing class: #{klass.name}".red
71
+ puts "You should use a namespace that doesn't clobber an existing class.".red
72
+ puts ""
73
+ puts "We reccomend using the pluralized version of the existing class.".red
74
+ puts ""
75
+ puts "For instance instead of #{problematic_namespace} use #{problematic_namespace.pluralize}".red
76
+ exit
77
+ end
78
+ rescue NameError
79
+ # this is good actually, it means we don't already have a class that will be clobbered
80
+ end
81
+ end
82
+ end
83
+ end
84
+
52
85
  def check_required_options_for_attributes(scaffolding_type, attributes, child, parent = nil)
53
86
  tableized_parent = nil
54
87
 
@@ -169,7 +202,7 @@ def check_required_options_for_attributes(scaffolding_type, attributes, child, p
169
202
  is_active_record_class = class_name_constant&.ancestors&.include?(ActiveRecord::Base)
170
203
  unless File.exist?(file_name) && is_active_record_class
171
204
  puts ""
172
- puts "Attributes that end with `_id` or `_ids` trigger awesome, powerful magic in Super Scaffolding. However, because no `#{attribute_options[:class_name]}` class was found defined in `#{file_name}`, you'll need to specify a `class_name` that exists to let us know what model class is on the other side of the association, like so:".red
205
+ puts "Attributes that end with `_id` or `_ids` trigger awesome, powerful magic in Super Scaffolding. However, because no `#{attribute_options[:class_name]}` class was found defined in your app, you'll need to specify a `class_name` that exists to let us know what model class is on the other side of the association, like so:".red
173
206
  puts ""
174
207
  puts " bin/super-scaffold #{scaffolding_type} #{child}#{" " + parent if parent.present?} #{name}:#{type}{class_name=#{name.gsub(/_ids?$/, "").classify}}".red
175
208
  puts ""
@@ -758,7 +758,7 @@ class Scaffolding::Transformer
758
758
  end
759
759
 
760
760
  if attribute.is_association?
761
- short = attribute.options[:class_name].underscore.split("/").last
761
+ short = attribute.association_class_name
762
762
  case attribute.type
763
763
  when "buttons", "options"
764
764
  field_attributes["\n options"] = "@tangible_thing.#{valid_values}.map { |#{short}| [#{short}.id, #{short}.#{attribute.options[:label]}] }"
@@ -1362,12 +1362,12 @@ class Scaffolding::Transformer
1362
1362
 
1363
1363
  # update the factory generated by `rails g`.
1364
1364
  content = if transform_string(":absolutely_abstract_creative_concept") == transform_string(":scaffolding_absolutely_abstract_creative_concept")
1365
- transform_string("association :absolutely_abstract_creative_concept")
1365
+ transform_string(" association :absolutely_abstract_creative_concept")
1366
1366
  else
1367
- transform_string("association :absolutely_abstract_creative_concept, factory: :scaffolding_absolutely_abstract_creative_concept")
1367
+ transform_string(" association :absolutely_abstract_creative_concept, factory: :scaffolding_absolutely_abstract_creative_concept")
1368
1368
  end
1369
1369
 
1370
- scaffold_replace_line_in_file("./test/factories/scaffolding/completely_concrete/tangible_things.rb", content, "absolutely_abstract_creative_concept { nil }")
1370
+ scaffold_replace_line_in_file("./test/factories/scaffolding/completely_concrete/tangible_things.rb", content, " absolutely_abstract_creative_concept { nil }")
1371
1371
 
1372
1372
  add_has_many_association
1373
1373
 
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.7.10
4
+ version: 1.7.11
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-05-30 00:00:00.000000000 Z
11
+ date: 2024-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard