module SlayerRails::Extensions::Form

Public Class Methods

from_json(json) click to toggle source
# File lib/slayer_rails/extensions/form.rb, line 38
def from_json(json)
  from_params(JSON.parse(json))
end
from_model(model) click to toggle source
# File lib/slayer_rails/extensions/form.rb, line 30
def from_model(model)
  attr_hash = attribute_set.map(&:name)
              .select { |attr_name| model.respond_to?(attr_name) }
              .map    { |attr_name| [attr_name, model.public_send(attr_name)] }

  new(attr_hash.to_h)
end
from_params(params, additional_params: {}, root_key: nil) click to toggle source
# File lib/slayer_rails/extensions/form.rb, line 16
def from_params(params, additional_params: {}, root_key: nil)
  params     = params.respond_to?(:to_unsafe_h) ? params.to_unsafe_h : params.to_h
  params     = params.deep_symbolize_keys
  attr_names = attribute_set.map(&:name)

  params = params.fetch(root_key, {}) if root_key.present?

  attr_hash = params
              .merge(params.slice(*attr_names))
              .merge(additional_params)

  new(attr_hash)
end

Public Instance Methods

validate!() click to toggle source
# File lib/slayer_rails/extensions/form.rb, line 11
def validate!
  raise Slayer::FormValidationError, errors unless valid?
end