messenger-ruby 1.1.7 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5eb5b0ef51a79852615cc9b7094eef76ae31768
4
- data.tar.gz: f9579f120b2b276be47e7a6ba8304a764fbaa7f8
3
+ metadata.gz: f1e78c50c9e0bb2e4f5a874b2d5f9eac248fc280
4
+ data.tar.gz: 5b612f714540edcc18cbf4148d7769e3927f366e
5
5
  SHA512:
6
- metadata.gz: 20b4de7951674a3a9b4c00f54f7f9a31e6bf454fbcb4bbcdcee20aa867da4905a7f4a18aa5a72717cfdfc35f1d9e7c5ea87099523a9b5c7d4d09f9dd858c3ea7
7
- data.tar.gz: f75be9c9e5934dd672bd95ba393dab57306c96f525995dfa39d92d55ff282e35e85d4e2d4b6436df525df9a4ea2ef513d8ef8f52e8977c5fb5f62b06aa924209
6
+ metadata.gz: 05f2ba4823c440175a20eee95b5776a7a19a643c23cce0f483eade0d6a48ae256e07c4d9d4ecc15edd68f6305aa73dd74863b690c711193056a29e7e5db69e4b
7
+ data.tar.gz: f2b460829b2583a22eb7b9abeeb67bdb4f15bac9bf9c5c9aa561608a63895c4bb87395c45145437eb35ba3cd98d4830cdc273499391449d34d41fea047c3c9c5
data/README.md CHANGED
@@ -1,11 +1,14 @@
1
1
  # messenger-ruby
