Method: Arpie::Binary#method_missing

Defined in:
lib/arpie/binary.rb

#method_missing(m, *a) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/arpie/binary.rb', line 99

def method_missing m, *a
  m.to_s =~ /^(.+?)(=?)$/ or super
  at = $1.to_sym
  if self.class.field?(at)
    if $2 == "="
      a.size == 1 or raise ArgumentError
      if !a[0].is_a?(Class) && inline = self.class.get_field(at)[3]
        a[0], __nil = inline.from(a[0], {})
      end
      @fields[at] = a[0]
    else
      @fields[at]
    end

  elsif self.class.virtual?(at)
    if $2 == "="
      raise ArgumentError
    else
      Binary.call_virtual(self, at)
    end

  else
    super
  end
end