class LightParams::LashBuilder

Public Class Methods

lash_params(lash, params) click to toggle source
# File lib/light_params/lash_builder.rb, line 4
def lash_params(lash, params)
  prepare_params(lash, params || {})
end

Private Class Methods

collectionaize_value(modifications, value, sourced) click to toggle source

def _save_source_params(key, params)

_properties_sources[key][:params] = params.clone if _properties_sources[key]

end

# File lib/light_params/lash_builder.rb, line 54
def collectionaize_value(modifications, value, sourced)
  collection = modifications[:collection]
  raise(Errors::MissingCollectionError, "on key: #{key}") unless value.is_a? Array
  value.compact! if modifications[:compact]
  value.uniq! if modifications[:uniq]
  if collection == true
    sourced ? value : value.map { |v| v.is_a?(Hash) ? Lash.new(v) : v }
  else
    # _save_source_params(key, array.compact)
    value.map { |source| collection.new(source) if source }
  end
end
hash_value(hash, key) click to toggle source
# File lib/light_params/lash_builder.rb, line 30
def hash_value(hash, key)
  hash[key] || hash[key.to_s]
end
modelable_value(model_class, value) click to toggle source
# File lib/light_params/lash_builder.rb, line 45
def modelable_value(model_class, value)
  # _save_source_params(key, params[key])
  model_class.new(value)
end
prepare_params(lash, params) click to toggle source
# File lib/light_params/lash_builder.rb, line 10
def prepare_params(lash, params)
  properties               = lash.class.config[:properties] ||= params.keys.map(&:to_sym)
  properties_sources       = lash.class.config[:properties_sources] || {}
  properties_modifications = lash.class.config[:properties_modifications] || {}

  {}.tap do |result|
    properties.each do |key|
      modification = properties_modifications[key] || {}
      value        = hash_value(params, (modification[:from] || key))
      raise(MissingParamError, key.to_s) if modification[:required] && value.nil?
      next result[key] = (modification[:default] || (modification[:collection] ? [] : value)) if value.nil? || value.empty?
      value = prepare_sources(properties_sources[key], value) if properties_sources[key]
      value = transform_value(modification[:with], lash, key, value) if modification[:with]
      next result[key] = modelable_value(modification[:model], value) if modification[:model]
      next result[key] = collectionaize_value(modification, value, properties_sources[key]) if modification[:collection]
      result[key] = value
    end
  end
end
prepare_sources(source, value) click to toggle source
# File lib/light_params/lash_builder.rb, line 34
def prepare_sources(source, value)
  value.is_a?(Array) ? value.map { |s| source[:class].new(s) if s } : source[:class].new(value)
end
transform_value(transformation, lash, key, value) click to toggle source
# File lib/light_params/lash_builder.rb, line 38
def transform_value(transformation, lash, key, value)
  trans_proc = transformation.is_a?(Proc) ? transformation : lash.method(transformation)
  trans_proc.call(value)
rescue => e
  raise Errors::ValueTransformationError, "key #{key}: #{e.message}"
end