pinboard 0.1.1 → 1.0.0
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/.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
|