Sha256: eacf64c02c770d9114b7c570672095723976cf0cadee9d99c948ba158ef70ba8

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module ConvenientService
  module Common
    module Plugins
      module AssignsAttributesInConstructor
        module UsingActiveModelAttributeAssignment
          class Middleware < Core::MethodChainMiddleware
            ##
            # @param args [Array<Object>]
            # @param kwargs [Hash{Symbol => Object}]
            # @param block [Proc, nil]
            # @return [void]
            #
            # @internal
            #   TODO: Consider creation of a plugin that assigns `*args` with `assign_attributes` as well, not only `**kwargs`.
            #   Check `Method#parameters` for a possible solution.
            #   - https://ruby-doc.org/core-3.1.0/Method.html#method-i-parameters
            #
            #   NOTE: `assign_attributes` expects `attr_writer` for all `kwargs` keys.
            #   - https://api.rubyonrails.org/classes/ActiveModel/AttributeAssignment.html#method-i-assign_attributes
            #
            def next(*args, **kwargs, &block)
              chain.next(*args, **kwargs, &block)

              entity.assign_attributes(kwargs)
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
convenient_service-0.12.0 lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_active_model_attribute_assignment/middleware.rb