class Gossiperl::Client::Resolution

Constants

UNDEFINED_VALUE

Public Class Methods

field(name, types, default_value=Resolution::UNDEFINED_VALUE) click to toggle source
# File lib/gossiperl_client/resolution.rb, line 8
def self.field(name, types, default_value=Resolution::UNDEFINED_VALUE)
  name = name.to_s
  define_method("#{name}=") do |value|
    if value.nil?
      type_matched = true
    else
      type_matched = false
      types = [types] unless types.is_a? Array
      types.each do |type|
        type_matched = true if value.is_a? type and not type_matched
      end
    end
    if type_matched
      self.instance_variable_set("@#{name}", value)
    else
      raise ArgumentError, "Invalid argument value type for #{name}. Required one of #{types.inspect}, received #{value.class}"
    end
  end
  
  define_method("#{name}") do
    if default_value != Resolution::UNDEFINED_VALUE
      self.instance_variable_set("@#{name}", default_value) unless self.instance_variable_defined? "@#{name}"
    end
    self.instance_variable_get("@#{name}")
  end
  
end