rhino_project_core 0.22.0.alpha.2 → 0.22.0.alpha.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 +4 -4
- data/app/controllers/concerns/rhino/error_handling.rb +1 -1
- data/app/overrides/active_record/nested_error_override.rb +21 -0
- data/app/policies/rhino/crud_policy.rb +1 -2
- data/app/policies/rhino/user_policy.rb +1 -1
- data/app/resources/rhino/open_api_info.rb +2 -2
- data/lib/commands/rhino/module/coverage_command.rb +1 -1
- data/lib/commands/rhino/module/dummy_command.rb +1 -1
- data/lib/commands/rhino/module/rails_command.rb +1 -1
- data/lib/commands/rhino/module/test_command.rb +1 -1
- data/lib/generators/rhino/dev/setup/setup_generator.rb +0 -1
- data/lib/generators/rhino/module/module_generator.rb +1 -1
- data/lib/rhino/resource/active_model_extension/backing_store/google_sheet.rb +1 -1
- data/lib/rhino/resource/active_model_extension/describe.rb +1 -1
- data/lib/rhino/resource/active_model_extension/params.rb +1 -1
- data/lib/rhino/resource/active_model_extension/properties.rb +5 -7
- data/lib/rhino/resource/active_record_extension/describe.rb +1 -1
- data/lib/rhino/resource/active_record_extension/params.rb +7 -8
- data/lib/rhino/resource/active_record_extension/properties.rb +1 -3
- data/lib/rhino/resource/active_record_extension/properties_describe.rb +6 -7
- data/lib/rhino/resource/owner.rb +1 -2
- data/lib/rhino/resource/properties.rb +2 -4
- data/lib/rhino/resource/reference.rb +1 -1
- data/lib/rhino/resource/routing.rb +2 -4
- data/lib/rhino/resource/sieves.rb +0 -2
- data/lib/rhino/sieve/filter.rb +2 -2
- data/lib/rhino/sieve/geospatial.rb +1 -1
- data/lib/rhino/test_case/controller.rb +1 -2
- data/lib/rhino/test_case/model.rb +3 -3
- data/lib/rhino/version.rb +1 -1
- data/lib/rhino_project_core.rb +2 -2
- metadata +14 -15
- data/app/overrides/active_record/autosave_association_override.rb +0 -18
- data/app/overrides/active_record/delegated_type_override.rb +0 -14
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: cf37bf5ee31347fb2b245178fb38d4def3068dce29d6dbf22b4c70cc2ff75d55
         | 
| 4 | 
            +
              data.tar.gz: b4acadca2f17693cb43675d467dc7e0af0197d407a10499e2813c641941259e3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3e7e9d1b573c598327c3e8bc00d178ffed27cf620784645ee9e7ac6f0f077534923c1883ca1ab1a6b17026c9b9287253f1f7b54406eb529bb47f2dc0a799d7e7
         | 
| 7 | 
            +
              data.tar.gz: e0d237bc399bf3cbbb13af6f223d92876a4f59c66309bb8559cc72c7bc875bf6eaae5f2a84f8450104d1be160c9c5a8e42fc89f14adb5e08394fc6c198c41267
         | 
| @@ -6,7 +6,7 @@ module Rhino | |
| 6 6 | 
             
              module ErrorHandling
         | 
| 7 7 | 
             
                extend ActiveSupport::Concern
         | 
| 8 8 |  | 
| 9 | 
            -
                included do | 
| 9 | 
            +
                included do
         | 
| 10 10 | 
             
                  rescue_from Exception, with: :handle_uncaught_error
         | 
| 11 11 |  | 
| 12 12 | 
             
                  # ActiveRecord::DeleteRestrictionError is for dependent: :restrict_with_exception
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "active_record/associations/nested_error"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module ActiveRecord
         | 
| 6 | 
            +
              module Associations
         | 
| 7 | 
            +
                class NestedError < ::ActiveModel::NestedError
         | 
| 8 | 
            +
                  private
         | 
| 9 | 
            +
                    def compute_attribute(inner_error)
         | 
| 10 | 
            +
                      association_name = association.reflection.name
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                      # Dot notation is used to represent nested attributes in the error message.
         | 
| 13 | 
            +
                      if index_errors_setting && index
         | 
| 14 | 
            +
                        "#{association_name}.#{index}.#{inner_error.attribute}".to_sym
         | 
| 15 | 
            +
                      else
         | 
| 16 | 
            +
                        "#{association_name}.#{inner_error.attribute}".to_sym
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -4,7 +4,7 @@ module Rhino | |
| 4 4 | 
             
              class UserPolicy < ::Rhino::ViewerPolicy
         | 
