rhino_project_core 0.21.0.beta.46 → 0.21.0.beta.49

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: 5523b3587da0f1a5099bb649e0f1243a716a85b27379372ab513c9beb759f3fa
4
- data.tar.gz: be28497ecfe5fec48183bdddab3b5a13f4e4c0d4a3fa0e2c01bc9153509bf31e
3
+ metadata.gz: 6a0a1268174a345a44c60dd808ba573367ca96eb00ff851d924fd802c7374eee
4
+ data.tar.gz: ea08c48496d0a9e162fefcf2b2935abfedd04461a92c5f8cf75e7bc33d80ad2a
5
5
  SHA512:
6
- metadata.gz: f5728dd8cc8a7cd570b01af965bd87365f216910ac66011b40023d1e8a632be9edf4275de5b66ed1d89ea054c741e6ea55b0393fd1f848c3ee2d8fa5933009f3
7
- data.tar.gz: 5a10bba5d890d5f71d8930b34e65de0094130c7b477ffcfc5121877e432103107e45fbf2b360cd4b11bfb1e3741cebe78962b902a7edb47d4ebc554f6890d0cb
6
+ metadata.gz: acc3ec16ca3703b080b3550e14d705c74dc37bc1f8c83f40087c3636b26b754f515c50f02db9f64aeb7264bb3feb019726543085d98f0f126bd98bff105b8c96
7
+ data.tar.gz: 436788e9e25fb8d609b72c6b7c03327708cf87d7d3454f7def601908041a8db4014b9715b7c98d7d803de1e70d79622188687956c4520c9208add8c9dd39c1fe
@@ -23,14 +23,16 @@ module Rhino
23
23
 
24
24
  rescue_from ActiveRecord::RecordNotFound, with: :not_found
25
25
 
26
- def handle_uncaught_error(exception)
26
+ def handle_uncaught_error(e)
27
+ raise e if Rails.env.test?
28
+
27
29
  # Send to rollbar if available
28
- Rollbar.error(exception) if defined? Rollbar
30
+ Rollbar.error(e) if defined? Rollbar
29
31
 
30
- logger.error("Internal server error#{exception.class} #{exception.message} #{exception.backtrace.join("\n")}")
32
+ logger.error "There was an exception - #{e.class}(#{e.message})"
33
+ logger.error e.backtrace.join("\n")
31
34
 
32
- render json: { errors: ['Internal server error.'] },
33
- status: :internal_server_error
35
+ render json: { errors: ['Internal server error.'] }, status: :internal_server_error
34
36
  end
35
37
 
36
38
  def not_found
@@ -154,7 +154,7 @@ module Rhino
154
154
  # rubocop:todo Metrics/CyclomaticComplexity
155
155
  def transform_params_recursive(params, parent = self) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity
156
156
  hash = {}
157
- params.each do |param_key, param_value|
157
+ params.each do |param_key, param_value| # rubocop:todo Metrics/BlockLength
158
158
  association = parent.reflect_on_association(param_key)
159
159
 
160
160
  # Its a regular attribute
@@ -187,19 +187,24 @@ module Rhino
187
187
  # if its a cardinal though, such as blog: 1 instead of blog: {name : 'my blog' }
188
188
  # fallback to transforming to the foreign key
189
189
  if param_value.is_a?(ActionController::Parameters)
190
+ assoc = parent.reflections[param_key]
190
191
  klasses = assoc_from_sym(param_key, parent)
191
192
 
193
+ # We only want to transform the params for the klass that matches the foreign_type
194
+ klasses.select! { |k| k.name == params[assoc.foreign_type] } if assoc.polymorphic?
195
+
192
196
  next hash[attr_key] = klasses.map { |klass| parent.transform_params_recursive(param_value, klass) }.reduce(:merge)
193
197
  end
194
198
  end
195
199
 
196
200
  # Map association name to foreign key, ie blog => blog_id
197
201
  # or blog: { id: } => blog_id
