storify 0.0.12 → 0.0.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58748b03027c0d1b55dab4d3c625a623f5ac885b
4
- data.tar.gz: 35b8e4dfdf2ffbea53947b09dbb0bb64bcf6700e
3
+ metadata.gz: 1ea74fc535ab92ebe6cb8edd98f0a35d6837caf5
4
+ data.tar.gz: ed3769c9487cde3762e7a638e0ae1f905544bd46
5
5
  SHA512:
6
- metadata.gz: 7a599dff3581d8912472d1f096abde3c38867437828f7fbba68e780aa42087e565bb627b9c96e8b992d2737d5735f500f8c8ca7657d40566d6eb10a09e66d3d0
7
- data.tar.gz: 8337f44f6dabe2e3d3bb8d7c95b5c7b1d55b31467a8740933684047ceb93c04dbb37abddb7b18c017cf3ea1803e8a6088aae63b8241eab642a7fc39debf00feb
6
+ metadata.gz: 39692374a62ada22814db5f7b073367720ecfc4ba939b4455da746663d14d0573df18fbf6e0265b319469fed88de9139a504c6afda4a2be36f66c569d4b1917f
7
+ data.tar.gz: 5edc0ec592ae14b2c363f55072b0fb3a5682ed5d6058d3eace8facdd337f8198acfd48c4d544c9e9383462e5d466788feacfce2be14c4b9bf0c2415bc4ff17a8
data/lib/storify.rb CHANGED
@@ -20,7 +20,10 @@ module Storify
20
20
  :users => '/users',
21
21
  :userprofile => '/users/:username',
22
22
  :update_profile => '/users/:username/update',
23
- :publish => '/stories/:username/:slug/publish'
23
+ :publish => '/stories/:username/:slug/publish',
24
+ :save => '/stories/:username/:slug/save',
25
+ :create => '/stories/:username/create',
26
+ :delete => '/stories/:username/:slug/delete'
24
27
  }
25
28
  }
26
29
 
@@ -151,7 +151,47 @@ module Storify
151
151
  end
152
152
 
153
153
  def publish(story, options: {})
154
+ story_update(story, :publish, options: options)
155
+ end
156
+
157
+ def save(story, options: {})
158
+ story_update(story, :save, options: options)
159
+ end
160
+
161
+ def create(story, publish = false, options: {})
162
+ raise "Not a Story" unless story.is_a?(Storify::Story)
163
+
164
+ endpoint = Storify::endpoint(version: options[:version],
165
+ protocol: options[:protocol],
166
+ method: :create,
167
+ params: {':username' => username})
168
+
169
+ data = call(endpoint, :POST, params: {:publish => publish,
170
+ :story => story.to_json})
171
+
172
+ data['content']['slug']
173
+ end
174
+
175
+ def delete(slug, username = @username, options: {})
176
+ endpoint = Storify::endpoint(version: options[:version],
177
+ protocol: options[:protocol],
178
+ method: :delete,
179
+ params: {':username' => username,
180
+ ':slug' => slug})
181
+
182
+ data = call(endpoint, :POST)
183
+
184
+ true
185
+ end
186
+
187
+ def authenticated
188
+ !@token.nil?
189
+ end
190
+
154
191
 
192
+ private
193
+
194
+ def story_update(story, method, options: {})
155
195
  # ensure we have a story w/slug and author
156
196
  raise "Not a Story" unless story.is_a?(Storify::Story)
157
197
  raise "No slug found" if story.slug.nil?
@@ -162,24 +202,17 @@ module Storify
162
202
  username = story.author.username
163
203
  endpoint = Storify::endpoint(version: options[:version],
164
204
  protocol: options[:protocol],
165
- method: :publish,
205
+ method: method,
166
206
  params: {':username' => username,
167
207
  ':slug' => slug})
168
208
 
169
- # attempt to publish
209
+ # attempt to update (publish or save)
170
210
  json = story.to_json
171
211
  data = call(endpoint, :POST, params: {:story => json})
172
- true
173
- end
174
-
175
212
 
176
- def authenticated
177
- !@token.nil?
213
+ true
178
214
  end
179
215
 
180
-
181
- private
182
-
183
216
  def story_list(method, pager, params: {}, options: {}, use_auth: true, uparams: {})
184
217
  endpoint = Storify::endpoint(version: options[:version],
185
218
  protocol: options[:protocol],
@@ -224,6 +257,8 @@ module Storify
224
257
  data = JSON.parse(e.response)
225
258
  error = data['error']
226
259
 
260
+ puts error.inspect
261
+
227
262
  return Storify::error(data['code'], error['message'], error['type'], end_of_content: EOC)
228
263
  end
229
264
 
data/spec/client_spec.rb CHANGED
@@ -187,6 +187,66 @@ describe Storify::Client do
187
187
  end
188
188
  end
189
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
+
190
250
  context "Serialization" do
191
251
  it "should allow a story to be serialized as text" do
192
252
  story = @client.story('austin-startup-digest-for-december-9-2014', 'joshuabaer')
data/spec/storify_spec.rb CHANGED
@@ -89,6 +89,18 @@ describe Storify do
89
89
  it "should support the Update User Profile endpoint" do
90
90
  Storify::ENDPOINTS[:v1][:update_profile].should == "/users/:username/update"
91
91
  end
92
+
93
+ it "should support the Save Story endpoint" do
94
+ Storify::ENDPOINTS[:v1][:save].should == "/stories/:username/:slug/save"
95
+ end
96
+
97
+ it "should support the Create Story endpoint" do
98
+ Storify::ENDPOINTS[:v1][:create].should == "/stories/:username/create"
99
+ end
100
+
101
+ it "should support the Delete Story endpoint (undocumented)" do
102
+ Storify::ENDPOINTS[:v1][:delete].should == "/stories/:username/:slug/delete"
103
+ end
92
104
  end
93
105
 
94
106
  context "API Endpoint URI Builder:" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rizwan Tejpar