rscribd 1.2.0 → 1.3.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.
- 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
|
+
|