layer-api 0.5.0 → 0.6.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: 18e06f067abf951b4ca63b477a8e1588ff26315e
4
- data.tar.gz: 5e4a3538083b1bed84c05c9b630a601cb2fde88d
3
+ metadata.gz: 496391415565acba6e9457ee56385474741f3ba1
4
+ data.tar.gz: f849b844f3362d4285dfc329d8fa268af4dea07a
5
5
  SHA512:
6
- metadata.gz: bcc79b9bde3ea41415d224e1f5598ac133b8189e3b189fe0f3c8ddb9e412eb24df39fecbd237eac2ae64b7bcaa9f7656e1993a183f1b4a7397a2dee7e3500794
7
- data.tar.gz: 7b1a390f6ec9961a93cecd1e1c418f99e945f0e6577b9db4d30a0a1a8c314a6e485e51a46b84d6e52883d254a85472e0a7b0864ae5fe821bbaa0ad4b6d25d2cd
6
+ metadata.gz: d23bf3f10474ff0bbe727f28650b490a84459e1760d54e43457ed67df1f00a11d9ab06154aefe555f4bea2a132326f436fbd3a944946c30c83f76cb8ebf3d637
7
+ data.tar.gz: 41377bb6ff55bc0c127a56cd0634a32ccd4fde0af998c3982f55fe03dd8dbdae443feb05fbb6372b8d9d8761697d6e7833fc2c85d7bed1e04295ca2dee24c63f
data/README.md CHANGED
@@ -28,11 +28,11 @@ Or install it yourself as:
28
28
  ## Usage
29
29
 
30
30
  ### Resources
31
- All client methods return `Resource` objects or a collection of `Resource` objects. Every attribute from a resource can be accessed by calling attribute methods:
31
+ All client methods return `Resource` objects or a collection of `Resource` objects. Every attribute from a resource can be accessed by calling attribute methods:
32
32
 
33
33
  ```ruby
34
34
  conversation = platform.conversations.find("fb2f3a48-523d-4449-a57f-c6651fc6612c")
35
- #<Layer::Resources::Conversation:0x007fdb18b44bf0 @attributes={...}>
35
+ #<Layer::Resources::Conversation @attributes={...}>
36
36
 
37
37
  # Get the stripped uuid for any resource
38
38
  conversation.uuid
@@ -46,19 +46,19 @@ conversation.attributes
46
46
  # => {"id" => "fb2f3a48-523d-4449-a57f-c6651fc6612c", "url" => "https://api.layer.com/apps/<APP_ID>/conversations/fb2f3a48-523d-4449-a57f-c6651fc6612c", ...}
47
47
  ```
48
48
 
