layer-ruby 0.6.0 → 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: c88bda03f993c0830bcdfa3e2c61bd70d6513fc5
4
- data.tar.gz: 516ec66a994540689b597f06ea01d1fcd12a0b2c
3
+ metadata.gz: 0976249289a43645badaaadd9d3a67cb684938d2
4
+ data.tar.gz: bc136906bf91e1ae79cbd6423adec89dc06304ed
5
5
  SHA512:
6
- metadata.gz: 96e3857ed7f52b85f5c9d7d21c1159b768b6dd94a4617ec4754ea9b0b1f7045e3127f91114a6818203e03df7d128cea744c44339cabccc583bb7e04f7b19196b
7
- data.tar.gz: b838d08d8aa637d85f7d7f78eadff5467c7a924eea13b87cb3853e1aad00f828574e07929d0d4e5c8bc836f9b677de2481b79c2ee45504b8c87dd95f4099a5c3
6
+ metadata.gz: 0ad40b5dab203070617cae0a203d25f88e2944b36aba548afc0ad1ea2c5f068b66dff7145cc7c194a64227a50b487da0e2548569571853ead9852e35f72ba7af
7
+ data.tar.gz: 52d8129875fd24be068f90e60bd710a3c39734535aab61fce2c93261f2ac8a9c8ee36ac35a84fad431d0d116219037de0626b7860f995404929e35729ad2db1a
data/.travis.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.0
3
+ - 2.3.1
4
4
  before_install: gem install bundler -v 1.10.1
data/lib/layer.rb CHANGED
@@ -6,11 +6,13 @@ require 'layer/operations'
6
6
  require 'layer/resource'
7
7
  require 'layer/resource_collection'
8
8
  require 'layer/relation_proxy'
9
+ require 'layer/singleton_relation_proxy'
9
10
  require 'layer/conversation'
10
11
  require 'layer/content'
11
12
  require 'layer/message'
12
13
  require 'layer/user'
13
14
  require 'layer/block'
15
+ require 'layer/identity'
14
16
  require 'layer/announcement'
15
17
  require 'layer/webhook'
16
18
 
data/lib/layer/client.rb CHANGED
@@ -67,7 +67,6 @@ module Layer
67
67
  url = "https://api.layer.com#{url}" unless url.start_with?('https://api.layer.com')
68
68
 
69
69
  headers = {
70
- 'Accept' => 'application/vnd.layer+json; version=1.0',
71
70
  'Content-Type' => 'application/json',
72
71
  'If-None-Match' => SecureRandom.uuid
73
72
  }.merge(headers)
@@ -13,6 +13,7 @@ module Layer
13
13
 
14
14
  def request(method, url, payload = {}, headers = {})
15
15
  url = "https://api.layer.com/apps/#{app_id}#{url}" unless url.start_with?('https://api.layer.com')
16
+ headers['Accept'] ||= 'application/vnd.layer+json; version=1.1'
16
17
  headers['Authorization'] ||= "Bearer #{token}"
17
18
 
18
19
  super
@@ -25,6 +25,7 @@ module Layer
25
25
 
26
26
  def request(method, url, payload = {}, headers = {})
27
27
  url = "https://api.layer.com#{url}" unless url.start_with?('https://api.layer.com')
28
+ headers['Accept'] ||= 'application/vnd.layer+json; version=1.0'
28
29
  headers['Authorization'] ||= "Layer session-token=\"#{token}\""
29
30
 
30
31
  super
data/lib/layer/content.rb CHANGED
@@ -9,8 +9,14 @@ module Layer
9
9
  # ]
10
10
  # })
11
11
  #
12
+ # @example
13
+ # conversation = Layer::Conversation.find('layer-conversation-id-here')
14
+ # content = conversation.contents.create('image/png', File.open('photo.png'))
15
+ #
16
+ #
12
17
  # @see https://developer.layer.com/docs/client/rest#rich-content Layer REST API documentation about rich content
13
- # @!macro rest-api
18
+ # @see https://developer.layer.com/docs/platform/messages#rich-content Layer Platform API documentation about rich content
19
+ # @!macro various-apis
14
20
  class Content < Resource
15
21
  include Operations::Create
16
22
  include Operations::Find
@@ -28,7 +28,7 @@ module Layer
28
28
  # @!parse extend Layer::Operations::Delete::ClassMethods
