Module: Ass::Callback

Included in:
Client, Server
Defined in:
lib/ass.rb

Instance Method Summary collapse

Instance Method Details

#build_callback_klass(callback) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/ass.rb', line 64

def build_callback_klass(callback)
  case callback
  when Proc
    Class.new &callback
  when Class
    callback
  when Module
    Class.new { include callback }
  end
end

#callback(info, payload) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/ass.rb', line 75

def callback(info,payload)
  # method,data,meta
  if @callback_klass.respond_to? :version
    klass = @callback_klass.get_version(payload[:version])
  else
    klass = @callback_klass
  end
  obj = klass.new
  service = self
  obj.instance_variable_set("@__service__",service)
  obj.instance_variable_set("@__header__",info)
  obj.instance_variable_set("@__meta__",payload[:meta])
  class << obj
    def header
      @__header__
    end

    def meta
      @__meta__
    end
    
    def service
      @__service__
    end

    def call(method,data=nil,meta=nil,opts={})
      @__service__.call(method,data,meta,opts)
    end
  end
  #p [:call,payload]
  obj.send(payload[:method],
           payload[:data])
end