pinboard 0.1.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/.travis.yml +4 -2
- data/MIT-LICENSE +2 -1
- data/README.md +14 -4
- data/lib/pinboard/client.rb +116 -9
- data/lib/pinboard/note.rb +2 -2
- data/lib/pinboard/post.rb +17 -0
- data/pinboard.gemspec +2 -2
- data/spec/fixtures/multiple_suggest.xml +7 -0
- data/spec/fixtures/no_suggest.xml +2 -0
- data/spec/fixtures/single_suggest.xml +4 -0
- data/spec/fixtures/user_api_token.xml +2 -0
- data/spec/fixtures/user_secret.xml +2 -0
- data/spec/pinboard/client_spec.rb +136 -0
- metadata +39 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58de47162982b5d30e0005929b84ba6e7a079f63
|
4
|
+
data.tar.gz: ebca1893e1b75d58f66a879deb5b07a2b7c59381
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0af9563d66912472406c124c1b3904e0d0e6537da9c76090b24cb48644967bf76650cb4a06d6908f9be60e83b522ecaec36f63fe2d7e4d22adb6539dcdd89a04
|
7
|
+
data.tar.gz: a4820f99cfac42ac1554d28e18cc8e7548ae38ca4c1adaf17b57c3a2a6cd1af2ffd848cf9f3fb03ad00c5666030fd08ae7cd081da571a83f5adb4c080e5a37b7
|
data/.rspec
CHANGED
data/.travis.yml
CHANGED
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
Copyright (c) 2011 Ryan Walker
|
2
|
+
Copyright (c) 2013-2014 Jan-Erik Rediger
|
2
3
|
|
3
4
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
5
|
a copy of this software and associated documentation files (the
|
@@ -17,4 +18,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
18
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
19
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
20
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -12,9 +12,13 @@ Examples
|
|
12
12
|
I'm currently exploring two API interfaces:
|
13
13
|
|
14
14
|
```ruby
|
15
|
-
pinboard = Pinboard::Client.new(:
|
15
|
+
pinboard = Pinboard::Client.new(:token => 'your_api_token')
|
16
16
|
posts = pinboard.posts
|
17
17
|
```
|
18
|
+
|
19
|
+
Your [API token](https://blog.pinboard.in/2012/07/api_authentication_tokens/) can be found on your
|
20
|
+
[settings/password](https://pinboard.in/settings/password) page.
|
21
|
+
|
18
22
|
or:
|
19
23
|
|
20
24
|
```ruby
|
@@ -52,6 +56,8 @@ integration and support of the following rubies in rvm:
|
|
52
56
|
|
53
57
|
* 1.9.3
|
54
58
|
* 2.0.0
|
59
|
+
* 2.1
|
60
|
+
* 2.2
|
55
61
|
* jruby
|
56
62
|
* ruby-head
|
57
63
|
|
@@ -85,6 +91,10 @@ TODO
|
|
85
91
|
http://datagraph.rubyforge.org/rack-throttle/
|
86
92
|
* If get 503 response, double the throttle to two seconds
|
87
93
|
|
88
|
-
|
89
|
-
|
90
|
-
|
94
|
+
License
|
95
|
+
-------
|
96
|
+
|
97
|
+
See [MIT-LICENSE](MIT-LICENSE) for details.
|
98
|
+
|
99
|
+
Copyright (c) 2011 Ryan Walker.
|
100
|
+
Copyright (c) 2013-2016 Jan-Erik Rediger.
|
data/lib/pinboard/client.rb
CHANGED
@@ -31,8 +31,14 @@ module Pinboard
|
|
31
31
|
|
32
32
|
# Returns all bookmarks in the user's account.
|
33
33
|
#
|
34
|
-
# @
|
35
|
-
|
34
|
+
# @option params [String] :tag filter by up to three tags
|
35
|
+
# @option params [Integer] :start offset value (default is 0)
|
36
|
+
# @option params [Integer] :results number of results to return. Default is all
|
37
|
+
# @option params [Time] :fromdt return only bookmarks created after this time
|
38
|
+
# @option params [Time] :todt return only bookmarks created before this time
|
39
|
+
# @option params [Integer] :meta include a change detection signature for each bookmark
|
40
|
+
# @return [Array<Post>] the list of bookmarks
|
41
|
+
def posts(params = {})
|
36
42
|
options = create_params(params)
|
37
43
|
posts = self.class.get('/posts/all', options)['posts']['post']
|
38
44
|
posts = [] if posts.nil?
|
@@ -40,29 +46,84 @@ module Pinboard
|
|
40
46
|
posts.map { |p| Post.new(Util.symbolize_keys(p)) }
|
41
47
|
end
|
42
48
|
|
49
|
+
# Returns one or more posts on a single day matching the arguments.
|
50
|
+
# If no date or url is given, date of most recent bookmark will be used.
|
51
|
+
#
|
52
|
+
# @option params [String] :tag filter by up to three tags
|
53
|
+
# @option params [Time] :dt return results bookmarked on this day
|
54
|
+
# @option params [String] :url return bookmark for this URL
|
55
|
+
# @option params [Boolean] :meta include a change detection signature in a meta attribute
|
56
|
+
# @return [Array<Post>] the list of bookmarks
|
57
|
+
def get(params = {})
|
58
|
+
params[:dt] = params[:dt].to_date.to_s if params.is_a? Time
|
59
|
+
params[:meta] = params[:meta] ? 'yes' : 'no' if params.has_key?(:meta)
|
60
|
+
options = create_params(params)
|
61
|
+
posts = self.class.get('/posts/get', options)['posts']['post']
|
62
|
+
posts = [] if posts.nil?
|
63
|
+
posts = [posts] if posts.class != Array
|
64
|
+
posts.map { |p| Post.new(Util.symbolize_keys(p)) }
|
65
|
+
end
|
66
|
+
|
67
|
+
# Returns a list of popular tags and recommended tags for a given URL.
|
68
|
+
# Popular tags are tags used site-wide for the url; recommended tags
|
69
|
+
# are drawn from the user's own tags.
|
70
|
+
#
|
71
|
+
# @param [String] url
|
72
|
+
# @return [Hash<String, Array>]
|
73
|
+
def suggest(url)
|
74
|
+
options = create_params({url: url})
|
75
|
+
suggested = self.class.get('/posts/suggest', options)['suggested']
|
76
|
+
popular = suggested['popular']
|
77
|
+
popular = [] if popular.nil?
|
78
|
+
popular = [popular] if popular.class != Array
|
79
|
+
|
80
|
+
recommended = suggested['recommended']
|
81
|
+
recommended = [] if recommended.nil?
|
82
|
+
recommended = [recommended] if recommended.class != Array
|
83
|
+
|
84
|
+
{:popular => popular, :recommended => recommended}
|
85
|
+
end
|
86
|
+
|
43
87
|
# Add a bookmark
|
44
88
|
#
|
45
89
|
# @param [Hash] params Arguments for this call
|
46
90
|
# @option params [String] :url the URL of the item (required)
|
47
|
-
# @option params [String] :description Title of the item
|
91
|
+
# @option params [String] :description Title of the item (required)
|
48
92
|
# @option params [String] :extended Description of the item
|
49
93
|
# @option params [Array] :tags List of up to 100 tags
|
50
|
-
# @option params [
|
51
|
-
#
|
94
|
+
# @option params [Time] :dt creation time for this bookmark. Defaults to current
|
95
|
+
# time. Datestamps more than 10 minutes ahead of server time will be reset to
|
96
|
+
# current server time
|
97
|
+
# @option params [Boolean] :replace Replace any existing bookmark with this URL.
|
98
|
+
# Default is true. If set to false, will throw an error if bookmark exists
|
99
|
+
# @option params [Boolean] :shared Make bookmark public. Default is true unless
|
100
|
+
# user has enabled the "save all bookmarks as private" user setting, in which
|
101
|
+
# case default is false
|
52
102
|
# @option params [Boolean] :toread Marks the bookmark as unread (default: false)
|
103
|
+
#
|
104
|
+
# @return [String] "done" when everything went as expected
|
105
|
+
# @raise [Error] if result code is not "done"
|
53
106
|
def add(params={})
|
54
107
|
# Pinboard expects multiple tags=foo,bar separated by comma instead of tag=foo&tag=bar
|
55
108
|
params[:tags] = Array(params[:tags]).join(',') if params[:tags]
|
56
109
|
|
110
|
+
# Pinboard expects datetime as UTC timestamp in this format:
|
111
|
+
# 2010-12-11T19:48:02Z. Valid date range is Jan 1, 1 AD to January 1, 2100
|
112
|
+
params[:dt] = params[:dt].iso8601 if params[:dt].is_a? Time
|
113
|
+
|
57
114
|
# Pinboard expects replace, shared and toread as yes/no instead of true/false
|
58
115
|
[:replace, :shared, :toread].each do |boolean|
|
59
|
-
|
116
|
+
if params.has_key?(boolean) && !['yes', 'no'].include?(params[boolean])
|
117
|
+
params[boolean] = params[boolean] ? 'yes' : 'no'
|
118
|
+
end
|
60
119
|
end
|
61
120
|
|
62
121
|
options = create_params(params)
|
63
122
|
result_code = self.class.post('/posts/add', options).parsed_response["result"]["code"]
|
64
123
|
|
65
124
|
raise Error.new(result_code) if result_code != "done"
|
125
|
+
|
126
|
+
result_code
|
66
127
|
end
|
67
128
|
|
68
129
|
# Returns the most recent time a bookmark was added, updated or deleted.
|
@@ -85,7 +146,7 @@ module Pinboard
|
|
85
146
|
# @option params [String] :count Number of results to return.
|
86
147
|
# Default is 15, max is 100
|
87
148
|
#
|
88
|
-
# @return [Array<Post>] the list of recent posts
|
149
|
+
# @return [Array<Post>] the list of recent posts
|
89
150
|
def recent(params={})
|
90
151
|
options = create_params(params)
|
91
152
|
posts = self.class.get('/posts/recent', options)['posts']['post']
|
@@ -94,7 +155,7 @@ module Pinboard
|
|
94
155
|
posts.map { |p| Post.new(Util.symbolize_keys(p)) }
|
95
156
|
end
|
96
157
|
|
97
|
-
# Returns a list of dates with the number of posts at each date
|
158
|
+
# Returns a list of dates with the number of posts at each date
|
98
159
|
#
|
99
160
|
# @param [String] tag Filter by up to three tags
|
100
161
|
#
|
@@ -117,12 +178,17 @@ module Pinboard
|
|
117
178
|
# Delete a bookmark
|
118
179
|
#
|
119
180
|
# @param [String] url The url to delete
|
181
|
+
#
|
182
|
+
# @return [String] "done" when everything went as expected
|
183
|
+
# @raise [Error] if result code is not "done"
|
120
184
|
def delete(url)
|
121
185
|
params = { url: url }
|
122
186
|
options = create_params(params)
|
123
187
|
result_code = self.class.get('/posts/delete', options).parsed_response["result"]["code"]
|
124
188
|
|
125
189
|
raise Error.new(result_code) if result_code != "done"
|
190
|
+
|
191
|
+
result_code
|
126
192
|
end
|
127
193
|
|
128
194
|
# Returns a full list of the user's tags along with the number of
|
@@ -142,8 +208,10 @@ module Pinboard
|
|
142
208
|
# @param [String] old_tag Tag to rename (not case sensitive)
|
143
209
|
# @param [String] new_tag New tag (if empty nothing will happen)
|
144
210
|
#
|
211
|
+
# @return [String] "done" when everything went as expected
|
145
212
|
# @raise [Error] if result code is not "done"
|
146
|
-
def tags_rename(old_tag, new_tag=nil
|
213
|
+
def tags_rename(old_tag, new_tag=nil)
|
214
|
+
params = {}
|
147
215
|
params[:old] = old_tag
|
148
216
|
params[:new] = new_tag if new_tag
|
149
217
|
|
@@ -151,6 +219,8 @@ module Pinboard
|
|
151
219
|
result_code = self.class.get('/tags/rename', options).parsed_response["result"]
|
152
220
|
|
153
221
|
raise Error.new(result_code) if result_code != "done"
|
222
|
+
|
223
|
+
result_code
|
154
224
|
end
|
155
225
|
|
156
226
|
# Delete an existing tag
|
@@ -165,6 +235,21 @@ module Pinboard
|
|
165
235
|
nil
|
166
236
|
end
|
167
237
|
|
238
|
+
# Returns the user's secret RSS key (for viewing private feeds)
|
239
|
+
#
|
240
|
+
# @return [String]
|
241
|
+
def user_secret()
|
242
|
+
self.class.get('/user/secret', create_params({}))['result']
|
243
|
+
end
|
244
|
+
|
245
|
+
# Returns the user's API token (for making API calls without a password)
|
246
|
+
#
|
247
|
+
# @return [String]
|
248
|
+
def user_api_token()
|
249
|
+
self.class.get('/user/api_token', create_params({}))['result']
|
250
|
+
end
|
251
|
+
|
252
|
+
|
168
253
|
# Returns a list of the user's notes
|
169
254
|
#
|
170
255
|
# @return [Array<Note>] list of notes
|
@@ -176,6 +261,28 @@ module Pinboard
|
|
176
261
|
notes.map { |p| Note.new(Util.symbolize_keys(p)) }
|
177
262
|
end
|
178
263
|
|
264
|
+
# Returns an individual user note. The hash property is a
|
265
|
+
# 20 character long sha1 hash of the note text.
|
266
|
+
#
|
267
|
+
# @return [Note] the note
|
268
|
+
def notes_get(id)
|
269
|
+
options = create_params({})
|
270
|
+
note = self.class.get("/notes/#{id}", options)['note']
|
271
|
+
|
272
|
+
return nil unless note
|
273
|
+
|
274
|
+
# Complete hack, because the API is still broken
|
275
|
+
content = '__content__'
|
276
|
+
Note.new({
|
277
|
+
id: note['id'],
|
278
|
+
# Remove whitespace around the title,
|
279
|
+
# because of missing xml tag around
|
280
|
+
title: note[content].gsub(/\n| +/, ''),
|
281
|
+
length: note['length'][content].to_i,
|
282
|
+
text: note['text'][content]
|
283
|
+
})
|
284
|
+
end
|
285
|
+
|
179
286
|
private
|
180
287
|
# Construct params hash for HTTP request
|
181
288
|
#
|
data/lib/pinboard/note.rb
CHANGED
@@ -3,8 +3,8 @@ module Pinboard
|
|
3
3
|
def initialize(attributes={})
|
4
4
|
self.id = attributes[:id]
|
5
5
|
self.title = attributes[:title]
|
6
|
-
self.created_at = Util.parse_time(attributes[:created_at])
|
7
|
-
self.updated_at = Util.parse_time(attributes[:updated_at])
|
6
|
+
self.created_at = attributes[:created_at] && Util.parse_time(attributes[:created_at])
|
7
|
+
self.updated_at = attributes[:updated_at] && Util.parse_time(attributes[:updated_at])
|
8
8
|
self.length = attributes[:length].to_i
|
9
9
|
self.text = attributes[:text]
|
10
10
|
end
|
data/lib/pinboard/post.rb
CHANGED
@@ -28,5 +28,22 @@ module Pinboard
|
|
28
28
|
toread: toread
|
29
29
|
}.to_json(*args)
|
30
30
|
end
|
31
|
+
|
32
|
+
# Creates hash for API (e.g. pass it to '/posts/add')
|
33
|
+
#
|
34
|
+
# @param [Boolean, nil] replace Overwrite replace attribute if not nil
|
35
|
+
# @return [Hash]
|
36
|
+
def api_hash(replace = nil)
|
37
|
+
self.replace = replace unless replace.nil?
|
38
|
+
{
|
39
|
+
url: href,
|
40
|
+
description: description,
|
41
|
+
extended: extended,
|
42
|
+
tags: tag.join(" "),
|
43
|
+
replace: replace,
|
44
|
+
shared: shared,
|
45
|
+
toread: toread
|
46
|
+
}.select { |key, value| ! value.nil? }
|
47
|
+
end
|
31
48
|
end
|
32
49
|
end
|
data/pinboard.gemspec
CHANGED
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
|
13
13
|
s.add_runtime_dependency 'httparty', '= 0.11.0'
|
14
14
|
s.name = 'pinboard'
|
15
|
-
s.version = '0.
|
16
|
-
s.date = '
|
15
|
+
s.version = '1.0.0'
|
16
|
+
s.date = '2016-01-05'
|
17
17
|
s.summary = "Ruby wrapper for the Pinboard API"
|
18
18
|
s.description = "Ruby wrapper for the Pinboard API"
|
19
19
|
s.authors = ["Ry Waker", "Jan-Erik Rediger"]
|
@@ -339,4 +339,140 @@ describe Pinboard::Client do
|
|
339
339
|
notes.first.title.should == "Paul Graham on Hirin' The Ladies"
|
340
340
|
end
|
341
341
|
end
|
342
|
+
|
343
|
+
describe "#user_secret" do
|
344
|
+
let(:client) { Pinboard::Client.new(auth_params) }
|
345
|
+
before do
|
346
|
+
stub_get("user/secret?").
|
347
|
+
to_return(:body => fixture("user_secret.xml"),
|
348
|
+
:headers => { 'content-type' => 'text/xml' })
|
349
|
+
end
|
350
|
+
|
351
|
+
it "returns the user's secret RSS key" do
|
352
|
+
secret = client.user_secret
|
353
|
+
secret.should == "6493a84f72d86e7de130"
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
describe "#user_api_token" do
|
358
|
+
let(:client) { Pinboard::Client.new(auth_params) }
|
359
|
+
before do
|
360
|
+
stub_get("user/api_token?").
|
361
|
+
to_return(:body => fixture("user_api_token.xml"),
|
362
|
+
:headers => { 'content-type' => 'text/xml' })
|
363
|
+
end
|
364
|
+
|
365
|
+
it "returns the user's API token" do
|
366
|
+
token = client.user_api_token
|
367
|
+
token.should == "XOG86E7JIYMI"
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
371
|
+
describe "#get" do
|
372
|
+
let(:client) { Pinboard::Client.new(auth_params) }
|
373
|
+
|
374
|
+
context "when there are many posts" do
|
375
|
+
before do
|
376
|
+
stub_get("posts/get?").
|
377
|
+
to_return(:body => fixture("multiple_posts.xml"),
|
378
|
+
:headers => { 'content-type' => 'text/xml' })
|
379
|
+
end
|
380
|
+
|
381
|
+
it "returns a collection of posts" do
|
382
|
+
expected =
|
383
|
+
[
|
384
|
+
Pinboard::Post.new(
|
385
|
+
:href => "http://foo.com/",
|
386
|
+
:description => "Foo!",
|
387
|
+
:extended => "long description Foo",
|
388
|
+
:tag => 'foo bar',
|
389
|
+
:toread => 'yes',
|
390
|
+
:time => Time.parse("2011-07-26T17:52:04Z")),
|
391
|
+
Pinboard::Post.new(
|
392
|
+
:href => "http://bar.com/",
|
393
|
+
:description => "Bar!",
|
394
|
+
:extended => "long description Bar",
|
395
|
+
:tag => 'foo bar',
|
396
|
+
:toread => 'yes',
|
397
|
+
:time => Time.parse("2011-07-26T17:52:04Z")),
|
398
|
+
]
|
399
|
+
|
400
|
+
client.get.should == expected
|
401
|
+
end
|
402
|
+
end
|
403
|
+
|
404
|
+
context "where there is a single post" do
|
405
|
+
before do
|
406
|
+
stub_get("posts/get?").
|
407
|
+
to_return(:body => fixture("single_post.xml"),
|
408
|
+
:headers => { 'content-type' => 'text/xml' })
|
409
|
+
end
|
410
|
+
|
411
|
+
it "still returns an array" do
|
412
|
+
client.get.class.should == Array
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
context "when there are no posts" do
|
417
|
+
before do
|
418
|
+
stub_get("posts/get?").
|
419
|
+
to_return(:body => fixture("no_posts.xml"),
|
420
|
+
:headers => { 'content-type' => 'text/xml' })
|
421
|
+
end
|
422
|
+
|
423
|
+
it "returns an empty array" do
|
424
|
+
client.get.should == []
|
425
|
+
end
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
describe "#suggest" do
|
430
|
+
let(:client) { Pinboard::Client.new(auth_params) }
|
431
|
+
let(:url) { 'http://example.com' }
|
432
|
+
|
433
|
+
context "when there are many popular and recommended tags" do
|
434
|
+
before do
|
435
|
+
stub_get("posts/suggest").
|
436
|
+
with(:query => { 'url' => url }).
|
437
|
+
to_return(:body => fixture("multiple_suggest.xml"),
|
438
|
+
:headers => { 'content-type' => 'text/xml' })
|
439
|
+
end
|
440
|
+
|
441
|
+
it "returns a collections of tags" do
|
442
|
+
suggest = client.suggest(url)
|
443
|
+
suggest[:popular].should == %w[blog blogs]
|
444
|
+
suggest[:recommended].should == %w[writing weblog]
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
context "when there are single popular and recommended tags" do
|
449
|
+
before do
|
450
|
+
stub_get("posts/suggest?").
|
451
|
+
with(:query => { 'url' => url }).
|
452
|
+
to_return(:body => fixture("single_suggest.xml"),
|
453
|
+
:headers => { 'content-type' => 'text/xml' })
|
454
|
+
end
|
455
|
+
|
456
|
+
it "still returns an array" do
|
457
|
+
suggest = client.suggest(url)
|
458
|
+
suggest[:popular].class.should == Array
|
459
|
+
suggest[:recommended].class.should == Array
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
context "when there are no popular and recommended tags" do
|
464
|
+
before do
|
465
|
+
stub_get("posts/suggest?").
|
466
|
+
with(:query => { 'url' => url }).
|
467
|
+
to_return(:body => fixture("no_suggest.xml"),
|
468
|
+
:headers => { 'content-type' => 'text/xml' })
|
469
|
+
end
|
470
|
+
|
471
|
+
it "returns an empty array" do
|
472
|
+
suggest = client.suggest(url)
|
473
|
+
suggest[:popular].should == []
|
474
|
+
suggest[:recommended].should == []
|
475
|
+
end
|
476
|
+
end
|
477
|
+
end
|
342
478
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pinboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ry Waker
|
@@ -9,146 +9,146 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yard
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0.7'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0.7'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0.9'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0.9'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '2.6'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '2.6'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: webmock
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.6'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.6'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: guard-rspec
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0.5'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0.5'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: guard-bundler
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: libnotify
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rb-inotify
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rb-fsevent
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- -
|
130
|
+
- - ">="
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: terminal-notifier-guard
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
|
-
- -
|
144
|
+
- - ">="
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
|
-
- -
|
151
|
+
- - ">="
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
- !ruby/object:Gem::Dependency
|
@@ -171,10 +171,10 @@ executables: []
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
-
- .autotest
|
175
|
-
- .gitignore
|
176
|
-
- .rspec
|
177
|
-
- .travis.yml
|
174
|
+
- ".autotest"
|
175
|
+
- ".gitignore"
|
176
|
+
- ".rspec"
|
177
|
+
- ".travis.yml"
|
178
178
|
- Gemfile
|
179
179
|
- Guardfile
|
180
180
|
- MIT-LICENSE
|
@@ -194,11 +194,16 @@ files:
|
|
194
194
|
- spec/fixtures/missing_description.xml
|
195
195
|
- spec/fixtures/missing_url.xml
|
196
196
|
- spec/fixtures/multiple_posts.xml
|
197
|
+
- spec/fixtures/multiple_suggest.xml
|
197
198
|
- spec/fixtures/no_posts.xml
|
199
|
+
- spec/fixtures/no_suggest.xml
|
198
200
|
- spec/fixtures/not_found.xml
|
199
201
|
- spec/fixtures/notes_list.xml
|
200
202
|
- spec/fixtures/post_update.xml
|
201
203
|
- spec/fixtures/single_post.xml
|
204
|
+
- spec/fixtures/single_suggest.xml
|
205
|
+
- spec/fixtures/user_api_token.xml
|
206
|
+
- spec/fixtures/user_secret.xml
|
202
207
|
- spec/helper.rb
|
203
208
|
- spec/pinboard/client_spec.rb
|
204
209
|
- spec/pinboard/post_spec.rb
|
@@ -212,17 +217,17 @@ require_paths:
|
|
212
217
|
- lib
|
213
218
|
required_ruby_version: !ruby/object:Gem::Requirement
|
214
219
|
requirements:
|
215
|
-
- -
|
220
|
+
- - ">="
|
216
221
|
- !ruby/object:Gem::Version
|
217
222
|
version: '0'
|
218
223
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
224
|
requirements:
|
220
|
-
- -
|
225
|
+
- - ">="
|
221
226
|
- !ruby/object:Gem::Version
|
222
227
|
version: 1.3.6
|
223
228
|
requirements: []
|
224
229
|
rubyforge_project:
|
225
|
-
rubygems_version: 2.
|
230
|
+
rubygems_version: 2.5.1
|
226
231
|
signing_key:
|
227
232
|
specification_version: 4
|
228
233
|
summary: Ruby wrapper for the Pinboard API
|
@@ -234,11 +239,16 @@ test_files:
|
|
234
239
|
- spec/fixtures/missing_description.xml
|
235
240
|
- spec/fixtures/missing_url.xml
|
236
241
|
- spec/fixtures/multiple_posts.xml
|
242
|
+
- spec/fixtures/multiple_suggest.xml
|
237
243
|
- spec/fixtures/no_posts.xml
|
244
|
+
- spec/fixtures/no_suggest.xml
|
238
245
|
- spec/fixtures/not_found.xml
|
239
246
|
- spec/fixtures/notes_list.xml
|
240
247
|
- spec/fixtures/post_update.xml
|
241
248
|
- spec/fixtures/single_post.xml
|
249
|
+
- spec/fixtures/single_suggest.xml
|
250
|
+
- spec/fixtures/user_api_token.xml
|
251
|
+
- spec/fixtures/user_secret.xml
|
242
252
|
- spec/helper.rb
|
243
253
|
- spec/pinboard/client_spec.rb
|
244
254
|
- spec/pinboard/post_spec.rb
|