Class: Gossiperl::Client::Resolution

Inherits:
Object
  • Object
show all
Defined in:
lib/gossiperl_client/headers.rb,
lib/gossiperl_client/resolution.rb

Constant Summary collapse

UNDEFINED_VALUE =
'GOSSIPERL_UNDEFINED_VALUE'

Class Method Summary collapse

Class Method Details

.field(name, types, default_value = Resolution::UNDEFINED_VALUE) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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