stream-ruby 2.2.3 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -10
  3. data/lib/stream.rb +1 -1
  4. data/lib/stream/base.rb +13 -13
  5. data/lib/stream/batch.rb +34 -36
  6. data/lib/stream/client.rb +105 -111
  7. data/lib/stream/errors.rb +5 -0
  8. data/lib/stream/exceptions.rb +2 -8
  9. data/lib/stream/feed.rb +114 -121
  10. data/lib/stream/signedrequest.rb +28 -31
  11. data/lib/stream/signer.rb +20 -21
  12. data/lib/stream/version.rb +1 -1
  13. metadata +4 -28
  14. data/lib/coverage/assets/0.8.0/application.css +0 -799
  15. data/lib/coverage/assets/0.8.0/application.js +0 -1559
  16. data/lib/coverage/assets/0.8.0/colorbox/border.png +0 -0
  17. data/lib/coverage/assets/0.8.0/colorbox/controls.png +0 -0
  18. data/lib/coverage/assets/0.8.0/colorbox/loading.gif +0 -0
  19. data/lib/coverage/assets/0.8.0/colorbox/loading_background.png +0 -0
  20. data/lib/coverage/assets/0.8.0/favicon_green.png +0 -0
  21. data/lib/coverage/assets/0.8.0/favicon_red.png +0 -0
  22. data/lib/coverage/assets/0.8.0/favicon_yellow.png +0 -0
  23. data/lib/coverage/assets/0.8.0/loading.gif +0 -0
  24. data/lib/coverage/assets/0.8.0/magnify.png +0 -0
  25. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  26. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  27. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  28. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  29. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  30. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  31. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  32. data/lib/coverage/assets/0.8.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  33. data/lib/coverage/assets/0.8.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  34. data/lib/coverage/assets/0.8.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  35. data/lib/coverage/assets/0.8.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  36. data/lib/coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  37. data/lib/coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  38. data/lib/coverage/index.html +0 -1162
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67555d94a5b00d5dceacd6a619e4eed4ca5398e4
4
- data.tar.gz: f40750f2291767e9058433d8d04781c7c093f847
3
+ metadata.gz: 359b8889235fc2df03b84b7330e7ce994dcd1618
4
+ data.tar.gz: 709c31cfb3240ef88e63e2c0171a2f75b2b369e3
5
5
  SHA512:
6
- metadata.gz: 5901f6942db86d474c60c56c4e5432d7d17cd3023c1b47ec6334cdfa0bfeb0c5b891ddd61a3dbb578a125ea67f40651a1e7089b7c87808124afd44a2f1a222e4
7
- data.tar.gz: 2ebe60f2812cb254195dc44aef96a643adb3051afc6d98b97bcffa104263241a39d08d86da9ea17f40a73e0bb74b48a4b9360b6683f9442a794d2826aa80f852
6
+ metadata.gz: 0bff2687b955dfae9cb454ca4affa5d241cc12ae3ad6e823fdab5edeec641c3b990c01110fbdfe813c336e449a0d9504e2ac94fb68034275d2a54a289c3421e4
7
+ data.tar.gz: d4e5dd145db0481d83ca6fc4838c86687a1f34ab3983d7821fa69227d483c92c43086eef4ed23e222975a38dfe82dbc930ffbb799a274eb52f224eef84babeed
data/README.md CHANGED
@@ -3,13 +3,8 @@ stream-ruby
3
3
 
