module Render::Type

Attributes

instances[RW]

Public Class Methods

add!(name, klass) click to toggle source
# File lib/render/type.rb, line 16
def add!(name, klass)
  self.instances.merge!({ formatted_name(name) => klass })
end
find(name) click to toggle source
# File lib/render/type.rb, line 20
def find(name)
  class_for_name(name) || class_for_name(render_name(name))
end
parse(name, raise_error = false) click to toggle source
# File lib/render/type.rb, line 24
def parse(name, raise_error = false)
  return name.collect { |union_type| parse(union_type, raise_error) } if name.is_a?(Array)
  return nil if (name.nil?)
  return name unless name.is_a?(String) || name.is_a?(Symbol)

  Render::Type.find(name) || Object.const_get(name.capitalize)
rescue NameError
  raise Errors::InvalidType.new(name) if raise_error
end
parse!(name) click to toggle source
# File lib/render/type.rb, line 34
def parse!(name)
  parse(name, true)
end
to(classes, value) click to toggle source
# File lib/render/type.rb, line 38
def to(classes, value)
  return nil if (value.nil? || classes.any?(&:nil?))
  return value if classes.any? { |klass| value.is_a?(klass) }

  case(classes.first.name)
  when Float.name
    value.to_f
  when Integer.name
    value.to_i
  when String.name
    value.to_s
  when Boolean.name
    return true if (value == true || value == "true")
    return false if (value == false || value == "false")
  else
    value
  end
end

Private Class Methods

add_render_specific_type!(name) click to toggle source
# File lib/render/type.rb, line 74
def add_render_specific_type!(name)
  add!(render_name(name), Type.const_get(name))
end
class_for_name(name) click to toggle source
# File lib/render/type.rb, line 59
def class_for_name(name)
  instances.each do |(instance_name, instance_class)|
    return instance_class if name.to_s.match(/#{instance_name}/i)
  end
  nil
end
formatted_name(name) click to toggle source
# File lib/render/type.rb, line 66
def formatted_name(name)
  name.to_s.downcase.to_sym
end
render_name(name) click to toggle source
# File lib/render/type.rb, line 70
def render_name(name)
  formatted_name("render_#{name}")
end