Module: RailsStuff::ParamsParser

Extended by:
ParamsParser
Included in:
ParamsParser
Defined in:
lib/rails_stuff/params_parser.rb

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

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.message, 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