buffer 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bufferapprc.template +23 -0
- data/.gitignore +6 -0
- data/.rubocop.yml +18 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -0
- data/API_COVERAGE.md +19 -0
- data/Gemfile +1 -1
- data/Guardfile +10 -0
- data/{LICENSE → LICENSE.txt} +1 -1
- data/README.md +62 -80
- data/Rakefile +25 -1
- data/TODO.md +3 -0
- data/bin/buffer +35 -0
- data/buffer.gemspec +26 -16
- data/lib/buffer/client.rb +26 -0
- data/lib/buffer/core.rb +64 -0
- data/lib/buffer/datastructure.rb +18 -0
- data/lib/buffer/encode.rb +33 -0
- data/lib/buffer/error.rb +10 -0
- data/lib/buffer/info.rb +10 -0
- data/lib/buffer/link.rb +10 -0
- data/lib/buffer/profile.rb +27 -0
- data/lib/buffer/update.rb +75 -0
- data/lib/buffer/user.rb +9 -0
- data/lib/buffer/version.rb +1 -1
- data/lib/buffer.rb +16 -102
- data/spec/fixtures/destroy.txt +10 -0
- data/spec/fixtures/info.txt +10 -0
- data/spec/fixtures/interactions_by_update_id.txt +10 -0
- data/spec/fixtures/link.txt +12 -0
- data/spec/fixtures/profile_authenticated.txt +11 -0
- data/spec/fixtures/profile_schedules_by_id.txt +10 -0
- data/spec/fixtures/profiles_by_id.txt +10 -0
- data/spec/fixtures/update_by_id.txt +10 -0
- data/spec/fixtures/update_by_id_non_auth.txt +9 -0
- data/spec/fixtures/updates_by_profile_id.txt +10 -0
- data/spec/fixtures/updates_by_profile_id_pending.txt +10 -0
- data/spec/fixtures/user_authenticated.txt +19 -0
- data/spec/lib/buffer/encode_spec.rb +42 -0
- data/spec/lib/buffer/link_spec.rb +22 -0
- data/spec/lib/buffer/profile_spec.rb +87 -0
- data/spec/lib/buffer/schedule_spec.rb +80 -0
- data/spec/lib/buffer/update_spec.rb +227 -0
- data/spec/lib/buffer/user_spec.rb +26 -0
- data/spec/lib/buffer_spec.rb +30 -0
- data/spec/lib/core_spec.rb +60 -0
- data/spec/spec_helper.rb +171 -0
- metadata +215 -67
- data/spec/buffer_spec.rb +0 -354
- data/spec/fixtures/create_body.txt +0 -1
- data/spec/fixtures/success.json +0 -1
- data/spec/fixtures/user.json +0 -1
- data/spec/helper.rb +0 -43
data/spec/buffer_spec.rb
DELETED
@@ -1,354 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
describe Buffer::Client do
|
4
|
-
|
5
|
-
describe 'new' do
|
6
|
-
|
7
|
-
it 'accepts a token' do
|
8
|
-
client = Buffer::Client.new 'some_token'
|
9
|
-
client.token.should eq('some_token')
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'rejects an integer token' do
|
13
|
-
lambda { client = Buffer::Client.new 123 }.should raise_error
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'rejects an array token' do
|
17
|
-
lambda { client = Buffer::Client.new [123, 'hello'] }.should raise_error
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'rejects an hash token' do
|
21
|
-
lambda { client = Buffer::Client.new :test => 123 }.should raise_error
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
describe 'api' do
|
27
|
-
|
28
|
-
subject do
|
29
|
-
Buffer::Client.new 'some_token'
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'is a method' do
|
33
|
-
subject.respond_to?(:api).should be_true
|
34
|
-
end
|
35
|
-
|
36
|
-
describe 'api :get' do
|
37
|
-
|
38
|
-
before do
|
39
|
-
stub_get('user.json').
|
40
|
-
with(:query => {:access_token => 'some_token'}).
|
41
|
-
to_return(
|
42
|
-
:body => fixture('user.json'),
|
43
|
-
:headers => {:content_type => 'application/json; charset=utf-8'})
|
44
|
-
|
45
|
-
stub_get('non_existent.json').
|
46
|
-
with(:query => {:access_token => 'some_token'}).
|
47
|
-
to_return(
|
48
|
-
:body => '',
|
49
|
-
:headers => {:content_type => 'application/json; charset=utf-8'})
|
50
|
-
|
51
|
-
stub_get('mangled.json').
|
52
|
-
with(:query => {:access_token => 'some_token'}).
|
53
|
-
to_return(
|
54
|
-
:body => '{dfpl:[}233]',
|
55
|
-
:headers => {:content_type => 'application/json; charset=utf-8'})
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'makes correct request to user.json with access token' do
|
59
|
-
subject.api :get, 'user.json'
|
60
|
-
a_get('user.json').
|
61
|
-
with(:query => {:access_token => 'some_token'}).
|
62
|
-
should have_been_made
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'makes correct request when passed user' do
|
66
|
-
subject.api :get, 'user'
|
67
|
-
a_get('user.json').
|
68
|
-
with(:query => {:access_token => 'some_token'}).
|
69
|
-
should have_been_made
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'returns correct parsed object' do
|
73
|
-
res = subject.api :get, 'user'
|
74
|
-
target = begin
|
75
|
-
MultiJson.load fixture('user.json')
|
76
|
-
end
|
77
|
-
res.should eq(target)
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'returns nil from non existent endpoint' do
|
81
|
-
res = subject.api :get, 'non_existent'
|
82
|
-
res.should eq(nil)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'returns nil from mangled data' do
|
86
|
-
res = subject.api :get, 'mangled'
|
87
|
-
res.should eq(nil)
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
describe 'api :post' do
|
93
|
-
|
94
|
-
before do
|
95
|
-
stub_post('updates/create.json').
|
96
|
-
with(
|
97
|
-
:query => {:access_token => 'some_token'},
|
98
|
-
:body => {
|
99
|
-
"media"=>{"link"=>"http://google.com"},
|
100
|
-
"profile_ids"=>[
|
101
|
-
"4eb854340acb04e870000010",
|
102
|
-
"4eb9276e0acb04bb81000067"],
|
103
|
-
"text"=>"This is an example update"}).
|
104
|
-
to_return(
|
105
|
-
:body => fixture('success.json'),
|
106
|
-
:status => 200)
|
107
|
-
|
108
|
-
stub_post('updates/creatify.json').
|
109
|
-
with(
|
110
|
-
:query => {:access_token => 'some_token'},
|
111
|
-
:body => {
|
112
|
-
"media"=>{"link"=>"http://google.com"},
|
113
|
-
"profile_ids"=>[
|
114
|
-
"4eb854340acb04e870000010",
|
115
|
-
"4eb9276e0acb04bb81000067"],
|
116
|
-
"text"=>"This is an example update"}).
|
117
|
-
to_return(
|
118
|
-
:status => 200)
|
119
|
-
|
120
|
-
stub_request(
|
121
|
-
:post,
|
122
|
-
"https://api.bufferapp.com/1/updates/create.json?access_token=some_token").
|
123
|
-
with(:body => {"profile_ids"=>["fdf", "1"], "text"=>["a237623", "asb"]},
|
124
|
-
:headers => {
|
125
|
-
'Accept'=>'*/*',
|
126
|
-
'Content-Type'=>'application/x-www-form-urlencoded',
|
127
|
-
'User-Agent'=>'Ruby'}).
|
128
|
-
to_return(:status => 200, :body => "", :headers => {})
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'should make the correct POST to updates/create.json' do
|
132
|
-
subject.api :post,
|
133
|
-
'updates/create.json',
|
134
|
-
:text => "This is an example update",
|
135
|
-
:profile_ids => [
|
136
|
-
'4eb854340acb04e870000010',
|
137
|
-
'4eb9276e0acb04bb81000067'],
|
138
|
-
:media => {:link => "http://google.com"}
|
139
|
-
a_post('updates/create.json').
|
140
|
-
with(
|
141
|
-
:query => {:access_token => 'some_token'},
|
142
|
-
:body => fixture_contents('create_body.txt')).
|
143
|
-
should have_been_made
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'should return a correctly parsed object' do
|
147
|
-
res = subject.api :post,
|
148
|
-
'updates/create.json',
|
149
|
-
:text => "This is an example update",
|
150
|
-
:profile_ids => [
|
151
|
-
'4eb854340acb04e870000010',
|
152
|
-
'4eb9276e0acb04bb81000067'],
|
153
|
-
:media => {:link => "http://google.com"}
|
154
|
-
res['success'].should be_true
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'should return nil from non existent endpoint' do
|
158
|
-
res = subject.api :post,
|
159
|
-
'updates/creatify.json',
|
160
|
-
:text => "This is an example update",
|
161
|
-
:profile_ids => [
|
162
|
-
'4eb854340acb04e870000010',
|
163
|
-
'4eb9276e0acb04bb81000067'],
|
164
|
-
:media => {:link => "http://google.com"}
|
165
|
-
res.should eq(nil)
|
166
|
-
end
|
167
|
-
|
168
|
-
it 'should return nil when passes crap' do
|
169
|
-
res = subject.api :post,
|
170
|
-
'updates/create.json',
|
171
|
-
:text => [:a237623, 'asb'],
|
172
|
-
:profile_ids => ['fdf', '1']
|
173
|
-
res.should eq(nil)
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
end
|
179
|
-
|
180
|
-
describe 'get' do
|
181
|
-
|
182
|
-
subject do
|
183
|
-
Buffer::Client.new 'some_token'
|
184
|
-
end
|
185
|
-
|
186
|
-
it 'is a method' do
|
187
|
-
subject.respond_to?(:get).should be_true
|
188
|
-
end
|
189
|
-
|
190
|
-
before do
|
191
|
-
stub_get('user.json').
|
192
|
-
with(:query => {:access_token => 'some_token'}).
|
193
|
-
to_return(
|
194
|
-
:body => fixture('user.json'),
|
195
|
-
:headers => {:content_type => 'application/json; charset=utf-8'})
|
196
|
-
end
|
197
|
-
|
198
|
-
it 'makes correct request to user.json with access token' do
|
199
|
-
subject.get 'user.json'
|
200
|
-
a_get('user.json').
|
201
|
-
with(:query => {:access_token => 'some_token'}).
|
202
|
-
should have_been_made
|
203
|
-
end
|
204
|
-
|
205
|
-
it 'makes correct request when passed user' do
|
206
|
-
subject.get 'user'
|
207
|
-
a_get('user.json').
|
208
|
-
with(:query => {:access_token => 'some_token'}).
|
209
|
-
should have_been_made
|
210
|
-
end
|
211
|
-
|
212
|
-
end
|
213
|
-
|
214
|
-
describe 'post' do
|
215
|
-
|
216
|
-
subject do
|
217
|
-
Buffer::Client.new 'some_token'
|
218
|
-
end
|
219
|
-
|
220
|
-
it 'is a method' do
|
221
|
-
subject.respond_to?(:post).should be_true
|
222
|
-
end
|
223
|
-
|
224
|
-
before do
|
225
|
-
stub_post('updates/create.json').
|
226
|
-
with(
|
227
|
-
:query => {:access_token => 'some_token'},
|
228
|
-
:body => {
|
229
|
-
"media"=>{"link"=>"http://google.com"},
|
230
|
-
"profile_ids"=>[
|
231
|
-
"4eb854340acb04e870000010",
|
232
|
-
"4eb9276e0acb04bb81000067"],
|
233
|
-
"text"=>"This is an example update"}).
|
234
|
-
to_return(
|
235
|
-
:body => fixture('success.json'),
|
236
|
-
:status => 200)
|
237
|
-
end
|
238
|
-
|
239
|
-
it 'should make the correct POST to updates/create.json' do
|
240
|
-
subject.post 'updates/create.json',
|
241
|
-
:text => "This is an example update",
|
242
|
-
:profile_ids => ['4eb854340acb04e870000010', '4eb9276e0acb04bb81000067'],
|
243
|
-
:media => {:link => "http://google.com"}
|
244
|
-
a_post('updates/create.json').
|
245
|
-
with(
|
246
|
-
:query => {:access_token => 'some_token'},
|
247
|
-
:body => fixture_contents('create_body.txt')).
|
248
|
-
should have_been_made
|
249
|
-
end
|
250
|
-
|
251
|
-
end
|
252
|
-
|
253
|
-
end
|
254
|
-
|
255
|
-
describe Buffer::User do
|
256
|
-
|
257
|
-
describe 'new' do
|
258
|
-
|
259
|
-
it 'accepts a token' do
|
260
|
-
user = Buffer::User.new 'some_token'
|
261
|
-
user.token.should eq('some_token')
|
262
|
-
end
|
263
|
-
|
264
|
-
it 'rejects an integer token' do
|
265
|
-
lambda { user = Buffer::User.new 123 }.should raise_error
|
266
|
-
end
|
267
|
-
|
268
|
-
it 'rejects an array token' do
|
269
|
-
lambda { user = Buffer::User.new [123, 'hello'] }.should raise_error
|
270
|
-
end
|
271
|
-
|
272
|
-
it 'rejects an hash token' do
|
273
|
-
lambda { user = Buffer::User.new :test => 123 }.should raise_error
|
274
|
-
end
|
275
|
-
|
276
|
-
end
|
277
|
-
|
278
|
-
describe 'helpers' do
|
279
|
-
|
280
|
-
subject do
|
281
|
-
Buffer::User.new 'some_token'
|
282
|
-
end
|
283
|
-
|
284
|
-
before do
|
285
|
-
stub_get('user.json').
|
286
|
-
with(:query => {:access_token => 'some_token'}).
|
287
|
-
to_return(
|
288
|
-
:body => fixture('user.json'),
|
289
|
-
:headers => {:content_type => 'application/json; charset=utf-8'})
|
290
|
-
end
|
291
|
-
|
292
|
-
it 'respond with correct id' do
|
293
|
-
subject.id.should eq('1234')
|
294
|
-
end
|
295
|
-
|
296
|
-
it 'do not respond to eye_color' do
|
297
|
-
lambda { color = subject.eye_color }.should raise_error
|
298
|
-
end
|
299
|
-
|
300
|
-
it 'respond to get' do
|
301
|
-
lambda { user = subject.get 'user' }.should_not raise_error
|
302
|
-
end
|
303
|
-
|
304
|
-
end
|
305
|
-
|
306
|
-
describe 'cache' do
|
307
|
-
|
308
|
-
subject do
|
309
|
-
Buffer::User.new 'some_token'
|
310
|
-
end
|
311
|
-
|
312
|
-
before do
|
313
|
-
stub_get('user.json').
|
314
|
-
with(:query => {:access_token => 'some_token'}).
|
315
|
-
to_return(
|
316
|
-
:body => fixture('user.json'),
|
317
|
-
:headers => {:content_type => 'application/json; charset=utf-8'})
|
318
|
-
end
|
319
|
-
|
320
|
-
describe 'access' do
|
321
|
-
|
322
|
-
before do
|
323
|
-
subject.id
|
324
|
-
end
|
325
|
-
|
326
|
-
it 'is used after accessing id once' do
|
327
|
-
id = subject.id
|
328
|
-
a_get('user.json').
|
329
|
-
should_not have_been_made
|
330
|
-
end
|
331
|
-
|
332
|
-
end
|
333
|
-
|
334
|
-
describe 'invalidation' do
|
335
|
-
|
336
|
-
before do
|
337
|
-
subject.id
|
338
|
-
end
|
339
|
-
|
340
|
-
it 'forces server access' do
|
341
|
-
subject.invalidate
|
342
|
-
id = subject.id
|
343
|
-
a_get('user.json').
|
344
|
-
with(:query => {:access_token => 'some_token'}).
|
345
|
-
should have_been_made.times(2)
|
346
|
-
end
|
347
|
-
|
348
|
-
end
|
349
|
-
|
350
|
-
end
|
351
|
-
|
352
|
-
end
|
353
|
-
|
354
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
text=This+is+an+example+update&profile_ids[]=4eb854340acb04e870000010&profile_ids[]=4eb9276e0acb04bb81000067&media[link]=http%3A%2F%2Fgoogle.com
|
data/spec/fixtures/success.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"success":true}
|
data/spec/fixtures/user.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"_id":"1234","activity_at":5678,"created_at":1234,"id":"1234","plan":"free","referral_link":"http:\/\/bufferapp.com\/r\/abc","referral_token":"abc","secret_email":"buffer-abc@to.bufferapp.com","timezone":""}
|
data/spec/helper.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
SimpleCov.start do
|
3
|
-
add_filter 'spec'
|
4
|
-
end
|
5
|
-
require 'rspec'
|
6
|
-
require 'webmock/rspec'
|
7
|
-
require 'multi_json'
|
8
|
-
require 'buffer'
|
9
|
-
|
10
|
-
# Taken from https://github.com/sferik/twitter/blob/master/spec/helper.rb
|
11
|
-
# for stubbing & mocking HTTP requests
|
12
|
-
|
13
|
-
def endpoint
|
14
|
-
'https://api.bufferapp.com/1/'
|
15
|
-
end
|
16
|
-
|
17
|
-
def a_get(path)
|
18
|
-
a_request(:get, endpoint + path)
|
19
|
-
end
|
20
|
-
|
21
|
-
def a_post(path)
|
22
|
-
a_request(:post, endpoint + path)
|
23
|
-
end
|
24
|
-
|
25
|
-
def stub_get(path)
|
26
|
-
stub_request(:get, endpoint + path)
|
27
|
-
end
|
28
|
-
|
29
|
-
def stub_post(path)
|
30
|
-
stub_request(:post, endpoint + path)
|
31
|
-
end
|
32
|
-
|
33
|
-
def fixture_path
|
34
|
-
File.expand_path("../fixtures", __FILE__)
|
35
|
-
end
|
36
|
-
|
37
|
-
def fixture(file)
|
38
|
-
File.new(fixture_path + '/' + file)
|
39
|
-
end
|
40
|
-
|
41
|
-
def fixture_contents(file)
|
42
|
-
File.open(fixture_path + '/' + file) { |f| f.read }
|
43
|
-
end
|