no_fly_list 0.7.3 → 0.7.4

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: 5faaa3eaa7a8bc8f8186f8ee0dd10971f0c187963a4b9ef93cf2ef00963bedc0
4
- data.tar.gz: 575274c475a0a13b4b94194f904aeec4e4d6d7795cd36db6b12ad6eff28a64f3
3
+ metadata.gz: 7a4d0bb308f36212383e565010061a086173ddbd9105fad575193d7abca8ffa5
4
+ data.tar.gz: 92772d14d0351c3a7a0d1e631d81590fb0a87e49460773cd68e78368ef55906b
5
5
  SHA512:
6
- metadata.gz: a98397336ebfc91db71338a108df13b48af0fdc1287c2c3e9ce98569394fc05cfe8b4450d1ef2272c15b7a077966b21671c6817c4aa2ae55972f4683545f5032
7
- data.tar.gz: 1cb1ec3ffcfb380fd616dabf5e5551e5ec5c5f52f24ab966aa68542c6f60f4770b293bdba8ee5841583e93b7a9d8a20a7ef25a02627473382ad2c84baaa9f88c
6
+ metadata.gz: 793849ef8f48b2ced0c5547187fa02cc704b05bb6ebad05b65c2d7e21780ab6b2efa6349a97ef74af310ef49afa28c79506ee431f45b74613bc9038482ebf970
7
+ data.tar.gz: 963dd7b6d64a7b159bc4085a6ea80f3641730a108dc820a91bb9201b8e636ac5705e07f4a561a6fa1089d377866ef9fbf0c55d2018796f1bd8a9750573584c85
@@ -82,8 +82,6 @@ module NoFlyList
82
82
 
83
83
  # Creates a new tagging class with appropriate configuration
84
84
  def create_tagging_class(setup, base_class)
85
- setup.context.to_s.singularize
86
-
87
85
  Class.new(base_class) do
88
86
  self.table_name = "#{setup.taggable_klass.table_name.singularize}_taggings"
89
87
 
@@ -173,21 +171,26 @@ module NoFlyList
173
171
  end
174
172
 
175
173
  # Set up tagging class associations
176
- setup.tagging_class_name.constantize.class_eval do
177
- belongs_to :tag,
178
- class_name: setup.tag_class_name,
179
- foreign_key: "tag_id"
180
-
181
- # For local tags, we use a simple belongs_to without polymorphic
182
- belongs_to :taggable,
183
- class_name: setup.taggable_klass.name,
184
- foreign_key: "taggable_id"
185
-
186
- validates :tag, :taggable, :context, presence: true
187
- validates :tag_id, uniqueness: {
188
- scope: %i[taggable_id context],
189
- message: "has already been tagged on this record in this context"
190
- }
174
+ # Guard belongs_to to prevent STI subclasses from overwriting
175
+ # the base class association on a shared tagging class
176
+ tagging_klass = setup.tagging_class_name.constantize
177
+ existing_taggable = tagging_klass.reflect_on_association(:taggable)
178
+ if existing_taggable.nil? || existing_taggable.class_name == setup.taggable_klass.name
179
+ tagging_klass.class_eval do
180
+ belongs_to :tag,
181
+ class_name: setup.tag_class_name,
182
+ foreign_key: "tag_id"
183
+
184
+ belongs_to :taggable,
185
+ class_name: setup.taggable_klass.name,
186
+ foreign_key: "taggable_id"
187
+
188
+ validates :tag, :taggable, :context, presence: true
189
+ validates :tag_id, uniqueness: {
190
+ scope: %i[taggable_id context],
191
+ message: "has already been tagged on this record in this context"
192
+ }
193
+ end
191
194
  end
192
195
  end
193
196
 
@@ -238,11 +241,7 @@ module NoFlyList
238
241
  # Define helper methods module for this context
239
242
  helper_module = Module.new do
240
243
  define_method :create_and_set_proxy do |instance_variable_name, setup|
241
- tag_model = if setup.polymorphic
242
- setup.tag_class_name.constantize
243
- else
244
- self.class.const_get("#{self.class.name}Tag")
245
- end
244
+ tag_model = setup.tag_class_name.constantize
246
245
 
247
246
  proxy = TaggingProxy.new(
248
247
  self,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NoFlyList
4
- VERSION = "0.7.3"
4
+ VERSION = "0.7.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: no_fly_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih