layer-api 0.6.1 → 0.7.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: eb24c5c4996760ac0ce9e1efed6ccfb03ec9c878
4
- data.tar.gz: ab91df8cb3337f8e792e6b15130a1d96b2cb2755
3
+ metadata.gz: d503cddd9b7bede59c73026f87bd04a5fad389e1
4
+ data.tar.gz: 107b52065cea9b15897c74ada0204e610714b336
5
5
  SHA512:
6
- metadata.gz: 1b6e334ea799bc1bcb865e80713f4a2a14458538df4659b7b87bcdebe1460406858bc4b8109826434fec09a70b783501a813ce7b5f22fe9465d609143fa965a3
7
- data.tar.gz: e71688cf635c519bff558fb42b99b4df9447ec1a2bdce6cfa62dc6267ad7811173107af219811423a5be518d64bedc2609d79463da36e1b1741aadd050741902
6
+ metadata.gz: 29142b474b962ef13c663705333c59a399df86d68d58599e03b2a62448bfd0456f402eec6ffeff158f7c46c270798d296a0c6c07b6f9e9c9d14bf7150e2fe4cd
7
+ data.tar.gz: 19f209e30eaba1b1e610336c30b74ff4667b80d3af2b9beb26e4beaab560b019f0b274a9507ce69c5e3257a1449afbe22565173dfb5b2d2c2bdd1c327952ce21
data/README.md CHANGED
@@ -112,17 +112,41 @@ operations = [
112
112
  ]
113
113
 
114
114
  conv.update(operations)
115
- # => nil
115
+ # => true
116
116
  ```
117
117
  #### Deleting Conversations ####
118
118
 
119
119
  ```ruby
120
120
  conv = platform.conversations.find("conversation_id")
121
121
  conv.destroy
122
- # => nil
122
+ # => true
123
123
 
124
124
  ```
125
125
 
126
+ #### Initiating a Rich Content Upload
127
+
128
+ ```ruby
129
+ conv = platform.conversations.find("conversation_id")
130
+ content = conv.content.create(mime_type: "image/png", file: File.open("image.png"))
131
+ # => #<Layer::Resources::RichContent @attributes={...}>
132
+
133
+ content.upload_url
134
+ # => "https://www.googleapis.com/upload/storage/path/to/content"
135
+ ```
136
+
137
+ #### Refreshing the download URL for a Content Object
138
+
139
+ ```ruby
140
+ content = conv.content.find("content_id")
141
+ # => #<Layer::Resources::RichContent @attributes={...}>
142
+
143
+ content.download_url
144
+ # => "http://google-testbucket.storage.googleapis.com/some/download/path"
145
+
146
+ content.refresh_url
147
+ # => "https://api.layer.com/apps/<APP_ID>/conversations/<CONVERSATION_ID>/content/<CONTENT_ID>"
148
+ ```
149
+
126
150
  #### Sending Messages ####
127
151
 
128
152
  ```ruby
@@ -185,7 +209,7 @@ messages = conv.messages.find("message_id")
185
209
  ```ruby
186
210
  conv = platform.conversations.find("conversation_id")
187
211
  conv.messages.find("message_id").destroy
188
- # => nil
212
+ # => true
189
213
  ```
190
214
 
191
215
  #### Sending Announcements ####
@@ -224,7 +248,7 @@ operations = [
224
248
  ]
225
249
 
226
250
  user.update(operations)
227
- # => nil
251
+ # => true
228
252
  ```
229
253
 
230
254
  #### Retrieving A Users Block List
@@ -259,16 +283,105 @@ owner.blocks.create(blocked)
259
283
  # using the blocked users id
260
284
  owner = platform.users.find("owner")
261
285
  owner.blocks.find("blocked_user").destroy
262
- # => nil
286
+ # => true
263
287
 
264
288
  # using a User object
265
289
  owner = platform.users.find("owner")
266
290
  blocked = platform.users.find("blocked")
267
291
 
268
292
  owner.blocks.find(blocked).destroy
269
- # => nil
293
+ # => true
294
+ ```
295
+
296
+ #### Creating a User Identity
297
+
298
+ ```ruby
299
+ identity = {
300
+ display_name: "Frodo the Dodo",
301
+ avatar_url: "http://sillylordoftheringspictures.com/frodo-riding-a-dodo.png",
302
+ first_name: "Frodo",
303
+ last_name: "Baggins",
304
+ phone_number: "13791379137",
305
+ email_address: "frodo@sillylordoftheringspictures.com",
306
+ metadata: {
307
+ level: "35",
308
+ race: "Dodo"
309
+ }
310
+ }
311
+
312
+ user = platform.users.find("user_id")
313
+ user.create_identity(identity)
314
+ # => true
315
+
270
316
  ```
