Module: RailsStuff::ParamsParser
Overview
Provides parsing and type-casting functions. Reraises all ocured errors with Error class, so you can handle it together:
rescue_from RailsStuff::ParamsParser::Error, with: :render_bad_request
You can define more parsing methods by extending with this module and using .parse:
# models/params_parser
module ParamsParser
extend RailsStuff::ParamsParser
extend self
def parse_money(val)
parse(val) { your_stuff(val) }
end
end
Defined Under Namespace
Classes: Error
Instance Method Summary collapse
-
#parse(val) ⇒ Object
Parses value with specified block.
-
#parse_array(val) ⇒ Object
Parses each value in array with specified block.
-
#parse_boolean(val) ⇒ Object
Parse boolean using ActiveResord’s parser.
-
#parse_datetime(val) ⇒ Object
Parse time in current TZ using ‘Time.parse`.
-
#parse_json(val) ⇒ Object
Parse JSON string.
Instance Method Details
#parse(val) ⇒ Object
Parses value with specified block. Reraises occured error with Error.
47 48 49 50 51 |
# File 'lib/rails_stuff/params_parser.rb', line 47 def parse(val) yield(val) unless val.nil? rescue => e raise Error.new(e., val), nil, e.backtrace end |
#parse_array(val) ⇒ Object
Parses each value in array with specified block. Returns ‘nil` if `val` is not an array.
55 56 57 |
# File 'lib/rails_stuff/params_parser.rb', line 55 def parse_array(val) parse(val) { val.map { |x| yield x unless x.nil? } } if val.is_a?(Array) end |
#parse_boolean(val) ⇒ Object
Parse boolean using ActiveResord’s parser.
104 105 106 107 108 109 |
# File 'lib/rails_stuff/params_parser.rb', line 104 def parse_boolean(val) parse(val) do @boolean_parser ||= ActiveRecord::Type::Boolean.new @boolean_parser.type_cast_from_user(val) end end |
#parse_datetime(val) ⇒ Object
Parse time in current TZ using ‘Time.parse`.
112 113 114 |
# File 'lib/rails_stuff/params_parser.rb', line 112 def parse_datetime(val) parse(val) { Time.zone.parse(val) || raise('Invalid datetime') } end |
#parse_json(val) ⇒ Object
Parse JSON string.
117 118 119 |
# File 'lib/rails_stuff/params_parser.rb', line 117 def parse_json(val) parse(val) { JSON.parse(val) if val.present? } end |