| 5 5 | 
             
                class Scope < ::Rhino::ViewerPolicy::Scope
         | 
| 6 6 | 
             
                  # We allow other users in the org to view the user
         | 
| 7 | 
            -
                  def resolve | 
| 7 | 
            +
                  def resolve
         | 
| 8 8 | 
             
                    return scope.none unless auth_owner
         | 
| 9 9 |  | 
| 10 10 | 
             
                    base_owner_pk = "#{Rhino.base_owner.table_name}.#{Rhino.base_owner.primary_key}"
         | 
| @@ -56,7 +56,7 @@ module Rhino | |
| 56 56 | 
             
                  end
         | 
| 57 57 | 
             
                end
         | 
| 58 58 |  | 
| 59 | 
            -
                def self.describe_path(path) | 
| 59 | 
            +
                def self.describe_path(path)
         | 
| 60 60 | 
             
                  new_path = path.index_by { |p| p[:verb].downcase.to_sym }
         | 
| 61 61 | 
             
                  new_path.transform_values! do |verb_values|
         | 
| 62 62 | 
             
                    klass = verb_values[:rhino_resource].constantize
         | 
| @@ -75,7 +75,7 @@ module Rhino | |
| 75 75 | 
             
                end
         | 
| 76 76 |  | 
| 77 77 | 
             
                PATH_IGNORES = ["Rhino::OpenApiInfo", "Rhino::InfoGraph"].freeze
         | 
| 78 | 
            -
                def self.describe_paths | 
| 78 | 
            +
                def self.describe_paths
         | 
| 79 79 | 
             
                  routes = Rails.application.routes.routes
         | 
| 80 80 |  | 
| 81 81 | 
             
                  # Extract the path information we need
         | 
| @@ -7,7 +7,7 @@ module Rhino | |
| 7 7 | 
             
                    extend ActiveSupport::Concern
         | 
| 8 8 |  | 
| 9 9 | 
             
                    class_methods do
         | 
| 10 | 
            -
                      def describe | 
| 10 | 
            +
                      def describe
         | 
| 11 11 | 
             
                        properties = all_properties.index_with { |p| describe_property(p) }
         | 
| 12 12 |  | 
| 13 13 | 
             
                        required = properties.reject { |_p, d| d[:nullable] || d[:readOnly] }.keys
         | 
| @@ -5,10 +5,10 @@ require "js_regex" | |
| 5 5 | 
             
            module Rhino
         | 
| 6 6 | 
             
              module Resource
         | 
| 7 7 | 
             
                module ActiveModelExtension
         | 
| 8 | 
            -
                  module Properties | 
| 8 | 
            +
                  module Properties
         | 
| 9 9 | 
             
                    extend ActiveSupport::Concern
         | 
| 10 10 |  | 
| 11 | 
            -
                    class_methods do | 
| 11 | 
            +
                    class_methods do
         | 
| 12 12 | 
             
                      def identifier_property
         | 
| 13 13 | 
             
                        "id"
         | 
| 14 14 | 
             
                      end
         | 
| @@ -29,7 +29,7 @@ module Rhino | |
| 29 29 | 
             
                        writeable_properties
         | 
| 30 30 | 
             
                      end
         | 
| 31 31 |  | 
| 32 | 
            -
                      def describe_property(property) | 
| 32 | 
            +
                      def describe_property(property)
         | 
| 33 33 | 
             
                        name = property_name(property).to_s
         | 
