layer-ruby 0.3.0 → 0.4.1
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 +4 -4
- data/README.md +18 -7
- data/lib/layer.rb +1 -0
- data/lib/layer/client.rb +4 -2
- data/lib/layer/conversation.rb +1 -0
- data/lib/layer/operations.rb +1 -0
- data/lib/layer/operations/find.rb +1 -1
- data/lib/layer/operations/patch.rb +23 -0
- data/lib/layer/patch.rb +62 -0
- data/lib/layer/patch/array.rb +69 -0
- data/lib/layer/patch/base.rb +25 -0
- data/lib/layer/patch/hash.rb +55 -0
- data/lib/layer/resource.rb +3 -5
- data/lib/layer/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b2e92f9be129ac6265ff24ab73852387a9e438a
|
4
|
+
data.tar.gz: 1f3911782934d15e49f0feeb3964357acd28873c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57229aa42c27f78cef0f959c68d24299792cee2803142cfa304bab995a9c1268decd4b055abae6d8ed5c49ce014139de36129c9ba3c21d31a9d375a1266c0d46
|
7
|
+
data.tar.gz: 9681349bdb101b4ec80219bcc69990454353b8c9b9f72c33896e9673f555c7f932a5128655fe773a2131f7df060775aedc61700999338d35b2e7985ded664203
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[](https://travis-ci.org/benedikt/layer-ruby)
|
4
4
|
[](http://badge.fury.io/rb/layer-ruby)
|
5
5
|
|
6
|
-
Ruby bindings for the [Layer Platform API](https://developer.layer.com/docs/platform).
|
6
|
+
Ruby bindings for the [Layer Platform API](https://developer.layer.com/docs/platform).
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
@@ -23,7 +23,7 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
Please refer to the [Layer Platform API documentation](https://developer.layer.com/docs/platform) for details about the required payloads and responses.
|
26
|
+
Please refer to the [Layer Platform API documentation](https://developer.layer.com/docs/platform) for details about the required payloads and responses.
|
27
27
|
|
28
28
|
### Configuration
|
29
29
|
|
@@ -50,13 +50,25 @@ To retrieve a existing conversation, just use `Conversation.find` passing it the
|
|
50
50
|
conversation = Layer::Conversation.find('CONVERSATION_ID_HERE')
|
51
51
|
```
|
52
52
|
|
53
|
+
### Updating Conversations
|
54
|
+
|
55
|
+
To update a conversation, just update the conversation's attributes and call `save`.
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
conversation = Layer::Conversation.find('CONVERSATION_ID_HERE')
|
59
|
+
conversation.participants << 3
|
60
|
+
conversation.metadata[:foo] = 'bar'
|
61
|
+
conversation.save
|
62
|
+
```
|
63
|
+
|
64
|
+
|
53
65
|
### Sending Messages
|
54
66
|
|
55
67
|
In order to send messages, you first have to load (or create) a Conversation. Afterwards you can send a message to the conversation like this:
|
56
68
|
|
57
69
|
```ruby
|
58
70
|
conversation = Layer::Conversation.find('CONVERSATION_ID_HERE')
|
59
|
-
conversation.messages.create({ sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }])
|
71
|
+
conversation.messages.create({ sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }]})
|
60
72
|
```
|
61
73
|
|
62
74
|
### Sending Announcements
|
@@ -64,7 +76,7 @@ conversation.messages.create({ sender: { name: 'Server' }, parts: [{ body: 'Hell
|
|
64
76
|
You can send a announcements like this:
|
65
77
|
|
66
78
|
```ruby
|
67
|
-
Layer::Announcement.create({ recipients: 'everyone', sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }])
|
79
|
+
Layer::Announcement.create({ recipients: 'everyone', sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }]})
|
68
80
|
```
|
69
81
|
|
70
82
|
### Managing block lists
|
@@ -87,7 +99,7 @@ It's possible to create a new instance of `Layer::Client` and passing both the a
|
|
87
99
|
client = Layer::Client.new('YOUR_APP_ID_HERE', 'YOUR_PLATFORM_TOKEN_HERE')
|
88
100
|
```
|
89
101
|
|
90
|
-
The client will not use any global configuration. You can pass the client as a second parameter to any operations (`create`, `find`) described above.
|
102
|
+
The client will not use any global configuration. You can pass the client as a second parameter to any operations (`create`, `find`) described above.
|
91
103
|
|
92
104
|
## Development
|
93
105
|
|
@@ -106,5 +118,4 @@ The gem is available as open source under the terms of the [MIT License](http://
|
|
106
118
|
|
107
119
|
## Related Work
|
108
120
|
|
109
|
-
Check out the [layer-identity_token](https://github.com/dreimannzelt/layer-identity_token) gem to generate authentication tokens for the Layer SDK.
|
110
|
-
|
121
|
+
Check out the [layer-identity_token](https://github.com/dreimannzelt/layer-identity_token) gem to generate authentication tokens for the Layer SDK.
|
data/lib/layer.rb
CHANGED
data/lib/layer/client.rb
CHANGED
@@ -38,8 +38,10 @@ module Layer
|
|
38
38
|
request(:post, *args)
|
39
39
|
end
|
40
40
|
|
41
|
-
def patch(
|
42
|
-
|
41
|
+
def patch(url, payload = {}, headers = {})
|
42
|
+
headers['Content-Type'] = 'application/vnd.layer-patch+json'
|
43
|
+
|
44
|
+
request(:patch, url, payload, headers)
|
43
45
|
end
|
44
46
|
|
45
47
|
def put(*args)
|
data/lib/layer/conversation.rb
CHANGED
data/lib/layer/operations.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Layer
|
2
|
+
module Operations
|
3
|
+
module Patch
|
4
|
+
|
5
|
+
def save
|
6
|
+
client.patch(url, patch.operations)
|
7
|
+
patch.reset
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def attributes=(attributes)
|
12
|
+
@attributes = Layer::Patch::Hash.new(patch, attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def patch
|
18
|
+
@patch ||= Layer::Patch.new
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/layer/patch.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'layer/patch/base'
|
2
|
+
require 'layer/patch/array'
|
3
|
+
require 'layer/patch/hash'
|
4
|
+
|
5
|
+
module Layer
|
6
|
+
class Patch
|
7
|
+
def initialize(property = nil, parent = nil)
|
8
|
+
@property = property
|
9
|
+
@parent = parent
|
10
|
+
end
|
11
|
+
|
12
|
+
def add(property = nil, value)
|
13
|
+
operation(:add, property, value: value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_index(property = nil, index, value)
|
17
|
+
operation(:add, property, index: index, value: value)
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove(property = nil, value)
|
21
|
+
operation(:remove, property, value: value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def remove_index(property = nil, index)
|
25
|
+
operation(:remove, property, index: index)
|
26
|
+
end
|
27
|
+
|
28
|
+
def set(property = nil, value)
|
29
|
+
operation(:set, property, value: value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def replace(property = nil, value)
|
33
|
+
operation(:replace, property, value: value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def delete(property)
|
37
|
+
operation(:delete, property)
|
38
|
+
end
|
39
|
+
|
40
|
+
def nested(property)
|
41
|
+
self.class.new(property, self)
|
42
|
+
end
|
43
|
+
|
44
|
+
def operations
|
45
|
+
@operations ||= @parent ? @parent.operations : []
|
46
|
+
end
|
47
|
+
|
48
|
+
def reset
|
49
|
+
@parent ? parent.reset : @operations = []
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def operation(type, property = nil, options = {})
|
55
|
+
operations << options.merge(operation: type.to_s, property: expand_property(property))
|
56
|
+
end
|
57
|
+
|
58
|
+
def expand_property(property)
|
59
|
+
[@property, property].compact.join('.')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Layer
|
2
|
+
class Patch
|
3
|
+
class Array < Base
|
4
|
+
|
5
|
+
def prepare_base(base)
|
6
|
+
base.each_with_index.map do |(value, index)|
|
7
|
+
wrap(index, value)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def []=(index, value)
|
12
|
+
patch.add_index(index, value)
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def <<(value)
|
17
|
+
patch.add(value)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
alias :push :<<
|
21
|
+
|
22
|
+
def unshift(value)
|
23
|
+
patch.add_index(0, value)
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def concat(values)
|
28
|
+
values.each { |value| patch.add(value) }
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
def insert(offset, values)
|
33
|
+
values.each_with_index { |value, index| patch.add_index(offset + index, value) }
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
def clear
|
38
|
+
patch.replace([])
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete_at(index)
|
43
|
+
patch.remove_index(index)
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete(value)
|
48
|
+
patch.remove(value)
|
49
|
+
super
|
50
|
+
end
|
51
|
+
|
52
|
+
def pop
|
53
|
+
patch.remove_index(length)
|
54
|
+
super
|
55
|
+
end
|
56
|
+
|
57
|
+
def shift
|
58
|
+
patch.remove_index(0)
|
59
|
+
super
|
60
|
+
end
|
61
|
+
|
62
|
+
def replace(values)
|
63
|
+
patch.replace(values)
|
64
|
+
super
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Layer
|
2
|
+
class Patch
|
3
|
+
class Base < SimpleDelegator
|
4
|
+
|
5
|
+
attr_reader :patch
|
6
|
+
|
7
|
+
def initialize(patch, object)
|
8
|
+
@patch = patch
|
9
|
+
super(prepare_base(object))
|
10
|
+
end
|
11
|
+
|
12
|
+
def wrap(property, object)
|
13
|
+
case object
|
14
|
+
when ::Array
|
15
|
+
Layer::Patch::Array.new(patch.nested(property), object)
|
16
|
+
when ::Hash
|
17
|
+
Layer::Patch::Hash.new(patch.nested(property), object)
|
18
|
+
else
|
19
|
+
object
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Layer
|
2
|
+
class Patch
|
3
|
+
class Hash < Base
|
4
|
+
|
5
|
+
def prepare_base(base)
|
6
|
+
base.each_pair do |key, value|
|
7
|
+
base[key] = wrap(key, value)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def []=(key, value)
|
12
|
+
patch.set(key, value)
|
13
|
+
super
|
14
|
+
end
|
15
|
+
alias :store :[]=
|
16
|
+
|
17
|
+
def clear
|
18
|
+
patch.replace({})
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete(key)
|
23
|
+
patch.delete(key)
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_if(&block)
|
28
|
+
super do |key, value|
|
29
|
+
result = yield(key, value)
|
30
|
+
delete(key) if result
|
31
|
+
result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
alias :reject! :delete_if
|
35
|
+
|
36
|
+
def shift
|
37
|
+
patch.delete(keys.first)
|
38
|
+
super
|
39
|
+
end
|
40
|
+
|
41
|
+
def replace(other_hash)
|
42
|
+
patch.replace(other_hash)
|
43
|
+
super
|
44
|
+
end
|
45
|
+
|
46
|
+
def merge!(other_hash)
|
47
|
+
other_hash.each_pair do |key, value|
|
48
|
+
patch.set(key, value)
|
49
|
+
end
|
50
|
+
super
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/layer/resource.rb
CHANGED
@@ -21,11 +21,11 @@ module Layer
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
attr_accessor :client, :attributes
|
25
25
|
|
26
26
|
def initialize(attributes = {}, client = self.class.client)
|
27
|
-
|
28
|
-
|
27
|
+
self.attributes = attributes
|
28
|
+
self.client = client
|
29
29
|
end
|
30
30
|
|
31
31
|
def url
|
@@ -42,8 +42,6 @@ module Layer
|
|
42
42
|
|
43
43
|
private
|
44
44
|
|
45
|
-
attr_reader :attributes
|
46
|
-
|
47
45
|
def method_missing(method, *args, &block)
|
48
46
|
if attributes.has_key?(method.to_s)
|
49
47
|
attributes[method.to_s]
|
data/lib/layer/version.rb
CHANGED
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.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benedikt Deicke
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -110,6 +110,11 @@ files:
|
|
110
110
|
- lib/layer/operations/delete.rb
|
111
111
|
- lib/layer/operations/find.rb
|
112
112
|
- lib/layer/operations/list.rb
|
113
|
+
- lib/layer/operations/patch.rb
|
114
|
+
- lib/layer/patch.rb
|
115
|
+
- lib/layer/patch/array.rb
|
116
|
+
- lib/layer/patch/base.rb
|
117
|
+
- lib/layer/patch/hash.rb
|
113
118
|
- lib/layer/relation_proxy.rb
|
114
119
|
- lib/layer/resource.rb
|
115
120
|
- lib/layer/ruby.rb
|
@@ -140,3 +145,4 @@ signing_key:
|
|
140
145
|
specification_version: 4
|
141
146
|
summary: Ruby bindings for the Layer Platform API
|
142
147
|
test_files: []
|
148
|
+
has_rdoc:
|