backchat-client 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/add_channel_to_stream.rb +4 -2
- data/examples/create_channel.rb +12 -3
- data/examples/create_stream.rb +4 -2
- data/examples/delete_channel.rb +4 -2
- data/examples/delete_stream.rb +4 -2
- data/examples/delete_user.rb +4 -2
- data/examples/get_channels.rb +4 -2
- data/examples/setup.rb +1 -0
- data/examples/stream.rb +4 -2
- data/examples/user.rb +5 -2
- data/lib/backchat-client.rb +37 -29
- data/lib/backchat_client/channel.rb +11 -12
- data/lib/backchat_client/error.rb +4 -0
- data/lib/backchat_client/error/client_error.rb +14 -0
- data/lib/backchat_client/error/general_error.rb +27 -0
- data/lib/backchat_client/error/server_error.rb +9 -0
- data/lib/backchat_client/http_client.rb +61 -8
- data/lib/backchat_client/stream.rb +20 -23
- data/lib/backchat_client/user.rb +1 -1
- data/lib/backchat_client/version.rb +1 -1
- data/spec/backchat-client_spec.rb +6 -11
- data/spec/channel_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -0
- data/spec/streams_spec.rb +1 -5
- data/spec/user_spec.rb +1 -6
- metadata +9 -2
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 3 and
|
6
8
|
(
|
@@ -12,7 +14,7 @@ api_key = ARGV.shift
|
|
12
14
|
stream_slug = ARGV.shift
|
13
15
|
channel = ARGV.shift
|
14
16
|
|
15
|
-
bc = Backchat::Client.new(api_key)
|
17
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
16
18
|
bc.logger.level = Logger::DEBUG
|
17
19
|
|
18
20
|
begin
|
data/examples/create_channel.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 2 and
|
6
8
|
(
|
@@ -14,7 +16,14 @@ type = ARGV.shift
|
|
14
16
|
|
15
17
|
name = ARGV.shift
|
16
18
|
|
17
|
-
bc = Backchat::Client.new(api_key)
|
19
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
18
20
|
bc.logger.level = Logger::DEBUG
|
19
21
|
|
20
|
-
|
22
|
+
begin
|
23
|
+
puts bc.create_channel(type, name)
|
24
|
+
rescue BackchatClient::Error::ConflictError => ex
|
25
|
+
puts "channel already exists"
|
26
|
+
rescue BackchatClient::Error::UnprocessableError => ex
|
27
|
+
puts "invalid channel name"
|
28
|
+
p ex.errors
|
29
|
+
end
|
data/examples/create_stream.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 2 and
|
6
8
|
(
|
@@ -12,7 +14,7 @@ api_key = ARGV.shift
|
|
12
14
|
|
13
15
|
stream = ARGV.shift
|
14
16
|
|
15
|
-
bc = Backchat::Client.new(api_key)
|
17
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
16
18
|
bc.logger.level = Logger::DEBUG
|
17
19
|
|
18
20
|
puts bc.create_stream(stream)
|
data/examples/delete_channel.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 2 and
|
6
8
|
(
|
@@ -12,7 +14,7 @@ api_key = ARGV.shift
|
|
12
14
|
|
13
15
|
channel = ARGV.shift
|
14
16
|
|
15
|
-
bc = Backchat::Client.new(api_key)
|
17
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
16
18
|
bc.logger.level = Logger::DEBUG
|
17
19
|
|
18
20
|
puts bc.destroy_channel(channel, true)
|
data/examples/delete_stream.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 2 and
|
6
8
|
(
|
@@ -12,7 +14,7 @@ api_key = ARGV.shift
|
|
12
14
|
|
13
15
|
stream = ARGV.shift
|
14
16
|
|
15
|
-
bc = Backchat::Client.new(api_key)
|
17
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
16
18
|
bc.logger.level = Logger::DEBUG
|
17
19
|
|
18
20
|
puts bc.destroy_stream(stream)
|
data/examples/delete_user.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 1 and
|
6
8
|
(
|
@@ -10,7 +12,7 @@ ARGV.length < 1 and
|
|
10
12
|
|
11
13
|
api_key = ARGV.shift
|
12
14
|
|
13
|
-
bc = Backchat::Client.new(api_key)
|
15
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
14
16
|
|
15
17
|
bc.logger.level = Logger::DEBUG
|
16
18
|
|
data/examples/get_channels.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 1 and
|
6
8
|
(
|
@@ -10,7 +12,7 @@ ARGV.length < 1 and
|
|
10
12
|
|
11
13
|
api_key = ARGV.shift
|
12
14
|
|
13
|
-
bc = Backchat::Client.new(api_key)
|
15
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
14
16
|
bc.logger.level=Logger::DEBUG
|
15
17
|
|
16
18
|
begin
|
data/examples/setup.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
BACKCHAT_ENDPOINT = "https://api.backchat.io/1"
|
data/examples/stream.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 1 and
|
6
8
|
(
|
@@ -17,7 +19,7 @@ stream = if ARGV.length < 1
|
|
17
19
|
end
|
18
20
|
|
19
21
|
Backchat::Client.log_level=Logger::DEBUG
|
20
|
-
bc = Backchat::Client.new(api_key)
|
22
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
21
23
|
|
22
24
|
begin
|
23
25
|
puts bc.find_stream(stream)
|
data/examples/user.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__), '.')
|
2
3
|
|
3
4
|
require 'backchat-client'
|
5
|
+
require 'setup'
|
4
6
|
|
5
7
|
ARGV.length < 1 and
|
6
8
|
(
|
@@ -11,6 +13,7 @@ ARGV.length < 1 and
|
|
11
13
|
api_key = ARGV.shift
|
12
14
|
|
13
15
|
|
14
|
-
|
16
|
+
Backchat::Client.log_level = Logger::DEBUG
|
17
|
+
bc = Backchat::Client.new(api_key, BACKCHAT_ENDPOINT)
|
15
18
|
puts bc.get_profile
|
16
19
|
|
data/lib/backchat-client.rb
CHANGED
@@ -2,11 +2,14 @@ require 'backchat_client/channel'
|
|
2
2
|
require 'backchat_client/stream'
|
3
3
|
require 'backchat_client/user'
|
4
4
|
require 'backchat_client/backchat_logger'
|
5
|
+
require 'backchat_client/error'
|
5
6
|
require 'addressable/uri'
|
6
7
|
|
7
8
|
module Backchat
|
8
9
|
|
9
10
|
include BackchatClient::BackchatLogger
|
11
|
+
|
12
|
+
autoload :ClientError, 'error/client_error'
|
10
13
|
|
11
14
|
#
|
12
15
|
# This class is the main entry point to use the backchat-client gem.
|
@@ -63,7 +66,6 @@ module Backchat
|
|
63
66
|
#
|
64
67
|
# Retrieves a specific channel or all the channels associated to the api_key
|
65
68
|
# @return one or more channel data
|
66
|
-
#
|
67
69
|
def find_channel
|
68
70
|
channels = channel.find
|
69
71
|
|
@@ -76,15 +78,15 @@ module Backchat
|
|
76
78
|
end
|
77
79
|
end
|
78
80
|
|
79
|
-
#
|
80
81
|
# Creates a specific channel
|
81
|
-
# @param
|
82
|
-
# @param
|
83
|
-
#
|
84
|
-
def create_channel(
|
85
|
-
_channel = channel.create(generate_channel_url(
|
82
|
+
# @param uri Full URI of the channel: <type>://<address>
|
83
|
+
# @param bql optional backchat filter
|
84
|
+
# @return response body returned by backchat
|
85
|
+
def create_channel(uri, bql=nil)
|
86
|
+
_channel = channel.create(generate_channel_url(uri, bql))
|
86
87
|
|
87
88
|
if _channel.respond_to?("has_key?") and _channel.has_key?("data")
|
89
|
+
logger.debug("Channel created in Backchat #{_channel}")
|
88
90
|
_channel["data"]
|
89
91
|
else
|
90
92
|
logger.error("Invalid data received while creating channel #{_channel}")
|
@@ -92,23 +94,20 @@ module Backchat
|
|
92
94
|
end
|
93
95
|
end
|
94
96
|
|
95
|
-
#
|
96
97
|
# Delete a channel
|
97
98
|
# @param *name*
|
98
99
|
# @param *force* true|false if channel should be deleted even if being used in a stream
|
99
|
-
#
|
100
|
+
# @return true|false
|
100
101
|
def destroy_channel(name, force = false)
|
101
102
|
channel.destroy(name, force)
|
102
103
|
end
|
103
104
|
|
104
105
|
# Streams management
|
105
106
|
|
106
|
-
|
107
107
|
#
|
108
108
|
# Retrieves a specific stream
|
109
109
|
# @param *name* (optional) stream name. If undefined, all the user streams are retrieved
|
110
110
|
# @return stream data hash
|
111
|
-
#
|
112
111
|
def find_stream(name = nil)
|
113
112
|
streams = stream.find(name)
|
114
113
|
|
@@ -125,28 +124,30 @@ module Backchat
|
|
125
124
|
# @param *name* unique stream identifier
|
126
125
|
# @param *description* (optional)
|
127
126
|
# @param *filters* (optional) array of filters
|
128
|
-
#
|
129
127
|
def create_stream(name, description = nil, filters = [])
|
130
128
|
description.nil? and description = "Stream created using backchat-client gem"
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
129
|
+
begin
|
130
|
+
_stream = stream.create(name, description, filters)
|
131
|
+
if _stream.respond_to?("has_key?") and _stream.has_key?("data")
|
132
|
+
_stream["data"]
|
133
|
+
else
|
134
|
+
logger.error("Invalid data received while creating stream: #{_stream}")
|
135
|
+
raise "No data received from Backchat while creating stream"
|
136
|
+
end
|
137
|
+
rescue BackchatClient::Error::ClientError => ex
|
138
|
+
logger.error("There was an error creating the stream: #{ex.errors}")
|
139
|
+
nil
|
138
140
|
end
|
139
141
|
end
|
140
142
|
|
141
143
|
#
|
142
144
|
# This method updates the stream, assigning the new channels array to it.
|
143
145
|
# In order to simplify, all the channels received will be automatically enabled.
|
144
|
-
# @param stream_slug stream name
|
145
|
-
# @param channels array of channels to be included in the stream
|
146
|
-
# @param reset the channels are added (false) to the current channels or remove (true) the previous ones
|
147
|
-
# @param filter valid Lucene syntax to filter the channels
|
148
|
-
# @return true if the stream was successfully updated
|
149
|
-
# @raise exception if stream is not found
|
146
|
+
# @param *stream_slug* stream name
|
147
|
+
# @param *channels* array of channels to be included in the stream
|
148
|
+
# @param *reset* the channels are added (false) to the current channels or remove (true) the previous ones
|
149
|
+
# @param *filter* valid Lucene syntax to filter the channels
|
150
|
+
# @return *boolean* true if the stream was successfully updated, false in case of failure
|
150
151
|
#
|
151
152
|
def set_channels(stream_slug, channels = [], reset = false, filter = nil)
|
152
153
|
st = stream.find(stream_slug) or raise "stream does not exist"
|
@@ -167,8 +168,16 @@ module Backchat
|
|
167
168
|
st["channel_filters"] |= channels
|
168
169
|
end
|
169
170
|
|
170
|
-
|
171
|
-
|
171
|
+
begin
|
172
|
+
logger.debug("Updating stream channels to #{st}")
|
173
|
+
stream.update(stream_slug, st)
|
174
|
+
true
|
175
|
+
rescue Exception => ex
|
176
|
+
logger.error("Error while updating stream channels : #{ex.message}")
|
177
|
+
logger.error(ex)
|
178
|
+
false
|
179
|
+
end
|
180
|
+
|
172
181
|
end
|
173
182
|
|
174
183
|
#
|
@@ -181,8 +190,7 @@ module Backchat
|
|
181
190
|
#
|
182
191
|
# Helper that generates the channel url using Addressable help
|
183
192
|
#
|
184
|
-
def generate_channel_url(
|
185
|
-
channel_uri = "#{type}://#{id}"
|
193
|
+
def generate_channel_url(channel_uri, filter = nil)
|
186
194
|
if filter
|
187
195
|
channel_uri += "?q=#{filter}"
|
188
196
|
end
|
@@ -14,46 +14,45 @@ module BackchatClient
|
|
14
14
|
# http uri to handle channels
|
15
15
|
URI_PATH = "channels"
|
16
16
|
|
17
|
-
#
|
18
17
|
# @param *api_key* application identifier
|
19
18
|
# @param *endpoint* Backchat endpoint
|
20
|
-
#
|
21
19
|
def initialize(api_key, endpoint)
|
22
20
|
@api_key = api_key
|
23
21
|
@endpoint = endpoint
|
24
22
|
end
|
25
23
|
|
26
|
-
#
|
27
24
|
# This method POST a request to create a new channel on behalf of the
|
28
25
|
# authenticated application
|
29
26
|
# @param uri valid Backchat URI, i.e. twitter://username
|
30
27
|
# @return response body
|
31
|
-
#
|
32
28
|
def create(uri)
|
33
|
-
|
29
|
+
begin
|
30
|
+
data = post("index.json", {:channel => uri})
|
31
|
+
ActiveSupport::JSON.decode(data)
|
32
|
+
rescue Error::ClientError => ex
|
33
|
+
logger.error ex.errors
|
34
|
+
raise ex
|
35
|
+
end
|
34
36
|
end
|
35
37
|
|
36
|
-
#
|
37
38
|
# This method sends a GET request to retrieve all the user channels
|
38
39
|
# There is no way to retrieve a specific channel
|
39
40
|
# @return response body
|
40
|
-
#
|
41
41
|
def find
|
42
42
|
ActiveSupport::JSON.decode(get("index.json"))
|
43
43
|
end
|
44
44
|
|
45
|
-
#
|
46
45
|
# Delete an application channel
|
47
46
|
# @param *name* valid channel URI
|
48
47
|
# @param *force* delete even if it is being used by a stream
|
49
48
|
# @return true|false
|
50
|
-
#
|
51
49
|
def destroy(name, force = false)
|
52
50
|
begin
|
53
51
|
ActiveSupport::JSON.decode(delete("", {:channel => name, :force => force}))
|
54
|
-
|
55
|
-
rescue
|
56
|
-
|
52
|
+
true
|
53
|
+
rescue Error::ClientError => ex
|
54
|
+
logger.error ex.errors
|
55
|
+
false
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module BackchatClient::Error
|
2
|
+
|
3
|
+
class GeneralError < StandardError
|
4
|
+
attr_reader :response
|
5
|
+
|
6
|
+
def initialize(response = nil)
|
7
|
+
@response = response
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
response
|
12
|
+
end
|
13
|
+
|
14
|
+
def errors
|
15
|
+
@errors||=(
|
16
|
+
errors = nil
|
17
|
+
if !response.nil? and response.respond_to?(:body)
|
18
|
+
data = ActiveSupport::JSON.decode(response.body)
|
19
|
+
data.has_key?("errors") and errors = data["errors"].flatten
|
20
|
+
end
|
21
|
+
errors
|
22
|
+
)
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rest_client'
|
2
|
+
require 'cgi'
|
2
3
|
require 'backchat_client/backchat_logger'
|
3
4
|
|
4
5
|
module BackchatClient
|
@@ -14,15 +15,61 @@ module BackchatClient
|
|
14
15
|
module HttpClient
|
15
16
|
|
16
17
|
include BackchatClient::BackchatLogger
|
18
|
+
|
19
|
+
# This method is used to handle the HTTP response
|
20
|
+
# *response* HTTP response
|
21
|
+
# *request* HTTP request
|
22
|
+
# *result*
|
23
|
+
def response_handler(response, request, result, &block)
|
24
|
+
case response.code
|
25
|
+
when 200..207
|
26
|
+
# If there is a :location header, return it
|
27
|
+
response.return!(request, result, &block)
|
28
|
+
when 301..307
|
29
|
+
response.follow_redirection(request, result, &block)
|
30
|
+
when 400
|
31
|
+
logger.warn("Bad request")
|
32
|
+
logger.warn("#{result.code} => #{result.message}")
|
33
|
+
raise BackchatClient::Error::ClientError.new(result)
|
34
|
+
when 401
|
35
|
+
logger.warn("Error while accessing Backchat. Authentication failed")
|
36
|
+
logger.warn("#{result.code} => #{result.message}")
|
37
|
+
raise BackchatClient::Error::ClientError.new(result)
|
38
|
+
when 404
|
39
|
+
logger.warn("Error while accessing Backchat. Resource not found")
|
40
|
+
logger.warn("#{result.code} => #{result.message}")
|
41
|
+
raise BackchatClient::Error::ClientError.new(result)
|
42
|
+
when 409
|
43
|
+
logger.warn("Error while accessing Backchat. Conflict")
|
44
|
+
logger.warn("#{result.code} => #{result.message}")
|
45
|
+
raise BackchatClient::Error::ConflictError.new(result)
|
46
|
+
when 422
|
47
|
+
logger.warn("Error while accessing Backchat. Unprocessable entity")
|
48
|
+
logger.warn("#{result.code} => #{result.message}")
|
49
|
+
raise BackchatClient::Error::UnprocessableError.new(result)
|
50
|
+
when 402..408,410..421,423..499
|
51
|
+
logger.warn("Error while accessing Backchat")
|
52
|
+
logger.warn("#{result.code} => #{result.message}")
|
53
|
+
response.return!(request, result, &block)
|
54
|
+
else
|
55
|
+
logger.warn("Error while accessing Backchat")
|
56
|
+
logger.warn("#{result.code} => #{result.message}")
|
57
|
+
response.return!(request, result, &block)
|
58
|
+
end
|
59
|
+
end
|
17
60
|
|
18
61
|
# HTTP GET
|
19
62
|
def get(path, params = {}, headers = {})
|
20
63
|
headers.merge!({:Authorization => "Backchat #{@api_key}", :Accept => "application/json"})
|
21
64
|
|
22
65
|
uri = set_path(path)
|
23
|
-
uri = "#{uri}?".concat(params.collect { |k, v| "#{k}=#{v.to_s}" }.join("&"))
|
66
|
+
uri = "#{uri}?".concat(params.collect { |k, v| "#{k}=#{CGI::escape(v.to_s)}" }.join("&"))
|
24
67
|
debug("get request to uri #{uri}")
|
25
|
-
RestClient.get(uri, headers)
|
68
|
+
RestClient.get(uri, headers) { |response, request, result, &block|
|
69
|
+
response_handler(response, request, result, &block)
|
70
|
+
}
|
71
|
+
|
72
|
+
|
26
73
|
end
|
27
74
|
|
28
75
|
# HTTP POST
|
@@ -32,7 +79,9 @@ module BackchatClient
|
|
32
79
|
uri = set_path(path)
|
33
80
|
debug("post request to uri #{uri}")
|
34
81
|
debug("post body: <#{body}>")
|
35
|
-
RestClient.post("#{uri}", body, headers)
|
82
|
+
RestClient.post("#{uri}", body, headers) { |response, request, result, &block|
|
83
|
+
response_handler(response, request, result, &block)
|
84
|
+
}
|
36
85
|
end
|
37
86
|
|
38
87
|
# HTTP PUT
|
@@ -42,25 +91,29 @@ module BackchatClient
|
|
42
91
|
uri = set_path(path)
|
43
92
|
debug("put request to uri #{uri}")
|
44
93
|
debug("put body: <#{body}>")
|
45
|
-
RestClient.put("#{uri}", body, headers)
|
94
|
+
RestClient.put("#{uri}", body, headers) { |response, request, result, &block|
|
95
|
+
response_handler(response, request, result, &block)
|
96
|
+
}
|
46
97
|
end
|
47
98
|
|
48
99
|
# HTTP DELETE
|
49
100
|
def delete(path, params = {}, headers = {})
|
50
101
|
headers.merge!({:Authorization => "Backchat #{@api_key}", :accept => :json})
|
51
102
|
uri = set_path(path)
|
52
|
-
uri = "#{uri}?".concat(params.collect { |k, v| "#{k}=#{v.to_s}" }.join("&"))
|
103
|
+
uri = "#{uri}?".concat(params.collect { |k, v| "#{k}=#{CGI::escape(v.to_s)}" }.join("&"))
|
53
104
|
debug("delete request to uri #{uri}")
|
54
|
-
RestClient.delete(uri, headers)
|
105
|
+
RestClient.delete(uri, headers) { |response, request, result, &block|
|
106
|
+
response_handler(response, request, result, &block)
|
107
|
+
}
|
55
108
|
end
|
56
109
|
|
57
110
|
private
|
58
111
|
|
59
112
|
def set_path(path)
|
60
113
|
if uri_path.nil?
|
61
|
-
"#{@endpoint}/#{path}"
|
114
|
+
"#{@endpoint}/#{CGI::escape(path)}"
|
62
115
|
else
|
63
|
-
"#{@endpoint}/#{uri_path}/#{path}"
|
116
|
+
"#{@endpoint}/#{uri_path}/#{CGI::escape(path)}"
|
64
117
|
end
|
65
118
|
end
|
66
119
|
|
@@ -14,42 +14,40 @@ module BackchatClient
|
|
14
14
|
# http uri to handle streams
|
15
15
|
URI_PATH = "streams"
|
16
16
|
|
17
|
-
#
|
18
17
|
# @param *api_key* application identifier
|
19
18
|
# @param *endpoint* Backchat endpoint
|
20
|
-
#
|
21
19
|
def initialize(api_key, endpoint)
|
22
20
|
@api_key = api_key
|
23
21
|
@endpoint = endpoint
|
24
22
|
end
|
25
23
|
|
26
|
-
#
|
27
24
|
# This method POST a request to create a new stream on behalf of the
|
28
25
|
# authenticated application
|
29
26
|
# @param name
|
30
27
|
# @param description
|
31
28
|
# @param filters one or more valid channel URIs
|
32
29
|
# @param filter_enabled one or more boolean values enabling|disabling the filters
|
33
|
-
# @return response body
|
34
|
-
#
|
30
|
+
# @return decoded response body
|
35
31
|
def create(name, description, filters = [])
|
36
|
-
|
32
|
+
begin
|
33
|
+
data = post("", {:name => name, :description => description, :channel_filters => filters})
|
34
|
+
ActiveSupport::JSON.decode(data)
|
35
|
+
rescue Error::ClientError => ex
|
36
|
+
logger.error ActiveSupport::JSON.decode(ex.response.body)
|
37
|
+
raise ex
|
38
|
+
end
|
37
39
|
end
|
38
40
|
|
39
|
-
#
|
40
41
|
# Retrieves a stream
|
41
42
|
# @param *name* get a stream
|
42
43
|
# @return stream data or nil if not found
|
43
|
-
#
|
44
44
|
def find(name)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
else
|
52
|
-
ActiveSupport::JSON.decode(get("index.json"))
|
45
|
+
name.nil? and name = "index.json"
|
46
|
+
begin
|
47
|
+
ActiveSupport::JSON.decode(get(name))
|
48
|
+
rescue Error::ClientError => ex
|
49
|
+
logger.error(ex.errors)
|
50
|
+
return nil
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
@@ -57,17 +55,16 @@ module BackchatClient
|
|
57
55
|
ActiveSupport::JSON.decode(put(slug, params))
|
58
56
|
end
|
59
57
|
|
60
|
-
#
|
61
58
|
# Delete a defined stream
|
62
59
|
# @param *name* valid stream name
|
63
|
-
# @
|
64
|
-
#
|
60
|
+
# @return true|false if deleted or not
|
65
61
|
def destroy(name)
|
66
62
|
begin
|
67
|
-
|
68
|
-
|
69
|
-
rescue
|
70
|
-
|
63
|
+
delete(name)
|
64
|
+
true
|
65
|
+
rescue Error::ClientError => ex
|
66
|
+
logger.error ex.errors
|
67
|
+
false
|
71
68
|
end
|
72
69
|
end
|
73
70
|
|
data/lib/backchat_client/user.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
require 'backchat-client'
|
2
|
+
require 'spec_helper'
|
2
3
|
require 'webmock/rspec'
|
3
4
|
|
4
5
|
describe Backchat::Client do
|
5
6
|
|
6
|
-
before(:each) do
|
7
|
-
Backchat::Client.log_level = Logger::DEBUG
|
8
|
-
end
|
9
|
-
|
10
7
|
describe "it initializes correctly the client" do
|
11
8
|
|
12
9
|
it "gets the api key and the endpoint" do
|
@@ -23,22 +20,20 @@ describe Backchat::Client do
|
|
23
20
|
|
24
21
|
describe "valid? method" do
|
25
22
|
it "returns true with a valid token" do
|
26
|
-
api_key = "valid-api-key"
|
27
23
|
stub_request(:get, "https://api.backchat.io/1/index.json?").
|
28
|
-
with(:headers => {'Accept'=>'application/json', 'Authorization' => "Backchat #{
|
29
|
-
to_return(:status => 200, :body => "{'data':{'channels':[],'email':'user@backchat.com','_id':'user_id','api_key':'#{
|
24
|
+
with(:headers => {'Accept'=>'application/json', 'Authorization' => "Backchat #{API_KEY}"}).
|
25
|
+
to_return(:status => 200, :body => "{'data':{'channels':[],'email':'user@backchat.com','_id':'user_id','api_key':'#{API_KEY}','last_name':'lastname','first_name':'name','plan':'https://api.backchat.io/1/plans/free','streams':[],'login':'user'},'errors':[]}", :headers => {})
|
30
26
|
|
31
|
-
bc = Backchat::Client.new(
|
27
|
+
bc = Backchat::Client.new(API_KEY)
|
32
28
|
bc.valid?.should eql(true)
|
33
29
|
end
|
34
30
|
|
35
31
|
it "returns false with a valid token" do
|
36
|
-
api_key = "invalid-api-key"
|
37
32
|
stub_request(:get, "https://api.backchat.io/1/index.json?").
|
38
|
-
with(:headers => {'Accept'=>'application/json', 'Authorization' => "Backchat #{
|
33
|
+
with(:headers => {'Accept'=>'application/json', 'Authorization' => "Backchat #{INVALID_API_KEY}"}).
|
39
34
|
to_return(:status => 401, :body => "{'data':null,'errors':[['','Unauthorized']]}", :headers => {})
|
40
35
|
|
41
|
-
bc = Backchat::Client.new(
|
36
|
+
bc = Backchat::Client.new(INVALID_API_KEY)
|
42
37
|
bc.valid?.should eql(false)
|
43
38
|
end
|
44
39
|
end
|
data/spec/channel_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'backchat-client'
|
2
|
+
require 'spec_helper'
|
2
3
|
require 'webmock/rspec'
|
3
4
|
|
4
5
|
describe BackchatClient::Channel do
|
5
|
-
API_KEY = "valid-api-key"
|
6
6
|
|
7
7
|
describe "when working with find method" do
|
8
8
|
|
@@ -31,7 +31,7 @@ describe BackchatClient::Channel do
|
|
31
31
|
|
32
32
|
bc = Backchat::Client.new(API_KEY)
|
33
33
|
|
34
|
-
channel = bc.create_channel("twitter
|
34
|
+
channel = bc.create_channel("twitter://juandebravo")
|
35
35
|
channel.should be_a(Hash)
|
36
36
|
channel.should have_key("uri")
|
37
37
|
channel["uri"].should eql("twitter://juandebravo/#timeline")
|
data/spec/spec_helper.rb
ADDED
data/spec/streams_spec.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
require 'backchat-client'
|
2
|
+
require 'spec_helper'
|
2
3
|
require 'webmock/rspec'
|
3
4
|
|
4
5
|
describe BackchatClient::Stream do
|
5
|
-
API_KEY = "valid_api_key"
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
Backchat::Client.log_level = Logger::DEBUG
|
9
|
-
end
|
10
6
|
|
11
7
|
describe "when working with find method" do
|
12
8
|
|
data/spec/user_spec.rb
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
require 'backchat-client'
|
2
|
+
require 'spec_helper'
|
2
3
|
require 'webmock/rspec'
|
3
4
|
|
4
5
|
describe BackchatClient::User do
|
5
6
|
|
6
|
-
before(:each) do
|
7
|
-
Backchat::Client.log_level = Logger::DEBUG
|
8
|
-
end
|
9
|
-
|
10
7
|
describe "when working with find method" do
|
11
8
|
|
12
9
|
it "gets all the user defined streams when no name is provided" do
|
13
|
-
API_KEY = "valid_api_key"
|
14
10
|
bc = Backchat::Client.new(API_KEY)
|
15
11
|
stub_request(:get, "https://api.backchat.io/1/index.json?").
|
16
12
|
with(:headers => {'Accept'=>'application/json', 'Authorization' => "Backchat #{API_KEY}"}).
|
@@ -23,7 +19,6 @@ describe BackchatClient::User do
|
|
23
19
|
end
|
24
20
|
|
25
21
|
it "deletes a user when valid api_key provided" do
|
26
|
-
API_KEY = "valid_api_key"
|
27
22
|
bc = Backchat::Client.new(API_KEY)
|
28
23
|
stub_request(:delete, "https://api.backchat.io/1/?").
|
29
24
|
with(:headers => {'Accept'=>'application/json', 'Authorization' => "Backchat #{API_KEY}"}).
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: backchat-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: "0.
|
5
|
+
version: "0.2"
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- This gem provides an easy way to access Backchat provisioning API
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-08-24 00:00:00 +03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -92,17 +92,23 @@ files:
|
|
92
92
|
- examples/delete_stream.rb
|
93
93
|
- examples/delete_user.rb
|
94
94
|
- examples/get_channels.rb
|
95
|
+
- examples/setup.rb
|
95
96
|
- examples/stream.rb
|
96
97
|
- examples/user.rb
|
97
98
|
- lib/backchat-client.rb
|
98
99
|
- lib/backchat_client/backchat_logger.rb
|
99
100
|
- lib/backchat_client/channel.rb
|
101
|
+
- lib/backchat_client/error.rb
|
102
|
+
- lib/backchat_client/error/client_error.rb
|
103
|
+
- lib/backchat_client/error/general_error.rb
|
104
|
+
- lib/backchat_client/error/server_error.rb
|
100
105
|
- lib/backchat_client/http_client.rb
|
101
106
|
- lib/backchat_client/stream.rb
|
102
107
|
- lib/backchat_client/user.rb
|
103
108
|
- lib/backchat_client/version.rb
|
104
109
|
- spec/backchat-client_spec.rb
|
105
110
|
- spec/channel_spec.rb
|
111
|
+
- spec/spec_helper.rb
|
106
112
|
- spec/streams_spec.rb
|
107
113
|
- spec/user_spec.rb
|
108
114
|
has_rdoc: true
|
@@ -136,5 +142,6 @@ summary: Gem to access Backchat provisioning API
|
|
136
142
|
test_files:
|
137
143
|
- spec/backchat-client_spec.rb
|
138
144
|
- spec/channel_spec.rb
|
145
|
+
- spec/spec_helper.rb
|
139
146
|
- spec/streams_spec.rb
|
140
147
|
- spec/user_spec.rb
|