29
29
  # @!parse extend Layer::Operations::Destroy::ClassMethods
30
30
 
31
- # Returns the converations messages
31
+ # Returns the conversations messages
32
32
  #
33
33
  # @return [Layer::RelationProxy] the conversation's messages
34
34
  # @!macro various-apis
@@ -36,6 +36,27 @@ module Layer
36
36
  RelationProxy.new(self, Message, [Operations::Create, Operations::Paginate, Operations::Find, Operations::Delete, Operations::Destroy])
37
37
  end
38
38
 
39
+ # Allows creating and finding of the conversation's rich content
40
+ #
41
+ # @return [Layer::RelationProxy] the conversation's rich content
42
+ # @!macro platform-api
43
+ def contents
44
+ RelationProxy.new(self, Content, [Operations::Create, Operations::Find]) do
45
+ def create(mime_type, file, client = self.client)
46
+ response = client.post(url, {}, {
47
+ 'Upload-Content-Type' => mime_type,
48
+ 'Upload-Content-Length' => file.size
49
+ })
50
+
51
+ attributes = response.merge('size' => file.size, 'mime_type' => mime_type)
52
+
53
+ Content.from_response(attributes, client).tap do |content|
54
+ content.upload(file)
55
+ end
56
+ end
57
+ end
58
+ end
59
+
39
60
  # Returns the conversations metadata
40
61
  #
41
62
  # @return [Layer::Patch::Hash] the metadata hash
@@ -0,0 +1,21 @@
1
+ module Layer
2
+ # Managing user identity is also possible:
3
+ #
4
+ # @example
5
+ # user = Layer::User.find('user_id')
6
+ # user.identity # Returns user identity
7
+ # user.identity.create({ first_name: 'Frodo', last_name: 'Baggins'}) # Creates new identity
8
+ # user.identity.delete # Removes identity
9
+ #
10
+ # @see https://developer.layer.com/docs/platform#identity Layer Platform API Documentation about identity
11
+ # @!macro platform-api
12
+ class Identity < Resource
13
+ include Operations::Fetch
14
+ include Operations::Delete
15
+ include Operations::Patch
16
+
17
+ def self.url
18
+ '/identity'
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,6 @@
1
1
  require 'layer/operations/create'
2
2
  require 'layer/operations/find'
3
+ require 'layer/operations/fetch'
3
4
  require 'layer/operations/list'
4
5
  require 'layer/operations/paginate'
5
6
  require 'layer/operations/delete'
@@ -0,0 +1,33 @@
1
+ module Layer
2
+ module Operations
3
+ module Fetch
4
+
5
+ module ClassMethods
6
+ # Fetches the singular resource
7
+ #
8
+ # @param client [Layer::Client] the client to use to make this request
9
+ # @return [Layer::Resource] the found resource
10
+ # @raise [Layer::Exceptions::Exception] a subclass of Layer::Exceptions::Exception describing the error
11
+ def fetch(client = self.client)
12
+ response = client.get(url)
13
+ from_response(response, client)
14
+ end
15
+ end
16
+
17
+ # @!visibility private
18
+ def self.included(base)
19
+ base.extend(ClassMethods)
20
+ end
21
+
22
+ # Reloads the resource
23
+ #
24
+ # @return [Layer::Resource] the resource itself
25
+ # @raise [Layer::Exceptions::Exception] a subclass of Layer::Exceptions::Exception describing the error
26
+ def reload
27
+ self.attributes = client.get(url)
28
+ self
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,29 @@
1
+ module Layer
2
+ class SingletonRelationProxy < RelationProxy
3
+ include Operations::Fetch::ClassMethods
4
+ include Operations::Fetch
5
+
6
+ def respond_to_missing?(method, include_private = false)
7
+ resource.respond_to?(method, include_private) || super
8
+ end
9
+
10
+ def from_response(*args)
11
+ resource_type.from_response(*args)
12
+ end
13
+
14
+ private
15
+
16
+ def method_missing(method, *args, &block)
17
+ if resource.respond_to?(method)
18
+ resource.public_send(method, *args, &block)
19
+ else
20
+ super
21
+ end
22
+ end
23
+
24
+ def resource
25
+ @resource ||= fetch
26
+ end
27
+
28
+ end
29
+ end
data/lib/layer/user.rb CHANGED
@@ -5,6 +5,10 @@ module Layer
5
5
  from_response({ 'url' => "/users/#{id}" }, client)
