avo 2.52.0 → 2.53.0

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: ecf46732c743cb0408230bc9b73ec747d2094603d9ac4673b9a8bcf6e3510247
4
- data.tar.gz: b74e17cfa53122dc69ccc4cf91578132f59ac3b3ef3f912e0991360db1380ecc
3
+ metadata.gz: b7c443e49863a73766cc92d676614d0bfe854f53fa9f72d1ee4913bb736753e0
4
+ data.tar.gz: 76c3b161d5c0d26665ac35dadc6d0429f4f075cb519eadd280427e8ad78608d3
5
5
  SHA512:
6
- metadata.gz: e9e9b5751953ed132817a67240cda51c1aa46c23331fe54715fac61207e60eba5cd1605b650b34eed205818b20fd8ce965757f40ba9b200974aae45a6aaf1660
7
- data.tar.gz: f97d7ef68d013033215daed86e2be33bb116c37ddd9a6113bc8d4eb1954ede77689a20c664ea4e9fe896e726d96e4e2f909f6231bfbb5cfe07bc05e8275a4cd8
6
+ metadata.gz: 309e09c4271214c5bbcbdfd10a9f90617825c19ca93accb7c52db17e38fcce0e5761572f824aee98c5a7059e5e4be575776002df7592c5bd2cd833fc387b5157
7
+ data.tar.gz: 2d905a0da113e8e010fe639d258864a91b1ced97755d5a3ce03448c3921e943235ef3cc56aca88ffcb2396147868e10256dbec3124c7e574e1484c44699ddeb6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- avo (2.52.0)
4
+ avo (2.53.0)
5
5
  actionview (>= 6.0)
6
6
  active_link_to
7
7
  activerecord (>= 6.0)
@@ -41,7 +41,7 @@ class Avo::Fields::BelongsToField::AutocompleteComponent < ViewComponent::Base
41
41
  end
42
42
 
43
43
  def reflection_class
44
- has_polymorphic_association? ? polymorphic_class : @resource.model_class._reflections[@field.id.to_s].klass
44
+ has_polymorphic_association? ? polymorphic_class : @resource.model_class.reflect_on_association(@field.id).klass
45
45
  end
46
46
 
47
47
  private
@@ -36,7 +36,7 @@ class Avo::Fields::HasOneField::ShowComponent < Avo::Fields::ShowComponent
36
36
  end
37
37
 
38
38
  def create_path
39
- association_id = @field.resource.model_class._reflections[@field.id.to_s].inverse_of.name
39
+ association_id = @field.resource.model_class.reflect_on_association(@field.id).inverse_of.name
40
40
 
