Class: Gossiperl::Client::Resolution
- Inherits:
-
Object
- Object
- Gossiperl::Client::Resolution
- Defined in:
- lib/gossiperl_client/headers.rb,
lib/gossiperl_client/resolution.rb
Direct Known Subclasses
Encryption::Aes256, Messaging, OverlayWorker, State, Supervisor, Transport::Udp
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 |