stream-ruby 1.0.5 → 2.0.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 +4 -4
- data/README.md +8 -8
- data/lib/stream/base.rb +1 -1
- data/lib/stream/client.rb +52 -12
- data/lib/stream/feed.rb +32 -73
- data/lib/stream/signer.rb +5 -3
- data/lib/stream/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98bb84c852a5f3ecd8ae404c9253c03ebd876596
|
4
|
+
data.tar.gz: f218d9d8f3a8a2d776c307a0a8c6b0c375787bb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65aaf626783bcb8bce5bb8041dd4dae9ace6d78bb0337f51e630ef7b0fe343d4c0110794ca5d1114f9394095f4b13f30c01a01954078a5a51ee397f7d67e17e5
|
7
|
+
data.tar.gz: 91c658f7c1fce6d50f5dc9c882c591bf6cf66405652be0b161bffd4345e0c8f610b3ec6b33ab57fa4a0168d16fc4bdda85b457aa3a7efe7f61b8375a3e059dea
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ client = Stream::Client.new('YOUR_API_KEY', 'API_KEY_SECRET')
|
|
20
20
|
# Find your API keys here https://getstream.io/dashboard/
|
21
21
|
|
22
22
|
# Instantiate a feed object
|
23
|
-
user_feed_1 = client.feed('user
|
23
|
+
user_feed_1 = client.feed('user', '1')
|
24
24
|
|
25
25
|
# Get activities from 5 to 10 (slow pagination)
|
26
26
|
result = user_feed_1.get(:limit=>5, :offset=>5)
|
@@ -45,10 +45,10 @@ user_feed_1.remove('e561de8f-00f1-11e4-b400-0cc47a024be0')
|
|
45
45
|
user_feed_1.remove('tweet:1', foreign_id=true)
|
46
46
|
|
47
47
|
# Follow another feed
|
48
|
-
user_feed_1.follow('flat
|
48
|
+
user_feed_1.follow('flat', '42')
|
49
49
|
|
50
50
|
# Stop following another feed
|
51
|
-
user_feed_1.unfollow('flat
|
51
|
+
user_feed_1.unfollow('flat', '42')
|
52
52
|
|
53
53
|
# Batch adding activities
|
54
54
|
activities = [
|
@@ -76,19 +76,19 @@ token = user_feed_1.token
|
|
76
76
|
# user1 = client.feed('user:1', '{{ token }}');
|
77
77
|
|
78
78
|
# Retrieve first 10 followers of a feed
|
79
|
-
user_feed_1.followers(0, 10)
|
79
|
+
user_feed_1.followers(0, 10)
|
80
80
|
|
81
81
|
# Retrieve followers from 10 to 20
|
82
|
-
user_feed_1.followers(10, 10)
|
82
|
+
user_feed_1.followers(10, 10)
|
83
83
|
|
84
84
|
# Retrieve 10 feeds followed by user_feed_1
|
85
|
-
user_feed_1.following(10)
|
85
|
+
user_feed_1.following(10)
|
86
86
|
|
87
87
|
# Retrieve 10 feeds followed by user_feed_1 starting from the 11th
|
88
|
-
user_feed_1.following(10, 10)
|
88
|
+
user_feed_1.following(10, 10)
|
89
89
|
|
90
90
|
# Check if user_feed_1 follows specific feeds
|
91
|
-
user_feed_1.following(0, 2, filter=['user:42', 'user:43'])
|
91
|
+
user_feed_1.following(0, 2, filter=['user:42', 'user:43'])
|
92
92
|
|
93
93
|
```
|
94
94
|
|
data/lib/stream/base.rb
CHANGED
data/lib/stream/client.rb
CHANGED
@@ -1,21 +1,25 @@
|
|
1
|
-
require '
|
1
|
+
require 'httparty'
|
2
|
+
require 'stream/exceptions'
|
2
3
|
require 'stream/feed'
|
4
|
+
require 'stream/signer'
|
5
|
+
|
3
6
|
|
4
7
|
module Stream
|
5
|
-
STREAM_URL_RE = /https\:\/\/(?<key>\w+)\:(?<secret>\w+).*
|
8
|
+
STREAM_URL_RE = /https\:\/\/(?<key>\w+)\:(?<secret>\w+).*app_id=(?<app_id>\d+)/i
|
6
9
|
|
7
10
|
class Client
|
11
|
+
@@http_client = nil
|
8
12
|
attr_reader :api_key
|
9
13
|
attr_reader :api_secret
|
10
|
-
attr_reader :
|
14
|
+
attr_reader :app_id
|
15
|
+
attr_reader :api_version
|
11
16
|
|
12
|
-
def initialize(api_key='', api_secret='',
|
13
|
-
|
17
|
+
def initialize(api_key='', api_secret='', app_id=nil)
|
14
18
|
if ENV['STREAM_URL'] =~ Stream::STREAM_URL_RE and (api_key.nil? || api_key.empty?)
|
15
19
|
matches = Stream::STREAM_URL_RE.match(ENV['STREAM_URL'])
|
16
20
|
api_key = matches['key']
|
17
21
|
api_secret = matches['secret']
|
18
|
-
|
22
|
+
app_id = matches['app_id']
|
19
23
|
end
|
20
24
|
|
21
25
|
if api_key.nil? || api_key.empty?
|
@@ -24,15 +28,51 @@ module Stream
|
|
24
28
|
|
25
29
|
@api_key = api_key
|
26
30
|
@api_secret = api_secret
|
27
|
-
@
|
31
|
+
@app_id = app_id
|
28
32
|
@signer = Stream::Signer.new(api_secret)
|
29
33
|
end
|
30
34
|
|
31
|
-
def feed(
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
def feed(feed_slug, user_id)
|
36
|
+
token = @signer.sign(feed_slug, user_id)
|
37
|
+
Stream::Feed.new(self, feed_slug, user_id, token)
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_default_params
|
41
|
+
{:api_key => @api_key}
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_http_client
|
45
|
+
@@http_client ||= StreamHTTPClient.new
|
46
|
+
end
|
47
|
+
|
48
|
+
def make_request(method, relative_url, signature, params=nil, data=nil)
|
49
|
+
auth_headers = {'Authorization' => signature}
|
50
|
+
params = params.nil? ? {} : params
|
51
|
+
data = data.nil? ? {} : data
|
52
|
+
default_params = self.get_default_params
|
53
|
+
default_params.merge!(params)
|
54
|
+
response = self.get_http_client.make_http_request(method, relative_url, default_params, data, auth_headers)
|
35
55
|
end
|
36
56
|
|
37
57
|
end
|
38
|
-
|
58
|
+
|
59
|
+
class StreamHTTPClient
|
60
|
+
|
61
|
+
include HTTParty
|
62
|
+
base_uri 'https://getstream.io/api/v1.0'
|
63
|
+
default_timeout 3
|
64
|
+
|
65
|
+
def make_http_request(method, relative_url, params=nil, data=nil, headers=nil)
|
66
|
+
headers['Content-Type'] = 'application/json'
|
67
|
+
headers['User-Agent'] = "stream-ruby-#{Stream::VERSION}"
|
68
|
+
response = self.class.send(method, relative_url, :headers => headers, :query => params, :body => data.to_json )
|
69
|
+
case response.code
|
70
|
+
when 200..203
|
71
|
+
return response
|
72
|
+
when 204...600
|
73
|
+
raise StreamApiResponseException, "#{response['exception']} details: #{response['detail']}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/lib/stream/feed.rb
CHANGED
@@ -1,61 +1,24 @@
|
|
1
|
-
require 'httparty'
|
2
1
|
require 'stream/signer'
|
3
|
-
require 'stream/exceptions'
|
4
2
|
|
5
|
-
module Stream
|
6
|
-
|
7
|
-
class StreamHTTPClient
|
8
|
-
|
9
|
-
include HTTParty
|
10
|
-
base_uri 'https://getstream.io/api'
|
11
|
-
|
12
|
-
def make_http_request(method, relative_url, params=nil, data=nil, headers=nil)
|
13
|
-
headers['Content-Type'] = 'application/json'
|
14
|
-
headers['User-Agent'] = "stream-ruby-#{Stream::VERSION}"
|
15
|
-
response = self.class.send(method, relative_url, :headers => headers, :query => params, :body => data.to_json )
|
16
|
-
case response.code
|
17
|
-
when 200..203
|
18
|
-
return response
|
19
|
-
when 204...600
|
20
|
-
raise StreamApiResponseException, response
|
21
|
-
end
|
22
|
-
end
|
23
3
|
|
24
|
-
|
4
|
+
module Stream
|
25
5
|
|
26
6
|
class Feed
|
27
|
-
@@http_client = nil
|
28
7
|
|
29
|
-
attr_reader :
|
8
|
+
attr_reader :id
|
9
|
+
attr_reader :slug
|
10
|
+
attr_reader :user_id
|
30
11
|
attr_reader :token
|
12
|
+
attr_reader :signature
|
31
13
|
|
32
|
-
def initialize(client,
|
14
|
+
def initialize(client, feed_slug, user_id, token)
|
15
|
+
@id = "#{feed_slug}:#{user_id}"
|
33
16
|
@client = client
|
34
|
-
@
|
35
|
-
@
|
36
|
-
@
|
37
|
-
@token =
|
38
|
-
|
39
|
-
@auth_headers = {'Authorization' => "#{cleaned_feed_id} #{signature}"}
|
40
|
-
end
|
41
|
-
|
42
|
-
def get_http_client
|
43
|
-
if @@http_client.nil?
|
44
|
-
@@http_client = StreamHTTPClient.new
|
45
|
-
end
|
46
|
-
@@http_client
|
47
|
-
end
|
48
|
-
|
49
|
-
def get_default_params
|
50
|
-
{:api_key => @api_key}
|
51
|
-
end
|
52
|
-
|
53
|
-
def make_request(method, relative_url, params=nil, data=nil)
|
54
|
-
params = params.nil? ? {} : params
|
55
|
-
data = data.nil? ? {} : data
|
56
|
-
default_params = self.get_default_params
|
57
|
-
default_params.merge!(params)
|
58
|
-
response = self.get_http_client.make_http_request(method, relative_url, default_params, data, @auth_headers)
|
17
|
+
@user_id = user_id
|
18
|
+
@slug = feed_slug
|
19
|
+
@feed_url = "#{feed_slug}/#{user_id}"
|
20
|
+
@token = token
|
21
|
+
@signature = "#{feed_slug}#{user_id} #{token}"
|
59
22
|
end
|
60
23
|
|
61
24
|
def get(params = {})
|
@@ -66,34 +29,30 @@ module Stream
|
|
66
29
|
if params[:mark_seen] and params[:mark_seen].kind_of?(Array)
|
67
30
|
params[:mark_seen] = params[:mark_seen].join(",")
|
68
31
|
end
|
69
|
-
|
32
|
+
@client.make_request(:get, uri, @signature, params)
|
70
33
|
end
|
71
34
|
|
72
35
|
def sign_to_field(to)
|
73
|
-
to.map do |
|
74
|
-
|
75
|
-
|
76
|
-
"#{feed} #{token}"
|
36
|
+
to.map do |feed_id|
|
37
|
+
feed_slug, user_id = feed_id.split(':')
|
38
|
+
feed = @client.feed(feed_slug, user_id)
|
39
|
+
"#{feed.id} #{feed.token}"
|
77
40
|
end
|
78
41
|
end
|
79
42
|
|
80
43
|
def add_activity(activity_data)
|
81
44
|
uri = "/feed/#{@feed_url}/"
|
82
|
-
|
83
|
-
|
84
|
-
end
|
85
|
-
self.make_request(:post, uri, nil, activity_data)
|
45
|
+
activity_data[:to] &&= self.sign_to_field(activity_data[:to])
|
46
|
+
@client.make_request(:post, uri, @signature, nil, activity_data)
|
86
47
|
end
|
87
48
|
|
88
49
|
def add_activities(activities)
|
89
50
|
uri = "/feed/#{@feed_url}/"
|
90
51
|
activities.each do |activity|
|
91
|
-
|
92
|
-
activity[:to] = self.sign_to_field(activity[:to])
|
93
|
-
end
|
52
|
+
activity[:to] &&= self.sign_to_field(activity[:to])
|
94
53
|
end
|
95
54
|
data = {:activities => activities}
|
96
|
-
|
55
|
+
@client.make_request(:post, uri, @signature, nil, data)
|
97
56
|
end
|
98
57
|
|
99
58
|
def remove(activity_id, foreign_id=false)
|
@@ -102,21 +61,21 @@ module Stream
|
|
102
61
|
if foreign_id
|
103
62
|
params = {'foreign_id' => 1}
|
104
63
|
end
|
105
|
-
|
64
|
+
@client.make_request(:delete, uri, @signature, params)
|
106
65
|
end
|
107
66
|
|
108
67
|
def delete()
|
109
68
|
uri = "/feed/#{@feed_url}/"
|
110
|
-
|
69
|
+
@client.make_request(:delete, uri, @signature)
|
111
70
|
end
|
112
71
|
|
113
|
-
def follow(
|
72
|
+
def follow(target_feed_slug, target_user_id)
|
114
73
|
uri = "/feed/#{@feed_url}/follows/"
|
115
74
|
follow_data = {
|
116
|
-
:target =>
|
117
|
-
:target_token => @client.feed(
|
75
|
+
:target => "#{target_feed_slug}:#{target_user_id}",
|
76
|
+
:target_token => @client.feed(target_feed_slug, target_user_id).token
|
118
77
|
}
|
119
|
-
|
78
|
+
@client.make_request(:post, uri, @signature, nil, follow_data)
|
120
79
|
end
|
121
80
|
|
122
81
|
def followers(offset=0, limit=25)
|
@@ -125,7 +84,7 @@ module Stream
|
|
125
84
|
'offset' => offset,
|
126
85
|
'limit' => limit
|
127
86
|
}
|
128
|
-
|
87
|
+
@client.make_request(:get, uri, @signature, params)
|
129
88
|
end
|
130
89
|
|
131
90
|
def following(offset=0, limit=25, filter=[])
|
@@ -135,12 +94,12 @@ module Stream
|
|
135
94
|
'offset' => offset,
|
136
95
|
'filter' => filter.join(",")
|
137
96
|
}
|
138
|
-
|
97
|
+
@client.make_request(:get, uri, @signature, params)
|
139
98
|
end
|
140
99
|
|
141
|
-
def unfollow(
|
142
|
-
uri = "/feed/#{@feed_url}/follows/#{
|
143
|
-
|
100
|
+
def unfollow(target_feed_slug, target_user_id)
|
101
|
+
uri = "/feed/#{@feed_url}/follows/#{target_feed_slug}:#{target_user_id}/"
|
102
|
+
@client.make_request(:delete, uri, @signature)
|
144
103
|
end
|
145
104
|
|
146
105
|
end
|
data/lib/stream/signer.rb
CHANGED
@@ -14,10 +14,12 @@ module Stream
|
|
14
14
|
value.gsub('+', '-').gsub('/', '_').gsub(/^=+/, '').gsub(/=+$/, '')
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def sign(feed_slug, user_id)
|
18
|
+
message = "#{feed_slug}#{user_id}"
|
18
19
|
key = Digest::SHA1.digest @key.to_s
|
19
|
-
|
20
|
-
self.urlSafeB64encode(
|
20
|
+
token = Base64.strict_encode64(OpenSSL::HMAC.digest(@sha1, key, message))
|
21
|
+
self.urlSafeB64encode(token)
|
21
22
|
end
|
23
|
+
|
22
24
|
end
|
23
25
|
end
|
data/lib/stream/version.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stream-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tommaso Barbugli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10
|
11
|
+
date: 2014-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -58,15 +58,15 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.7
|
61
|
+
version: '0.7'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.7
|
69
|
-
description:
|
68
|
+
version: '0.7'
|
69
|
+
description: Ruby client for getstream.io service
|
70
70
|
email: tbarbugli@gmail.com
|
71
71
|
executables: []
|
72
72
|
extensions: []
|