| 34 34 | 
             
                        {
         | 
| 35 35 | 
             
                          "x-rhino-attribute": {
         | 
| @@ -64,7 +64,7 @@ module Rhino | |
| 64 64 | 
             
                          []
         | 
| 65 65 | 
             
                        end
         | 
| 66 66 |  | 
| 67 | 
            -
                        def reference_properties(read = true) | 
| 67 | 
            +
                        def reference_properties(read = true)
         | 
| 68 68 | 
             
                          references.filter_map do |r|
         | 
| 69 69 | 
             
                            sym = reference_to_sym(r)
         | 
| 70 70 |  | 
| @@ -73,7 +73,6 @@ module Rhino | |
| 73 73 |  | 
| 74 74 | 
             
                            # Writeable if a one type or accepting nested
         | 
| 75 75 | 
             
                            association = reflect_on_association(sym)
         | 
| 76 | 
            -
                            # rubocop:todo Performance/CollectionLiteralInLoop
         | 
| 77 76 | 
             
                            sym if %i[has_one belongs_to].include?(association.macro) || nested_attributes_options.key?(sym)
         | 
| 78 77 | 
             
                            # rubocop:enable Performance/CollectionLiteralInLoop
         | 
| 79 78 | 
             
                          end
         | 
| @@ -143,8 +142,7 @@ module Rhino | |
| 143 142 | 
             
                          { type: property_type_raw(property) }
         | 
| 144 143 | 
             
                        end
         | 
| 145 144 |  | 
| 146 | 
            -
                         | 
| 147 | 
            -
                        def property_validations(property) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
         | 
| 145 | 
            +
                        def property_validations(property)
         | 
| 148 146 | 
             
                          constraint_hash = {}
         | 
| 149 147 |  | 
| 150 148 | 
             
                          # https://swagger.io/specification/
         | 
| @@ -7,7 +7,7 @@ module Rhino | |
| 7 7 | 
             
                    extend ActiveSupport::Concern
         | 
| 8 8 |  | 
| 9 9 | 
             
                    class_methods do
         | 
| 10 | 
            -
                      def describe | 
| 10 | 
            +
                      def describe
         | 
| 11 11 | 
             
                        properties = all_properties.index_with { |p| describe_property(p) }
         | 
| 12 12 |  | 
| 13 13 | 
             
                        required = properties.reject { |_p, d| d[:nullable] || d[:readOnly] }.keys
         | 
| @@ -3,10 +3,10 @@ | |
| 3 3 | 
             
            module Rhino
         | 
| 4 4 | 
             
              module Resource
         | 
| 5 5 | 
             
                module ActiveRecordExtension
         | 
| 6 | 
            -
                  module Params | 
| 6 | 
            +
                  module Params
         | 
| 7 7 | 
             
                    extend ActiveSupport::Concern
         | 
| 8 8 |  | 
| 9 | 
            -
                    class_methods do | 
| 9 | 
            +
                    class_methods do
         | 
| 10 10 | 
             
                      def create_params
         | 
| 11 11 | 
             
                        writeable_params("create")
         | 
| 12 12 | 
             
                      end
         | 
| @@ -43,7 +43,7 @@ module Rhino | |
| 43 43 | 
             
                          send("#{type}_properties").dup
         | 
| 44 44 | 
             
                        end
         | 
| 45 45 |  | 
| 46 | 
            -
                        def readable_params(type, refs = references) # rubocop:disable Metrics/ | 
| 46 | 
            +
                        def readable_params(type, refs = references) # rubocop:disable Metrics/CyclomaticComplexity
         | 
| 47 47 | 
             
                          params = []
         | 
| 48 48 |  | 
| 49 49 | 
             
                          refs_index = refs.index_by { |r| reference_to_sym(r) }
         | 
| @@ -79,10 +79,10 @@ module Rhino | |
| 79 79 | 
             
                          params << "display_name"
         | 
| 80 80 | 
             
                        end
         | 
| 81 81 |  | 
| 82 | 
            -
                        def writeable_params(type, _refs = references) # rubocop:disable Metrics/ | 
| 82 | 
            +
                        def writeable_params(type, _refs = references) # rubocop:disable Metrics/CyclomaticComplexity
         | 
| 83 83 | 
             
                          params = []
         | 
| 84 84 |  | 
| 85 | 
            -
                          props_by_type(type).each do |prop| | 
| 85 | 
            +
                          props_by_type(type).each do |prop|
         | 
| 86 86 | 
             
                            desc = describe_property(prop)
         | 
| 87 87 | 
             
                            prop_sym = prop.to_sym
         | 
| 88 88 |  | 
| @@ -151,10 +151,9 @@ module Rhino | |
| 151 151 | 
             
                        end
         | 
| 152 152 |  | 
| 153 153 | 
             
                        # Rebuild the params
         | 
| 154 | 
            -
                         | 
| 155 | 
            -
                        def transform_params_recursive(params, parent = self) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity
         | 
| 154 | 
            +
                        def transform_params_recursive(params, parent = self)
         | 
| 156 155 | 
             
                          hash = {}
         | 
| 157 | 
            -
                          params.each do |param_key, param_value| | 
| 156 | 
            +
                          params.each do |param_key, param_value|
         | 
| 158 157 | 
             
                            association = parent.reflect_on_association(param_key)
         | 
| 159 158 |  | 
| 160 159 | 
             
                            # Its a regular attribute
         | 
| @@ -10,7 +10,7 @@ module Rhino | |
| 10 10 |  | 
| 11 11 | 
             
                    include Rhino::Resource::ActiveRecordExtension::PropertiesDescribe
         | 
| 12 12 |  | 
| 13 | 
            -
                    class_methods do | 
| 13 | 
            +
                    class_methods do
         | 
| 14 14 | 
             
                      def identifier_property
         | 
| 15 15 | 
             
                        primary_key
         | 
| 16 16 | 
             
                      end
         | 
| @@ -51,7 +51,6 @@ module Rhino | |
| 51 51 | 
             
                          reflect_on_all_associations(:belongs_to).map(&:foreign_key).map(&:to_s)
         | 
| 52 52 | 
             
                        end
         | 
| 53 53 |  | 
| 54 | 
            -
                        # rubocop:todo Style/OptionalBooleanParameter
         | 
| 55 54 | 
             
                        def reference_properties(read = true)
         | 
| 56 55 | 
             
                          references.filter_map do |r|
         | 
| 57 56 | 
             
                            sym = reference_to_sym(r)
         | 
| @@ -61,7 +60,6 @@ module Rhino | |
| 61 60 |  | 
| 62 61 | 
             
                            # Writeable if a one type or accepting nested
         | 
| 63 62 | 
             
                            association = reflect_on_association(sym)
         | 
| 64 | 
            -
                            # rubocop:todo Performance/CollectionLiteralInLoop, Layout/LineLength
         | 
| 65 63 | 
             
                            if %i[has_one belongs_to].include?(association.macro) || nested_attributes_options.key?(sym) || association.class_name == "ActiveStorage::Attachment"
         | 
| 66 64 | 
             
                              sym
         | 
| 67 65 | 
             
                            end
         | 
| @@ -5,7 +5,7 @@ require "js_regex" | |
| 5 5 | 
             
            module Rhino
         | 
| 6 6 | 
             
              module Resource
         | 
| 7 7 | 
             
                module ActiveRecordExtension
         | 
| 8 | 
            -
                  module PropertiesDescribe | 
| 8 | 
            +
                  module PropertiesDescribe
         | 
| 9 9 | 
             
                    extend ActiveSupport::Concern
         | 
| 10 10 |  | 
| 11 11 | 
             
                    class PolymorphicModelName
         | 
| @@ -22,8 +22,8 @@ module Rhino | |
| 22 22 | 
             
                      end
         | 
| 23 23 | 
             
                    end
         | 
| 24 24 |  | 
| 25 | 
            -
                    class_methods do | 
| 26 | 
            -
                      def describe_property(property) # rubocop:disable Metrics/AbcSize | 
| 25 | 
            +
                    class_methods do
         | 
| 26 | 
            +
                      def describe_property(property) # rubocop:disable Metrics/AbcSize
         | 
| 27 27 | 
             
                        name = property_name(property).to_s
         | 
| 28 28 | 
             
                        raise StandardError, "#{name} is not a valid property" unless property?(name)
         | 
| 29 29 |  | 
| @@ -61,7 +61,7 @@ module Rhino | |
| 61 61 | 
             
                          }
         | 
| 62 62 | 
             
                        end
         | 
| 63 63 |  | 
| 64 | 
            -
                        def property_type_and_format_attr(name) | 
| 64 | 
            +
                        def property_type_and_format_attr(name)
         | 
| 65 65 | 
             
                          atype = attribute_types[name.to_s].type
         | 
| 66 66 |  | 
| 67 67 | 
             
                          # The PG array delegates type to "subtype" which is the actual type of the array elements
         | 
| @@ -98,7 +98,6 @@ module Rhino | |
| 98 98 | 
             
                          { "x-rhino-attribute-array": array_options.merge(_properties_array[ref_sym] || {}) }
         | 
| 99 99 | 
             
                        end
         | 
| 100 100 |  | 
| 101 | 
            -
                        # rubocop:todo Metrics/PerceivedComplexity
         | 
| 102 101 | 
             
                        # rubocop:todo Metrics/AbcSize
         | 
| 103 102 | 
             
                        def property_type_and_format_ref(name) # rubocop:todo Metrics/AbcSize
         | 
| 104 103 | 
             
                          assoc = reflections[name]
         | 
| @@ -125,7 +124,7 @@ module Rhino | |
| 125 124 | 
             
                        # rubocop:enable Metrics/AbcSize
         | 
| 126 125 | 
             
                        # rubocop:enable Metrics/PerceivedComplexity
         | 
| 127 126 |  | 
| 128 | 
            -
                        def property_type_and_format(name) # rubocop:disable Metrics/AbcSize | 
| 127 | 
            +
                        def property_type_and_format(name) # rubocop:disable Metrics/AbcSize
         | 
| 129 128 | 
             
                          # Special cases
         | 
| 130 129 | 
             
                          return { type: :identifier } if name == identifier_property
         | 
| 131 130 | 
             
                          return { type: :string } if defined_enums.key?(name)
         | 
| @@ -156,7 +155,7 @@ module Rhino | |
| 156 155 | 
             
                          _properties_overrides[property].deep_symbolize_keys
         | 
| 157 156 | 
             
                        end
         | 
| 158 157 |  | 
| 159 | 
            -
                        def property_validations(property) # rubocop:disable Metrics/AbcSize, Metrics/ | 
| 158 | 
            +
                        def property_validations(property) # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
         | 
| 160 159 | 
             
                          constraint_hash = {}
         | 
| 161 160 |  | 
| 162 161 | 
             
                          # https://swagger.io/specification/
         | 
    
        data/lib/rhino/resource/owner.rb
    CHANGED
    
    | @@ -21,8 +21,7 @@ module Rhino | |
| 21 21 | 
             
                  end
         | 
| 22 22 |  | 
| 23 23 | 
             
                  # The self is actually required to work with class_attribute properly
         | 
| 24 | 
            -
                   | 
| 25 | 
            -
                  class_methods do # rubocop:disable  Metrics/BlockLength
         | 
| 24 | 
            +
                  class_methods do
         | 
| 26 25 | 
             
                    # Test if rhino_owner[rdoc-ref:rhino_owner] is the auth owner
         | 
| 27 26 | 
             
                    # Also available on the instance
         | 
| 28 27 | 
             
                    def auth_owner?
         | 
| @@ -26,7 +26,7 @@ module Rhino | |
| 26 26 | 
             
                #   readable_properties
         | 
| 27 27 | 
             
                #   creatable_properties
         | 
| 28 28 | 
             
                #   updatable_properties
         | 
| 29 | 
            -
                module Properties | 
| 29 | 
            +
                module Properties
         | 
| 30 30 | 
             
                  extend ActiveSupport::Concern
         | 
| 31 31 |  | 
| 32 32 | 
             
                  included do
         | 
| @@ -54,8 +54,7 @@ module Rhino | |
| 54 54 | 
             
                    delegate :describe_property, to: :class
         | 
| 55 55 | 
             
                  end
         | 
| 56 56 |  | 
| 57 | 
            -
                   | 
| 58 | 
            -
                  class_methods do # rubocop:disable Metrics/BlockLength
         | 
| 57 | 
            +
                  class_methods do
         | 
| 59 58 | 
             
                    def rhino_properties_read(**options)
         | 
| 60 59 | 
             
                      self._read_properties_only = Array.wrap(options[:only]).map(&:to_s) if options.key?(:only)
         | 
| 61 60 | 
             
                      self._read_properties_except = Array.wrap(options[:except]).map(&:to_s) if options.key?(:except)
         | 
| @@ -186,7 +185,6 @@ module Rhino | |
| 186 185 | 
             
                      raise NotImplementedError, "#describe_property is not implemented for #{property}"
         | 
| 187 186 | 
             
                    end
         | 
| 188 187 | 
             
                  end
         | 
| 189 | 
            -
                  # rubocop:enable Style/RedundantSelf
         | 
| 190 188 | 
             
                end
         | 
| 191 189 | 
             
              end
         | 
| 192 190 | 
             
            end
         | 
| @@ -18,7 +18,6 @@ module Rhino | |
| 18 18 | 
             
                    delegate :routes, to: :class
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 | 
            -
                  # rubocop:disable Style/RedundantSelf, Metrics/BlockLength
         | 
| 22 21 | 
             
                  class_methods do
         | 
| 23 22 | 
             
                    def route_key
         | 
| 24 23 | 
             
                      self._route_key ||= if route_singular?
         | 
| @@ -50,7 +49,7 @@ module Rhino | |
| 50 49 |  | 
| 51 50 | 
             
                    def routes
         | 
| 52 51 | 
             
                      unless self._rhino_routes
         | 
| 53 | 
            -
                        if global_owner? | 
| 52 | 
            +
                        if global_owner?
         | 
| 54 53 | 
             
                          self._rhino_routes = %i[index show]
         | 
| 55 54 | 
             
                        else
         | 
| 56 55 | 
             
                          self._rhino_routes = %i[index create show update destroy]
         | 
| @@ -72,10 +71,9 @@ module Rhino | |
| 72 71 | 
             
                      self.controller_name = "rhino/#{controller}"
         | 
| 73 72 | 
             
                    end
         | 
| 74 73 | 
             
                  end
         | 
| 75 | 
            -
                  # rubocop:enable Style/RedundantSelf, Metrics/BlockLength
         | 
| 76 74 | 
             
                end
         | 
| 77 75 |  | 
| 78 | 
            -
                def route_frontend | 
| 76 | 
            +
                def route_frontend
         | 
| 79 77 | 
             
                  base_owner_pk = "#{Rhino.base_owner.table_name}.#{Rhino.base_owner.primary_key}"
         | 
| 80 78 |  | 
| 81 79 | 
             
                  joins = joins_for_base_owner
         | 
| @@ -13,7 +13,6 @@ module Rhino | |
| 13 13 | 
             
                    delegate :sieves, to: :class
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| 16 | 
            -
                  # rubocop:disable Style/RedundantSelf
         | 
| 17 16 | 
             
                  class_methods do
         | 
| 18 17 | 
             
                    def rhino_sieves
         | 
| 19 18 | 
             
                      self._sieves = Rhino.sieves.dup unless self._sieves
         | 
| @@ -30,7 +29,6 @@ module Rhino | |
| 30 29 | 
             
                      scope
         | 
| 31 30 | 
             
                    end
         | 
| 32 31 | 
             
                  end
         | 
| 33 | 
            -
                  # rubocop:enable Style/RedundantSelf
         | 
| 34 32 | 
             
                end
         | 
| 35 33 | 
             
              end
         | 
| 36 34 | 
             
            end
         | 
    
        data/lib/rhino/sieve/filter.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            module Rhino
         | 
| 4 4 | 
             
              module Sieve
         | 
| 5 | 
            -
                class Filter | 
| 5 | 
            +
                class Filter
         | 
| 6 6 | 
             
                  def initialize(app)
         | 
| 7 7 | 
             
                    @app = app
         | 
| 8 8 | 
             
                  end
         | 
| @@ -107,7 +107,7 @@ module Rhino | |
| 107 107 |  | 
| 108 108 | 
             
                  BASIC_AREL_OPS = %w[eq gt lt gteq lteq].freeze
         | 
| 109 109 | 
             
                  BASIC_AREL_COALESCE_OPS = BASIC_AREL_OPS.map { |op| "#{op}_coalesce" }.freeze
         | 
| 110 | 
            -
                  def merge_where_clause(base, scope, column_name, value, operation = nil) | 
| 110 | 
            +
                  def merge_where_clause(base, scope, column_name, value, operation = nil)
         | 
| 111 111 | 
             
                    arel_node = base.arel_table[column_name]
         | 
| 112 112 | 
             
                    where_clause = case operation
         | 
| 113 113 | 
             
                                   when *BASIC_AREL_OPS then arel_node.send(operation, value)
         | 
| @@ -2,7 +2,6 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            module Rhino
         | 
| 4 4 | 
             
              module TestCase
         | 
| 5 | 
            -
                # rubocop:disable Metrics/ClassLength
         | 
| 6 5 | 
             
                class ControllerTest < ActionDispatch::IntegrationTest
         | 
| 7 6 | 
             
                  setup :set_cookie_attributes
         | 
| 8 7 |  | 
| @@ -81,7 +80,7 @@ module Rhino | |
| 81 80 | 
             
                    def assert_not_deleted_cookie(cookie_name)
         | 
| 82 81 | 
             
                      has_cookie = response.cookies.key?(cookie_name)
         | 
| 83 82 | 
             
                      cookie_not_blank = response.cookies[cookie_name].present?
         | 
| 84 | 
            -
                      assert !has_cookie || cookie_not_blank, "Response should either not have the auth cookie present or it should be set to something. Current value is #{response.cookies[cookie_name]}" | 
| 83 | 
            +
                      assert !has_cookie || cookie_not_blank, "Response should either not have the auth cookie present or it should be set to something. Current value is #{response.cookies[cookie_name]}"
         | 
| 85 84 | 
             
                    end
         | 
| 86 85 |  | 
| 87 86 | 
             
                    def sign_in(user = nil)
         | 
| @@ -33,7 +33,7 @@ module Rhino | |
| 33 33 | 
             
                    end
         | 
| 34 34 |  | 
| 35 35 | 
             
                    # association_model is a symbol
         | 
| 36 | 
            -
                    def assert_accepts_nested_attributes_for(association_model, association_factory: association_model) | 
| 36 | 
            +
                    def assert_accepts_nested_attributes_for(association_model, association_factory: association_model)
         | 
| 37 37 | 
             
                      association = @model.reflect_on_association(association_model)
         | 
| 38 38 |  | 
| 39 39 | 
             
                      assert association.present?, "association :#{association_model} not found"
         | 
| @@ -51,7 +51,7 @@ module Rhino | |
| 51 51 | 
             
                      end
         | 
| 52 52 |  | 
| 53 53 | 
             
                      assert @model.new.respond_to?("#{key}="),
         | 
| 54 | 
            -
                             "#{@model} doesn't have a #{key} setter method. Probably there's no `accepts_nested_attributes_for :#{association_model}` in #{@model}" | 
| 54 | 
            +
                             "#{@model} doesn't have a #{key} setter method. Probably there's no `accepts_nested_attributes_for :#{association_model}` in #{@model}"
         | 
| 55 55 | 
             
                      object = if association_factory.is_a?(Proc)
         | 
| 56 56 | 
             
                        model_instance = build factory
         | 
| 57 57 | 
             
                        association_instance = association_factory.call model_instance
         | 
| @@ -65,7 +65,7 @@ module Rhino | |
| 65 65 | 
             
                      assert success_checker.call(object), "Should have a #{association_model} after assigning nested model attributes"
         | 
| 66 66 | 
             
                    end
         | 
| 67 67 |  | 
| 68 | 
            -
                    def assert_destroy_association_cascade(association_model, association_factory: association_model) | 
| 68 | 
            +
                    def assert_destroy_association_cascade(association_model, association_factory: association_model)
         | 
| 69 69 | 
             
                      instance = create factory
         | 
| 70 70 | 
             
                      association_instance = if association_factory.is_a?(Proc)
         | 
| 71 71 | 
             
                        association_factory.call(instance)
         | 
    
        data/lib/rhino/version.rb
    CHANGED
    
    
    
        data/lib/rhino_project_core.rb
    CHANGED
    
    | @@ -82,7 +82,7 @@ module Rhino | |
| 82 82 |  | 
| 83 83 | 
             
              # Set the auth owner reference object to access the mailer.
         | 
| 84 84 | 
             
              def self.auth_owner=(class_name)
         | 
| 85 | 
            -
                @@auth_owner_ref = ref(class_name) | 
| 85 | 
            +
                @@auth_owner_ref = ref(class_name)
         | 
| 86 86 | 
             
              end
         | 
| 87 87 | 
             
              self.auth_owner = 'User'
         | 
| 88 88 |  | 
| @@ -96,7 +96,7 @@ module Rhino | |
| 96 96 |  | 
| 97 97 | 
             
              # Set the mailer reference object to access the mailer.
         | 
| 98 98 | 
             
              def self.base_owner=(class_name)
         | 
| 99 | 
            -
                @@base_owner_ref = ref(class_name) | 
| 99 | 
            +
                @@base_owner_ref = ref(class_name)
         | 
| 100 100 | 
             
              end
         | 
| 101 101 | 
             
              self.base_owner = 'User'
         | 
| 102 102 |  | 
    
        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.22.0.alpha. | 
| 4 | 
            +
              version: 0.22.0.alpha.3
         | 
| 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-11- | 
| 11 | 
            +
            date: 2024-11-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         | 
| @@ -16,20 +16,20 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 7. | 
| 19 | 
            +
                    version: 7.2.0
         | 
| 20 20 | 
             
                - - ">="
         | 
| 21 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version: 7. | 
| 22 | 
            +
                    version: 7.2.0
         | 
| 23 23 | 
             
              type: :runtime
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 25 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 26 | 
             
                requirements:
         | 
| 27 27 | 
             
                - - "~>"
         | 
| 28 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: 7. | 
| 29 | 
            +
                    version: 7.2.0
         | 
| 30 30 | 
             
                - - ">="
         | 
| 31 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version: 7. | 
| 32 | 
            +
                    version: 7.2.0
         | 
| 33 33 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 34 34 | 
             
              name: activeadmin
         | 
| 35 35 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -50,14 +50,14 @@ dependencies: | |
| 50 50 | 
             
                requirements:
         | 
| 51 51 | 
             
                - - '='
         | 
| 52 52 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            -
                    version:  | 
| 53 | 
            +
                    version: 11.0.0
         | 
| 54 54 | 
             
              type: :runtime
         | 
| 55 55 | 
             
              prerelease: false
         | 
| 56 56 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 57 | 
             
                requirements:
         | 
| 58 58 | 
             
                - - '='
         | 
| 59 59 | 
             
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            -
                    version:  | 
| 60 | 
            +
                    version: 11.0.0
         | 
| 61 61 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 62 62 | 
             
              name: analytics-ruby
         | 
| 63 63 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -92,14 +92,14 @@ dependencies: | |
| 92 92 | 
             
                requirements:
         | 
| 93 93 | 
             
                - - '='
         | 
| 94 94 | 
             
                  - !ruby/object:Gem::Version
         | 
| 95 | 
            -
                    version: 2. | 
| 95 | 
            +
                    version: 2.15.0
         | 
| 96 96 | 
             
              type: :runtime
         | 
| 97 97 | 
             
              prerelease: false
         | 
| 98 98 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 99 99 | 
             
                requirements:
         | 
| 100 100 | 
             
                - - '='
         | 
| 101 101 | 
             
                  - !ruby/object:Gem::Version
         | 
| 102 | 
            -
                    version: 2. | 
| 102 | 
            +
                    version: 2.15.0
         | 
| 103 103 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 104 104 | 
             
              name: countries
         | 
| 105 105 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -134,14 +134,14 @@ dependencies: | |
| 134 134 | 
             
                requirements:
         | 
| 135 135 | 
             
                - - '='
         | 
| 136 136 | 
             
                  - !ruby/object:Gem::Version
         | 
| 137 | 
            -
                    version: 1.2. | 
| 137 | 
            +
                    version: 1.2.4
         | 
| 138 138 | 
             
              type: :runtime
         | 
| 139 139 | 
             
              prerelease: false
         | 
| 140 140 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 141 141 | 
             
                requirements:
         | 
| 142 142 | 
             
                - - '='
         | 
| 143 143 | 
             
                  - !ruby/object:Gem::Version
         | 
| 144 | 
            -
                    version: 1.2. | 
| 144 | 
            +
                    version: 1.2.4
         | 
| 145 145 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 146 146 | 
             
              name: friendly_id
         | 
| 147 147 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -394,8 +394,7 @@ files: | |
| 394 394 | 
             
            - app/models/rhino/account.rb
         | 
| 395 395 | 
             
            - app/models/rhino/current.rb
         | 
| 396 396 | 
             
            - app/models/rhino/user.rb
         | 
| 397 | 
            -
            - app/overrides/active_record/ | 
| 398 | 
            -
            - app/overrides/active_record/delegated_type_override.rb
         | 
| 397 | 
            +
            - app/overrides/active_record/nested_error_override.rb
         | 
| 399 398 | 
             
            - app/overrides/activestorage/direct_uploads_controller_override.rb
         | 
| 400 399 | 
             
            - app/overrides/activestorage/redirect_controller_override.rb
         | 
| 401 400 | 
             
            - app/overrides/activestorage/redirect_representation_controller_override.rb
         | 
| @@ -524,7 +523,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 524 523 | 
             
                - !ruby/object:Gem::Version
         | 
| 525 524 | 
             
                  version: '0'
         | 
| 526 525 | 
             
            requirements: []
         | 
| 527 | 
            -
            rubygems_version: 3.5. | 
| 526 | 
            +
            rubygems_version: 3.5.22
         | 
| 528 527 | 
             
            signing_key: 
         | 
| 529 528 | 
             
            specification_version: 4
         | 
| 530 529 | 
             
            summary: ''
         | 
| @@ -1,18 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # correction for nested forms errors indexation
         | 
| 4 | 
            -
            # this correction is still necessary in rails 7.0
         | 
| 5 | 
            -
            module ActiveRecord::AutosaveAssociation
         | 
| 6 | 
            -
              private
         | 
| 7 | 
            -
                def validate_collection_association(reflection)
         | 
| 8 | 
            -
                  return unless (association = association_instance_get(reflection.name))
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  return unless (records = associated_records_to_validate_or_save(association, new_record?, reflection.options[:autosave]))
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  all_records = association.target.find_all
         | 
| 13 | 
            -
                  records.each do |record|
         | 
| 14 | 
            -
                    index = all_records.find_index(record)
         | 
| 15 | 
            -
                    association_valid?(reflection, record, index)
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
            end
         | 
| @@ -1,14 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # correction for nested forms errors indexation
         | 
| 4 | 
            -
            # this correction is still necessary in rails 7.0
         | 
| 5 | 
            -
            module ActiveRecord::DelegatedType
         | 
| 6 | 
            -
              def delegated_type(role, types:, **options)
         | 
| 7 | 
            -
                belongs_to role, options.delete(:scope), **options.merge(polymorphic: true)
         | 
| 8 | 
            -
                define_delegated_type_methods(role, types:, options:)
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                define_singleton_method "#{role}_types" do
         | 
| 11 | 
            -
                  types.map(&:to_s)
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
            end
         |