198
- if param_value.is_a?(ActionController::Parameters)
202
+ if param_value.is_a?(ActionController::Parameters) && !association.has_one?
199
203
  next hash[association.foreign_key] = param_value[association.klass.identifier_property]
200
204
  end
201
205
 
202
- hash[association.foreign_key] = param_value
206
+ # If its a has_one, there is no foreign key on this model
207
+ hash[association.foreign_key] = param_value unless association.has_one?
203
208
  end
204
209
 
205
210
  # Force permit since we should have already been permitted at this point
@@ -8,6 +8,20 @@ module Rhino
8
8
  module PropertiesDescribe # rubocop:disable Metrics/ModuleLength
9
9
  extend ActiveSupport::Concern
10
10
 
11
+ class PolymorphicModelName
12
+ include ActiveSupport::Inflector
13
+
14
+ attr_reader :name
15
+
16
+ def initialize(name)
17
+ @name = name.to_s
18
+ end
19
+
20
+ def singular
21
+ underscore(name).tr("/", "_").singularize
22
+ end
23
+ end
24
+
11
25
  class_methods do # rubocop:disable Metrics/BlockLength
12
26
  def describe_property(property) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
13
27
  name = property_name(property).to_s
@@ -43,7 +57,7 @@ module Rhino
43
57
  def ref_descriptor(names)
44
58
  {
45
59
  type: :reference,
46
- anyOf: names.map { |name| { :$ref => "#/components/schemas/#{name.singularize}" } }
60
+ anyOf: names.map { |name| { :$ref => "#/components/schemas/#{name.singular}" } }
47
61
  }
48
62
  end
49
63
 
@@ -86,19 +100,19 @@ module Rhino
86
100
 
87
101
  # rubocop:todo Metrics/PerceivedComplexity
88
102
  # rubocop:todo Metrics/AbcSize
89
- def property_type_and_format_ref(name) # rubocop:todo Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
103
+ def property_type_and_format_ref(name) # rubocop:todo Metrics/AbcSize
90
104
  assoc = reflections[name]
91
- klasses = if assoc.options[:polymorphic]
92
- # If its a delgated type it will have type introspection
105
+ klasses = if assoc.polymorphic?
106
+ # Delegated type
93
107
  if assoc.active_record.respond_to?("#{assoc.name}_types")
94
- assoc.active_record.send("#{assoc.name}_types").map(&:constantize).map { |m| m.model_name.singular }
108
+ assoc.active_record.send(:"#{assoc.name}_types").map { |x| x.constantize.model_name }
95
109
  else
96
110
  # FIXME: This is wrong, but there is no good way to introspect general polymorphic models
97
- [name]
111
+ # FIXME: This should be an OpenAPI discriminator with all possible types (all models)
112
+ [PolymorphicModelName.new(name)]
98
113
  end
99
114
  else
100
- # FIXME: The tr hack is to match how model_name in rails handles modularized classes
101
- [assoc.options[:class_name]&.underscore&.tr("/", "_") || name]
115
+ [assoc.klass.model_name]
102
116
  end
103
117
 
104
118
  return ref_descriptor(klasses) unless reflections[name].macro == :has_many
@@ -20,7 +20,7 @@ module Rhino
20
20
  def describe_property(property)
21
21
  return super unless property == "children"
22
22
 
23
- super.deep_merge({ type: :array, items: ref_descriptor([model_name.element]) })
23
+ super.deep_merge({ type: :array, items: ref_descriptor([model_name]) })
24
24
  end
25
25
 
26
26
  # FIXME: Need to recurse to a MAX DEPTH
data/lib/rhino/version.rb CHANGED
@@ -10,7 +10,7 @@ module Rhino
10
10
  MAJOR = 0
11
11
  MINOR = 21
12
12
  TINY = 0
13
- PRE = "beta.46"
13
+ PRE = "beta.49"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhino_project_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0.beta.46
4
+ version: 0.21.0.beta.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Rosevear
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-24 00:00:00.000000000 Z
11
+ date: 2024-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails