gdata 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,11 +18,6 @@ module GData
18
18
 
19
19
  # Very simple class to hold everything about an HTTP request.
20
20
  class Request
21
-
22
- DEFAULT_OPTIONS = {
23
- :body => '',
24
- :method => :get,
25
- :headers => {} }
26
21
 
27
22
  # The URL of the request.
28
23
  attr_accessor :url
@@ -36,10 +31,12 @@ module GData
36
31
  # Only the URL itself is required, everything else is optional.
37
32
  def initialize(url, options = {})
38
33
  @url = url
39
- options = DEFAULT_OPTIONS.merge(options)
40
34
  options.each do |key, value|
41
35
  self.send("#{key}=", value)
42
36
  end
37
+
38
+ @method ||= :get
39
+ @headers ||= {}
43
40
  end
44
41
 
45
42
  # Returns whether or not a request is chunked.
@@ -62,7 +59,8 @@ module GData
62
59
 
63
60
  # Calculates and sets the length of the body.
64
61
  def calculate_length!
65
- if not @headers['Content-Length'] and not chunked?
62
+ if not @headers['Content-Length'] and not chunked? \
63
+ and method != :get and method != :delete
66
64
  if @body
67
65
  @headers['Content-Length'] = @body.length
68
66
  else
@@ -24,6 +24,19 @@ module GData
24
24
  attr_accessor :body
25
25
  # The headers of the HTTP response.
26
26
  attr_accessor :headers
27
+
28
+ # Converts the response body into a REXML::Document
29
+ def to_xml
30
+ if @body
31
+ begin
32
+ return REXML::Document.new(@body).root
33
+ rescue
34
+ raise RuntimeError, "Response body not XML."
35
+ end
36
+ else
37
+ return nil
38
+ end
39
+ end
27
40
  end
28
41
  end
29
42
  end
@@ -34,5 +34,18 @@ class TC_GData_Auth_ClientLogin < Test::Unit::TestCase
34
34
  end
35
35
  end
36
36
 
37
+ def test_all_clients
38
+ source = 'GDataUnitTest'
39
+ GData::Client.constants.each do |const_name|
40
+ const = GData::Client.const_get(const_name)
41
+ if const.superclass == GData::Client::Base
42
+ instance = const.new
43
+ assert_nothing_raised do
44
+ instance.clientlogin(self.get_username(), self.get_password(), source)
45
+ end
46
+ end
47
+ end
48
+ end
49
+
37
50
 
38
51
  end
@@ -21,7 +21,15 @@ class TC_GData_Client_Base < Test::Unit::TestCase
21
21
 
22
22
  def test_simple_gdata_get
23
23
  service = GData::Client::Base.new
24
- feed = service.get('http://gdata.youtube.com/feeds/base/videos?max-results=1')
24
+ feed = service.get('http://gdata.youtube.com/feeds/base/videos?max-results=1').to_xml
25
+ assert_not_nil(feed, 'feed can not be nil')
26
+ end
27
+
28
+ def test_clientlogin_with_service
29
+ service = GData::Client::Base.new
30
+ service.clientlogin(self.get_username(), self.get_password(), nil, nil,
31
+ 'youtube')
32
+ feed = service.get('http://gdata.youtube.com/feeds/api/users/default/uploads?max-results=1').to_xml
25
33
  assert_not_nil(feed, 'feed can not be nil')
26
34
  end
27
35
 
@@ -0,0 +1,65 @@
1
+ # Copyright (C) 2008 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ $:.unshift(File.dirname(__FILE__))
16
+ require 'test_helper'
17
+
18
+ class TC_GData_Client_Photos < Test::Unit::TestCase
19
+
20
+ include TestHelper
21
+
22
+ def setup
23
+ @gp = GData::Client::Photos.new
24
+ @gp.source = 'Ruby Client Unit Tests'
25
+ @gp.clientlogin(self.get_username(), self.get_password())
26
+ end
27
+
28
+ def test_authenticated_dropbox_feed
29
+ feed = @gp.get('http://picasaweb.google.com/data/feed/api/user/default/albumid/default?max-results=1').to_xml
30
+ self.assert_not_nil(feed, 'feed can not be nil')
31
+ end
32
+
33
+ def test_photo_upload
34
+ test_image = File.join(File.dirname(__FILE__), 'testimage.jpg')
35
+ mime_type = 'image/jpeg'
36
+
37
+ response = @gp.post_file('http://picasaweb.google.com/data/feed/api/user/default/albumid/default',
38
+ test_image, mime_type).to_xml
39
+
40
+ edit_uri = response.elements["link[@rel='edit']"].attributes['href']
41
+
42
+ @gp.delete(edit_uri)
43
+ end
44
+
45
+ def test_photo_upload_with_metadata
46
+ test_image = File.join(File.dirname(__FILE__), 'testimage.jpg')
47
+ mime_type = 'image/jpeg'
48
+
49
+ entry = <<-EOF
50
+ <entry xmlns='http://www.w3.org/2005/Atom'>
51
+ <title>ruby-client-testing.jpg</title>
52
+ <summary>Test case for Ruby Client Library.</summary>
53
+ <category scheme="http://schemas.google.com/g/2005#kind"
54
+ term="http://schemas.google.com/photos/2007#photo"/>
55
+ </entry>
56
+ EOF
57
+
58
+ response = @gp.post_file('http://picasaweb.google.com/data/feed/api/user/default/albumid/default',
59
+ test_image, mime_type, entry).to_xml
60
+
61
+ edit_uri = response.elements["link[@rel='edit']"].attributes['href']
62
+
63
+ @gp.delete(edit_uri)
64
+ end
65
+ end
@@ -21,6 +21,7 @@ class TC_GData_Client_YouTube < Test::Unit::TestCase
21
21
 
22
22
  def setup
23
23
  @yt = GData::Client::YouTube.new
24
+ self.assert(@yt.headers.empty?, 'headers should be empty.')
24
25
  @yt.clientlogin(self.get_username(), self.get_password())
25
26
  @yt.client_id = 'ytapi-Google-GDataUnitTests-lcqr3u89-1'
26
27
  @yt.developer_key = 'AI39si4vwXwDLR5MrtsdR1ULUD8__EnEccla-0bnqV40KpeFDIyCwEv0VJqZKHUsO3MvVM_bXHp3cAr55HmMYMhqfxzLMUgDXA'
@@ -29,7 +30,7 @@ class TC_GData_Client_YouTube < Test::Unit::TestCase
29
30
  def test_authenticated_uploads_feed
30
31
 
31
32
 
32
- feed = @yt.get('http://gdata.youtube.com/feeds/api/users/default/uploads?max-results=1')
33
+ feed = @yt.get('http://gdata.youtube.com/feeds/api/users/default/uploads?max-results=1').to_xml
33
34
  self.assert_not_nil(feed, 'feed can not be nil')
34
35
  end
35
36
 
@@ -43,7 +44,7 @@ class TC_GData_Client_YouTube < Test::Unit::TestCase
43
44
  </entry>
44
45
  EOF
45
46
 
46
- response = @yt.post('http://gdata.youtube.com/feeds/api/users/default/favorites', entry)
47
+ response = @yt.post('http://gdata.youtube.com/feeds/api/users/default/favorites', entry).to_xml
47
48
 
48
49
  edit_uri = response.elements["link[@rel='edit']"].attributes['href']
49
50
 
@@ -60,13 +61,13 @@ class TC_GData_Client_YouTube < Test::Unit::TestCase
60
61
  </entry>
61
62
  EOF
62
63
 
63
- response = @yt.post('http://gdata.youtube.com/feeds/api/users/default/playlists', entry)
64
+ response = @yt.post('http://gdata.youtube.com/feeds/api/users/default/playlists', entry).to_xml
64
65
 
65
66
  edit_uri = response.elements["link[@rel='edit']"].attributes['href']
66
67
 
67
68
  response.elements["summary"].text = "Updated description"
68
69
 
69
- response = @yt.put(edit_uri, response.to_s)
70
+ response = @yt.put(edit_uri, response.to_s).to_xml
70
71
 
71
72
  self.assert_equal("Updated description", response.elements["summary"].text)
72
73
 
@@ -0,0 +1,46 @@
1
+ # Copyright (C) 2008 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ $:.unshift(File.dirname(__FILE__))
16
+ require 'test_helper'
17
+
18
+ class TC_GData_HTTP_MimeBody < Test::Unit::TestCase
19
+
20
+ include TestHelper
21
+
22
+ def test_mime_body_string
23
+ stream = GData::HTTP::MimeBodyString.new('testing 1 2 3')
24
+
25
+ self.assert_equal('t', stream.read(1))
26
+ self.assert_equal('esting', stream.read(6))
27
+ self.assert_equal(' 1 2 ', stream.read(5))
28
+ self.assert_equal('3', stream.read(50))
29
+ self.assert_equal(false, stream.read(10))
30
+ end
31
+
32
+ def test_mime_body_string_large_read
33
+ stream = GData::HTTP::MimeBodyString.new('test string')
34
+
35
+ self.assert_equal('test string', stream.read(1024))
36
+ self.assert_equal(false, stream.read(1024))
37
+ end
38
+
39
+ def test_mime_body_string_unicode
40
+ stream = GData::HTTP::MimeBodyString.new('λ')
41
+ self.assert(stream.read(1), 'Greek character should be two bytes')
42
+ self.assert(stream.read(1), 'Greek character should be two full bytes')
43
+ self.assert_equal(false, stream.read(1))
44
+ end
45
+
46
+ end
@@ -16,7 +16,7 @@ require 'yaml'
16
16
  require 'test/unit'
