class FormObjects::ParamsConverter::CollectionConverter

Public Class Methods

new(params) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 4
def initialize(params)
  @params = params
end

Public Instance Methods

convert_attributes_to_array(object) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 12
def convert_attributes_to_array(object)
  return object unless object.respond_to?(:each_pair)

  object.inject({}) { |hash, attributes|
    key, value = attributes.first, attributes.last
    value      = value.to_a.sort.map { |attributes| attributes.last } if candidate_for_conversion?(key, value)
    hash[key]  = convert_attributes_to_array(value)

    hash
  }
end
params() click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 8
def params
  convert_attributes_to_array(@params)
end

Private Instance Methods

attribute_key?(key) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 45
def attribute_key?(key)
  key =~ /_attributes$/
end
candidate_for_conversion?(key, value) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 26
def candidate_for_conversion?(key, value)
  attribute_key?(key) and value.is_a?(Hash) and incrementing_sequence?(value.keys)
rescue ArgumentError
  false
end
generate_sequence_from(keys) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 32
def generate_sequence_from(keys)
  keys.map { |key| Integer(key) }.sort
end
incrementing_sequence?(keys) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 40
def incrementing_sequence?(keys)
  sequence = generate_sequence_from(keys)
  sequence == sequence_to(sequence.max)
end
sequence_to(max) click to toggle source
# File lib/form_objects/params_converter/collection_converter.rb, line 36
def sequence_to(max)
  (0..max).to_a
end