41
41
  args = {
42
42
  via_relation: association_id,
@@ -77,7 +77,11 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
77
77
  end
78
78
 
79
79
  def is_has_many_association?
80
- @reflection.is_a?(::ActiveRecord::Reflection::HasManyReflection) || @reflection.is_a?(::ActiveRecord::Reflection::ThroughReflection)
80
+ @reflection.class.in? [
81
+ ActiveRecord::Reflection::HasManyReflection,
82
+ ActiveRecord::Reflection::HasAndBelongsToManyReflection,
83
+ ActiveRecord::Reflection::ThroughReflection
84
+ ]
81
85
  end
82
86
 
83
87
  def referrer_path
@@ -62,10 +62,20 @@ class Avo::Views::ResourceIndexComponent < Avo::ResourceComponent
62
62
  end
63
63
 
64
64
  def can_attach?
65
- klass = @reflection
66
- klass = @reflection.through_reflection if klass.is_a? ::ActiveRecord::Reflection::ThroughReflection
65
+ return false if has_reflection_and_is_read_only
67
66
 
68
- @reflection.present? && klass.is_a?(::ActiveRecord::Reflection::HasManyReflection) && !has_reflection_and_is_read_only && authorize_association_for(:attach)
67
+ reflection_class = if @reflection.is_a?(::ActiveRecord::Reflection::ThroughReflection)
68
+ @reflection.through_reflection.class
69
+ else
70
+ @reflection.class
71
+ end
72
+
73
+ return false unless reflection_class.in? [
74
+ ActiveRecord::Reflection::HasManyReflection,
75
+ ActiveRecord::Reflection::HasAndBelongsToManyReflection
76
+ ]
77
+
78
+ authorize_association_for(:attach)
69
79
  end
70
80
 
71
81
  def create_path
@@ -226,7 +226,7 @@ module Avo
226
226
 
227
227
  return field.use_resource if field&.use_resource.present?
228
228
 
229
- reflection = @model._reflections[params[:related_name]]
229
+ reflection = @model.class.reflect_on_association(params[:related_name])
230
230
 
231
231
  reflected_model = reflection.klass
232
232
 
@@ -62,7 +62,7 @@ module Avo
62
62
  def create
63
63
  association_name = BaseResource.valid_association_name(@model, params[:related_name])
64
64
 
65
- if reflection_class == "HasManyReflection"
65
+ if has_many_reflection?
66
66
  @model.send(association_name) << @attachment_model
67
67
  else
68
68
  @model.send("#{association_name}=", @attachment_model)
@@ -80,7 +80,7 @@ module Avo
80
80
  def destroy
81
81
  association_name = BaseResource.valid_association_name(@model, params[:related_name])
82
82
 
83
- if reflection_class == "HasManyReflection"
83
+ if has_many_reflection?
84
84
  @model.send(association_name).delete @attachment_model
85
85
  else
86
86
  @model.send("#{association_name}=", nil)
@@ -101,7 +101,7 @@ module Avo
101
101
  private
102
102
 
103
103
  def set_reflection
104
- @reflection = @model._reflections[params[:related_name].to_s]
104
+ @reflection = @model.class.reflect_on_association(params[:related_name])
105
105
  end
106
106
 
107
107
  def set_attachment_class
@@ -127,12 +127,11 @@ module Avo
127
127
  end
128
128
 
129
129
  def reflection_class
130
- reflection = @model._reflections[params[:related_name]]
131
-
132
- klass = reflection.class.name.demodulize.to_s
133
- klass = reflection.through_reflection.class.name.demodulize.to_s if klass == "ThroughReflection"
134
-
135
- klass
130
+ if @reflection.is_a?(ActiveRecord::Reflection::ThroughReflection)
131
+ @reflection.through_reflection.class
132
+ else
133
+ @reflection.class
134
+ end
136
135
  end
137
136
 
138
137
  def authorize_if_defined(method)
@@ -155,8 +154,6 @@ module Avo
155
154
  authorize_if_defined "detach_#{@field.id}?"
156
155
  end
157
156
 
158
- private
159
-
160
157
  def set_related_authorization
161
158
  @related_authorization = if related_resource
162
159
  related_resource.authorization(user: _current_user)
@@ -164,5 +161,12 @@ module Avo
164
161
  Services::AuthorizationService.new _current_user
165
162
  end
166
163
  end
164
+
165
+ def has_many_reflection?
166
+ reflection_class.in? [
167
+ ActiveRecord::Reflection::HasManyReflection,
168
+ ActiveRecord::Reflection::HasAndBelongsToManyReflection
169
+ ]
170
+ end
167
171
  end
168
172
  end
@@ -134,7 +134,7 @@ module Avo
134
134
 
135
135
  # This means that the record has been created through another parent record and we need to attach it somehow.
136
136
  if params[:via_resource_id].present? && params[:via_belongs_to_resource_class].nil?
137
- @reflection = @model._reflections[params[:via_relation]]
137
+ @reflection = @model.class.reflect_on_association(params[:via_relation])
138
138
  # Figure out what kind of association does the record have with the parent record
139
139
 
140
140
  # Fills in the required infor for belongs_to and has_many
@@ -148,7 +148,7 @@ module Avo
148
148
  end
149
149
 
150
150
  # For when working with has_one, has_one_through, has_many_through, has_and_belongs_to_many, polymorphic
151
- if @reflection.is_a? ActiveRecord::Reflection::ThroughReflection
151
+ if @reflection.is_a?(ActiveRecord::Reflection::ThroughReflection) || @reflection.is_a?(ActiveRecord::Reflection::HasAndBelongsToManyReflection)
152
152
  # find the record
153
153
  via_resource = ::Avo::App.get_resource_by_model_name(params[:via_relation_class]).dup
154
154
  @related_record = via_resource.find_record params[:via_resource_id], params: params
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "2.52.0" unless const_defined?(:VERSION)
2
+ VERSION = "2.53.0" unless const_defined?(:VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.52.0
4
+ version: 2.53.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Marin
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-08-02 00:00:00.000000000 Z
13
+ date: 2024-09-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord