rscribd 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/README +10 -1
- data/VERSION +1 -1
- data/lib/scribd/api.rb +62 -23
- data/lib/scribd/category.rb +2 -2
- data/lib/scribd/document.rb +55 -0
- data/lib/scribd/resource.rb +5 -0
- data/lib/support/buffered_upload_io.rb +12 -0
- data/lib/support/extensions.rb +8 -0
- data/lib/support/multipart_hack.rb +10 -9
- data/rscribd.gemspec +35 -46
- data/spec/api_spec.rb +1 -5
- data/spec/category_spec.rb +5 -3
- data/spec/collection_spec.rb +2 -0
- data/spec/document_spec.rb +75 -5
- data/spec/error_spec.rb +1 -5
- data/spec/resource_spec.rb +1 -5
- data/spec/rscribd_spec.rb +1 -5
- data/spec/security_spec.rb +2 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/user_spec.rb +1 -5
- metadata +21 -17
- data/.gitignore +0 -5
data/History.txt
CHANGED
data/README
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
h1. rscribd
|
2
2
|
|
3
|
-
* 1.
|
3
|
+
* 1.3.0 (July 5, 2011)
|
4
4
|
|
5
5
|
h2. DESCRIPTION:
|
6
6
|
|
@@ -53,12 +53,21 @@ h2. REQUIREMENTS:
|
|
53
53
|
|
54
54
|
* A Scribd API account
|
55
55
|
* Ruby 1.8 or newer, with RubyGems 1.3 or newer.
|
56
|
+
* (optional) multipart-post gem by Nick Sieger from http://github.com/nicksieger/multipart-post
|
56
57
|
|
57
58
|
h2. INSTALL:
|
58
59
|
|
59
60
|
* The client library is a RubyGem called *rscribd*. To install, type
|
60
61
|
@sudo gem install rscribd@.
|
61
62
|
|
63
|
+
* To use the optional multipart-post gem by Nick Sieger, make sure it is available in the load path and call
|
64
|
+
<pre><code>
|
65
|
+
Scribd::API.instance.enable_multipart_post_gem
|
66
|
+
|
67
|
+
# and to stop using the multipart-post gem
|
68
|
+
Scribd::API.instance.disable_multipart_post_gem
|
69
|
+
</code></pre>
|
70
|
+
|
62
71
|
h2. LICENSE:
|
63
72
|
|
64
73
|
(The MIT License)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
data/lib/scribd/api.rb
CHANGED
@@ -83,6 +83,17 @@ module Scribd
|
|
83
83
|
@key = ENV['SCRIBD_API_KEY']
|
84
84
|
@secret = ENV['SCRIBD_API_SECRET']
|
85
85
|
@user = User.new
|
86
|
+
disable_multipart_post_gem
|
87
|
+
end
|
88
|
+
|
89
|
+
def enable_multipart_post_gem
|
90
|
+
require 'net/http/post/multipart'
|
91
|
+
require File.expand_path('../../support/buffered_upload_io', __FILE__)
|
92
|
+
@use_multipart_post_gem = true
|
93
|
+
end
|
94
|
+
|
95
|
+
def disable_multipart_post_gem
|
96
|
+
@use_multipart_post_gem = false
|
86
97
|
end
|
87
98
|
|
88
99
|
# @private
|
@@ -117,6 +128,37 @@ module Scribd
|
|
117
128
|
fields['api_sig'] = sign(sign_fields)
|
118
129
|
debug("** POST parameters: #{fields.inspect}")
|
119
130
|
|
131
|
+
res = send_request_to_scribd(fields)
|
132
|
+
|
133
|
+
debug "** Response:"
|
134
|
+
debug(res.body)
|
135
|
+
debug "** End response"
|
136
|
+
|
137
|
+
# Convert response into XML
|
138
|
+
xml = REXML::Document.new(res.body)
|
139
|
+
raise MalformedResponseError, "The response received from the remote host could not be interpreted" unless xml.elements['/rsp']
|
140
|
+
|
141
|
+
# See if there was an error and raise an exception
|
142
|
+
if xml.elements['/rsp'].attributes['stat'] == 'fail'
|
143
|
+
# Load default code and error
|
144
|
+
code, message = -1, "Unidentified error:\n#{res.body}"
|
145
|
+
|
146
|
+
# Get actual error code and message
|
147
|
+
err = xml.elements['/rsp/error']
|
148
|
+
code, message = err.attributes['code'], err.attributes['message'] if err
|
149
|
+
|
150
|
+
# Add more data
|
151
|
+
message = "Method: #{method} Response: code=#{code} message=#{message}"
|
152
|
+
|
153
|
+
raise ResponseError.new(code), message
|
154
|
+
end
|
155
|
+
|
156
|
+
return xml
|
157
|
+
end
|
158
|
+
|
159
|
+
private
|
160
|
+
|
161
|
+
def send_request_to_scribd(fields)
|
120
162
|
# Create the connection
|
121
163
|
http = Net::HTTP.new(HOST, PORT)
|
122
164
|
# TODO configure timeouts through the properties
|
@@ -124,8 +166,7 @@ module Scribd
|
|
124
166
|
# API methods can be SLOW. Make sure this is set to something big to prevent spurious timeouts
|
125
167
|
http.read_timeout = 15*60
|
126
168
|
|
127
|
-
request =
|
128
|
-
request.multipart_params = fields
|
169
|
+
request = request_using_multipart_post_gem(fields) || request_using_supplied_multipart_post(fields)
|
129
170
|
|
130
171
|
tries = TRIES
|
131
172
|
begin
|
@@ -141,35 +182,32 @@ module Scribd
|
|
141
182
|
end
|
142
183
|
raise $!
|
143
184
|
end
|
144
|
-
|
145
|
-
debug "** Response:"
|
146
|
-
debug(res.body)
|
147
|
-
debug "** End response"
|
148
185
|
|
149
|
-
|
150
|
-
|
151
|
-
|
186
|
+
ensure
|
187
|
+
http.finish if http && http.started?
|
188
|
+
end
|
152
189
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
190
|
+
def request_using_supplied_multipart_post(fields)
|
191
|
+
request = Net::HTTP::Post.new(REQUEST_PATH)
|
192
|
+
request.multipart_params = fields
|
193
|
+
request
|
194
|
+
end
|
157
195
|
|
158
|
-
|
159
|
-
|
160
|
-
code, message = err.attributes['code'], err.attributes['message'] if err
|
196
|
+
def request_using_multipart_post_gem(fields)
|
197
|
+
return nil unless @use_multipart_post_gem
|
161
198
|
|
162
|
-
|
163
|
-
|
199
|
+
fields = fields.dup
|
200
|
+
original_file_value = fields['file']
|
201
|
+
if original_file_value
|
202
|
+
filename = File.basename(original_file_value.path)
|
203
|
+
mime_types = MIME::Types.of(filename)
|
204
|
+
mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
|
164
205
|
|
165
|
-
|
206
|
+
fields['file'] = BufferedUploadIO.new(original_file_value, mime_type, filename)
|
166
207
|
end
|
167
|
-
|
168
|
-
return xml
|
208
|
+
Net::HTTP::Post::Multipart.new(REQUEST_PATH, fields)
|
169
209
|
end
|
170
210
|
|
171
|
-
private
|
172
|
-
|
173
211
|
# FIXME: Since we don't need XMLRPC, the exception could be different
|
174
212
|
# TODO: It would probably be better if we wrapped the fault
|
175
213
|
# in something more meaningful. At the very least, a broad
|
@@ -228,4 +266,5 @@ module Scribd
|
|
228
266
|
$stderr.puts(str) if @debug
|
229
267
|
end
|
230
268
|
end
|
269
|
+
|
231
270
|
end
|
data/lib/scribd/category.rb
CHANGED
@@ -77,7 +77,7 @@ module Scribd
|
|
77
77
|
|
78
78
|
def children
|
79
79
|
return @children if @children
|
80
|
-
response = API.instance.send_request('docs.getCategories', :category_id => self.
|
80
|
+
response = API.instance.send_request('docs.getCategories', :category_id => self.scribd_id)
|
81
81
|
children = Array.new
|
82
82
|
response.get_elements('/rsp/result_set/result').each do |res|
|
83
83
|
children << Category.new(:xml => res)
|
@@ -101,7 +101,7 @@ module Scribd
|
|
101
101
|
# category.browse(:sort => 'views', :category_id => 1, :limit => 10)
|
102
102
|
|
103
103
|
def browse(options={})
|
104
|
-
response = API.instance.send_request('docs.browse', options.merge(:category_id => self.
|
104
|
+
response = API.instance.send_request('docs.browse', options.merge(:category_id => self.scribd_id))
|
105
105
|
documents = []
|
106
106
|
response.elements['/rsp/result_set'].elements.each do |doc|
|
107
107
|
documents << Document.new(:xml => doc)
|
data/lib/scribd/document.rb
CHANGED
@@ -386,6 +386,61 @@ module Scribd
|
|
386
386
|
Scribd::Security.document_access_list(self)
|
387
387
|
end
|
388
388
|
|
389
|
+
# Returns a URL for a thumbnail image of this document.
|
390
|
+
#
|
391
|
+
# @param [Hash] options Options for customizing the thumbnail image.
|
392
|
+
# @option options [Fixnum] :page (1) The page number to generate a thumbnail
|
393
|
+
# of.
|
394
|
+
# @option options [Fixnum] :width The width of the image, in pixels.
|
395
|
+
# @option options [Fixnum] :height The height of the image, in pixels.
|
396
|
+
# @option options [Array<Fixnum>] :size A two-element array consisting of
|
397
|
+
# the width and height of the image, in pixels.
|
398
|
+
# @return [String] The URL of the thumbnail image.
|
399
|
+
# @raise [ArgumentError] If @:width@ is specified but @:height@ is not, or
|
400
|
+
# vice versa.
|
401
|
+
# @raise [ArgumentError] If @:width@ and @:size@ are both specified.
|
402
|
+
# @raise [ArgumentError] If @:size@ is not a two-item array.
|
403
|
+
|
404
|
+
def thumbnail_url(options={})
|
405
|
+
self.class.thumbnail_url self.id, options
|
406
|
+
end
|
407
|
+
|
408
|
+
# Returns a URL for a thumbnail image of a given document. The document must
|
409
|
+
# be public, or you must own it.
|
410
|
+
#
|
411
|
+
# @param [Fixnum] id The document's ID on the Scribd website.
|
412
|
+
# @param [Hash] options Options for customizing the thumbnail image.
|
413
|
+
# @option options [Fixnum] :page (1) The page number to generate a thumbnail
|
414
|
+
# of.
|
415
|
+
# @option options [Fixnum] :width The width of the image, in pixels.
|
416
|
+
# @option options [Fixnum] :height The height of the image, in pixels.
|
417
|
+
# @option options [Array<Fixnum>] :size A two-element array consisting of
|
418
|
+
# the width and height of the image, in pixels.
|
419
|
+
# @return [String] The URL of the thumbnail image.
|
420
|
+
# @raise [ArgumentError] If @:width@ is specified but @:height@ is not, or
|
421
|
+
# vice versa.
|
422
|
+
# @raise [ArgumentError] If @:width@ and @:size@ are both specified.
|
423
|
+
# @raise [ArgumentError] If @:size@ is not a two-item array.
|
424
|
+
|
425
|
+
def self.thumbnail_url(id, options={})
|
426
|
+
w = h = nil
|
427
|
+
if (options[:width] or options[:height]) and options[:size] then
|
428
|
+
raise ArgumentError, "Cannot specify both width/height and size"
|
429
|
+
elsif options[:width] and options[:height] then
|
430
|
+
w = options[:width]
|
431
|
+
h = options[:height]
|
432
|
+
elsif options[:size] then
|
433
|
+
raise ArgumentError, "Size option must be a two-element array" unless options[:size].kind_of?(Array) and options[:size].size == 2
|
434
|
+
w = options[:size].first
|
435
|
+
h = options[:size].last
|
436
|
+
elsif options[:width] or options[:height] then
|
437
|
+
raise ArgumentError, "Must specify both width and height, or neither"
|
438
|
+
end
|
439
|
+
|
440
|
+
response = API.instance.send_request('thumbnail.get', { :doc_id => id, :width => w, :height => h, :page => options[:page] }.compact)
|
441
|
+
response.elements['/rsp/thumbnail_url'].text
|
442
|
+
end
|
443
|
+
|
389
444
|
# @return The @document_id@ attribute.
|
390
445
|
|
391
446
|
def id
|
data/lib/scribd/resource.rb
CHANGED
@@ -45,6 +45,11 @@ module Scribd
|
|
45
45
|
@created = false
|
46
46
|
@attributes = Hash.new
|
47
47
|
end
|
48
|
+
|
49
|
+
# Return the Scribd ID for a resource, so as not to conflict with object.id
|
50
|
+
def scribd_id
|
51
|
+
@attributes[:id]
|
52
|
+
end
|
48
53
|
|
49
54
|
# Creates a new instance with the given attributes, saves it immediately,
|
50
55
|
# and returns it. You should call its {#created?} method if you need to
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# while c = File.read(max_size); end # still reads the whole file into memory
|
2
|
+
# buffer = ''; while c = File.read(max_size, buffer ); end # reuses a string variable to reduce memory usage
|
3
|
+
class BufferedUploadIO < UploadIO
|
4
|
+
def initialize(*args)
|
5
|
+
super(*args)
|
6
|
+
@buffer = ''
|
7
|
+
end
|
8
|
+
|
9
|
+
def read(amount, buffer = @buffer)
|
10
|
+
@io.read(amount, buffer)
|
11
|
+
end
|
12
|
+
end
|
data/lib/support/extensions.rb
CHANGED
@@ -14,24 +14,25 @@ module Net
|
|
14
14
|
boundary_token = [Array.new(8) {rand(256)}].join
|
15
15
|
self.content_type = "multipart/form-data; boundary=#{boundary_token}"
|
16
16
|
boundary_marker = "--#{boundary_token}\r\n"
|
17
|
-
self.body = param_hash.
|
18
|
-
|
17
|
+
self.body = param_hash.inject('') do |memo, (param_name, param_value)|
|
18
|
+
memo << boundary_marker
|
19
|
+
case param_value
|
19
20
|
when File
|
20
|
-
file_to_multipart(param_name, param_value)
|
21
|
+
file_to_multipart(memo, param_name, param_value)
|
21
22
|
else
|
22
|
-
text_to_multipart(param_name, param_value.to_s)
|
23
|
+
memo << text_to_multipart(param_name, param_value.to_s)
|
23
24
|
end
|
24
|
-
end
|
25
|
+
end << "--#{boundary_token}--\r\n"
|
25
26
|
end
|
26
27
|
|
27
28
|
protected
|
28
|
-
def file_to_multipart(key,file)
|
29
|
+
def file_to_multipart(memo, key,file)
|
29
30
|
filename = File.basename(file.path)
|
30
31
|
mime_types = MIME::Types.of(filename)
|
31
32
|
mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
memo << %Q|Content-Disposition: form-data; name="#{key}"; filename="#{filename}"\r\n|
|
34
|
+
memo << "Content-Transfer-Encoding: binary\r\n"
|
35
|
+
memo << "Content-Type: #{mime_type}\r\n\r\n#{file.read}\r\n"
|
35
36
|
end
|
36
37
|
|
37
38
|
def text_to_multipart(key,value)
|
data/rscribd.gemspec
CHANGED
@@ -1,74 +1,63 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rscribd}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tim Morgan", "Jared Friedman", "Mike Watts"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-07-06}
|
13
13
|
s.description = %q{The official Ruby gem for the Scribd API. Scribd is a document-sharing website allowing people to upload and view documents online.}
|
14
14
|
s.email = %q{api@scribd.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
|
-
".
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
19
|
+
"History.txt",
|
20
|
+
"README",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"lib/rscribd.rb",
|
24
|
+
"lib/scribd/api.rb",
|
25
|
+
"lib/scribd/category.rb",
|
26
|
+
"lib/scribd/collection.rb",
|
27
|
+
"lib/scribd/document.rb",
|
28
|
+
"lib/scribd/errors.rb",
|
29
|
+
"lib/scribd/resource.rb",
|
30
|
+
"lib/scribd/security.rb",
|
31
|
+
"lib/scribd/user.rb",
|
32
|
+
"lib/support/buffered_upload_io.rb",
|
33
|
+
"lib/support/extensions.rb",
|
34
|
+
"lib/support/multipart_hack.rb",
|
35
|
+
"rscribd.gemspec",
|
36
|
+
"sample/01_upload.rb",
|
37
|
+
"sample/02_user.rb",
|
38
|
+
"sample/test.txt",
|
39
|
+
"spec/api_spec.rb",
|
40
|
+
"spec/category_spec.rb",
|
41
|
+
"spec/collection_spec.rb",
|
42
|
+
"spec/document_spec.rb",
|
43
|
+
"spec/error_spec.rb",
|
44
|
+
"spec/resource_spec.rb",
|
45
|
+
"spec/rscribd_spec.rb",
|
46
|
+
"spec/security_spec.rb",
|
47
|
+
"spec/spec_helper.rb",
|
48
|
+
"spec/user_spec.rb"
|
48
49
|
]
|
49
50
|
s.homepage = %q{http://www.scribd.com/developers}
|
50
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
51
51
|
s.require_paths = ["lib"]
|
52
52
|
s.rubyforge_project = %q{rscribd}
|
53
|
-
s.rubygems_version = %q{1.3.
|
53
|
+
s.rubygems_version = %q{1.3.7}
|
54
54
|
s.summary = %q{Ruby client library for the Scribd API}
|
55
|
-
s.test_files = [
|
56
|
-
"spec/api_spec.rb",
|
57
|
-
"spec/category_spec.rb",
|
58
|
-
"spec/collection_spec.rb",
|
59
|
-
"spec/document_spec.rb",
|
60
|
-
"spec/error_spec.rb",
|
61
|
-
"spec/resource_spec.rb",
|
62
|
-
"spec/rscribd_spec.rb",
|
63
|
-
"spec/security_spec.rb",
|
64
|
-
"spec/user_spec.rb"
|
65
|
-
]
|
66
55
|
|
67
56
|
if s.respond_to? :specification_version then
|
68
57
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
69
58
|
s.specification_version = 3
|
70
59
|
|
71
|
-
if Gem::Version.new(Gem::
|
60
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
72
61
|
s.add_runtime_dependency(%q<mime-types>, [">= 0"])
|
73
62
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
74
63
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
data/spec/api_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rscribd'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Scribd::API do
|
6
4
|
it "should be a singleton" do
|
@@ -127,5 +125,3 @@ Content-Disposition: form-data; name=#{key.to_s.inspect}
|
|
127
125
|
Scribd::API.instance.user.should_not be_nil
|
128
126
|
end
|
129
127
|
end
|
130
|
-
|
131
|
-
Dir.chdir old_dir
|
data/spec/category_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
1
3
|
CATEGORY = Proc.new { |id, name, children|
|
2
4
|
id ||= rand(1000)
|
3
5
|
name ||= "Test Category #{id}"
|
@@ -42,7 +44,7 @@ describe Scribd::Category do
|
|
42
44
|
end
|
43
45
|
|
44
46
|
context "attributes" do
|
45
|
-
its(:
|
47
|
+
its(:scribd_id) { should eql('12') }
|
46
48
|
its(:name) { should eql('test') }
|
47
49
|
end
|
48
50
|
|
@@ -53,7 +55,7 @@ describe Scribd::Category do
|
|
53
55
|
Scribd::API.instance.should_not_receive(:send_request) # not really being tested here, but we should make sure we don't actually make remote requests
|
54
56
|
category.children.should be_kind_of(Array)
|
55
57
|
category.children.first.should be_kind_of(Scribd::Category)
|
56
|
-
category.children.first.
|
58
|
+
category.children.first.scribd_id.should eql('100')
|
57
59
|
category.children.first.name.should eql('Test Category 100')
|
58
60
|
category.children.first.children_preloaded?.should be_false
|
59
61
|
category.children.first.parent.should eql(category)
|
@@ -76,7 +78,7 @@ describe Scribd::Category do
|
|
76
78
|
|
77
79
|
describe :all do
|
78
80
|
before :each do
|
79
|
-
@response = REXML::Document.new(RESULT.call).root
|
81
|
+
@response = REXML::Document.new(RESULT.call(CATEGORY_TAG.call)).root
|
80
82
|
end
|
81
83
|
|
82
84
|
it "should send an API request to docs.getCategories" do
|
data/spec/collection_spec.rb
CHANGED
data/spec/document_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rscribd'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Scribd::Document do
|
6
4
|
before :each do
|
@@ -68,6 +66,7 @@ describe Scribd::Document do
|
|
68
66
|
@response = mock('Net::HTTPResponse @response')
|
69
67
|
@response.stub!(:body).and_return "<rsp stat='ok'></rsp>"
|
70
68
|
@http.stub!(:request).and_return(@response)
|
69
|
+
@http.stub!(:started?).and_return(false)
|
71
70
|
Net::HTTP.stub!(:new).and_return(@http)
|
72
71
|
end
|
73
72
|
|
@@ -652,6 +651,77 @@ describe Scribd::Document do
|
|
652
651
|
doc.access_list
|
653
652
|
end
|
654
653
|
end
|
654
|
+
|
655
|
+
describe "#thumbnail_url" do
|
656
|
+
before :each do
|
657
|
+
@doc = Scribd::Document.new(:doc_id => 123)
|
658
|
+
end
|
659
|
+
|
660
|
+
it "should call Scribd::Document.thumbnail_url" do
|
661
|
+
Scribd::Document.should_receive(:thumbnail_url).once.with(123, {})
|
662
|
+
@doc.thumbnail_url
|
663
|
+
end
|
664
|
+
|
665
|
+
it "should pass options" do
|
666
|
+
Scribd::Document.should_receive(:thumbnail_url).once.with(123, { :page => 10 })
|
667
|
+
@doc.thumbnail_url(:page => 10)
|
668
|
+
end
|
669
|
+
end
|
670
|
+
|
671
|
+
describe ".thumbnail_url" do
|
672
|
+
before :each do
|
673
|
+
@url = "http://imgv2-2.scribdassets.com/img/word_document/1/111x142/ff94c77a69/1277782307"
|
674
|
+
@response = REXML::Document.new(<<-EOF
|
675
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
676
|
+
<rsp stat="ok">
|
677
|
+
<thumbnail_url>#{@url}</thumbnail_url>
|
678
|
+
</rsp>
|
679
|
+
EOF
|
680
|
+
)
|
681
|
+
end
|
682
|
+
|
683
|
+
it "should raise an exception if both width/height and size are specified" do
|
684
|
+
Scribd::API.instance.stub!(:send_request).and_return(@response)
|
685
|
+
lambda { Scribd::Document.thumbnail_url(123, :width => 123, :size => [ 1, 2 ]) }.should raise_error(ArgumentError)
|
686
|
+
lambda { Scribd::Document.thumbnail_url(123, :height => 123, :size => [ 1, 2 ]) }.should raise_error(ArgumentError)
|
687
|
+
lambda { Scribd::Document.thumbnail_url(123, :width => 123, :height => 321, :size => [ 1, 2 ]) }.should raise_error(ArgumentError)
|
688
|
+
end
|
689
|
+
|
690
|
+
it "should raise an exception if size is not an array" do
|
691
|
+
Scribd::API.instance.stub!(:send_request).and_return(@response)
|
692
|
+
lambda { Scribd::Document.thumbnail_url(123, :size => 123) }.should raise_error(ArgumentError)
|
693
|
+
end
|
694
|
+
|
695
|
+
it "should raise an exception if size is not 2 elements long" do
|
696
|
+
Scribd::API.instance.stub!(:send_request).and_return(@response)
|
697
|
+
lambda { Scribd::Document.thumbnail_url(123, :size => [ 1 ]) }.should raise_error(ArgumentError)
|
698
|
+
lambda { Scribd::Document.thumbnail_url(123, :size => [ 1, 2, 3 ]) }.should raise_error(ArgumentError)
|
699
|
+
end
|
700
|
+
|
701
|
+
it "should raise an exception if either width xor height is specified" do
|
702
|
+
Scribd::API.instance.stub!(:send_request).and_return(@response)
|
703
|
+
lambda { Scribd::Document.thumbnail_url(123, :width => 123) }.should raise_error(ArgumentError)
|
704
|
+
lambda { Scribd::Document.thumbnail_url(123, :height => 123) }.should raise_error(ArgumentError)
|
705
|
+
end
|
706
|
+
|
707
|
+
it "should call the thumbnail.get API method" do
|
708
|
+
Scribd::API.instance.should_receive(:send_request).once.with('thumbnail.get', :doc_id => 123).and_return(@response)
|
709
|
+
Scribd::Document.thumbnail_url(123).should eql(@url)
|
710
|
+
end
|
711
|
+
|
712
|
+
it "should pass the width and height" do
|
713
|
+
Scribd::API.instance.should_receive(:send_request).once.with('thumbnail.get', :doc_id => 123, :width => 2, :height => 4).and_return(@response)
|
714
|
+
Scribd::Document.thumbnail_url(123, :width => 2, :height => 4)
|
715
|
+
end
|
716
|
+
|
717
|
+
it "should pass a size" do
|
718
|
+
Scribd::API.instance.should_receive(:send_request).once.with('thumbnail.get', :doc_id => 123, :width => 2, :height => 4).and_return(@response)
|
719
|
+
Scribd::Document.thumbnail_url(123, :size => [ 2, 4 ])
|
720
|
+
end
|
721
|
+
|
722
|
+
it "should pass the page number" do
|
723
|
+
Scribd::API.instance.should_receive(:send_request).once.with('thumbnail.get', :doc_id => 123, :page => 10).and_return(@response)
|
724
|
+
Scribd::Document.thumbnail_url(123, :page => 10)
|
725
|
+
end
|
726
|
+
end
|
655
727
|
end
|
656
|
-
|
657
|
-
Dir.chdir old_dir
|
data/spec/error_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rscribd'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Scribd::ResponseError do
|
6
4
|
it "should set the code attribute on initialization" do
|
@@ -8,5 +6,3 @@ describe Scribd::ResponseError do
|
|
8
6
|
error.code.should eql(123)
|
9
7
|
end
|
10
8
|
end
|
11
|
-
|
12
|
-
Dir.chdir old_dir
|
data/spec/resource_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rscribd'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Scribd::Resource do
|
6
4
|
describe "initialized from attributes" do
|
@@ -122,5 +120,3 @@ describe Scribd::Resource do
|
|
122
120
|
end
|
123
121
|
end
|
124
122
|
end
|
125
|
-
|
126
|
-
Dir.chdir old_dir
|
data/spec/rscribd_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rscribd'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Symbol do
|
6
4
|
it "should define a to_proc method" do
|
@@ -31,5 +29,3 @@ describe Array do
|
|
31
29
|
[ [ 1, 2], [3, 4] ].to_hsh.should == { 1 => 2, 3 => 4 }
|
32
30
|
end
|
33
31
|
end
|
34
|
-
|
35
|
-
Dir.chdir old_dir
|
data/spec/security_spec.rb
CHANGED
data/spec/spec_helper.rb
ADDED
data/spec/user_spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rscribd'
|
1
|
+
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Scribd::User do
|
6
4
|
describe "initialized from attributes" do
|
@@ -279,5 +277,3 @@ describe Scribd::User do
|
|
279
277
|
end
|
280
278
|
end
|
281
279
|
end
|
282
|
-
|
283
|
-
Dir.chdir old_dir
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rscribd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
|
-
-
|
8
|
+
- 3
|
8
9
|
- 0
|
9
|
-
version: 1.
|
10
|
+
version: 1.3.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Tim Morgan
|
@@ -16,16 +17,18 @@ autorequire:
|
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date:
|
20
|
+
date: 2011-07-06 00:00:00 -06:00
|
20
21
|
default_executable:
|
21
22
|
dependencies:
|
22
23
|
- !ruby/object:Gem::Dependency
|
23
24
|
name: mime-types
|
24
25
|
prerelease: false
|
25
26
|
requirement: &id001 !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
26
28
|
requirements:
|
27
29
|
- - ">="
|
28
30
|
- !ruby/object:Gem::Version
|
31
|
+
hash: 3
|
29
32
|
segments:
|
30
33
|
- 0
|
31
34
|
version: "0"
|
@@ -35,9 +38,11 @@ dependencies:
|
|
35
38
|
name: rspec
|
36
39
|
prerelease: false
|
37
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
38
42
|
requirements:
|
39
43
|
- - ">="
|
40
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
41
46
|
segments:
|
42
47
|
- 0
|
43
48
|
version: "0"
|
@@ -47,9 +52,11 @@ dependencies:
|
|
47
52
|
name: yard
|
48
53
|
prerelease: false
|
49
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
50
56
|
requirements:
|
51
57
|
- - ">="
|
52
58
|
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
53
60
|
segments:
|
54
61
|
- 0
|
55
62
|
version: "0"
|
@@ -64,7 +71,6 @@ extensions: []
|
|
64
71
|
extra_rdoc_files:
|
65
72
|
- README
|
66
73
|
files:
|
67
|
-
- .gitignore
|
68
74
|
- History.txt
|
69
75
|
- README
|
70
76
|
- Rakefile
|
@@ -78,6 +84,7 @@ files:
|
|
78
84
|
- lib/scribd/resource.rb
|
79
85
|
- lib/scribd/security.rb
|
80
86
|
- lib/scribd/user.rb
|
87
|
+
- lib/support/buffered_upload_io.rb
|
81
88
|
- lib/support/extensions.rb
|
82
89
|
- lib/support/multipart_hack.rb
|
83
90
|
- rscribd.gemspec
|
@@ -92,44 +99,41 @@ files:
|
|
92
99
|
- spec/resource_spec.rb
|
93
100
|
- spec/rscribd_spec.rb
|
94
101
|
- spec/security_spec.rb
|
102
|
+
- spec/spec_helper.rb
|
95
103
|
- spec/user_spec.rb
|
96
104
|
has_rdoc: true
|
97
105
|
homepage: http://www.scribd.com/developers
|
98
106
|
licenses: []
|
99
107
|
|
100
108
|
post_install_message:
|
101
|
-
rdoc_options:
|
102
|
-
|
109
|
+
rdoc_options: []
|
110
|
+
|
103
111
|
require_paths:
|
104
112
|
- lib
|
105
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
106
115
|
requirements:
|
107
116
|
- - ">="
|
108
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
109
119
|
segments:
|
110
120
|
- 0
|
111
121
|
version: "0"
|
112
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
113
124
|
requirements:
|
114
125
|
- - ">="
|
115
126
|
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
116
128
|
segments:
|
117
129
|
- 0
|
118
130
|
version: "0"
|
119
131
|
requirements: []
|
120
132
|
|
121
133
|
rubyforge_project: rscribd
|
122
|
-
rubygems_version: 1.3.
|
134
|
+
rubygems_version: 1.3.7
|
123
135
|
signing_key:
|
124
136
|
specification_version: 3
|
125
137
|
summary: Ruby client library for the Scribd API
|
126
|
-
test_files:
|
127
|
-
|
128
|
-
- spec/category_spec.rb
|
129
|
-
- spec/collection_spec.rb
|
130
|
-
- spec/document_spec.rb
|
131
|
-
- spec/error_spec.rb
|
132
|
-
- spec/resource_spec.rb
|
133
|
-
- spec/rscribd_spec.rb
|
134
|
-
- spec/security_spec.rb
|
135
|
-
- spec/user_spec.rb
|
138
|
+
test_files: []
|
139
|
+
|