271
317
 
318
+ #### Retrieving a User's Identity
319
+
320
+ ```ruby
321
+ user = platform.users.find("user_id")
322
+ user.identity
323
+ # => {"first_name"=>"Frodo", "phone_number"=>"13791379137", "email_address"=>"frodo@sillylordoftheringspictures.com", "display_name"=>"Frodo the Dodo", "user_id"=>"jake", "last_name"=>"Baggins", "metadata"=>{"race"=>"Dodo", "level"=>"35"}, "avatar_url"=>"http://sillylordoftheringspictures.com/frodo-riding-a-dodo.png"}
324
+ ```
325
+
326
+ #### Updating an Identity
327
+
328
+ ```ruby
329
+ operations = [
330
+ { operation: "set", property: "last_name", value: "Dodo" },
331
+ { operation: "set", property: "phone_number", value: "" },
332
+ { operation: "set", property: "metadata.level", value: "2" }
333
+ ]
334
+
335
+ user.update_identity(operations)
336
+ # => true
337
+ ```
338
+
339
+ #### Replacing an identity
340
+
341
+ ```ruby
342
+ identity = {
343
+ display_name: "Frodo the Dodo",
344
+ avatar_url: "http://sillylordoftheringspictures.com/frodo-riding-a-dodo.png",
345
+ first_name: "Frodo",
346
+ last_name: "Baggins",
347
+ phone_number: "13791379137",
348
+ email_address: "frodo@sillylordoftheringspictures.com",
349
+ metadata: {
350
+ level: "35",
351
+ race: "Dodo"
352
+ }
353
+ }
354
+
355
+ user.replace_identity(identity)
356
+ # => true
357
+
358
+ ```
359
+
360
+ #### Deleting a User's Identity
361
+
362
+ ```ruby
363
+ user = platform.users.find("user_id")
364
+ user.destroy_identity
365
+ # => true
366
+ ```
367
+
368
+ #### Setting a Users Badge
369
+
370
+ ```ruby
371
+ user = platform.users.find("user_id")
372
+ user.set_badge(10)
373
+ # => true
374
+ ```
375
+
376
+ #### Retrieving a Users Badge
377
+
378
+ ```ruby
379
+ user = platform.users.find("user_id")
380
+ user.badge
381
+ # => { "external_unread_count" => 13, "unread_conversation_count" => 10, "unread_message_count" => 50 }
382
+ ```
383
+
384
+
272
385
  #### Generating Identity Tokens ####