49
- ### [Platform API](https://developer.layer.com/docs/platform)
50
- See the official [Platform API docs](https://developer.layer.com/docs/platform) for additional info.
49
+ ### [Platform](https://developer.layer.com/docs/platform)
50
+ See the [Platform API docs](https://developer.layer.com/docs/platform) for additional info.
51
51
 
52
52
  #### Authentication/setup
53
53
 
54
54
  ```ruby
55
55
  platform = Layer::Platform::Client.new(api_token: "your_api_token", app_id: "your_app_id")
56
- # => #<Layer::Platform::Client:0x007fdb19844f30 @api_token="...", @app_id="...">
56
+ # => #<Layer::Platform::Client @api_token="...", @app_id="...">
57
57
  ```
58
58
  If you have `ENV['LAYER_API_TOKEN']` and `ENV['LAYER_APP_ID']` environment variables setup, they will be used by default and don't need to be included:
59
59
  ```ruby
60
60
  platform = Layer::Platform::Client.new
61
- # => #<Layer::Platform::Client:0x007fdb19844f30 @api_token="...", @app_id="...">
61
+ # => #<Layer::Platform::Client @api_token="...", @app_id="...">
62
62
  ```
63
63
 
64
64
  #### Retrieving Conversations ####
@@ -76,11 +76,11 @@ convs = user.conversations.list
76
76
  # For a user
77
77
  user = platform.users.find("user_id")
78
78
  conv = user.conversations.find("conversation_id")
79
- # => #<Layer::Resources::Conversation:0x007fdb18b44bf0 @attributes={...}>
79
+ # => #<Layer::Resources::Conversation @attributes={...}>
80
80
 
81
81
  # or alternatively
82
82
  conv = platform.conversations.find("conversation_id")
83
- # => #<Layer::Resources::Conversation:0x007fdb18b44bf0 @attributes={...}>
83
+ # => #<Layer::Resources::Conversation @attributes={...}>
84
84
  ```
85
85
 
86
86
  #### Creating Conversations ####
@@ -98,7 +98,7 @@ conversation = {
98
98
  }
99
99
 
100
100
  platform.conversations.create(conversation)
101
- # => #<Layer::Resources::Conversation:0x007fdb18b44bf0 @attributes={...}>
101
+ # => #<Layer::Resources::Conversation @attributes={...}>
102
102
  ```
103
103
 
104
104
  #### Editing Conversations ####
@@ -149,7 +149,7 @@ message = {
149
149
 
150
150
  conv = platform.conversations.find("conversation_id")
151
151
  conv.messages.create(message)
152
- # => #<Layer::Resources::Message:0x007fdb18b44bf0 @attributes={...}>
152
+ # => #<Layer::Resources::Message @attributes={...}>
153
153
  ```
154
154
 
155
155
  #### Retrieving Messages ####
@@ -172,12 +172,12 @@ conv.messages.list
172
172
  # From a specific user's perspective
173
173
  user = platform.users.find("user_id")
174
174
  messages = user.messages.find("message_id")
175
- # => #<Layer::Resources::Message:0x007fdb18b44bf0 @attributes={...}>
175
+ # => #<Layer::Resources::Message @attributes={...}>
176
176
 
177
177
  # From the systems perspective
178
178
  conv = platform.conversations.find("conversation_id")
179
179
  messages = conv.messages.find("message_id")
180
- # => #<Layer::Resources::Message:0x007fdb18b44bf0 @attributes={...}>
180
+ # => #<Layer::Resources::Message @attributes={...}>
181
181
  ```
182
182
 
183
183
  #### Deleting A Message
@@ -209,7 +209,7 @@ announcement = {
209
209
  }
210
210
 
211
211
  platform.announcements.create(announcement)
212
- # => #<Layer::Resources::Announcement:0x007fdb18b44bf0 @attributes={...}>
212
+ # => #<Layer::Resources::Announcement @attributes={...}>
213
213
  ```
214
214
 
215
215
  #### Modifying A Users Block List ####
@@ -233,7 +233,7 @@ user.update(operations)
233
233
  user = platform.users.find("user_id")
234
234
 
235
235
  blocks = user.blocks.list
236
- # => [#<Layer::Resources::Block @attributes={...}>, [#<Layer::Resources::Block @attributes={...}>, ...]
236
+ # => [#<Layer::Resources::Block>, [#<Layer::Resources::Block>, ...]
237
237
  ```
238
238
 
239
239
  #### Blocking Users
@@ -280,12 +280,76 @@ Make sure the following environment variables are set:
280
280
  ```ruby
281
281
  # Returns a valid signed identity token. #
282
282
  token = platform.generate_identity_token(user_id: "1234", nonce: "your_random_nonce")
283
- # => #<Layer::IdentityToken:0x007f89b4adb890
283
+ # => #<Layer::IdentityToken:0x007f89b4adb890>
284
284
 
285
285
  token.to_s
286
286
  # => "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsInR.cCI6IkpXVCIsImN0eSI6ImxheWVyLWVpdDt2PTEiLCJraWQiOiJhNz.5YTE0MC02YzY3LTExZTUtYjM0Mi1jZGJmNDAwZTE5NDgifQ"
287
287
  ```
288
288
 
289
+ ### [Webhooks](https://developer.layer.com/docs/webhooks)
290
+ See the [Webhooks API docs](https://developer.layer.com/docs/webhooks) for additional info.
291
+
292
+ #### Authentication/setup
293
+
294
+ ```ruby
295
+ client = Layer::Webhooks::Client.new(api_token: "your_api_token", app_id: "your_app_id")
296
+ # => #<Layer::Webhooks::Client @api_token="...", @app_id="...">
297
+ ```
298
+ If you have `ENV['LAYER_API_TOKEN']` and `ENV['LAYER_APP_ID']` environment variables setup, they will be used by default and don't need to be included:
299
+ ```ruby
300
+ client = Layer::Webhooks::Client.new
301
+ # => #<Layer::Webhooks::Client @api_token="...", @app_id="...">
302
+ ```
303
+
304
+ #### Registering Webhooks
305
+
306
+ ```ruby
307
+ client.webhooks.create(
308
+ version: "1.0",
309
+ target_url: "https://mydomain.com/my-webhook-endpoint",
310
+ events: ["conversation.created", "message.sent"],
311
+ secret: "1697f925ec7b1697f925ec7b",
312
+ config: {:key1=>"value1", :key2=>"value2"}
313
+ )
314
+ # => #<Layer::Resources::Webhook @attributes={...}>
315
+ ```
316
+
317
+ #### Listing Webhooks
318
+
319
+ ```ruby
320
+ client.webhooks.list
321
+ # => [#<Layer::Resources::Webhook>, #<Layer::Resources::Webhook>, ...]
322
+ ```
323
+
324
+ #### Retrieving Webhooks
325
+
326
+ ```ruby
327
+ client.webhooks.find("webhook_id")
328
+ # => #<Layer::Resources::Webhook @attributes={...}>
329
+ ```
330
+
331
+ #### Activating Webhooks
332
+
333
+ ```ruby
334
+ webhook = client.webhooks.find("webhook_id")
335
+ webhook.activate
336
+ ```
337
+
338
+ #### Deactivating Webhooks
339
+
340
+ ```ruby
341
+ webhook = client.webhooks.find("webhook_id")
342
+ webhook.deactivate
343
+ ```
344
+
345
+ #### Deleting Webhooks
346
+
347
+ ```ruby
348
+ webhook = client.webhooks.find("webhook_id")
349
+ webhook.destroy
350
+ ```
351
+
352
+
289
353
  ## Development ##
290
354
 
291
355
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -8,15 +8,20 @@ require "layer/errors"
8
8
  require "layer/resource"
9
9
  require "layer/resource_proxy"
10
10
  require "layer/identity_token"
11
+ require "layer/base_client"
11
12
 
12
13
  # Platform
13
14
  require "layer/platform/client"
14
15
 
16
+ # Webhooks
17
+ require "layer/webhooks/client"
18
+
15
19
  # Resources
16
20
  require "layer/resources/conversation"
17
21
  require "layer/resources/message"
18
22
  require "layer/resources/announcement"
19
23
  require "layer/resources/user"
20
24
  require "layer/resources/block"
25
+ require "layer/resources/webhook"
21
26
 
22
27
  require "layer/middleware/api_errors"
@@ -0,0 +1,24 @@
1
+ module Layer
2
+ class BaseClient
3
+ DEFAULT_HOST = "https://api.layer.com"
4
+
5
+ def client
6
+ @http_client ||= Layer::HttpClient.new(base_url, default_headers)
7
+ end
8
+
9
+ def strip_layer_prefix(string)
10
+ string.split("/").last if string
11
+ end
12
+
13
+ def default_headers
14
+ {
15
+ 'Accept' => 'application/vnd.layer+json; version=1.0',
16
+ 'Content-Type' => 'application/json'
17
+ }
18
+ end
19
+
20
+ def base_url
21
+ DEFAULT_HOST
22
+ end
23
+ end
24
+ end
@@ -2,18 +2,16 @@ require 'securerandom'
2
2
 
3
3
  module Layer
4
4
  class HttpClient
5
- DEFAULT_HOST = "https://api.layer.com"
5
+ attr_reader :base_url, :default_headers
6
6
 
7
- attr_reader :app_id, :api_token
8
-
9
- def initialize(app_id, api_token)
10
- @app_id = app_id
11
- @api_token = api_token
7
+ def initialize(base_url, default_headers)
8
+ @base_url = base_url
9
+ @default_headers = default_headers
12
10
  end
13
11
 
14
12
  def connection
15
13
  @connection ||= Faraday.new(url: base_url) do |faraday|
16
- faraday.headers = default_layer_headers
14
+ faraday.headers = default_headers
17
15
  faraday.request :url_encoded
18
16
  faraday.adapter Faraday.default_adapter
19
17
  faraday.use Middleware::ApiErrors
@@ -53,20 +51,8 @@ module Layer
53
51
  )
54
52
  end
55
53
 
56
- def default_layer_headers
57
- {
58
- 'Accept' => 'application/vnd.layer+json; version=1.0',
59
- 'Authorization' => "Bearer #{api_token}",
60
- 'Content-Type' => 'application/json'
61
- }
62
- end
63
-
64
54
  def layer_patch_header
65
55
  { 'Content-Type' => 'application/vnd.layer-patch+json' }
66
56
  end
67
-
68
- def base_url
69
- "#{DEFAULT_HOST}/apps/#{app_id}"
70
- end
71
57
  end
72
58
  end
@@ -1,6 +1,6 @@
1
1
  module Layer
2
2
  module Platform
3
- class Client
3
+ class Client < Layer::BaseClient
4
4
  attr_accessor :api_token, :app_id
5
5
 
6
6
  def initialize(options = {})
@@ -9,14 +9,6 @@ module Layer
9
9
  @app_id = strip_layer_prefix(id)
10
10
  end
11
11
 
12
- def client
13
- @http_client ||= Layer::HttpClient.new(@app_id, @api_token)
14
- end
15
-
16
- def strip_layer_prefix(string)
17
- string.split("/").last if string
18
- end
19
-
20
12
  def announcements
21
13
  Layer::ResourceProxy.new(client, nil, Layer::Resources::Announcement)
22
14
  end
@@ -33,6 +25,14 @@ module Layer
33
25
  Layer::IdentityToken.new(options)
34
26
  end
35
27
 
28
+ def default_headers
29
+ super.merge({"Authorization" => "Bearer #{api_token}"})
30
+ end
31
+
32
+ def base_url
33
+ "#{DEFAULT_HOST}/apps/#{app_id}"
34
+ end
35
+
36
36
  def inspect
37
37
  "#<#{self.class} api_token=\"#{@api_token}\" app_id=\"#{@app_id}\">"
38
38
  end
@@ -0,0 +1,13 @@
1
+ module Layer
2
+ module Resources
3
+ class Webhook < Layer::Resource
4
+ def activate
5
+ client.post("#{url}/activate")
6
+ end
7
+
8
+ def deactivate
9
+ client.post("#{url}/deactivate")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module Layer
2
2
  module Api
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
@@ -0,0 +1,36 @@
1
+ module Layer
2
+ module Webhooks
3
+ class Client < Layer::BaseClient
4
+ attr_accessor :api_token, :app_id
5
+
6
+ def initialize(options = {})
7
+ id = options[:app_id] || ENV['LAYER_APP_ID']
8
+ @api_token = options[:api_token] || ENV['LAYER_API_TOKEN']
9
+ @app_id = strip_layer_prefix(id)
10
+ end
11
+
12
+ def webhooks
13
+ Layer::ResourceProxy.new(client, nil, Layer::Resources::Webhook)
14
+ end
15
+
16
+ def default_headers
17
+ super.merge(
18
+ {
19
+ "Authorization" => "Bearer #{api_token}",
20
+ "Accept" => "application/vnd.layer.webhooks+json; version=1.0"
21
+ }
22
+ )
23
+ end
24
+
25
+ def base_url
26
+ "#{DEFAULT_HOST}/apps/#{app_id}"
27
+ end
28
+
29
+ def inspect
30
+ "#<#{self.class} api_token=\"#{@api_token}\" app_id=\"#{@app_id}\">"
31
+ end
32
+
33
+ alias_method :to_s, :inspect
34
+ end
35
+ end
36
+ 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.5.0
4
+ version: 0.6.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-03-02 00:00:00.000000000 Z
11
+ date: 2016-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -158,6 +158,7 @@ files:
158
158
  - bin/setup
159
159
  - layer-api.gemspec
160
160
  - lib/layer/api.rb
161
+ - lib/layer/base_client.rb
161
162
  - lib/layer/errors.rb
162
163
  - lib/layer/http_client.rb
163
164
  - lib/layer/identity_token.rb
@@ -170,7 +171,9 @@ files:
170
171
  - lib/layer/resources/conversation.rb
171
172
  - lib/layer/resources/message.rb
172
173
  - lib/layer/resources/user.rb
174
+ - lib/layer/resources/webhook.rb
173
175
  - lib/layer/version.rb
176
+ - lib/layer/webhooks/client.rb
174
177
  homepage: https://github.com/cakejelly/layer-api
175
178
  licenses:
176
179
  - MIT