class Eco::API::Common::People::DefaultParsers::NumericParser < Eco::API::Common::Loaders::Parser attribute :number def parser(value, _deps) parse_number(value) end def serializer(value, _deps) value.is_a?(Array) ? value.map(&:to_s) : value.to_s end private def parse_number(value) return value.map {|val| parse_number(val)}.compact if value.is_a?(Enumerable) return nil if value.nil? value = value.to_s.strip return nil if value.empty? return nil unless number?(value) value.to_f rescue ArgumentError, TypeError nil end def number?(value) true if Float(value) rescue ArgumentError, TypeError false end end