messenger-ruby 1.1.7 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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