class Attrio::Types::Array
Public Class Methods
typecast(value, options = {})
click to toggle source
# File lib/attrio/types/array.rb, line 6 def self.typecast(value, options = {}) begin array = (!value.is_a?(::Array) && value.respond_to?(:split)) ? value.split(options[:split]): Attrio::Helpers.to_a(value).flatten if options[:element].present? type = Attrio::AttributesParser.cast_type(self.element_type(options[:element])) options = self.element_options(options[:element]) array.map! do |item| if type.respond_to?(:typecast) && type.respond_to?(:typecasted?) type.typecasted?(item) ? item : type.typecast(item, options) else type == Hash && item.is_a?(Hash) ? value : type.new(item) end end end array rescue ArgumentError => e nil end end
typecasted?(value, options = {})
click to toggle source
# File lib/attrio/types/array.rb, line 29 def self.typecasted?(value, options = {}) if options[:element].present? type = Attrio::AttributesParser.cast_type(self.element_type(options[:element])) value.is_a?(::Array) && !value.any?{ |e| !e.is_a?(type) } else value.is_a?(::Array) end end
Protected Class Methods
element_options(element)
click to toggle source
# File lib/attrio/types/array.rb, line 46 def self.element_options(element) element[:options] || {} rescue {} end
element_type(element)
click to toggle source
# File lib/attrio/types/array.rb, line 40 def self.element_type(element) element[:type] rescue element end