17
17
  require 'test/unit/ui/console/testrunner'
18
18
 
19
- $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
19
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
20
20
  require 'gdata'
21
21
 
22
22
  module TestHelper
Binary file
@@ -21,6 +21,7 @@ require 'ts_gdata_auth'
21
21
  class TS_GData
22
22
  def self.suite
23
23
  suite = Test::Unit::TestSuite.new("GData Test Suite")
24
+ suite << UnicodeStringTest.suite
24
25
  suite << TS_GData_HTTP.suite
25
26
  suite << TS_GData_Client.suite
26
27
  suite << TS_GData_Auth.suite
@@ -28,4 +29,14 @@ class TS_GData
28
29
  end
29
30
  end
30
31
 
32
+ class UnicodeStringTest < Test::Unit::TestCase
33
+ def test_jlength
34
+ s = "Καλημέρα κόσμε!"
35
+ assert_equal(15, s.jlength) # Note the 'j'
36
+ assert_not_equal(15, s.length) # Normal, non unicode length
37
+ assert_equal(28, s.length) # Greek letters happen to take two-bytes
38
+ end
39
+ end
40
+
41
+
31
42
  Test::Unit::UI::Console::TestRunner.run(TS_GData)
@@ -13,12 +13,14 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require 'tc_gdata_client_base'
16
+ require 'tc_gdata_client_photos'
16
17
  require 'tc_gdata_client_youtube'
17
18
 
18
19
  class TS_GData_Client
19
20
  def self.suite
20
21
  suite = Test::Unit::TestSuite.new
21
22
  suite << TC_GData_Client_Base.suite
23
+ suite << TC_GData_Client_Photos.suite
22
24
  suite << TC_GData_Client_YouTube.suite
23
25
  return suite
24
26
  end
@@ -13,11 +13,13 @@
13
13
  # limitations under the License.
14
14
 
15
15
  require 'tc_gdata_http_request'
16
+ require 'tc_gdata_http_mime_body'
16
17
 
17
18
  class TS_GData_HTTP
18
19
  def self.suite
19
20
  suite = Test::Unit::TestSuite.new
20
21
  suite << TC_GData_HTTP_Request.suite
22
+ suite << TC_GData_HTTP_MimeBody.suite
21
23
  return suite
22
24
  end
23
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gdata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Fisher
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-15 00:00:00 -08:00
12
+ date: 2009-02-20 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -29,10 +29,25 @@ files:
29
29
  - lib/gdata/auth/authsub.rb
30
30
  - lib/gdata/auth/clientlogin.rb
31
31
  - lib/gdata/auth.rb
32
- - lib/gdata/client/gdata.rb
32
+ - lib/gdata/client/apps.rb
33
+ - lib/gdata/client/base.rb
34
+ - lib/gdata/client/blogger.rb
35
+ - lib/gdata/client/booksearch.rb
36
+ - lib/gdata/client/calendar.rb
37
+ - lib/gdata/client/contacts.rb
38
+ - lib/gdata/client/doclist.rb
39
+ - lib/gdata/client/finance.rb
40
+ - lib/gdata/client/gbase.rb
41
+ - lib/gdata/client/gmail.rb
42
+ - lib/gdata/client/health.rb
43
+ - lib/gdata/client/notebook.rb
44
+ - lib/gdata/client/photos.rb
45
+ - lib/gdata/client/spreadsheets.rb
46
+ - lib/gdata/client/webmaster_tools.rb
33
47
  - lib/gdata/client/youtube.rb
34
48
  - lib/gdata/client.rb
35
49
  - lib/gdata/http/default_service.rb
50
+ - lib/gdata/http/mime_body.rb
36
51
  - lib/gdata/http/request.rb
37
52
  - lib/gdata/http/response.rb
38
53
  - lib/gdata/http.rb
@@ -40,10 +55,13 @@ files:
40
55
  - test/tc_gdata_auth_authsub.rb
41
56
  - test/tc_gdata_auth_clientlogin.rb
42
57
  - test/tc_gdata_client_base.rb
58
+ - test/tc_gdata_client_photos.rb
43
59
  - test/tc_gdata_client_youtube.rb
60
+ - test/tc_gdata_http_mime_body.rb
44
61
  - test/tc_gdata_http_request.rb
45
62
  - test/test_config.yml.example
46
63
  - test/test_helper.rb
64
+ - test/testimage.jpg
47
65
  - test/ts_gdata.rb
48
66
  - test/ts_gdata_auth.rb
49
67
  - test/ts_gdata_client.rb