module Paramore::Extension
Constants
- OPTIONS
Public Instance Methods
param_schema(accessor_name, configuration)
click to toggle source
# File lib/paramore/extension.rb, line 11 def param_schema(accessor_name, configuration) parameter_configuration = configuration.except(*OPTIONS) unless parameter_configuration.keys.size == 1 raise ArgumentError, "Paramore: exactly one required attribute allowed! Given: #{parameter_configuration.keys}" end required_parameter_name = parameter_configuration.keys.first types_definition = parameter_configuration.values.first Paramore::Validate.run(types_definition) if types_definition.is_a?(Hash) permitted_parameter_argument = if types_definition.is_a?(Hash) Paramore::PermittedParameterArgument.parse(types_definition) else types_definition end define_method(accessor_name) do |rails_parameters = params| return instance_variable_get("@#{accessor_name}") if instance_variable_defined?("@#{accessor_name}") if rails_parameters[required_parameter_name].nil? && configuration[:default] instance_variable_set("@#{accessor_name}", configuration[:default]) return instance_variable_get("@#{accessor_name}") end permitted_params = rails_parameters .require(required_parameter_name) .permit(permitted_parameter_argument) parameter_values = if types_definition.is_a?(Hash) permitted_params.merge( Paramore::CastParameters.run(types_definition, permitted_params) ).permit! else permitted_params.permit! end instance_variable_set("@#{accessor_name}", parameter_values) end end