storify 0.0.13 → 0.0.14
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/fixtures/vcr_cassettes/auth.yml +119 -0
- data/fixtures/vcr_cassettes/create.yml +71 -0
- data/fixtures/vcr_cassettes/delete.yml +63 -0
- data/fixtures/vcr_cassettes/edit_slug.yml +162 -0
- data/fixtures/vcr_cassettes/featured.yml +28991 -0
- data/fixtures/vcr_cassettes/latest.yml +13835 -0
- data/fixtures/vcr_cassettes/popular.yml +17002 -0
- data/fixtures/vcr_cassettes/profile.yml +86 -0
- data/fixtures/vcr_cassettes/profile_update.yml +238 -0
- data/fixtures/vcr_cassettes/publish.yml +352 -0
- data/fixtures/vcr_cassettes/save.yml +462 -0
- data/fixtures/vcr_cassettes/search.yml +4528 -0
- data/fixtures/vcr_cassettes/stories.yml +8505 -0
- data/fixtures/vcr_cassettes/story.yml +1194 -0
- data/fixtures/vcr_cassettes/topic.yml +31207 -0
- data/fixtures/vcr_cassettes/users.yml +1877 -0
- data/fixtures/vcr_cassettes/userstories.yml +843 -0
- data/lib/storify.rb +1 -1
- data/lib/storify/client.rb +30 -35
- data/lib/storify/storymeta.rb +2 -1
- data/lib/storify/string.rb +10 -0
- data/spec/client_auth_spec.rb +28 -15
- data/spec/client_edit_slug_spec.rb +30 -0
- data/spec/client_profile_spec.rb +19 -0
- data/spec/client_profile_update_spec.rb +57 -0
- data/spec/client_spec.rb +24 -237
- data/spec/client_stories_featured_spec.rb +28 -0
- data/spec/client_stories_latest_spec.rb +28 -0
- data/spec/client_stories_popular_spec.rb +28 -0
- data/spec/client_stories_search_spec.rb +29 -0
- data/spec/client_stories_spec.rb +28 -0
- data/spec/client_stories_topic_spec.rb +35 -0
- data/spec/client_story_create_spec.rb +40 -0
- data/spec/client_story_delete_spec.rb +19 -0
- data/spec/client_story_publish_spec.rb +74 -0
- data/spec/client_story_save_spec.rb +43 -0
- data/spec/client_story_spec.rb +46 -0
- data/spec/client_users_spec.rb +28 -0
- data/spec/client_userstories_spec.rb +32 -0
- data/spec/pager_spec.rb +41 -46
- data/spec/spec_helper.rb +41 -18
- data/spec/storify_spec.rb +73 -72
- metadata +97 -4
- data/spec/client_noauth_spec.rb +0 -120
data/lib/storify.rb
CHANGED
@@ -50,12 +50,12 @@ module Storify
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
|
54
53
|
require 'storify/client'
|
55
54
|
require 'storify/pager'
|
56
55
|
require 'storify/apierror'
|
57
56
|
|
58
57
|
# base types
|
58
|
+
require 'storify/string'
|
59
59
|
require 'storify/features'
|
60
60
|
require 'storify/dategroup'
|
61
61
|
require 'storify/coverphoto'
|
data/lib/storify/client.rb
CHANGED
@@ -17,28 +17,19 @@ module Storify
|
|
17
17
|
yield self if block_given?
|
18
18
|
end
|
19
19
|
|
20
|
+
|
20
21
|
def auth(password, options: {})
|
21
22
|
endpoint = Storify::endpoint(version: options[:version], method: :auth)
|
22
|
-
data = call(endpoint, :POST, params: {password: password})
|
23
|
+
data = call(endpoint, :POST, params: merge_params!(params: {password: password}))
|
23
24
|
@token = data['content']['_token']
|
24
25
|
|
25
26
|
self
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
def latest(pager: nil, options: {})
|
33
|
-
story_list(:latest, pager, options: options, use_auth: false)
|
34
|
-
end
|
35
|
-
|
36
|
-
def featured(pager: nil, options: {})
|
37
|
-
story_list(:featured, pager, options: options, use_auth: false)
|
38
|
-
end
|
39
|
-
|
40
|
-
def popular(pager: nil, options: {})
|
41
|
-
story_list(:popular, pager, options: options, use_auth: false)
|
29
|
+
%w(stories latest featured popular).each do |m|
|
30
|
+
define_method(m) do |pager: nil, options: {}|
|
31
|
+
story_list(m.to_sym, pager, options: options, use_auth: false)
|
32
|
+
end
|
42
33
|
end
|
43
34
|
|
44
35
|
def topic(topic, pager: nil, options: {})
|
@@ -68,7 +59,8 @@ module Storify
|
|
68
59
|
elements = []
|
69
60
|
|
70
61
|
begin
|
71
|
-
|
62
|
+
p = merge_params!(paging: pager.to_hash)
|
63
|
+
data = call(endpoint, :GET, params: p)
|
72
64
|
json = JSON.generate(data['content'])
|
73
65
|
|
74
66
|
if story.nil?
|
@@ -96,7 +88,7 @@ module Storify
|
|
96
88
|
method: :editslug,
|
97
89
|
params: params)
|
98
90
|
|
99
|
-
data = call(endpoint, :POST, params: {slug: new_slug})
|
91
|
+
data = call(endpoint, :POST, params: merge_params!(params: {slug: new_slug}))
|
100
92
|
data['content']['slug']
|
101
93
|
end
|
102
94
|
|
@@ -109,7 +101,8 @@ module Storify
|
|
109
101
|
users = []
|
110
102
|
|
111
103
|
begin
|
112
|
-
|
104
|
+
p = merge_params!(paging: pager.to_hash, use_auth: false)
|
105
|
+
data = call(endpoint, :GET, params: p)
|
113
106
|
content = data['content']
|
114
107
|
|
115
108
|
content['users'].each do |s|
|
@@ -123,7 +116,7 @@ module Storify
|
|
123
116
|
users
|
124
117
|
end
|
125
118
|
|
126
|
-
def profile(username = @
|
119
|
+
def profile(username = @username, options: {})
|
127
120
|
endpoint = Storify::endpoint(version: options[:version],
|
128
121
|
protocol: options[:protocol],
|
129
122
|
method: :userprofile,
|
@@ -145,7 +138,7 @@ module Storify
|
|
145
138
|
params: {':username' => username})
|
146
139
|
|
147
140
|
json = user.to_json
|
148
|
-
data = call(endpoint, :POST, params: {:user => json})
|
141
|
+
data = call(endpoint, :POST, params: merge_params!(params: {:user => json}))
|
149
142
|
|
150
143
|
true
|
151
144
|
end
|
@@ -166,8 +159,8 @@ module Storify
|
|
166
159
|
method: :create,
|
167
160
|
params: {':username' => username})
|
168
161
|
|
169
|
-
|
170
|
-
|
162
|
+
p = merge_params!(params: {:publish => publish, :story => story.to_json})
|
163
|
+
data = call(endpoint, :POST, params: p)
|
171
164
|
|
172
165
|
data['content']['slug']
|
173
166
|
end
|
@@ -179,7 +172,7 @@ module Storify
|
|
179
172
|
params: {':username' => username,
|
180
173
|
':slug' => slug})
|
181
174
|
|
182
|
-
data = call(endpoint, :POST)
|
175
|
+
data = call(endpoint, :POST, params: merge_params!)
|
183
176
|
|
184
177
|
true
|
185
178
|
end
|
@@ -208,7 +201,7 @@ module Storify
|
|
208
201
|
|
209
202
|
# attempt to update (publish or save)
|
210
203
|
json = story.to_json
|
211
|
-
data = call(endpoint, :POST, params: {:story => json})
|
204
|
+
data = call(endpoint, :POST, params: merge_params!(params: {:story => json}))
|
212
205
|
|
213
206
|
true
|
214
207
|
end
|
@@ -223,7 +216,9 @@ module Storify
|
|
223
216
|
stories = []
|
224
217
|
|
225
218
|
begin
|
226
|
-
|
219
|
+
p = merge_params!(params: uparams, paging: pager.to_hash, use_auth: use_auth)
|
220
|
+
|
221
|
+
data = call(endpoint, :GET, params: p)
|
227
222
|
content = data['content']
|
228
223
|
|
229
224
|
content['stories'].each do |s|
|
@@ -237,28 +232,28 @@ module Storify
|
|
237
232
|
stories
|
238
233
|
end
|
239
234
|
|
240
|
-
def
|
235
|
+
def merge_params!(params: {}, paging: {}, use_auth: true)
|
236
|
+
params.merge!(paging)
|
237
|
+
params[:username] = @username
|
238
|
+
params[:api_key] = @api_key
|
239
|
+
params[:_token] = @token if (authenticated && use_auth)
|
240
|
+
params
|
241
|
+
end
|
242
|
+
|
243
|
+
def call(endpoint, verb, params: {}, opts: {})
|
241
244
|
raw = nil
|
242
245
|
|
243
246
|
begin
|
244
|
-
# add paging and auth query params
|
245
|
-
params.merge!(paging)
|
246
|
-
params[:username] = @username
|
247
|
-
params[:api_key] = @api_key
|
248
|
-
params[:_token] = @token if (authenticated && use_auth)
|
249
|
-
|
250
247
|
case verb
|
251
248
|
when :POST
|
252
249
|
raw = RestClient.post endpoint, params, {:accept => :json}
|
253
250
|
when :GET
|
254
|
-
raw = RestClient.get endpoint, {:params => params}
|
251
|
+
raw = RestClient.get endpoint, {:params => params, :accept => :json}
|
255
252
|
end
|
256
253
|
rescue => e
|
257
254
|
data = JSON.parse(e.response)
|
258
255
|
error = data['error']
|
259
256
|
|
260
|
-
puts error.inspect
|
261
|
-
|
262
257
|
return Storify::error(data['code'], error['message'], error['type'], end_of_content: EOC)
|
263
258
|
end
|
264
259
|
|
data/lib/storify/storymeta.rb
CHANGED
@@ -11,6 +11,7 @@ module Storify
|
|
11
11
|
|
12
12
|
collection :quoted, :class => Storify::Quotable, :extend => Storify::QuotableRepresentable
|
13
13
|
collection :hashtags
|
14
|
-
property :created_with, :class => Storify::CreatedWith
|
14
|
+
property :created_with, :class => lambda { |fragment, *| fragment.respond_to?(:has_key?) ? Storify::CreatedWith : String },
|
15
|
+
:extend => lambda { |name, *| name.is_a?(Storify::CreatedWith) ? Storify::CreatedWithRepresentable : Storify::StringRepresentable }
|
15
16
|
end
|
16
17
|
end
|
data/spec/client_auth_spec.rb
CHANGED
@@ -1,30 +1,43 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Storify::Client do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
context "#auth" do
|
5
|
+
let(:client) {Storify::Client.new(:api_key => @api_key, :username => @username)}
|
6
|
+
|
7
|
+
it "receives a token on success" do
|
8
|
+
VCR.use_cassette('auth', :decode_compressed_response => true) do
|
9
|
+
client.auth(get_password)
|
10
|
+
end
|
7
11
|
|
8
|
-
|
9
|
-
it "should retrieve an auth token on success" do
|
10
|
-
@client.auth(get_password).token.should_not be_nil
|
11
|
-
@client.authenticated.should be_true
|
12
|
+
expect(client.authenticated).to be_true
|
12
13
|
end
|
13
14
|
|
14
|
-
it "
|
15
|
-
expect
|
15
|
+
it "raises an API Error on failure" do
|
16
|
+
expect(client.authenticated).to be_false
|
17
|
+
|
18
|
+
VCR.use_cassette('auth') do
|
19
|
+
expect{client.auth('')}.to raise_error(Storify::ApiError)
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
|
-
it "
|
23
|
+
it "accepts endpoint options: version" do
|
19
24
|
options = {:version => :v1}
|
20
|
-
|
21
|
-
|
25
|
+
|
26
|
+
VCR.use_cassette('auth', :decode_compressed_response => true) do
|
27
|
+
client.auth(get_password, options: options)
|
28
|
+
end
|
29
|
+
|
30
|
+
expect(client.authenticated).to be_true
|
22
31
|
end
|
23
32
|
|
24
|
-
it "
|
33
|
+
it "ignores endpoint options: protocol, method" do
|
25
34
|
options = {:method => :unknown, :protocol => :insecure}
|
26
|
-
|
27
|
-
|
35
|
+
|
36
|
+
VCR.use_cassette('auth', :decode_compressed_response => true) do
|
37
|
+
client.auth(get_password, options: options)
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(client.authenticated).to be_true
|
28
41
|
end
|
29
42
|
end
|
30
43
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Storify::Client do
|
4
|
+
let(:options) { {:version => :v1, :protocol => :insecure} }
|
5
|
+
let(:pager) { Storify::Pager.new(page: 1, max: 1, per_page: 10) }
|
6
|
+
let(:slug1) { 'getting-started' }
|
7
|
+
let(:slug2) { 'storify-is-awesome' }
|
8
|
+
let(:tape) { 'edit_slug' }
|
9
|
+
let(:client) do
|
10
|
+
VCR.use_cassette('auth') do
|
11
|
+
Storify::Client.new(:api_key => @api_key, :username => @username).auth(get_password)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "#edit_slug [POST /stories/:username/:story-slug/editslug]" do
|
16
|
+
it "responds with the new slug name" do
|
17
|
+
VCR.use_cassette(tape) do
|
18
|
+
expect(client.edit_slug(@username, slug1, slug2)).to eql slug2
|
19
|
+
expect(client.edit_slug(@username, slug2, slug1)).to eql slug1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "responds with the new slug name using options: version, protocol" do
|
24
|
+
VCR.use_cassette(tape, :match_requests_on => vcr_ignore_protocol) do
|
25
|
+
expect(client.edit_slug(@username, slug1, slug2, options: options)).to eql slug2
|
26
|
+
expect(client.edit_slug(@username, slug2, slug1, options: options)).to eql slug1
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Storify::Client do
|
4
|
+
let(:options) { {:version => :v1, :protocol => :insecure} }
|
5
|
+
let(:tape) { 'profile' }
|
6
|
+
let(:client) do
|
7
|
+
VCR.use_cassette('auth') do
|
8
|
+
Storify::Client.new(:api_key => @api_key, :username => @username).auth(get_password)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#profile [GET /users/:username]" do
|
13
|
+
it "gets a user profile" do
|
14
|
+
VCR.use_cassette(tape) do
|
15
|
+
expect(client.profile(@username).username).to eql @username
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Storify::Client do
|
4
|
+
let(:options) { {:version => :v1, :protocol => :insecure} }
|
5
|
+
let(:user) { Storify::User.new.extend(Storify::UserRepresentable) }
|
6
|
+
let(:not_found) { 'mock_user$$$$' }
|
7
|
+
let(:tape) { 'profile_update' }
|
8
|
+
let(:rloc) { "This is a new location" }
|
9
|
+
let(:client) do
|
10
|
+
VCR.use_cassette('auth') do
|
11
|
+
Storify::Client.new(:api_key => @api_key, :username => @username).auth(get_password)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "#update_profile [POST /users/:username/update]" do
|
16
|
+
it "raises an exception if a user is not provided" do
|
17
|
+
VCR.use_cassette(tape) do
|
18
|
+
expect{client.update_profile(nil)}.to raise_exception
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "raises an exception if the user is not found" do
|
23
|
+
VCR.use_cassette(tape) do
|
24
|
+
user.username = not_found
|
25
|
+
expect{client.update_profile(user)}.to raise_exception(Storify::ApiError)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "raises an exception if the user is not found using options" do
|
30
|
+
VCR.use_cassette(tape, :match_requests_on => vcr_ignore_protocol) do
|
31
|
+
user.username = not_found
|
32
|
+
expect{client.update_profile(user, options: options)}.to raise_exception(Storify::ApiError)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "raises an exception if the profile cannot be updated" do
|
37
|
+
VCR.use_cassette(tape) do
|
38
|
+
user.username = "storify"
|
39
|
+
expect{client.update_profile(user)}.to raise_exception(Storify::ApiError)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "rejects profile updates for free plans" do
|
44
|
+
u = nil
|
45
|
+
|
46
|
+
VCR.use_cassette('profile') do
|
47
|
+
u = client.profile(@username)
|
48
|
+
u.location = rloc
|
49
|
+
end
|
50
|
+
|
51
|
+
VCR.use_cassette(tape) do
|
52
|
+
expect(u.paid_plan).to eql "free"
|
53
|
+
expect{client.update_profile(u)}.to raise_exception(Storify::ApiError)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/client_spec.rb
CHANGED
@@ -1,256 +1,43 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Storify::Client do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
4
|
+
let(:key) { 'k' }
|
5
|
+
let(:usr) { 'u' }
|
6
|
+
let(:tok) { 't' }
|
8
7
|
|
9
8
|
context ".new" do
|
10
|
-
it "
|
11
|
-
|
12
|
-
|
9
|
+
it "accepts a hash of credentials as symbols" do
|
10
|
+
client = Storify::Client.new(:api_key => key, :username => usr, :token => tok)
|
11
|
+
expect(client.api_key).to eql key
|
12
|
+
expect(client.username).to eql usr
|
13
|
+
expect(client.token).to eql tok
|
14
|
+
end
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
it "accepts a hash of credentials as strings" do
|
17
|
+
client = Storify::Client.new('api_key' => key, 'username' => usr, 'token' => tok)
|
18
|
+
expect(client.api_key).to eql key
|
19
|
+
expect(client.username).to eql usr
|
20
|
+
expect(client.token).to eql tok
|
19
21
|
end
|
20
22
|
|
21
|
-
it "
|
23
|
+
it "accepts a block of credentials" do
|
22
24
|
client = Storify::Client.new do |config|
|
23
|
-
config.api_key =
|
24
|
-
config.username =
|
25
|
-
config.token =
|
25
|
+
config.api_key = key
|
26
|
+
config.username = usr
|
27
|
+
config.token = tok
|
26
28
|
end
|
27
29
|
|
28
|
-
client.api_key.
|
30
|
+
expect(client.api_key).to eql key
|
31
|
+
expect(client.username).to eql usr
|
32
|
+
expect(client.token).to eql tok
|
29
33
|
end
|
30
34
|
|
31
|
-
it "
|
35
|
+
it "raises an exception for unknown hash credentials" do
|
32
36
|
expect {Storify::Client.new(:unknown => 'value')}.to raise_exception
|
33
|
-
expect {Storify::Client.new {|config| config.unknown = ''}}.to raise_exception
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "GET /stories/:username" do
|
38
|
-
it "should get all stories for a specific user" do
|
39
|
-
@client.userstories(@username).length.should >= 2
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should accept endpoint options (version, protocol)" do
|
43
|
-
options = {:version => :v1, :protocol => :insecure}
|
44
|
-
@client.userstories(@username, options: options).length.should >= 2
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should accept paging options (Pager)" do
|
48
|
-
pager = Storify::Pager.new(page: 1, max: 1, per_page: 10)
|
49
|
-
stories = @client.userstories('joshuabaer', pager: pager)
|
50
|
-
stories.length.should == 10
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
context "GET /stories/:username/:slug" do
|
55
|
-
before(:all) do
|
56
|
-
puts "Enter a Story-Slug for your Account:"
|
57
|
-
@slug = STDIN.gets.chomp
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should get a specific story for a user (all pages)" do
|
61
|
-
@client.story(@slug).elements.length.should == 3
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should accept endpoint options (version, protocol)" do
|
65
|
-
options = {:version => :v1, :protocol => :insecure}
|
66
|
-
@client.story(@slug, options: options).elements.length.should == 3
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should accept paging options (Page)" do
|
70
|
-
pager = Storify::Pager.new(page: 2, max: 3)
|
71
|
-
story = @client.story('austin-startup-digest-for-december-9-2014', 'joshuabaer', pager: pager)
|
72
|
-
story = story.to_s
|
73
|
-
|
74
|
-
['408651138632667136', '409182832234213376'].each {|s| story.include?(s).should be_true }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "POST /stories/:username/:story-slug/editslug" do
|
79
|
-
before(:all) do
|
80
|
-
puts "Enter a Story-Slug for your Account:"
|
81
|
-
@slug1 = STDIN.gets.chomp
|
82
|
-
|
83
|
-
puts "Enter a New Unique Story-Slug for your Account"
|
84
|
-
@slug2 = STDIN.gets.chomp
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should respond with the new slug name (on a successful change)" do
|
88
|
-
@client.edit_slug(@username, @slug1, @slug2).should == @slug2
|
89
|
-
@client.edit_slug(@username, @slug2, @slug1).should == @slug1
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should accept endpoint options (version, protocol)" do
|
93
|
-
opts = {:version => :v1, :protocol => :insecure}
|
94
|
-
@client.edit_slug(@username, @slug1, @slug2, options: opts).should == @slug2
|
95
|
-
@client.edit_slug(@username, @slug2, @slug1, options: opts).should == @slug1
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
context "GET /users/:username" do
|
100
|
-
it "should get a specific user's profile" do
|
101
|
-
@client.profile(@username).username.should == @username
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context "POST /stories/:username/:slug/publish" do
|
106
|
-
it "should raise an exception if a story is not provided" do
|
107
|
-
expect{@client.publish(nil)}.to raise_exception
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should raise an exception if the story is not found" do
|
111
|
-
story = Storify::Story.new.extend(Storify::StoryRepresentable)
|
112
|
-
author = Storify::User.new.extend(Storify::UserRepresentable)
|
113
|
-
author.username = 'rtejpar'
|
114
|
-
story.author = author
|
115
|
-
story.slug = 'does-not-exist-story'
|
116
|
-
|
117
|
-
expect{@client.publish(story)}.to raise_exception(Storify::ApiError)
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should raise an exception if you do not have permission to publish" do
|
121
|
-
story = Storify::Story.new.extend(Storify::StoryRepresentable)
|
122
|
-
author = Storify::User.new.extend(Storify::UserRepresentable)
|
123
|
-
author.username = 'storify'
|
124
|
-
story.author = author
|
125
|
-
story.slug = 'storify-acquired-by-livefyre'
|
126
|
-
|
127
|
-
expect{@client.publish(story)}.to raise_exception(Storify::ApiError)
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should publish an existing story" do
|
131
|
-
story = @client.story('test-story', @username)
|
132
|
-
@client.publish(story).should == true
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should accept endpoint options" do
|
136
|
-
options = {:version => :v1, :protocol => :insecure}
|
137
|
-
story = @client.story('test-story', @username)
|
138
|
-
@client.publish(story, options: options).should == true
|
139
37
|
end
|
140
38
|
|
141
|
-
it "
|
142
|
-
|
143
|
-
new_desc = "New Description #{Random.new(Random.new_seed).to_s}"
|
144
|
-
|
145
|
-
story.description = new_desc
|
146
|
-
story.description.should == new_desc
|
147
|
-
@client.publish(story).should == true
|
148
|
-
|
149
|
-
revised = @client.story('no-embeds', @username)
|
150
|
-
revised.description.should == new_desc
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context "POST /users/:username/update" do
|
155
|
-
it "should raise an exception if a user is not provided" do
|
156
|
-
expect{@client.update_profile(nil)}.to raise_exception
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should raise an exception if the user cannot be found" do
|
160
|
-
user = Storify::User.new.extend(Storify::UserRepresentable)
|
161
|
-
user.username = "rtejpar$$$$"
|
162
|
-
expect{@client.update_profile(user)}.to raise_exception(Storify::ApiError)
|
163
|
-
end
|
164
|
-
|
165
|
-
it "should raise an exception if the profile cannot be updated" do
|
166
|
-
user = Storify::User.new.extend(Storify::UserRepresentable)
|
167
|
-
user.username = "storify"
|
168
|
-
expect{@client.update_profile(user)}.to raise_exception(Storify::ApiError)
|
169
|
-
end
|
170
|
-
|
171
|
-
it "should accept/reject updates to profile information based on plan status" do
|
172
|
-
user = @client.profile(@username)
|
173
|
-
user.location = "Loc #{Random.new(Random.new_seed).to_s}"
|
174
|
-
|
175
|
-
if user.paid_plan == "free"
|
176
|
-
expect{@client.update_profile(user)}.to raise_exception(Storify::ApiError)
|
177
|
-
else
|
178
|
-
@client.update_profile(user).should == true
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
it "should support endpoint options" do
|
183
|
-
options = {:version => :v1, :protocol => :insecure}
|
184
|
-
user = Storify::User.new.extend(Storify::UserRepresentable)
|
185
|
-
user.username = "rtejpar$$$$"
|
186
|
-
expect{@client.update_profile(user, options: options)}.to raise_exception(Storify::ApiError)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
context "POST /stories/:username/:slug/save" do
|
191
|
-
it "should save an existing story" do
|
192
|
-
story = @client.story('no-embeds', @username)
|
193
|
-
element = Storify::Element.new.extend(Storify::ElementRepresentable)
|
194
|
-
element.data = Storify::StoryData.new.extend(Storify::StoryDataRepresentable)
|
195
|
-
element.data.text = "Added new text item"
|
196
|
-
|
197
|
-
# add new element via permalink to end of story
|
198
|
-
story.elements << element
|
199
|
-
|
200
|
-
@client.save(story).should == true
|
201
|
-
|
202
|
-
# publish changes to make them retrievable
|
203
|
-
@client.publish(story).should == true
|
204
|
-
|
205
|
-
# updated
|
206
|
-
revised = @client.story('no-embeds', @username)
|
207
|
-
revised.elements.length.should == 1
|
208
|
-
|
209
|
-
# test removal
|
210
|
-
revised.elements = []
|
211
|
-
@client.save(revised).should == true
|
212
|
-
@client.publish(revised).should == true
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
context "POST /stories/:username/create" do
|
217
|
-
it "should create a story with multiple elements" do
|
218
|
-
story = Storify::Story.new.extend(Storify::StoryRepresentable)
|
219
|
-
story.title = "Another Story"
|
220
|
-
|
221
|
-
story.elements = []
|
222
|
-
story.elements << Storify::Element.new.extend(Storify::ElementRepresentable)
|
223
|
-
story.elements << Storify::Element.new.extend(Storify::ElementRepresentable)
|
224
|
-
story.elements << Storify::Element.new.extend(Storify::ElementRepresentable)
|
225
|
-
|
226
|
-
# add text data item
|
227
|
-
item = story.elements[0]
|
228
|
-
item.data = Storify::StoryData.new.extend(Storify::StoryDataRepresentable)
|
229
|
-
item.data.text = "Start of the story..."
|
230
|
-
|
231
|
-
# add twitter link
|
232
|
-
item = story.elements[1]
|
233
|
-
item.permalink = "http://twitter.com/fmquaglia/status/409875377482264577"
|
234
|
-
|
235
|
-
# twitter link with image
|
236
|
-
item = story.elements[2]
|
237
|
-
item.permalink = "http://twitter.com/NicholleJ/status/407924506380861441"
|
238
|
-
|
239
|
-
slug = @client.create(story, true)
|
240
|
-
slug.should_not eql ""
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
context "POST /stories/:username/:slug/delete" do
|
245
|
-
it "should delete the specified story" do
|
246
|
-
@client.delete('another-story', @username).should == true
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
context "Serialization" do
|
251
|
-
it "should allow a story to be serialized as text" do
|
252
|
-
story = @client.story('austin-startup-digest-for-december-9-2014', 'joshuabaer')
|
253
|
-
story.should_not eql ""
|
39
|
+
it "raises an exception for unknown block credentials" do
|
40
|
+
expect {Storify::Client.new {|config| config.unknown = ''}}.to raise_exception
|
254
41
|
end
|
255
42
|
end
|
256
43
|
end
|