Module: Wechat::Responder::ClassMethods

Defined in:
lib/wechat/responder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#agentidObject

Returns the value of attribute agentid.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def agentid
  @agentid
end

#corpidObject

Returns the value of attribute corpid.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def corpid
  @corpid
end

#encoding_aes_keyObject

Returns the value of attribute encoding_aes_key.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def encoding_aes_key
  @encoding_aes_key
end

#encrypt_modeObject

Returns the value of attribute encrypt_mode.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def encrypt_mode
  @encrypt_mode
end

#skip_verify_sslObject

Returns the value of attribute skip_verify_ssl.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def skip_verify_ssl
  @skip_verify_ssl
end

#tokenObject

Returns the value of attribute token.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def token
  @token
end

#wechatObject

Returns the value of attribute wechat.



15
16
17
# File 'lib/wechat/responder.rb', line 15

def wechat
  @wechat
end

Instance Method Details

#on(message_type, with: nil, respond: nil, &block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/wechat/responder.rb', line 17

def on(message_type, with: nil, respond: nil, &block)
  fail 'Unknow message type' unless [:text, :image, :voice, :video, :location, :link, :event, :fallback].include?(message_type)
  config = respond.nil? ? {} : { respond: respond }
  config.merge!(proc: block) if block_given?

  if with.present? && ![:text, :event].include?(message_type)
    fail 'Only text and event message can take :with parameters'
  else
    config.merge!(with: with) if with.present?
  end

  user_defined_responders(message_type) << config
  config
end

#responder_for(message) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/wechat/responder.rb', line 37

def responder_for(message)
  message_type = message[:MsgType].to_sym
  responders = user_defined_responders(message_type)

  case message_type
  when :text
    yield(* match_responders(responders, message[:Content]))
  when :event
    if 'click' == message[:Event]
      yield(* match_responders(responders, message[:EventKey]))
    elsif %w(scancode_push scancode_waitmsg).include? message[:Event]
      yield(* match_responders(responders, event: 'scancode',
                                           event_key: message[:EventKey],
                                           scan_type: message[:ScanCodeInfo][:ScanType],
                                           scan_result: message[:ScanCodeInfo][:ScanResult]))
    elsif 'batch_job_result' == message[:Event]
      yield(* match_responders(responders, event: 'batch_job',
                                           batch_job: message[:BatchJob]))
    else
      yield(* match_responders(responders, message[:Event]))
    end
  else
    yield(responders.first)
  end
end

#user_defined_responders(type) ⇒ Object



32
33
34
35
# File 'lib/wechat/responder.rb', line 32

def user_defined_responders(type)
  @responders ||= {}
  @responders[type] ||= []
end