module Muffin::Rails::ControllerAdditions

Public Instance Methods

prepare(operation, params: nil, request: nil, scope: nil) click to toggle source
# File lib/muffin/rails/controller_additions.rb, line 6
def prepare(operation, params: nil, request: nil, scope: nil)
  if params.blank? && respond_to?(:params) && operation.respond_to?(:model_name)
    if self.params.key?(operation.model_name.param_key)
      params = parse_arrays self.params[operation.model_name.param_key].deep_dup.permit!.to_h
      params.deep_transform_keys! do |key|
        if key.to_s[/.+_attributes\Z/]
          new_key = key.to_s.sub(/_attributes\Z/, "")
          key.is_a?(Symbol) ? new_key.to_sym : new_key
        else
          key
        end
      end
    end
  end

  request ||= try(:request)

  scope ||= try(Muffin::Rails::SCOPE_ACCESSOR) || try(:current_user)

  operation.new(params: params, request: request, scope: scope)
end

Private Instance Methods

parse_arrays(obj) click to toggle source
# File lib/muffin/rails/controller_additions.rb, line 30
def parse_arrays(obj)
  obj.each do |key, value|
    if value.is_a? Hash
      if value.keys.find { |k, _| k =~ /\D/ }
        parse_arrays(value)
      else
        obj[key] = value.values
        value.each_value { |h| parse_arrays(h) }
      end
    end
  end
end