Module: Wechat::Responder::ClassMethods
- Defined in:
- lib/wechat/responder.rb
Instance Attribute Summary collapse
-
#account_from_request ⇒ Object
Returns the value of attribute account_from_request.
Instance Method Summary collapse
- #on(message_type, with: nil, respond: nil, &block) ⇒ Object
- #responder_for(message) ⇒ Object
- #user_defined_batch_job_responders(with) ⇒ Object
- #user_defined_click_responders(with) ⇒ Object
- #user_defined_label_location_responders ⇒ Object
- #user_defined_location_responders ⇒ Object
- #user_defined_responders(type) ⇒ Object
- #user_defined_scan_responders ⇒ Object
- #user_defined_view_responders(with) ⇒ Object
Instance Attribute Details
#account_from_request ⇒ Object
Returns the value of attribute account_from_request.
32 33 34 |
# File 'lib/wechat/responder.rb', line 32 def account_from_request @account_from_request end |
Instance Method Details
#on(message_type, with: nil, respond: nil, &block) ⇒ Object
34 35 36 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 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/wechat/responder.rb', line 34 def on(, with: nil, respond: nil, &block) raise 'Unknow message type' unless [:text, :image, :voice, :video, :shortvideo, :link, :event, :click, :view, :scan, :batch_job, :location, :label_location, :fallback].include?() config = respond.nil? ? {} : { respond: respond } config[:proc] = block if block_given? if with.present? raise 'Only text, event, click, view, scan and batch_job can having :with parameters' unless [:text, :event, :click, :view, :scan, :batch_job].include?() config[:with] = with if == :scan if with.is_a?(String) self.known_scan_key_lists = with else raise 'on :scan only support string in parameter with, detail see https://github.com/Eric-Guo/wechat/issues/84' end end else raise 'Message type click, view, scan and batch_job must specify :with parameters' if [:click, :view, :scan, :batch_job].include?() end case when :click user_defined_click_responders(with) << config when :view user_defined_view_responders(with) << config when :batch_job user_defined_batch_job_responders(with) << config when :scan user_defined_scan_responders << config when :location user_defined_location_responders << config when :label_location user_defined_label_location_responders << config else user_defined_responders() << config end config end |
#responder_for(message) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/wechat/responder.rb', line 105 def responder_for() = [:MsgType].to_sym responders = user_defined_responders() case when :text yield(* match_responders(responders, [:Content])) when :event if 'click' == [:Event] && !user_defined_click_responders([:EventKey]).empty? yield(* user_defined_click_responders([:EventKey]), [:EventKey]) elsif 'view' == [:Event] && !user_defined_view_responders([:EventKey]).empty? yield(* user_defined_view_responders([:EventKey]), [:EventKey]) elsif 'click' == [:Event] yield(* match_responders(responders, [:EventKey])) elsif known_scan_key_lists.include?([:EventKey]) && %w(scan subscribe scancode_push scancode_waitmsg).freeze.include?([:Event]) yield(* known_scan_with_match_responders(user_defined_scan_responders, )) elsif 'batch_job_result' == [:Event] yield(* user_defined_batch_job_responders([:BatchJob][:JobType]), [:BatchJob]) elsif 'location' == [:Event] yield(* user_defined_location_responders, ) else yield(* match_responders(responders, [:Event])) end when :location yield(* user_defined_label_location_responders, ) else yield(responders.first) end end |
#user_defined_batch_job_responders(with) ⇒ Object
83 84 85 86 |
# File 'lib/wechat/responder.rb', line 83 def user_defined_batch_job_responders(with) @batch_job_responders ||= {} @batch_job_responders[with] ||= [] end |
#user_defined_click_responders(with) ⇒ Object
73 74 75 76 |
# File 'lib/wechat/responder.rb', line 73 def user_defined_click_responders(with) @click_responders ||= {} @click_responders[with] ||= [] end |
#user_defined_label_location_responders ⇒ Object
96 97 98 |
# File 'lib/wechat/responder.rb', line 96 def user_defined_label_location_responders @label_location_responders ||= [] end |
#user_defined_location_responders ⇒ Object
92 93 94 |
# File 'lib/wechat/responder.rb', line 92 def user_defined_location_responders @location_responders ||= [] end |
#user_defined_responders(type) ⇒ Object
100 101 102 103 |
# File 'lib/wechat/responder.rb', line 100 def user_defined_responders(type) @responders ||= {} @responders[type] ||= [] end |
#user_defined_scan_responders ⇒ Object
88 89 90 |
# File 'lib/wechat/responder.rb', line 88 def user_defined_scan_responders @scan_responders ||= [] end |
#user_defined_view_responders(with) ⇒ Object
78 79 80 81 |
# File 'lib/wechat/responder.rb', line 78 def user_defined_view_responders(with) @view_responders ||= {} @view_responders[with] ||= [] end |