stream-ruby 1.0.5 → 2.0.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: 54aa50f3ed493baf8e6a3a6a2df25859facdc696
4
- data.tar.gz: 495aba5daa3fb1d36c3c0bc9bdedf6993102fd75
3
+ metadata.gz: 98bb84c852a5f3ecd8ae404c9253c03ebd876596
4
+ data.tar.gz: f218d9d8f3a8a2d776c307a0a8c6b0c375787bb8
5
5
  SHA512:
6
- metadata.gz: fe178a263bb210866451c3268ce307a7b512c49708b52aefdf7e49c7c4bf9449ccd62f810b829d63733e8b9d7a124af70f141b02ab16c43630b6998dad1fa1d7
7
- data.tar.gz: 961d0889af207061376d97c9c31e61e27180ce92ca8d91dfc19c79275d38c856b40068f772a16148c35ffd38dfee886917b72345b9056a3c9cfb36c60194b738
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:1')
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:42')
48
+ user_feed_1.follow('flat', '42')
49
49
 
50
50
  # Stop following another feed
51
- user_feed_1.unfollow('flat:42')
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
@@ -9,7 +9,7 @@ module Stream
9
9
  Stream::Client.new(api_key, api_secret)
10
10
  end
11
11
 
12
- def clean_feed_id(feed_id)
12
+ def get_feed_slug_and_id(feed_id)
13
13
  feed_id.sub(':', '')
14
14
  end
15
15
  end
data/lib/stream/client.rb CHANGED
@@ -1,21 +1,25 @@
1
- require 'stream/signer'
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+).*site=(?<site>\d+)/i
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 :site
14
+ attr_reader :app_id
15
+ attr_reader :api_version
11
16
 
12
- def initialize(api_key='', api_secret='', site=0)
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
- site = matches['site']
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
- @site = site
31
+ @app_id = app_id
28
32
  @signer = Stream::Signer.new(api_secret)
29
33
  end
30
34
 
31
- def feed(feed_id)
32
- cleaned_feed_id = Stream::clean_feed_id(feed_id)
33
- signature = @signer.signature(cleaned_feed_id)
34
- Stream::Feed.new(self, feed_id, @api_key, signature)
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
- end
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
- end
4
+ module Stream
25
5
 
26
6
  class Feed
27
- @@http_client = nil
28
7
 
29
- attr_reader :feed_id
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, feed_id, api_key, signature)
14
+ def initialize(client, feed_slug, user_id, token)
15
+ @id = "#{feed_slug}:#{user_id}"
33
16
  @client = client
34
- @feed_id = feed_id
35
- @feed_url = feed_id.sub(':', '/')
36
- @api_key = api_key
37
- @token = signature
38
- cleaned_feed_id = Stream::clean_feed_id(feed_id)
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
- self.make_request(:get, uri, params)
32
+ @client.make_request(:get, uri, @signature, params)
70
33
  end
71
34
 
72
35
  def sign_to_field(to)
73
- to.map do |feed|
74
- feed_id = Stream::clean_feed_id(feed)
75
- token = @client.feed(feed_id).token
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
- if !activity_data[:to].nil?
83
- activity_data[:to] = self.sign_to_field(activity_data[:to])
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
- if !activity[:to].nil?
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
- self.make_request(:post, uri, nil, data)
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
- self.make_request(:delete, uri, params)
64
+ @client.make_request(:delete, uri, @signature, params)
106
65
  end
107
66
 
108
67
  def delete()
109
68
  uri = "/feed/#{@feed_url}/"
110
- self.make_request(:delete, uri)
69
+ @client.make_request(:delete, uri, @signature)
111
70
  end
112
71
 
113
- def follow(target_feed_id)
72
+ def follow(target_feed_slug, target_user_id)
114
73
  uri = "/feed/#{@feed_url}/follows/"
115
74
  follow_data = {
116
- :target => target_feed_id,
117
- :target_token => @client.feed(target_feed_id).token
75
+ :target => "#{target_feed_slug}:#{target_user_id}",
76
+ :target_token => @client.feed(target_feed_slug, target_user_id).token
118
77
  }
119
- self.make_request(:post, uri, nil, follow_data)
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
- self.make_request(:get, uri, params)
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
- self.make_request(:get, uri, params)
97
+ @client.make_request(:get, uri, @signature, params)
139
98
  end
140
99
 
141
- def unfollow(target_feed_id)
142
- uri = "/feed/#{@feed_url}/follows/#{target_feed_id}/"
143
- self.make_request(:delete, uri)
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 signature(message)
17
+ def sign(feed_slug, user_id)
18
+ message = "#{feed_slug}#{user_id}"
18
19
  key = Digest::SHA1.digest @key.to_s
19
- signature = Base64.strict_encode64(OpenSSL::HMAC.digest(@sha1, key, message.to_s))
20
- self.urlSafeB64encode(signature)
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
@@ -1,3 +1,3 @@
1
1
  module Stream
2
- VERSION = "1.0.5"
2
+ VERSION = "2.0.0"
3
3
  end
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: 1.0.5
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-30 00:00:00.000000000 Z
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.1
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.1
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: []