class SimpleParams::NestedParams

Attributes

id[R]
params[R]
parent[R]
parent_attribute_name[R]

Public Class Methods

array?() click to toggle source
# File lib/simple_params/nested_params.rb, line 8
def array?
  type.to_sym == :array
end
build(params, parent, name) click to toggle source
# File lib/simple_params/nested_params.rb, line 32
def build(params, parent, name)
  if params.is_a?(Array)
    params.map { |p| build_instance(p, parent) }.compact
  elsif with_ids?
    params.each_pair.map { |key, val| build_instance({key => val}, parent) }.compact
  else
    build_instance(params, parent)
  end
end
define_new_array_class(parent, name, options, &block) click to toggle source
# File lib/simple_params/nested_params.rb, line 28
def define_new_array_class(parent, name, options, &block)
  define_new_class(parent, name, options.merge(type: :array), &block)
end
define_new_hash_class(parent, name, options, &block) click to toggle source
# File lib/simple_params/nested_params.rb, line 24
def define_new_hash_class(parent, name, options, &block)
  define_new_class(parent, name, options.merge(type: :hash), &block)
end
hash?() click to toggle source
# File lib/simple_params/nested_params.rb, line 12
def hash?
  type.to_sym == :hash
end
new(params={}, parent = nil) click to toggle source

Should allow NestedParams to be initialized with no arguments, in order

to be compatible with some Rails form gems like 'nested_form'
Calls superclass method
# File lib/simple_params/nested_params.rb, line 57
def initialize(params={}, parent = nil)
  @parent = parent
  @id = extract_id(params)
  @params = extract_initialization_params(params)
  super(@params)
end
optional?() click to toggle source
# File lib/simple_params/nested_params.rb, line 20
def optional?
  !!options[:optional]
end
type() click to toggle source
# File lib/simple_params/nested_params.rb, line 4
def type
  options[:type]
end
with_ids?() click to toggle source
# File lib/simple_params/nested_params.rb, line 16
def with_ids?
  !!options[:with_ids]
end

Private Class Methods

build_instance(params, parent) click to toggle source
# File lib/simple_params/nested_params.rb, line 47
def build_instance(params, parent)
  instance = self.new(params, parent)
  instance.destroyed? ? nil : instance
end
define_new_class(parent, name, options, &block) click to toggle source
# File lib/simple_params/nested_params.rb, line 43
def define_new_class(parent, name, options, &block)
  NestedParamsClassBuilder.new(parent).build(self, name, options, &block)
end

Public Instance Methods

array?() click to toggle source
# File lib/simple_params/nested_params.rb, line 64
def array?
  self.class.array?
end
destroyed?() click to toggle source
# File lib/simple_params/nested_params.rb, line 72
def destroyed?
  sym_params = symbolize_params(params)
  [true, 1, "1", "true"].include?(sym_params[:_destroy])
end
symbol() click to toggle source
# File lib/simple_params/nested_params.rb, line 68
def symbol
  self.class.name_symbol
end

Private Instance Methods

extract_id(params) click to toggle source
# File lib/simple_params/nested_params.rb, line 86
def extract_id(params)
  if with_ids?
    params.keys[0]
  end
end
extract_initialization_params(params) click to toggle source
# File lib/simple_params/nested_params.rb, line 92
def extract_initialization_params(params)
  if with_ids?
    params.values[0] || {}
  else
    params || {}
  end
end
symbolize_params(params) click to toggle source
# File lib/simple_params/nested_params.rb, line 82
def symbolize_params(params)
  Hash[params.map{ |k, v| [k.to_sym, v] }]
end
with_ids?() click to toggle source
# File lib/simple_params/nested_params.rb, line 78
def with_ids?
  self.class.with_ids?
end