273
386
  See: [the official authentication guide](https://developer.layer.com/docs/android/guides#authentication)
274
387
 
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.license = "MIT"
12
12
 
13
13
  spec.summary = "A ruby toolkit for Layer's Web API's (https://developer.layer.com/docs)"
14
- spec.description = "Simple wrapper for the Layer's Web API's"
14
+ spec.description = "Simple wrapper for Layer's Web API's"
15
15
  spec.homepage = "https://github.com/cakejelly/layer-api"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -23,5 +23,6 @@ require "layer/resources/announcement"
23
23
  require "layer/resources/user"
24
24
  require "layer/resources/block"
25
25
  require "layer/resources/webhook"
26
+ require "layer/resources/rich_content"
26
27
 
27
28
  require "layer/middleware/api_errors"
@@ -13,6 +13,7 @@ module Layer
13
13
  @connection ||= Faraday.new(url: base_url) do |faraday|
14
14
  faraday.headers = default_headers
15
15
  faraday.request :url_encoded
16
+ faraday.request :multipart
16
17
  faraday.adapter Faraday.default_adapter
17
18
  faraday.use Middleware::ApiErrors
18
19
  end
@@ -22,6 +23,10 @@ module Layer
22
23
  call(:get, url, options)
23
24
  end
24
25
 
26
+ def put(url, options = {})
27
+ call(:put, url, options)
28
+ end
29
+
25
30
  def post(url, options = {})
26
31
  call(:post, url, options)
27
32
  end
@@ -36,7 +41,7 @@ module Layer
36
41
 
37
42
  def call(method, url, options = {})
38
43
  response = run_request(method, url, options)
39
- response.body.empty? ? nil : JSON.parse(response.body)
44
+ response.body.empty? ? true : JSON.parse(response.body)
40
45
  end
41
46
 
42
47
  def run_request(method, url, options = {})
@@ -1,17 +1,20 @@
1
1
  module Layer
2
2
  class ResourceProxy
3
+ attr_accessor :url
4
+
3
5
  def initialize(client, base, resource)
4
6
  @client = client
5
7
  @base = base
6
8
  @resource = resource
9
+ @url = get_url(base, resource)
7
10
  end
8
11
 
9
- def url
10
- @base.nil? ? @resource.url : "#{@base.url}/#{@resource.url}"
12
+ def get_url(base, resource)
13
+ base.nil? ? resource.url : "#{base.url}/#{resource.url}"
11
14
  end
12
15
 
13
16
  def method_missing(method, *args, &block)
14
- @resource.public_send(method, *([@client, url] + args), &block)
17
+ @resource.public_send(method, *([@client, @url] + args), &block)
15
18
  end
16
19
 
17
20
  def respond_to_missing?(method, include_private = false)
@@ -4,6 +4,16 @@ module Layer
4
4
  def messages
5
5
  Layer::ResourceProxy.new(client, self, Message)
6
6
  end
7
+
8
+ def content
9
+ proxy = Layer::ResourceProxy.new(client, self, RichContent)
10
+ proxy.url = content_url
11
+ proxy
12
+ end
13
+
14
+ def content_url
15
+ "conversations/#{uuid}/content"
16
+ end
7
17
  end
8
18
  end
9
19
  end
@@ -0,0 +1,26 @@
1
+ module Layer
2
+ module Resources
3
+ class RichContent < Layer::Resource
4
+ def self.create(client, url, params = {})
5
+ mime_type = params[:mime_type]
6
+ file = params[:file]
7
+
8
+ headers = {
9
+ "Upload-Content-Type" => mime_type,
10
+ "Upload-Content-Length" => file.size.to_s
11
+ }
12
+
13
+ response = client.post(url, body: params.to_json, headers: headers)
14
+ response.merge!("mime_type" => mime_type)
15
+
16
+ new(response, client).upload(file)
17
+ end
18
+
19
+ def upload(file)
20
+ file_header = { "Content-Length" => file.size.to_s }
21
+ client.put(upload_url, body: file, headers: file_header)
22
+ self
23
+ end
24
+ end
25
+ end
26
+ end
@@ -16,6 +16,45 @@ module Layer
16
16
  def messages
17
17
  Layer::ResourceProxy.new(client, self, Layer::Resources::Message)
18
18
  end
19
+
20
+ def create_identity(params)
21
+ client.post(identity_url, body: params.to_json)
22
+ end
23
+
24
+ def identity
25
+ client.get(identity_url)
26
+ end
27
+
28
+ def update_identity(params)
29
+ client.patch(
30
+ identity_url,
31
+ body: params.to_json,
32
+ headers: client.layer_patch_header
33
+ )
34
+ end
35
+
36
+ def replace_identity(params)
37
+ client.put(identity_url, body: params.to_json)
38
+ end
39
+
40
+ def destroy_identity
41
+ client.delete(identity_url)
42
+ end
43
+
44
+ def set_badge(badge_count)
45
+ body = { external_unread_count: badge_count }
46
+ client.put("#{url}/badge", body: body.to_json)
47
+ end
48
+
49
+ def badge
50
+ client.get("#{url}/badge")
51
+ end
52
+
53
+ private
54
+
55
+ def identity_url
56
+ "#{url}/identity"
57
+ end
19
58
  end
20
59
  end
21
60
  end
@@ -1,5 +1,5 @@
1
1
  module Layer
2
2
  module Api
3
- VERSION = "0.6.1"
3
+ VERSION = "0.7.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: layer-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Kelly
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-10 00:00:00.000000000 Z
11
+ date: 2016-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,7 +140,7 @@ dependencies:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
142
  version: 1.5.1
143
- description: Simple wrapper for the Layer's Web API's
143
+ description: Simple wrapper for Layer's Web API's
144
144
  email:
145
145
  - jake.kelly10@gmail.com
146
146
  executables: []
@@ -170,6 +170,7 @@ files:
170
170
  - lib/layer/resources/block.rb
171
171
  - lib/layer/resources/conversation.rb
172
172
  - lib/layer/resources/message.rb
173
+ - lib/layer/resources/rich_content.rb
173
174
  - lib/layer/resources/user.rb
174
175
  - lib/layer/resources/webhook.rb
175
176
  - lib/layer/version.rb