class Muffin::Attribute
Attributes
default[R]
name[R]
permit[R]
permitted_values[R]
type[R]
Public Class Methods
new(name:, type:, array:, default:, permit:, permitted_values:, block:)
click to toggle source
# File lib/muffin/attribute.rb, line 3 def initialize(name:, type:, array:, default:, permit:, permitted_values:, block:) array = true if array == nil && (type&.is_a?(Array) || block) array ||= false type = type.first if type&.is_a? Array @name = name @type = type @array = array @default = default @permit = permit @permitted_values = permitted_values end
Public Instance Methods
array?()
click to toggle source
# File lib/muffin/attribute.rb, line 17 def array? @array end
coercise(value)
click to toggle source
# File lib/muffin/attribute.rb, line 21 def coercise(value) convert value end
Private Instance Methods
convert(value, access_array: false)
click to toggle source
# File lib/muffin/attribute.rb, line 27 def convert(value, access_array: false) return convert(default) if value == nil && default return (value || []).map { |e| convert(e, access_array: true) } if array? && !access_array return value.deep_dup if value.is_a? type return value if value.nil? if type <= DateTime value.to_s.in_time_zone(Time.zone).to_datetime if value.present? elsif type <= Date # needs to come *after* DateTime because DateTime <= Date Date.parse(value) if value.present? elsif type <= Integer value&.to_i elsif type <= Float value&.to_f elsif type <= String value&.to_s elsif type <= Symbol value.class <= Integer ? value.to_s.to_sym : value&.to_sym elsif type <= Time Time.parse(value).in_time_zone if value.present? elsif type <= BigDecimal type.new(value) if value.present? elsif type <= Hash type.new.merge!(value&.to_h&.deep_dup) if value.present? elsif type <= Muffin::Boolean type.new(value).to_bool else type.new(value || {}) end end