6
6
  end
7
7
 
8
+ # Returns the users blocked by this user
9
+ #
10
+ # @return [Layer::RelationProxy] the users the user blocks
11
+ # @!macro platform-api
8
12
  def blocks
9
13
  RelationProxy.new(self, Block, [Operations::Create, Operations::List, Operations::Delete]) do
10
14
  def from_response(response, client)
@@ -19,5 +23,42 @@ module Layer
19
23
  end
20
24
  end
21
25
 
26
+ # Returns the identity object for this user
27
+ #
28
+ # @return [Layer::RelationProxy] identity object
29
+ # @!macro platform-api
30
+ def identity
31
+ SingletonRelationProxy.new(self, Layer::Identity) do
32
+ def from_response(response, client)
33
+ response['url'] ||= "#{base.url}#{resource_type.url}"
34
+ super
35
+ end
36
+
37
+ def create(attributes, client = self.client)
38
+ client.post(url, attributes)
39
+ fetch
40
+ end
41
+
42
+ def delete(client = self.client)
43
+ client.delete(url)
44
+ end
45
+ end
46
+ end
47
+
48
+ # Returns the user's conversations
49
+ #
50
+ # @return [Layer::RelationProxy] the user's conversations
51
+ # @!macro platform-api
52
+ def conversations
53
+ RelationProxy.new(self, Conversation, [Operations::List, Operations::Find])
54
+ end
55
+
56
+ # Returns the user's messages
57
+ #
58
+ # @return [Layer::RelationProxy] the user's messages
59
+ # @!macro platform-api
60
+ def messages
61
+ RelationProxy.new(self, Message, [Operations::Find])
62
+ end
22
63
  end
23
64
  end
data/lib/layer/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Layer
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
data/lib/layer/webhook.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  module Layer
2
2
  # @example
3
3
  # webhook = Layer::Webhook.create({
4
- # target_config: { foo: :bar },
4
+ # version: '1.0',
5
+ # target_url: 'https://example.com/layer/webhook',
6
+ # events: ['message.sent'],
5
7
  # secret: 'my-secret',
6
- # event_types: ['message.sent'],
7
- # target_url: 'http://example.com/layer/webhook'
8
+ # config: { foo: :bar }
8
9
  # })
9
- # @see https://gist.github.com/vtrehan/9ef1e16db5e74305ddf3 Layer Webhook documentation (Prerelease)
10
- # @note This feature is still in beta at Layer. Please contact Layer to enable webhooks for your account.
10
+ # @see https://developer.layer.com/docs/webhooks/introduction
11
11
  #
12
12
  # @!macro platform-api
13
13
  class Webhook < Resource
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: layer-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benedikt Deicke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-02 00:00:00.000000000 Z
11
+ date: 2016-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -109,11 +109,13 @@ files:
109
109
  - lib/layer/content.rb
110
110
  - lib/layer/conversation.rb
111
111
  - lib/layer/exceptions.rb
112
+ - lib/layer/identity.rb
112
113
  - lib/layer/message.rb
113
114
  - lib/layer/operations.rb
114
115
  - lib/layer/operations/create.rb
115
116
  - lib/layer/operations/delete.rb
116
117
  - lib/layer/operations/destroy.rb
118
+ - lib/layer/operations/fetch.rb
117
119
  - lib/layer/operations/find.rb
118
120
  - lib/layer/operations/list.rb
119
121
  - lib/layer/operations/paginate.rb
@@ -126,6 +128,7 @@ files:
126
128
  - lib/layer/resource.rb
127
129
  - lib/layer/resource_collection.rb
128
130
  - lib/layer/ruby.rb
131
+ - lib/layer/singleton_relation_proxy.rb
129
132
  - lib/layer/user.rb
130
133
  - lib/layer/version.rb
131
134
  - lib/layer/webhook.rb
@@ -149,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
152
  version: '0'
150
153
  requirements: []
151
154
  rubyforge_project:
152
- rubygems_version: 2.4.5
155
+ rubygems_version: 2.5.1
153
156
  signing_key:
154
157
  specification_version: 4
155
158
  summary: Ruby bindings for the Layer Platform API