4
4
  [![Build Status](https://travis-ci.org/GetStream/stream-ruby.svg?branch=master)](https://travis-ci.org/GetStream/stream-ruby) [![Gem Version](https://badge.fury.io/rb/stream-ruby.svg)](http://badge.fury.io/rb/stream-ruby)
5
5
 
6
-
7
-
8
-
9
- stream-ruby is a Ruby client for [Stream](https://getstream.io/).
10
-
11
- **Users of versions < 2.0.0, Stream::Feed constructor signature and other methods has changed. Please read this before upgrading:** [Breaking Changes](http://github.com/GetStream/stream-ruby/blob/master/upgrading.txt)
12
-
6
+ stream-ruby is the official Ruby client for [Stream](https://getstream.io/), a web service for building scalable newsfeeds and activity streams.
7
+ The full documentation is available on [GetStream.io/docs](http://getstream.io/docs/). Note that there is also a [higher level Rails integration](https://github.com/getstream/stream-rails) which hooks into your ORM.
13
8
 
14
9
  ### Installation
15
10
 
@@ -61,14 +56,14 @@ activities = [
61
56
  [:actor => '1', :verb => 'tweet', :object => '1'],
62
57
  [:actor => '2', :verb => 'like', :object => '3']
63
58
  ]
64
- user_feed_1.addActivities(activities)
59
+ user_feed_1.add_activities(activities)
65
60
 
66
61
  # Batch following many feeds (requires ruby 2.1 or later)
67
- follows = {[
62
+ follows = [{
68
63
  :source => 'flat:1', :target => 'user:1',
69
64
  :source => 'flat:1', :target => 'user:2',
70
65
  :source => 'flat:1', :target => 'user:3'
71
- ]}
66
+ }]
72
67
  client.follow_many(follows)
73
68
 
74
69
  # Add an activity and push it to other feeds too using the `to` field
@@ -104,6 +99,10 @@ user_feed_1.following(10, 10)
104
99
  # Check if user_feed_1 follows specific feeds
105
100
  user_feed_1.following(0, 2, filter=['user:42', 'user:43'])
106
101
 
102
+ # Add one activity to many feeds in one request
103
+ feeds = ['flat:1', 'flat:2', 'flat:3', 'flat:4']
104
+ activity = {:actor => "User:2", :verb => "pin", :object => "Place:42", :target => "Board:1"}
105
+ client.add_to_many(activity, feeds)
107
106
  ```
108
107
 
109
108
  Docs are available on [GetStream.io](http://getstream.io/docs/).
data/lib/stream.rb CHANGED
@@ -1 +1 @@
1
- require 'stream/base'
1
+ require "stream/base"
data/lib/stream/base.rb CHANGED
@@ -1,17 +1,17 @@
1
- require 'json'
2
- require 'stream/client'
3
- require 'stream/version'
4
- require 'stream/signer'
5
- require 'stream/exceptions'
1
+ require "json"
2
+ require "stream/client"
3
+ require "stream/errors"
4
+ require "stream/version"
5
+ require "stream/signer"
6
6
 
7
7
  module Stream
8
- class << self
9
- def connect(api_key, api_secret)
10
- Stream::Client.new(api_key, api_secret)
11
- end
8
+ class << self
9
+ def connect(api_key, api_secret)
10
+ Stream::Client.new(api_key, api_secret)
11
+ end
12
12
 
13
- def get_feed_slug_and_id(feed_id)
14
- feed_id.sub(':', '')
15
- end
13
+ def get_feed_slug_and_id(feed_id)
14
+ feed_id.sub(":", "")
16
15
  end
17
- end
16
+ end
17
+ end
data/lib/stream/batch.rb CHANGED
@@ -1,41 +1,39 @@
1
1
  module Stream
2
-
3
2
  module Batch
4
- #
5
- # Follows many feeds in one single request
6
- #
7
- # @param [Array<Hash<:source, :target>>] follows the list of follows
8
- #
9
- # @return [nil]
10
- #
11
- # @example
12
- #
13
- #
14
- # follows = [
15
- # {:source => 'flat:1', :target => 'user:1'},
16
- # {:source => 'flat:1', :target => 'user:3'}
17
- # ]
18
- # @client.follow_many(follows)
19
- #
20
- def follow_many(follows)
21
- self.make_signed_request(:post, '/follow_many/', {}, follows)
22
- end
23
-
24
- #
25
- # Adds an activity to many feeds in one single request
26
- #
27
- # @param [Hash] activity_data the activity do add
28
- # @param [Array<string>] feeds list of feeds (eg. 'user:1', 'flat:2')
29
- #
30
- # @return [nil]
31
- #
32
- def add_to_many(activity_data, feeds)
33
- data = {
34
- :feeds => feeds,
35
- :activity => activity_data
36
- }
37
- self.make_signed_request(:post, '/feed/add_to_many/', {}, data)
38
- end
3
+ #
4
+ # Follows many feeds in one single request
5
+ #
6
+ # @param [Array<Hash<:source, :target>>] follows the list of follows
7
+ #
8
+ # @return [nil]
9
+ #
10
+ # @example
11
+ #
12
+ #
13
+ # follows = [
14
+ # {:source => 'flat:1', :target => 'user:1'},
15
+ # {:source => 'flat:1', :target => 'user:3'}
16
+ # ]
17
+ # @client.follow_many(follows)
18
+ #
19
+ def follow_many(follows)
20
+ make_signed_request(:post, "/follow_many/", {}, follows)
39
21
  end
40
22
 
23
+ #
24
+ # Adds an activity to many feeds in one single request
25
+ #
26
+ # @param [Hash] activity_data the activity do add
27
+ # @param [Array<string>] feeds list of feeds (eg. 'user:1', 'flat:2')
28
+ #
29
+ # @return [nil]
30
+ #
31
+ def add_to_many(activity_data, feeds)
32
+ data = {
33
+ :feeds => feeds,
34
+ :activity => activity_data
35
+ }
36
+ make_signed_request(:post, "/feed/add_to_many/", {}, data)
37
+ end
38
+ end
41
39
  end
data/lib/stream/client.rb CHANGED
@@ -1,123 +1,117 @@
1
- require 'httparty'
2
- require 'stream/exceptions'
3
- require 'stream/feed'
4
- require 'stream/signer'
5
-
1
+ require "httparty"
2
+ require "stream/errors"
3
+ require "stream/feed"
4
+ require "stream/signer"
6
5
 
7
6
  module Stream
8
- STREAM_URL_RE = /https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?getstream\.io\/[\w=-\?%&]+app_id=(?<app_id>\d+)/i
9
-
10
- class Client
11
- attr_reader :api_key
12
- attr_reader :api_secret
13
- attr_reader :app_id
14
- attr_reader :api_version
15
- attr_reader :location
16
- attr_reader :default_timeout
17
-
18
- if RUBY_VERSION.to_f >= 2.1
19
- require 'stream/batch'
20
- require 'stream/signedrequest'
21
-
22
- include Stream::SignedRequest
23
- include Stream::Batch
24
- end
25
-
26
- #
27
- # initializes a Stream API Client
28
- #
29
- # @param [string] api_key your application api_key
30
- # @param [string] api_secret your application secret
31
- # @param [string] app_id the id of your application (optional)
32
- # @param [hash] opts extra options
33
- #
34
- # @example initialise the client to connect to EU-West location
35
- # Stream::Client.new('my_key', 'my_secret', 'my_app_id', :location => 'us-east')
36
- #
37
- def initialize(api_key='', api_secret='', app_id=nil, opts={})
38
- if ENV['STREAM_URL'] =~ Stream::STREAM_URL_RE and (api_key.nil? || api_key.empty?)
39
- matches = Stream::STREAM_URL_RE.match(ENV['STREAM_URL'])
40
- api_key = matches['key']
41
- api_secret = matches['secret']
42
- app_id = matches['app_id']
43
- opts[:location] = matches['location']
44
- end
45
-
46
- if api_key.nil? || api_key.empty?
47
- raise ArgumentError, 'empty api_key parameter and missing or invalid STREAM_URL env variable'
48
- end
49
-
50
- @api_key = api_key
51
- @api_secret = api_secret
52
- @app_id = app_id
53
- @location = opts[:location]
54
- @api_version = opts.fetch(:api_version, 'v1.0')
55
- @default_timeout = opts.fetch(:default_timeout, 3)
56
- @signer = Stream::Signer.new(api_secret)
57
- end
58
-
59
- #
60
- # Creates a feed instance
61
- #
62
- # @param [string] feed_slug the feed slug (eg. flat, aggregated...)
63
- # @param [user_id] user_id the user_id of this feed (eg. User42)
64
- #
65
- # @return [Stream::Feed]
66
- #
67
- def feed(feed_slug, user_id)
68
- token = @signer.sign(feed_slug, user_id)
69
- Stream::Feed.new(self, feed_slug, user_id, token)
70
- end
71
-
72
- def get_default_params
73
- {:api_key => @api_key}
74
- end
75
-
76
- def get_http_client
77
- StreamHTTPClient.new(@api_version, @location, @default_timeout)
78
- end
79
-
80
- def make_query_params(params)
81
- self.get_default_params.merge(params)
82
- end
7
+ STREAM_URL_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?getstream\.io\/[\w=-\?%&]+app_id=(?<app_id>\d+)}i
8
+
9
+ class Client
10
+ attr_reader :api_key
11
+ attr_reader :api_secret
12
+ attr_reader :app_id
13
+ attr_reader :api_version
14
+ attr_reader :location
15
+ attr_reader :default_timeout
16
+
17
+ if RUBY_VERSION.to_f >= 2.1
18
+ require "stream/batch"
19
+ require "stream/signedrequest"
20
+
21
+ include Stream::SignedRequest
22
+ include Stream::Batch
23
+ end
83
24
 
84
- def make_request(method, relative_url, signature, params={}, data={}, headers={})
85
- headers['Authorization'] = signature
86
- self.get_http_client.make_http_request(method, relative_url, self.make_query_params(params), data, headers)
87
- end
25
+ #
26
+ # initializes a Stream API Client
27
+ #
28
+ # @param [string] api_key your application api_key
29
+ # @param [string] api_secret your application secret
30
+ # @param [string] app_id the id of your application (optional)
31
+ # @param [hash] opts extra options
32
+ #
33
+ # @example initialise the client to connect to EU-West location
34
+ # Stream::Client.new('my_key', 'my_secret', 'my_app_id', :location => 'us-east')
35
+ #
36
+ def initialize(api_key = "", api_secret = "", app_id = nil, opts = {})
37
+ if ENV["STREAM_URL"] =~ Stream::STREAM_URL_RE && (api_key.nil? || api_key.empty?)
38
+ matches = Stream::STREAM_URL_RE.match(ENV["STREAM_URL"])
39
+ api_key = matches["key"]
40
+ api_secret = matches["secret"]
41
+ app_id = matches["app_id"]
42
+ opts[:location] = matches["location"]
43
+ end
44
+
45
+ if api_key.nil? || api_key.empty?
46
+ raise ArgumentError, "empty api_key parameter and missing or invalid STREAM_URL env variable"
47
+ end
48
+
49
+ @api_key = api_key
50
+ @api_secret = api_secret
51
+ @app_id = app_id
52
+ @location = opts[:location]
53
+ @api_version = opts.fetch(:api_version, "v1.0")
54
+ @default_timeout = opts.fetch(:default_timeout, 3)
55
+ @signer = Stream::Signer.new(api_secret)
56
+ end
88
57
 
58
+ #
59
+ # Creates a feed instance
60
+ #
61
+ # @param [string] feed_slug the feed slug (eg. flat, aggregated...)
62
+ # @param [user_id] user_id the user_id of this feed (eg. User42)
63
+ #
64
+ # @return [Stream::Feed]
65
+ #
66
+ def feed(feed_slug, user_id)
67
+ token = @signer.sign(feed_slug, user_id)
68
+ Stream::Feed.new(self, feed_slug, user_id, token)
89
69
  end
90
70
 
91
- class StreamHTTPClient
71
+ def get_default_params
72
+ { :api_key => @api_key }
73
+ end
92
74
 
93
- include HTTParty
94
- attr_reader :base_path
75
+ def get_http_client
76
+ StreamHTTPClient.new(@api_version, @location, @default_timeout)
77
+ end
95
78
 
96
- def initialize(api_version='v1.0', location=nil, default_timeout=3)
97
- if location.nil?
98
- location_name = "api"
99
- else
100
- location_name = "#{location}-api"
101
- end
102
- @base_path = "/api/#{api_version}"
103
- self.class.base_uri "https://#{location_name}.getstream.io#{@base_path}"
104
- self.class.default_timeout default_timeout
105
- end
79
+ def make_query_params(params)
80
+ get_default_params.merge(params)
81
+ end
106
82
 
107
- def make_http_request(method, relative_url, params=nil, data=nil, headers=nil)
108
- headers['Content-Type'] = 'application/json'
109
- headers['User-Agent'] = "stream-ruby-#{Stream::VERSION}"
110
- if ['post', 'put'].include? method.to_s
111
- body = data.to_json
112
- end
113
- response = self.class.send(method, relative_url, :headers => headers, :query => params, :body => body )
114
- case response.code
115
- when 200..203
116
- return response
117
- when 204...600
118
- raise StreamApiResponseException, "#{response['exception']} details: #{response['detail']}"
119
- end
120
- end
83
+ def make_request(method, relative_url, signature, params = {}, data = {}, headers = {})
84
+ headers["Authorization"] = signature
85
+ get_http_client.make_http_request(method, relative_url, make_query_params(params), data, headers)
86
+ end
87
+ end
88
+
89
+ class StreamHTTPClient
90
+ include HTTParty
91
+ attr_reader :base_path
92
+
93
+ def initialize(api_version = "v1.0", location = nil, default_timeout = 3)
94
+ if location.nil?
95
+ location_name = "api"
96
+ else
97
+ location_name = "#{location}-api"
98
+ end
99
+ @base_path = "/api/#{api_version}"
100
+ self.class.base_uri "https://#{location_name}.getstream.io#{@base_path}"
101
+ self.class.default_timeout default_timeout
121
102
  end
122
103
 
104
+ def make_http_request(method, relative_url, params = nil, data = nil, headers = nil)
105
+ headers["Content-Type"] = "application/json"
106
+ headers["X-Stream-Client"] = "stream-ruby-client-#{Stream::VERSION}"
107
+ body = data.to_json if ["post", "put"].include? method.to_s
108
+ response = self.class.send(method, relative_url, :headers => headers, :query => params, :body => body)
109
+ case response.code
110
+ when 200..203
111
+ return response
112
+ when 204...600
113
+ raise StreamApiResponseException, "#{response['exception']} details: #{response['detail']}"
114
+ end
115
+ end
116
+ end
123
117
  end
@@ -0,0 +1,5 @@
1
+ module Stream
2
+ class Error < StandardError; end
3
+ class StreamApiResponseException < Error; end
4
+ class StreamInputData < Error; end
5
+ end
@@ -1,8 +1,2 @@
1
- module Stream
2
-
3
- class StreamApiResponseException < Exception
4
- end
5
-
6
- class StreamInputData < Exception
7
- end
8
- end
1
+ warn "Requiring 'stream/exceptions' is deprecated. Use 'stream/errors' instead."
2
+ require "stream/errors"
data/lib/stream/feed.rb CHANGED
@@ -1,127 +1,120 @@
1
- require 'stream/signer'
2
-
1
+ require "stream/signer"
3
2
 
4
3
  module Stream
4
+ class Feed
5
+ attr_reader :id
6
+ attr_reader :slug
7
+ attr_reader :user_id
8
+ attr_reader :token
9
+ attr_reader :signature
10
+
11
+ def initialize(client, feed_slug, user_id, token)
12
+ unless valid_feed_slug feed_slug
13
+ raise StreamInputData, "feed_slug can only contain alphanumeric characters"
14
+ end
15
+
16
+ unless valid_user_id user_id
17
+ raise StreamInputData, "user_id can only contain alphanumeric characters plus underscores and dashes"
18
+ end
19
+
20
+ @id = "#{feed_slug}:#{user_id}"
21
+ @client = client
22
+ @user_id = user_id
23
+ @slug = feed_slug
24
+ @feed_url = "#{feed_slug}/#{user_id}"
25
+ @token = token
26
+ @signature = "#{feed_slug}#{user_id} #{token}"
27
+ end
28
+
29
+ def valid_feed_slug(feed_slug)
30
+ !feed_slug[/^[^_\W]+$/].nil?
31
+ end
5
32
 
6
- class Feed
7
-
8
- attr_reader :id
9
- attr_reader :slug
10
- attr_reader :user_id
11
- attr_reader :token
12
- attr_reader :signature
13
-
14
- def initialize(client, feed_slug, user_id, token)
15
-
16
- if !self.valid_feed_slug feed_slug
17
- raise StreamInputData, "feed_slug can only contain alphanumeric characters plus \"_\""
18
- end
19
-
20
- if !self.valid_user_id user_id
21
- raise StreamInputData, "user_id can only contain alphanumeric characters plus underscores and dashes"
22
- end
23
-
24
- @id = "#{feed_slug}:#{user_id}"
25
- @client = client
26
- @user_id = user_id
27
- @slug = feed_slug
28
- @feed_url = "#{feed_slug}/#{user_id}"
29
- @token = token
30
- @signature = "#{feed_slug}#{user_id} #{token}"
31
- end
32
-
33
- def valid_feed_slug(feed_slug)
34
- !feed_slug[/^\w+$/].nil?
35
- end
36
-
37
- def valid_user_id(user_id)
38
- !user_id.to_s[/^[\w-]+$/].nil?
39
- end
40
-
41
- def get(params = {})
42
- uri = "/feed/#{@feed_url}/"
43
- if params[:mark_read] and params[:mark_read].kind_of?(Array)
44
- params[:mark_read] = params[:mark_read].join(",")
45
- end
46
- if params[:mark_seen] and params[:mark_seen].kind_of?(Array)
47
- params[:mark_seen] = params[:mark_seen].join(",")
48
- end
49
- @client.make_request(:get, uri, @signature, params)
50
- end
51
-
52
- def sign_to_field(to)
53
- to.map do |feed_id|
54
- feed_slug, user_id = feed_id.split(':')
55
- feed = @client.feed(feed_slug, user_id)
56
- "#{feed.id} #{feed.token}"
57
- end
58
- end
59
-
60
- def add_activity(activity_data)
61
- uri = "/feed/#{@feed_url}/"
62
- activity_data[:to] &&= self.sign_to_field(activity_data[:to])
63
- @client.make_request(:post, uri, @signature, {}, activity_data)
64
- end
65
-
66
- def add_activities(activities)
67
- uri = "/feed/#{@feed_url}/"
68
- activities.each do |activity|
69
- activity[:to] &&= self.sign_to_field(activity[:to])
70
- end
71
- data = {:activities => activities}
72
- @client.make_request(:post, uri, @signature, {}, data)
73
- end
74
-
75
- def remove(activity_id, foreign_id=false)
76
- self.remove_activity(activity_id, foreign_id)
77
- end
78
-
79
- def remove_activity(activity_id, foreign_id=false)
80
- uri = "/feed/#{@feed_url}/#{activity_id}/"
81
- params = {}
82
- if foreign_id
83
- params = {'foreign_id' => 1}
84
- end
85
- @client.make_request(:delete, uri, @signature, params)
86
- end
87
-
88
- def delete()
89
- uri = "/feed/#{@feed_url}/"
90
- @client.make_request(:delete, uri, @signature)
91
- end
92
-
93
- def follow(target_feed_slug, target_user_id)
94
- uri = "/feed/#{@feed_url}/follows/"
95
- follow_data = {
96
- :target => "#{target_feed_slug}:#{target_user_id}",
97
- :target_token => @client.feed(target_feed_slug, target_user_id).token
98
- }
99
- @client.make_request(:post, uri, @signature, {}, follow_data)
100
- end
101
-
102
- def followers(offset=0, limit=25)
103
- uri = "/feed/#{@feed_url}/followers/"
104
- params = {
105
- 'offset' => offset,
106
- 'limit' => limit
107
- }
108
- @client.make_request(:get, uri, @signature, params)
109
- end
110
-
111
- def following(offset=0, limit=25, filter=[])
112
- uri = "/feed/#{@feed_url}/follows/"
113
- params = {
114
- 'offset' => offset,
115
- 'limit' => limit,
116
- 'filter' => filter.join(",")
117
- }
118
- @client.make_request(:get, uri, @signature, params)
119
- end
120
-
121
- def unfollow(target_feed_slug, target_user_id)
122
- uri = "/feed/#{@feed_url}/follows/#{target_feed_slug}:#{target_user_id}/"
123
- @client.make_request(:delete, uri, @signature)
124
- end
33
+ def valid_user_id(user_id)
34
+ !user_id.to_s[/^[\w-]+$/].nil?
35
+ end
36
+
37
+ def get(params = {})
38
+ uri = "/feed/#{@feed_url}/"
39
+ if params[:mark_read] && params[:mark_read].is_a?(Array)
40
+ params[:mark_read] = params[:mark_read].join(",")
41
+ end
42
+ if params[:mark_seen] && params[:mark_seen].is_a?(Array)
43
+ params[:mark_seen] = params[:mark_seen].join(",")
44
+ end
45
+ @client.make_request(:get, uri, @signature, params)
46
+ end
47
+
48
+ def sign_to_field(to)
49
+ to.map do |feed_id|
50
+ feed_slug, user_id = feed_id.split(":")
51
+ feed = @client.feed(feed_slug, user_id)
52
+ "#{feed.id} #{feed.token}"
53
+ end
54
+ end
55
+
56
+ def add_activity(activity_data)
57
+ uri = "/feed/#{@feed_url}/"
58
+ activity_data[:to] &&= sign_to_field(activity_data[:to])
59
+ @client.make_request(:post, uri, @signature, {}, activity_data)
60
+ end
61
+
62
+ def add_activities(activities)
63
+ uri = "/feed/#{@feed_url}/"
64
+ activities.each do |activity|
65
+ activity[:to] &&= sign_to_field(activity[:to])
66
+ end
67
+ data = { :activities => activities }
68
+ @client.make_request(:post, uri, @signature, {}, data)
69
+ end
70
+
71
+ def remove(activity_id, foreign_id = false)
72
+ remove_activity(activity_id, foreign_id)
73
+ end
74
+
75
+ def remove_activity(activity_id, foreign_id = false)
76
+ uri = "/feed/#{@feed_url}/#{activity_id}/"
77
+ params = {}
78
+ params = { "foreign_id" => 1 } if foreign_id
79
+ @client.make_request(:delete, uri, @signature, params)
80
+ end
81
+
82
+ def delete
83
+ uri = "/feed/#{@feed_url}/"
84
+ @client.make_request(:delete, uri, @signature)
85
+ end
86
+
87
+ def follow(target_feed_slug, target_user_id)
88
+ uri = "/feed/#{@feed_url}/follows/"
89
+ follow_data = {
90
+ :target => "#{target_feed_slug}:#{target_user_id}",
91
+ :target_token => @client.feed(target_feed_slug, target_user_id).token
92
+ }
93
+ @client.make_request(:post, uri, @signature, {}, follow_data)
94
+ end
95
+
96
+ def followers(offset = 0, limit = 25)
97
+ uri = "/feed/#{@feed_url}/followers/"
98
+ params = {
99
+ "offset" => offset,
100
+ "limit" => limit
101
+ }
102
+ @client.make_request(:get, uri, @signature, params)
103
+ end
104
+
105
+ def following(offset = 0, limit = 25, filter = [])
106
+ uri = "/feed/#{@feed_url}/follows/"
107
+ params = {
108
+ "offset" => offset,
109
+ "limit" => limit,
110
+ "filter" => filter.join(",")
111
+ }
112
+ @client.make_request(:get, uri, @signature, params)
113
+ end
125
114
 
115
+ def unfollow(target_feed_slug, target_user_id)
116
+ uri = "/feed/#{@feed_url}/follows/#{target_feed_slug}:#{target_user_id}/"
117
+ @client.make_request(:delete, uri, @signature)
126
118
  end
119
+ end
127
120
  end