class Hanami::Action::Params
A set of params requested by the client
It's able to extract the relevant params from a Rack
env of from an Hash.
There are three scenarios:
* When used with Hanami::Router: it contains only the params from the request * When used standalone: it contains all the Rack env * Default: it returns the given hash as it is. It's useful for testing purposes.
@since 0.1.0
Attributes
Returns structured error messages
@return [Hash]
@since 0.7.0
@example
params.errors # => {:email=>["is missing", "is in invalid format"], :name=>["is missing"], :tos=>["is missing"], :age=>["is missing"], :address=>["is missing"]}
Public Class Methods
This is a Hanami::Validations extension point
@since 0.7.0 @api private
# File lib/hanami/action/params.rb, line 117 def self._base_rules lambda do optional(:_csrf_token).filled(:str?) end end
Initialize the params and freeze them.
@param env [Hash] a Rack
env or an hash of params.
@return [Params]
@since 0.1.0 @api private
Hanami::Action::BaseParams::new
# File lib/hanami/action/params.rb, line 163 def initialize(env) @env = env super(_extract_params) @result = validate @params = _params @errors = Errors.new(@result.messages) freeze end
Define params validations
@param blk [Proc] the validations definitions
@since 0.7.0
@see guides.hanamirb.org/validations/overview
@example
class Signup MEGABYTE = 1024 ** 2 include Hanami::Action params do required(:first_name).filled(:str?) required(:last_name).filled(:str?) required(:email).filled?(:str?, format?: /\A.+@.+\z/) required(:password).filled(:str?).confirmation required(:terms_of_service).filled(:bool?) required(:age).filled(:int?, included_in?: 18..99) optional(:avatar).filled(size?: 1..(MEGABYTE * 3)) end def call(params) halt 400 unless params.valid? # ... end end
# File lib/hanami/action/params.rb, line 151 def self.params(&blk) validations(&blk || ->() {}) end
Public Instance Methods
Returns flat collection of full error messages
@return [Array]
@since 0.7.0
@example
params.error_messages # => ["Email is missing", "Email is in invalid format", "Name is missing", "Tos is missing", "Age is missing", "Address is missing"]
# File lib/hanami/action/params.rb, line 201 def error_messages(error_set = errors) error_set.each_with_object([]) do |(key, messages), result| k = Utils::String.titleize(key) _messages = if messages.is_a?(Hash) error_messages(messages) else messages.map { |message| "#{k} #{message}" } end result.concat(_messages) end end
Returns raw params from Rack
env
@return [Hash]
@since 0.3.2
# File lib/hanami/action/params.rb, line 177 def raw @input end
Serialize params to Hash
@return [::Hash]
@since 0.3.0
# File lib/hanami/action/params.rb, line 233 def to_h @params end
Returns true if no validation errors are found, false otherwise.
@return [TrueClass, FalseClass]
@since 0.7.0
@example
params.valid? # => true
# File lib/hanami/action/params.rb, line 224 def valid? errors.empty? end
Private Instance Methods
@api private
# File lib/hanami/action/params.rb, line 241 def _params _router_params.merge(@result.output) end