rscribd 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/History.txt +5 -0
- data/Rakefile +20 -24
- data/VERSION +1 -0
- data/lib/scribddoc.rb +18 -11
- data/lib/scribdmultiparthack.rb +2 -2
- data/lib/scribduser.rb +5 -3
- data/spec/api_spec.rb +131 -0
- data/spec/document_spec.rb +557 -0
- data/spec/error_spec.rb +12 -0
- data/spec/resource_spec.rb +126 -0
- data/spec/rscribd_spec.rb +35 -0
- data/spec/user_spec.rb +195 -0
- metadata +30 -23
data/spec/error_spec.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
old_dir = Dir.getwd
|
2
|
+
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rscribd'
|
4
|
+
|
5
|
+
describe Scribd::ResponseError do
|
6
|
+
it "should set the code attribute on initialization" do
|
7
|
+
error = Scribd::ResponseError.new(123)
|
8
|
+
error.code.should eql(123)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
Dir.chdir old_dir
|
@@ -0,0 +1,126 @@
|
|
1
|
+
old_dir = Dir.getwd
|
2
|
+
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rscribd'
|
4
|
+
|
5
|
+
describe Scribd::Resource do
|
6
|
+
describe "initialized from attributes" do
|
7
|
+
before :each do
|
8
|
+
@resource = Scribd::Resource.new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be unsaved" do
|
12
|
+
@resource.should_not be_saved
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be uncreated" do
|
16
|
+
@resource.should_not be_created
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".save" do
|
21
|
+
it "should create a new instance and save it and return it" do
|
22
|
+
resource = mock('Scribd::Resource resource')
|
23
|
+
resource.should_receive(:save).once
|
24
|
+
Scribd::Resource.stub!(:new).and_return(resource)
|
25
|
+
Scribd::Resource.create.should eql(resource)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not implement save" do
|
30
|
+
lambda { Scribd::Resource.new.save }.should raise_error(NotImplementedError)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not implement find" do
|
34
|
+
lambda { Scribd::Resource.find(1) }.should raise_error(NotImplementedError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not implement destroy" do
|
38
|
+
lambda { Scribd::Resource.new.destroy }.should raise_error(NotImplementedError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should implement saved?" do
|
42
|
+
resource = Scribd::Resource.new
|
43
|
+
resource.instance_variable_set(:@saved, true)
|
44
|
+
resource.should be_saved
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should implement created?" do
|
48
|
+
resource = Scribd::Resource.new
|
49
|
+
resource.instance_variable_set(:@created, true)
|
50
|
+
resource.should be_created
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "with attributes" do
|
54
|
+
before :each do
|
55
|
+
@resource = Scribd::Resource.new
|
56
|
+
@resource.instance_variable_set(:@attributes, { :access => 'private', :owner => 'me!', :warp => 9 })
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "read_attribute method" do
|
60
|
+
it "should raise ArgumentError if the attribute name cannot be converted to a symbol" do
|
61
|
+
attr_name = mock('attr_name')
|
62
|
+
lambda { @resource.read_attribute attr_name }.should raise_error(ArgumentError)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return the attribute value for valid attributes" do
|
66
|
+
@resource.read_attribute(:access).should eql('private')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "read_attributes method" do
|
71
|
+
it "should raise ArgumentError if a list is not provided" do
|
72
|
+
lambda { @resource.read_attributes nil }.should raise_error(ArgumentError)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should raise ArgumentError if any attribute name cannot be converted to a symbol" do
|
76
|
+
attr_name = mock('attr_name')
|
77
|
+
lambda { @resource.read_attributes [ attr_name, :test ] }.should raise_error(ArgumentError)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should return the values of the given attribute names" do
|
81
|
+
@resource.read_attributes([ :access, :owner ]).should == { :access => 'private', :owner => 'me!' }
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should convert all keys to symbols" do
|
85
|
+
@resource.read_attributes([ 'access' ]).should == { :access => 'private' }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "write_attributes method" do
|
90
|
+
it "should raise ArgumentError if a hash is not provided" do
|
91
|
+
lambda { @resource.write_attributes nil }.should raise_error(ArgumentError)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should raise ArgumentError if any attribute name cannot be converted to a symbol" do
|
95
|
+
attr_name = mock('attr_name')
|
96
|
+
lambda { @resource.write_attributes attr_name => 1, :test => 2 }.should raise_error(ArgumentError)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should set the values of the given attribute names" do
|
100
|
+
@resource.write_attributes(:access => 'public', :owner => 'you')
|
101
|
+
@resource.access.should eql('public')
|
102
|
+
@resource.owner.should eql('you')
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should convert all keys to symbols" do
|
106
|
+
@resource.write_attributes('access' => 'public')
|
107
|
+
@resource.access.should eql('public')
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should not call save" do
|
111
|
+
@resource.should_not_receive(:save)
|
112
|
+
@resource.write_attributes 'access' => 'public'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should create getters for each attribute" do
|
117
|
+
lambda { @resource.warp }.should_not raise_error(NoMethodError)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should create setters for each attribute" do
|
121
|
+
lambda { @resource.warp = 5 }.should_not raise_error(NoMethodError)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
Dir.chdir old_dir
|
@@ -0,0 +1,35 @@
|
|
1
|
+
old_dir = Dir.getwd
|
2
|
+
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rscribd'
|
4
|
+
|
5
|
+
describe Symbol do
|
6
|
+
it "should define a to_proc method" do
|
7
|
+
Symbol.instance_methods.map { |meth| meth.to_sym }.should include(:to_proc)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "... that returns a Proc" do
|
11
|
+
:to_s.to_proc.should be_kind_of(Proc)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Hash do
|
16
|
+
it "should define a stringify_keys method" do
|
17
|
+
Hash.instance_methods.map(&:to_sym).should include(:stringify_keys)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "... that converts hash keys into strings" do
|
21
|
+
{ :a => :b, 1 => 3 }.stringify_keys.should == { 'a' => :b, '1' => 3 }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe Array do
|
26
|
+
it "should define a to_hsh method" do
|
27
|
+
Array.instance_methods.map(&:to_sym).should include(:to_hsh)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "... that converts nested arrays into a hash" do
|
31
|
+
[ [ 1, 2], [3, 4] ].to_hsh.should == { 1 => 2, 3 => 4 }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Dir.chdir old_dir
|
data/spec/user_spec.rb
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
old_dir = Dir.getwd
|
2
|
+
Dir.chdir(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'rscribd'
|
4
|
+
|
5
|
+
describe Scribd::User do
|
6
|
+
describe "initialized from attributes" do
|
7
|
+
before :each do
|
8
|
+
@user = Scribd::User.new(:username => 'sancho', :name => 'Sancho Sample')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should have its attributes set appropriately" do
|
12
|
+
@user.username.should eql('sancho')
|
13
|
+
@user.name.should eql('Sancho Sample')
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be unsaved" do
|
17
|
+
@user.should_not be_saved
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be uncreated" do
|
21
|
+
@user.should_not be_created
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "initialized from XML" do
|
26
|
+
before :each do
|
27
|
+
@user = Scribd::User.new(:xml => REXML::Document.new("<rsp stat='ok'><username>sancho</username><name>Sancho Sample</name></rsp>").root)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have its attributes set appropriately" do
|
31
|
+
@user.username.should eql('sancho')
|
32
|
+
@user.name.should eql('Sancho Sample')
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should be saved" do
|
36
|
+
@user.should be_saved
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should be created" do
|
40
|
+
@user.should be_created
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "existing user" do
|
45
|
+
before :each do
|
46
|
+
@user = Scribd::User.new(:xml => REXML::Document.new("<rsp stat='ok'><user_id type='integer'>225</user_id><username>sancho</username><name>Sancho Sample</name><session_key>some key</session_key></rsp>").root)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should return the user_id for the id method" do
|
50
|
+
@user.id.should eql(225)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should return the username for the to_s method" do
|
54
|
+
@user.to_s.should eql(@user.username)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should not be saveable" do
|
58
|
+
lambda { @user.save }.should raise_error(NotImplementedError)
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "documents method" do
|
62
|
+
before :each do
|
63
|
+
@xml = REXML::Document.new("<rsp stat='ok'><resultset><result><doc_id type='integer'>123</doc_id></result><result><doc_id type='integer'>234</doc_id></result></resultset></rsp>")
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should docs.getList with the session key" do
|
67
|
+
Scribd::API.instance.should_receive(:send_request).once.with('docs.getList', { :session_key => 'some key' }).and_return(@xml)
|
68
|
+
@user.documents
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should docs.getList with an offset" do
|
72
|
+
Scribd::API.instance.should_receive(:send_request).once.with('docs.getList', { :session_key => 'some key', :offset => 1 }).and_return(@xml)
|
73
|
+
@user.documents(:offset => 1)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should docs.getList with a limit" do
|
77
|
+
Scribd::API.instance.should_receive(:send_request).once.with('docs.getList', { :session_key => 'some key', :limit => 1 }).and_return(@xml)
|
78
|
+
@user.documents(:limit => 1)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return an array of received documents with the owner of each set to this user" do
|
82
|
+
Scribd::API.instance.stub!(:send_request).and_return(@xml)
|
83
|
+
docs = @user.documents
|
84
|
+
docs.should be_kind_of(Array)
|
85
|
+
docs.should have(2).items
|
86
|
+
docs.first.id.should eql(123)
|
87
|
+
docs.last.id.should eql(234)
|
88
|
+
docs.each do |doc|
|
89
|
+
doc.should be_kind_of(Scribd::Document)
|
90
|
+
doc.owner.should eql(@user)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "find_documents method" do
|
96
|
+
it "should call Document.find with an appropriate scope and session key" do
|
97
|
+
Scribd::Document.should_receive(:find).once.with(hash_including(:scope => 'user', :session_key => 'some key'))
|
98
|
+
@user.find_documents(:query => 'hi!')
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should pass all options to the Document.find method" do
|
102
|
+
Scribd::Document.should_receive(:find).once.with(hash_including(:foo => 'bar'))
|
103
|
+
@user.find_documents(:foo => 'bar')
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "find_document method" do
|
108
|
+
before :each do
|
109
|
+
@xml = REXML::Document.new("<rsp stat='ok'><doc_id type='integer'>123</doc_id></rsp>")
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should call docs.getSettings with the appropriate doc_id and session key" do
|
113
|
+
Scribd::API.instance.should_receive(:send_request).once.with('docs.getSettings', { :doc_id => 123, :session_key => 'some key' }).and_return(@xml)
|
114
|
+
@user.find_document(123)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should return an appropriate Document with the owner set" do
|
118
|
+
Scribd::API.instance.stub!(:send_request).and_return(@xml)
|
119
|
+
doc = @user.find_document(123)
|
120
|
+
doc.should be_kind_of(Scribd::Document)
|
121
|
+
doc.id.should eql(123)
|
122
|
+
doc.owner.should eql(@user)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should have an upload method that calls Document.create" do
|
127
|
+
Scribd::Document.should_receive(:create).once.with(:file => 'test', :owner => @user)
|
128
|
+
@user.upload(:file => 'test')
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "new user" do
|
133
|
+
before :each do
|
134
|
+
@user = Scribd::User.new(:login => 'sancho', :name => 'Sancho Sample')
|
135
|
+
@xml = REXML::Document.new("<rsp stat='ok'><newattr>newval</newattr></rsp>")
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "save method" do
|
139
|
+
it "should call user.signup with the user's attributes" do
|
140
|
+
Scribd::API.instance.should_receive(:send_request).once.with('user.signup', { :login => 'sancho', :name => 'Sancho Sample' }).and_return(@xml)
|
141
|
+
@user.save
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should set any new attributes in the response" do
|
145
|
+
Scribd::API.instance.stub!(:send_request).and_return(@xml)
|
146
|
+
@user.save
|
147
|
+
@user.newattr.should eql('newval')
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should set the API user to this user" do
|
151
|
+
Scribd::API.instance.stub!(:send_request).and_return(@xml)
|
152
|
+
@user.save
|
153
|
+
Scribd::API.instance.user.should eql(@user)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should return nil for find_documents" do
|
158
|
+
@user.find_documents(:query => 'test').should be_nil
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should return nil for find_document" do
|
162
|
+
@user.find_document(123).should be_nil
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should not allow calls to upload" do
|
166
|
+
lambda { @user.upload(:file => 'test') }.should raise_error(Scribd::NotReadyError)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe ".username" do
|
171
|
+
before :each do
|
172
|
+
@xml = REXML::Document.new("<rsp stat='ok'><username>sancho</username><name>Sancho Sample</name></rsp>")
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should call user.username with the username and password" do
|
176
|
+
Scribd::API.instance.should_receive(:send_request).once.with('user.login', { :username => 'user', :password => 'pass' }).and_return(@xml)
|
177
|
+
Scribd::User.login 'user', 'pass'
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should create a new user from the resulting XML" do
|
181
|
+
Scribd::API.instance.stub!(:send_request).and_return(@xml)
|
182
|
+
user = Scribd::User.login('user', 'pass')
|
183
|
+
user.username.should eql('sancho')
|
184
|
+
user.name.should eql('Sancho Sample')
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should set the API user" do
|
188
|
+
Scribd::API.instance.stub!(:send_request).and_return(@xml)
|
189
|
+
user = Scribd::User.login('user', 'pass')
|
190
|
+
Scribd::API.instance.user.should eql(user)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
Dir.chdir old_dir
|
metadata
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rscribd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Tim Morgan
|
8
|
+
- Jared Friedman
|
9
|
+
- Mike Watts
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
13
|
|
12
|
-
date:
|
14
|
+
date: 2010-02-02 00:00:00 -08:00
|
13
15
|
default_executable:
|
14
16
|
dependencies:
|
15
17
|
- !ruby/object:Gem::Dependency
|
@@ -18,58 +20,58 @@ dependencies:
|
|
18
20
|
version_requirement:
|
19
21
|
version_requirements: !ruby/object:Gem::Requirement
|
20
22
|
requirements:
|
21
|
-
- - "
|
23
|
+
- - ">="
|
22
24
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0
|
25
|
+
version: "0"
|
24
26
|
version:
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
28
|
+
name: rspec
|
27
29
|
type: :development
|
28
30
|
version_requirement:
|
29
31
|
version_requirements: !ruby/object:Gem::Requirement
|
30
32
|
requirements:
|
31
33
|
- - ">="
|
32
34
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
35
|
+
version: "0"
|
34
36
|
version:
|
35
|
-
description:
|
36
|
-
This gem provides a simple and powerful library for the Scribd API, allowing you
|
37
|
-
to write Ruby applications or Ruby on Rails websites that upload, convert,
|
38
|
-
display, search, and control documents in many formats. For more information on
|
39
|
-
the Scribd platform, visit http://www.scribd.com/publisher
|
37
|
+
description: The official Ruby gem for the Scribd API. Scribd is a document-sharing website allowing people to upload and view documents online.
|
40
38
|
email: api@scribd.com
|
41
39
|
executables: []
|
42
40
|
|
43
41
|
extensions: []
|
44
42
|
|
45
43
|
extra_rdoc_files:
|
46
|
-
- History.txt
|
47
|
-
- Manifest.txt
|
48
44
|
- README.txt
|
49
|
-
- sample/test.txt
|
50
45
|
files:
|
46
|
+
- .gitignore
|
51
47
|
- History.txt
|
52
48
|
- Manifest.txt
|
53
49
|
- README.txt
|
54
50
|
- Rakefile
|
51
|
+
- VERSION
|
52
|
+
- lib/rscribd.rb
|
55
53
|
- lib/scribdapi.rb
|
56
54
|
- lib/scribddoc.rb
|
57
55
|
- lib/scribderrors.rb
|
58
56
|
- lib/scribdmultiparthack.rb
|
59
57
|
- lib/scribdresource.rb
|
60
|
-
- lib/rscribd.rb
|
61
58
|
- lib/scribduser.rb
|
62
59
|
- sample/01_upload.rb
|
63
60
|
- sample/02_user.rb
|
64
61
|
- sample/test.txt
|
62
|
+
- spec/api_spec.rb
|
63
|
+
- spec/document_spec.rb
|
64
|
+
- spec/error_spec.rb
|
65
|
+
- spec/resource_spec.rb
|
66
|
+
- spec/rscribd_spec.rb
|
67
|
+
- spec/user_spec.rb
|
65
68
|
has_rdoc: true
|
66
|
-
homepage:
|
69
|
+
homepage: http://www.scribd.com/developers
|
67
70
|
licenses: []
|
68
71
|
|
69
72
|
post_install_message:
|
70
73
|
rdoc_options:
|
71
|
-
- --
|
72
|
-
- README.txt
|
74
|
+
- --charset=UTF-8
|
73
75
|
require_paths:
|
74
76
|
- lib
|
75
77
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -86,10 +88,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
88
|
version:
|
87
89
|
requirements: []
|
88
90
|
|
89
|
-
rubyforge_project:
|
90
|
-
rubygems_version: 1.3.
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.3.5
|
91
93
|
signing_key:
|
92
94
|
specification_version: 3
|
93
95
|
summary: Ruby client library for the Scribd API
|
94
|
-
test_files:
|
95
|
-
|
96
|
+
test_files:
|
97
|
+
- spec/api_spec.rb
|
98
|
+
- spec/document_spec.rb
|
99
|
+
- spec/error_spec.rb
|
100
|
+
- spec/resource_spec.rb
|
101
|
+
- spec/rscribd_spec.rb
|
102
|
+
- spec/user_spec.rb
|