2
2
  [![](https://img.shields.io/gem/v/messenger-ruby.svg?style=flat-square)](https://rubygems.org/gems/messenger-ruby)
3
3
  [![](https://img.shields.io/circleci/project/netguru/messenger-ruby.svg?style=flat-square)](https://circleci.com/gh/netguru/messenger-ruby)
4
- [![Code Climate](https://codeclimate.com/repos/571f619474664d1dff007ae0/badges/77203f4d34a36b976a2b/gpa.svg)](https://codeclimate.com/repos/571f619474664d1dff007ae0/feed)
5
- [![Test Coverage](https://codeclimate.com/repos/571f619474664d1dff007ae0/badges/77203f4d34a36b976a2b/coverage.svg)](https://codeclimate.com/repos/571f619474664d1dff007ae0/coverage)
4
+ [![codebeat badge](https://codebeat.co/badges/9e5fcfd6-dc77-4a0b-a355-0c6cdd6d1f14)](https://codebeat.co/projects/github-com-netguru-messenger-ruby)
6
5
 
7
6
  A simple library for supporting implementation of [Facebook Messenger Bot](https://developers.facebook.com/products/messenger/) in Ruby on Rails.
8
7
 
8
+ ## Requirments
9
+
10
+ ruby 2.1+
11
+
9
12
  ## Installation
10
13
 
11
14
  Add this line to your application's Gemfile:
@@ -143,6 +146,26 @@ Messenger::Elements::Bubble.new(title: 'First', subtitle: 'Bubble')
143
146
 
144
147
  ```
145
148
 
149
+ #### Quick Reply
150
+
151
+ Used by [Quick Replies](#quick-replies).
152
+
153
+ Attribute | Allowed values | Required?
154
+ --------- | -------------- | :--------:
155
+ content_type | 'text' or 'location' | ✔
156
+ title | String | only if content_type is 'text'
157
+ payload | String | only if content_type is 'text'
158
+ image_url | String | ✘
159
+
160
+ Example usage:
161
+ ```ruby
162
+ Messenger::Elements::QuickReply.new(
163
+ content_type: 'text',
164
+ title: 'SomeTitle',
165
+ payload: "PAYLOAD"
166
+ )
167
+ ```
168
+
146
169
  #### Address
147
170
 
148
171
  Used by [Receipt template](#receipt-template).
@@ -292,6 +315,57 @@ Messenger::Client.send(
292
315
  ...
293
316
  ```
294
317
 
318
+ #### Sender Actions
319
+
320
+ Attribute | Allowed values | Required?
321
+ --------- | -------------- | :--------:
322
+ sender_action | 'typing_on', 'typing_off' or 'mark_seen' | ✔
323
+
324
+ Sending send action:
325
+ ```ruby
326
+ ...
327
+ Messenger::Client.send(
328
+ Messenger::Request.new(
329
+ Messenger::Elements::SenderAction.new(sender_action: 'mark_seen'),
330
+ fb_params.first_entry.sender_id
331
+ )
332
+ )
333
+ ...
334
+ ```
335
+
336
+ #### Quick Replies
337
+
338
+ Attribute | Allowed values | Required?
339
+ --------- | -------------- | :--------:
340
+ text | String | attachment or text must be set
341
+ attachment | Attachment object | attachment or text must be set
342
+ quick_reply | Array of [Messenger::Elements::QuickReply](#quick_reply) objects| ✘
343
+
344
+ Example usage
345
+ ```ruby
346
+
347
+ #define quick_replies here...
348
+ quick_replies = Messenger::Templates::QuickReplies.new(
349
+ text: "Green or Red?",
350
+ quick_replies: [
351
+ Messenger::Elements::QuickReply.new(
352
+ content_type: 'text',
353
+ title: 'Green',
354
+ payload: 'GREEN'
355
+ ),
356
+ Messenger::Elements::QuickReply.new(
357
+ content_type: 'text',
358
+ title: 'Red',
359
+ payload: "RED"
360
+ )
361
+ ]
362
+ )
363
+
364
+ #now send quick_replies to the user
365
+ Messenger::Client.send(
366
+ Messenger::Request.new(quick_replies, fb_params.first_entry.sender_id)
367
+ )
368
+ ```
295
369
  #### Generic template
296
370
 
297
371
  Attribute | Allowed values | Required?
@@ -480,7 +554,8 @@ mid |
480
554
  seq |
481
555
  sticker_id |
482
556
  text |
483
- attachments | Array of [Messenger::Parameters::Attachment](#attachment) objects
557
+
558
+ s | Array of [Messenger::Parameters::Attachment](#attachment) objects
484
559
  is_echo |
485
560
  app_id |
486
561
  metadata |
@@ -39,7 +39,47 @@ module Messenger
39
39
  end
40
40
 
41
41
  def fb_params
42
- Params.new(params)
42
+ safe_params = params.permit(:object,
43
+ entry: [
44
+ :id,
45
+ :time,
46
+ messaging: [
47
+ { sender: :id },
48
+ :timestamp,
49
+ { recipient: :id },
50
+ message:
51
+ [
52
+ :mid,
53
+ :seq,
54
+ { sticker: :id },
55
+ :text,
56
+ { attachments: [
57
+ :type,
58
+ :url,
59
+ { coordinates: :lat },
60
+ { coordinates: :long }
61
+ ] },
62
+ { quick_reply: :payload },
63
+ :is_echo,
64
+ { app: :id },
65
+ :metadata
66
+ ],
67
+ read: [
68
+ :watermark,
69
+ :seq
70
+ ],
71
+ postback: :payload,
72
+ optin: :ref,
73
+ delivery: [
74
+ { mids: [] },
75
+ :watermark,
76
+ :seq
77
+ ],
78
+ account_linking: [
79
+ :status, :authorization_code
80
+ ]
81
+ ]])
82
+ Params.new(safe_params)
43
83
  end
44
84
  end
45
85
  end
@@ -26,8 +26,11 @@ require "messenger/components/elements/text"
26
26
  require "messenger/components/elements/image"
27
27
  require "messenger/components/elements/button"
28
28
  require "messenger/components/elements/bubble"
29
+ require "messenger/components/elements/quick_reply"
30
+ require "messenger/components/elements/sender_action"
29
31
 
30
32
  require "messenger/parameters/attachment"
33
+ require "messenger/parameters/quick_reply"
31
34
  require "messenger/parameters/callback"
32
35
  require "messenger/parameters/entry"
33
36
  require "messenger/parameters/messaging"
@@ -48,6 +51,7 @@ require "messenger/components/elements/receipt/summary"
48
51
  require "messenger/components/templates/buttons"
49
52
  require "messenger/components/templates/generic"
50
53
  require "messenger/components/templates/receipt"
54
+ require "messenger/components/templates/quick_replies"
51
55
 
52
56
  require "messenger/client"
53
57
  require "messenger/request"
@@ -4,6 +4,10 @@ module Messenger
4
4
  def build
5
5
  instance_values.delete_if { |_attribute, value| value.nil? }
6
6
  end
7
+
8
+ def build_elements(elements)
9
+ elements.map { |element| element.build } if elements.present?
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -0,0 +1,24 @@
1
+ require 'messenger/components/element'
2
+
3
+ module Messenger
4
+ module Elements
5
+ class QuickReply
6
+ include Components::Element
7
+
8
+ attr_accessor :content_type, :title, :payload, :image_url
9
+
10
+ def initialize(content_type:, title: nil, payload: nil, image_url: nil)
11
+ @content_type = content_type
12
+ @title = title if text?(content_type)
13
+ @payload = payload if text?(content_type)
14
+ @image_url = image_url
15
+ end
16
+
17
+ private
18
+
19
+ def text?(value)
20
+ value == 'text'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ module Messenger
2
+ module Elements
3
+ class SenderAction
4
+ attr_accessor :sender_action
5
+
6
+ def initialize(sender_action:)
7
+ @sender_action = sender_action
8
+ end
9
+
10
+ def build
11
+ { 'sender_action' => @sender_action }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ require 'messenger/components/attachment'
2
+
3
+ module Messenger
4
+ module Elements
5
+ class Video
6
+ include Components::Attachment
7
+
8
+ attr_accessor :url
9
+
10
+ ATTRIBUTES = %w(url).freeze
11
+
12
+ def initialize(url:)
13
+ @url = url
14
+ @type = 'video'
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'messenger/components/attachment'
2
+
3
+ module Messenger
4
+ module Templates
5
+ class QuickReplies
6
+ include Components::Element
7
+
8
+ attr_accessor :text, :quick_replies
9
+
10
+ ATTRIBUTES = %w(text quick_replies).freeze
11
+
12
+ def initialize(text:, quick_replies:)
13
+ @text = text
14
+ @quick_replies = build_elements(quick_replies)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,7 +1,7 @@
1
1
  module Messenger
2
2
  module Parameters
3
3
  module Callback
4
- %w(message delivery optin postback read account_linking).each do |method|
4
+ %w(message delivery optin postback read account_linking referral).each do |method|
5
5
  define_method("#{method}?") do
6
6
  type.include?(method)
7
7
  end
@@ -10,7 +10,7 @@ module Messenger
10
10
  end
11
11
 
12
12
  def build_messagings(messagings)
13
- messagings.map { |messaging| Messaging.new(messaging.symbolize_keys) }
13
+ messagings.map { |messaging| Messaging.new(messaging.transform_keys(&:to_sym)) }
14
14
  end
15
15
  end
16
16
  end
@@ -5,19 +5,24 @@ module Messenger
5
5
 
6
6
  attr_accessor :mid, :seq, :sticker_id, :text, :attachments, :is_echo, :app_id, :metadata
7
7
 
8
- def initialize(mid:, seq:, sticker_id: nil, text: nil, attachments: nil, is_echo: nil, app_id: nil, metadata: nil)
8
+ def initialize(mid:, seq:, sticker_id: nil, text: nil, attachments: nil, quick_reply: nil, is_echo: nil, app_id: nil, metadata: nil)
9
9
  @mid = mid
10
10
  @seq = seq
11
11
  @sticker_id = sticker_id if sticker_id.present?
12
12
  @text = text if text.present?
13
13
  @attachments = build_attachments(attachments) if attachments.present?
14
+ @quick_reply = build_quick_reply(quick_reply) if quick_reply.present?
14
15
  @is_echo = is_echo
15
16
  @app_id = app_id
16
17
  @metadata = metadata
17
18
  end
18
19
 
19
20
  def build_attachments(attachments)
20
- attachments.map { |attachment| Attachment.new(attachment.symbolize_keys.slice(:type, :payload)) }
21
+ attachments.map { |attachment| Attachment.new(attachment.transform_keys(&:to_sym).slice(:type, :payload)) }
22
+ end
23
+
24
+ def build_quick_reply(quick_reply)
25
+ QuickReply.new(quick_reply.transform_keys(&:to_sym))
21
26
  end
22
27
  end
23
28
  end
@@ -11,7 +11,7 @@ module Messenger
11
11
 
12
12
  def set_callback(callbacks)
13
13
  type = callbacks.select { |_, v| v.present? }.keys.first
14
- @callback = constant(type).new(callbacks[type].symbolize_keys)
14
+ @callback = constant(type).new(callbacks[type].transform_keys(&:to_sym))
15
15
  end
16
16
 
17
17
  private
@@ -0,0 +1,11 @@
1
+ module Messenger
2
+ module Parameters
3
+ class QuickReply
4
+ attr_accessor :payload
5
+
6
+ def initialize(payload:)
7
+ @payload = payload
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Messenger
2
+ module Parameters
3
+ class Referral
4
+ include Callback
5
+
6
+ attr_accessor :ref, :source, :type
7
+
8
+ def initialize(ref:, source:, type:)
9
+ @ref = ref
10
+ @source = source
11
+ @type = type
12
+ end
13
+ end
14
+ end
15
+ end
@@ -14,10 +14,12 @@ module Messenger
14
14
  entries[0].messagings[0]
15
15
  end
16
16
 
17
+ alias_method :first_messaging, :first_entry
18
+
17
19
  private
18
20
 
19
21
  def build_entries
20
- params['entry'].map { |entry| Parameters::Entry.new(entry.symbolize_keys) }
22
+ params['entry'].map { |entry| Parameters::Entry.new(entry.to_h.transform_keys(&:to_sym)) }
21
23
  end
22
24
  end
23
25
  end
@@ -3,7 +3,7 @@ module Messenger
3
3
  def initialize(component, recipient_id)
4
4
  @recipient_id = recipient_id
5
5
  @body = body
6
- add_element(component)
6
+ create_request(component)
7
7
  end
8
8
 
9
9
  def build
@@ -11,14 +11,25 @@ module Messenger
11
11
  end
12
12
 
13
13
  def add_element(element)
14
- @body[:message].merge! element.build
14
+ @body.merge!({ message: element.build })
15
+ end
16
+
17
+ def add_sender_action(action)
18
+ @body.merge!(action.build)
15
19
  end
16
20
 
17
21
  def body
18
22
  {
19
- recipient: { id: @recipient_id },
20
- message: {}
23
+ recipient: { id: @recipient_id }
21
24
  }
22
25
  end
26
+
27
+ def create_request(component)
28
+ if component.is_a? Elements::SenderAction
29
+ add_sender_action(component)
30
+ else
31
+ add_element(component)
32
+ end
33
+ end
23
34
  end
24
35
  end
@@ -1,3 +1,3 @@
1
1
  module Messenger
2
- VERSION = "1.1.7"
2
+ VERSION = "1.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: messenger-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - justynjozwiak
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-07-22 00:00:00.000000000 Z
12
+ date: 2016-12-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -163,14 +163,18 @@ files:
163
163
  - lib/messenger/components/elements/bubble.rb
164
164
  - lib/messenger/components/elements/button.rb
165
165
  - lib/messenger/components/elements/image.rb
166
+ - lib/messenger/components/elements/quick_reply.rb
166
167
  - lib/messenger/components/elements/receipt/address.rb
167
168
  - lib/messenger/components/elements/receipt/adjustment.rb
168
169
  - lib/messenger/components/elements/receipt/item.rb
169
170
  - lib/messenger/components/elements/receipt/order.rb
170
171
  - lib/messenger/components/elements/receipt/summary.rb
172
+ - lib/messenger/components/elements/sender_action.rb
171
173
  - lib/messenger/components/elements/text.rb
174
+ - lib/messenger/components/elements/video.rb
172
175
  - lib/messenger/components/templates/buttons.rb
173
176
  - lib/messenger/components/templates/generic.rb
177
+ - lib/messenger/components/templates/quick_replies.rb
174
178
  - lib/messenger/components/templates/receipt.rb
175
179
  - lib/messenger/configuration.rb
176
180
  - lib/messenger/engine.rb
@@ -183,7 +187,9 @@ files:
183
187
  - lib/messenger/parameters/messaging.rb
184
188
  - lib/messenger/parameters/optin.rb
185
189
  - lib/messenger/parameters/postback.rb
190
+ - lib/messenger/parameters/quick_reply.rb
186
191
  - lib/messenger/parameters/read.rb
192
+ - lib/messenger/parameters/referral.rb
187
193
  - lib/messenger/params.rb
188
194
  - lib/messenger/request.rb
189
195
  - lib/messenger/version.rb