dropio 0.9.1 → 1.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.
@@ -1,24 +1,150 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper.rb'
2
2
 
3
3
  describe Drop do
4
+
5
+ before(:each) do
6
+ @client = Dropio::Client.new
7
+ @api = stub(Dropio::Api)
8
+ @client.service = @api
9
+
10
+ Dropio::Resource.stub!(:client).and_return(@client)
11
+ Dropio::Resource.client.should == @client
12
+ Dropio::Resource.client.service.should == @api
13
+
14
+ @mydrop = Dropio::Drop.new(:name => "test_drop",:admin_token => "admin_token")
15
+ end
16
+
4
17
  it "should have the attributes of a Drop" do
5
- Drop.new.should respond_to(:name, :email, :voicemail, :conference, :fax,
6
- :rss, :guest_token, :admin_token,
7
- :expiration_length, :guests_can_comment, :guests_can_comment,
8
- :guests_can_delete, :max_bytes,
9
- :current_bytes, :hidden_upload_url,
10
- :upload_url, :password, :admin_password, :premium_code)
18
+ Drop.new.should respond_to(:name, :email, :voicemail, :conference, :fax, :rss, :guest_token, :description,
19
+ :admin_token, :expires_at, :expiration_length, :guests_can_comment, :guests_can_add, :guests_can_delete,
20
+ :max_bytes, :current_bytes, :hidden_upload_url, :asset_count, :chat_password, :default_view,
21
+ :password, :admin_password, :premium_code, :admin_email, :email_key)
11
22
  end
12
23
 
13
24
  it "should find drops by name" do
14
- mydrop = stub(Drop)
15
- Client.instance.should_receive(:find_drop).with("mydrop", nil).and_return(mydrop)
16
- Drop.find("mydrop").should == mydrop
25
+ @client.should_receive(:handle).with(:drop,{}).and_return(@mydrop)
26
+ @api.should_receive(:drop).with("mydrop", nil).and_return({})
27
+ Drop.find("mydrop").should == @mydrop
17
28
  end
18
29
 
19
30
  it "should find drops by name and token" do
20
- mydrop = stub(Drop)
21
- Client.instance.should_receive(:find_drop).with("mydrop", "d85a6").and_return(mydrop)
22
- Drop.find("mydrop", "d85a6").should == mydrop
31
+ @client.should_receive(:handle).with(:drop,{}).and_return(@mydrop)
32
+ @api.should_receive(:drop).with("mydrop", "d85a6").and_return({})
33
+ Drop.find("mydrop", "d85a6").should == @mydrop
34
+ end
35
+
36
+ it "should have a default token and it should default to the admin" do
37
+ @mydrop.admin_token = "tester"
38
+ @mydrop.default_token.should == "tester"
39
+ end
40
+
41
+ it "should find a set of related assets" do
42
+ @asset = stub(Asset)
43
+ @asset.should_receive(:drop=).once
44
+ @client.should_receive(:handle).with(:assets,{}).and_return([@asset])
45
+ @api.stub!(:assets).with(@mydrop.name,1,:oldest,@mydrop.default_token).and_return({})
46
+ @mydrop.assets.should == [@asset]
47
+ end
48
+
49
+ it "should be able to create a new Drop" do
50
+ @client.should_receive(:handle).with(:drop,{}).and_return(@mydrop)
51
+ @api.should_receive(:create_drop).with({:name => "tester"}).and_return({})
52
+ Drop.create({:name => "tester"}).should == @mydrop
53
+ end
54
+
55
+ it "should fetch the upload embed code" do
56
+ @client.should_receive(:handle).with(:response,{}).and_return({"result" => "Success"})
57
+ @api.should_receive(:drop_upload_code).with(@mydrop.name,@mydrop.default_token).and_return({})
58
+ @mydrop.upload_code
59
+ end
60
+
61
+ it "should be able to empty itself" do
62
+ @client.should_receive(:handle).with(:response,{}).and_return({})
63
+ @api.should_receive(:empty_drop).with(@mydrop.name,@mydrop.admin_token).and_return({})
64
+ @mydrop.empty
65
+ end
66
+
67
+ it "should be able to promote a nick" do
68
+ @client.should_receive(:handle).with(:response,{}).and_return({"result" => "Success"})
69
+ @api.should_receive(:promote_nick).with(@mydrop.name,"jake",@mydrop.admin_token).and_return({})
70
+ @mydrop.promote("jake")
71
+ end
72
+
73
+ it "should save itself" do
74
+ @client.should_receive(:handle).with(:drop,{}).and_return(@mydrop)
75
+ expected_hash = {:password=>"test_password", :expiration_length=>nil, :admin_password=>nil, :guests_can_comment=>nil,
76
+ :premium_code=>nil, :guests_can_add=>nil, :chat_password=>nil, :guests_can_delete=>nil,
77
+ :admin_email=>nil, :default_view=>nil, :email_key=>nil, :description=>nil}
78
+ @api.should_receive(:update_drop).with(@mydrop.name,@mydrop.admin_token,expected_hash).and_return({})
79
+ @mydrop.password = "test_password"
80
+ @mydrop.save
81
+ end
82
+
83
+ it "should destroy itself" do
84
+ @client.should_receive(:handle).with(:response,{}).and_return({"result" => "Success"})
85
+ @api.should_receive(:delete_drop).with(@mydrop.name,@mydrop.admin_token).and_return({})
86
+ @mydrop.destroy!
87
+ end
88
+
89
+ it "should add files from a url" do
90
+ @asset = stub(Asset)
91
+ @asset.should_receive(:drop=).once
92
+ @client.should_receive(:handle).with(:asset,{}).and_return(@asset)
93
+ @api.should_receive(:add_file_from_url).with(@mydrop.name,"http://myurl.com/myfile.txt",@mydrop.default_token).and_return({})
94
+ @mydrop.add_file_from_url("http://myurl.com/myfile.txt").should == @asset
95
+ end
96
+
97
+ it "should add files from a path" do
98
+ @asset = stub(Asset)
99
+ @asset.should_receive(:drop=).once
100
+ @client.should_receive(:handle).with(:asset,{}).and_return(@asset)
101
+ @api.should_receive(:add_file).with(@mydrop.name,"/mypath/myfile.txt",@mydrop.default_token, nil).and_return({})
102
+ @mydrop.add_file("/mypath/myfile.txt").should == @asset
103
+ end
104
+
105
+ it "should create notes from title and contents" do
106
+ @asset = stub(Asset)
107
+ @asset.should_receive(:drop=).once
108
+ @client.should_receive(:handle).with(:asset,{}).and_return(@asset)
109
+ @api.should_receive(:create_note).with(@mydrop.name,"contents", "title",@mydrop.default_token).and_return({})
110
+ @mydrop.create_note("contents","title").should == @asset
111
+ end
112
+
113
+ it "should create links from a url, title, and description" do
114
+ @asset = stub(Asset)
115
+ @asset.should_receive(:drop=).once
116
+ @client.should_receive(:handle).with(:asset,{}).and_return(@asset)
117
+ @api.should_receive(:create_link).with(@mydrop.name,"http://drop.io","drop.io","The best!",@mydrop.default_token).and_return({})
118
+ @mydrop.create_link("http://drop.io","drop.io","The best!").should == @asset
23
119
  end
120
+
121
+ it "should be able to create a twitter subscription" do
122
+ @sub = stub(Subscription)
123
+ @sub.should_receive(:drop=).once
124
+ @client.should_receive(:handle).with(:subscription,{}).and_return(@sub)
125
+ @api.should_receive(:create_twitter_subscription).with(@mydrop.name,"mytwitter","pass",nil,{},@mydrop.default_token).and_return({})
126
+ @mydrop.create_twitter_subscription("mytwitter","pass")
127
+ end
128
+
129
+ it "should be able to create email subscriptions" do
130
+ @sub = stub(Subscription)
131
+ @sub.should_receive(:drop=).once
132
+ @client.should_receive(:handle).with(:subscription,{}).and_return(@sub)
133
+ @api.should_receive(:create_email_subscription).with(@mydrop.name,"jake@dropio.com","My welcome message",nil,nil,nil,{},@mydrop.default_token).and_return({})
134
+ @mydrop.create_email_subscription("jake@dropio.com","My welcome message")
135
+ end
136
+
137
+ it "should be able to get a list of subscriptions back" do
138
+ @sub = stub(Subscription)
139
+ @sub.should_receive(:drop=).once
140
+ @client.should_receive(:handle).with(:subscriptions,{}).and_return([@sub])
141
+ @api.stub!(:subscriptions).with(@mydrop.name, @mydrop.admin_token).and_return({})
142
+ @mydrop.subscriptions.should == [@sub]
143
+ end
144
+
145
+ it "should generate a signed url" do
146
+ @api.should_receive(:generate_drop_url).with(@mydrop.name,@mydrop.default_token)
147
+ @mydrop.generate_url
148
+ end
149
+
24
150
  end
File without changes
data/spec/dropio_spec.rb CHANGED
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe Dropio do
4
4
  it "should store the API key" do
5
- Dropio.api_key = "83a05513ddddb73e75c9d8146c115f7fd8e90de6"
6
- Dropio.api_key.should == "83a05513ddddb73e75c9d8146c115f7fd8e90de6"
5
+ Dropio::Config.api_key = "83a05513ddddb73e75c9d8146c115f7fd8e90de6"
6
+ Dropio::Config.api_key.should == "83a05513ddddb73e75c9d8146c115f7fd8e90de6"
7
7
  end
8
8
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'spec'
3
+ require 'fakeweb'
4
+
5
+ FakeWeb.allow_net_connect = false
3
6
 
4
7
  lib_dir = File.dirname(__FILE__) + '/../lib'
5
8
  $:.unshift lib_dir unless $:.include?(lib_dir)
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dropio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: "1.0"
5
5
  platform: ruby
6
6
  authors:
7
- - Jake Good, Peter Jaros
7
+ - Jake Good
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-11 00:00:00 -05:00
12
+ date: 2009-09-09 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -23,7 +23,17 @@ dependencies:
23
23
  version: "0"
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: json
26
+ name: httparty
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: multipart-post
27
37
  type: :runtime
28
38
  version_requirement:
29
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,10 +52,9 @@ dependencies:
42
52
  - !ruby/object:Gem::Version
43
53
  version: "0"
44
54
  version:
45
- description: A Ruby client library for the Drop.io API (http://api.drop.io)
55
+ description: A Ruby client library for the Drop.io API (http://api.drop.io). Please email jake@dropio.com with any questions.
46
56
  email:
47
57
  - jake@dropio.com
48
- - peeja@dropio.com
49
58
  executables: []
50
59
 
51
60
  extensions: []
@@ -56,30 +65,33 @@ extra_rdoc_files:
56
65
  - Todo.rdoc
57
66
  files:
58
67
  - History.rdoc
68
+ - lib/dropio/api.rb
59
69
  - lib/dropio/asset.rb
60
- - lib/dropio/client/mapper.rb
61
- - lib/dropio/client/multipart_post.rb
62
70
  - lib/dropio/client.rb
63
71
  - lib/dropio/comment.rb
64
72
  - lib/dropio/drop.rb
65
73
  - lib/dropio/resource.rb
74
+ - lib/dropio/subscription.rb
66
75
  - lib/dropio.rb
67
76
  - LICENSE.txt
68
77
  - Manifest
69
78
  - Rakefile
70
79
  - Readme.rdoc
80
+ - spec/dropio/api_spec.rb
71
81
  - spec/dropio/asset_spec.rb
72
- - spec/dropio/client/mapper_spec.rb
73
82
  - spec/dropio/client_spec.rb
74
83
  - spec/dropio/comment_spec.rb
75
84
  - spec/dropio/drop_spec.rb
85
+ - spec/dropio/subscription_spec.rb
76
86
  - spec/dropio_spec.rb
77
87
  - spec/spec.opts
78
88
  - spec/spec_helper.rb
79
89
  - Todo.rdoc
80
90
  - dropio.gemspec
81
91
  has_rdoc: true
82
- homepage: http://github.com/whoisjake/dropio_api_ruby
92
+ homepage: http://github.com/dropio/dropio
93
+ licenses: []
94
+
83
95
  post_install_message:
84
96
  rdoc_options:
85
97
  - --line-numbers
@@ -105,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
117
  requirements: []
106
118
 
107
119
  rubyforge_project: dropio
108
- rubygems_version: 1.3.0
120
+ rubygems_version: 1.3.5
109
121
  signing_key:
110
122
  specification_version: 2
111
123
  summary: A Ruby client library for the Drop.io API (http://api.drop.io)
@@ -1,47 +0,0 @@
1
- class Dropio::Client::Mapper
2
-
3
- def self.map_drops(response_body)
4
- return parse_and_map(Dropio::Drop, response_body)
5
- end
6
-
7
- def self.map_assets(drop, response_body)
8
- assets = parse_and_map(Dropio::Asset, response_body)
9
-
10
- assets.drop = drop if assets.is_a?(Dropio::Asset)
11
- assets.each{ |a| a.drop = drop } if assets.is_a?(Array)
12
-
13
- return assets
14
- end
15
-
16
- def self.map_comments(asset, response_body)
17
- comments = parse_and_map(Dropio::Comment, response_body)
18
-
19
- comments.asset = asset if comments.is_a?(Dropio::Comment)
20
- comments.each{ |c| c.asset = asset } if comments.is_a?(Array)
21
-
22
- return comments
23
- end
24
-
25
- private
26
-
27
- def self.parse_and_map(model_class, response_body)
28
- h = JSON.parse(response_body)
29
-
30
- # single model
31
- return model_class.new(h) if h.is_a?(Hash)
32
-
33
- # multiple models
34
- models = []
35
-
36
- h.each do |model_hash|
37
- if model_hash.is_a?(Hash)
38
- model = model_class.new(model_hash)
39
- models << model
40
- end
41
- end if h.is_a?(Array)
42
-
43
- return models
44
-
45
- end
46
-
47
- end
@@ -1,35 +0,0 @@
1
- module Dropio::Client::MultipartPost
2
- def multipart_params=(param_hash={})
3
- boundary_token = [Array.new(8) {rand(256)}].join
4
- self.content_type = "multipart/form-data; boundary=#{boundary_token}"
5
- boundary_marker = "--#{boundary_token}\r\n"
6
- self.body = param_hash.map { |param_name, param_value|
7
- unless param_value.nil?
8
- boundary_marker + case param_value
9
- when String
10
- text_to_multipart(param_name, param_value.to_s)
11
- when File
12
- file_to_multipart(param_name, param_value)
13
- end
14
- end
15
- }.join('') + "--#{boundary_token}--\r\n"
16
- end
17
-
18
- protected
19
- def file_to_multipart(key,file)
20
- filename = File.basename(file.path)
21
- mime_types = MIME::Types.of(filename)
22
- mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
23
- part = "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{filename}\"\r\n"
24
- part += "Content-Transfer-Encoding: binary\r\n"
25
- part += "Content-Type: #{mime_type}\r\n\r\n#{file.read}\r\n"
26
- end
27
-
28
- def text_to_multipart(key,value)
29
- "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n#{value}\r\n"
30
- end
31
- end
32
-
33
- class Net::HTTP::Post
34
- include Dropio::Client::MultipartPost
35
- end
@@ -1,169 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- describe Client::Mapper do
4
- it "should parse Drops" do
5
- test_drop = Client::Mapper.map_drops <<-RESPONSE
6
- {"rss":"http:\/\/drop.io\/k4gpvnty6tw9ho8u3j4w\/b9b2c8f2b8e655679d2fb62b83f8efec4fb4c8af\/test_drop.rss",
7
- "voicemail":"646-495-9201 x 02302",
8
- "email":"test_drop@drop.io",
9
- "admin_token":"A97KQ4Vk7qQU90",
10
- "fax":"856-632-1999",
11
- "conference":" 218-486-3891 x 915088666",
12
- "name":"test_drop",
13
- "upload_url":"http:\/\/assets.drop.io\/upload",
14
- "guests_can_add":"true",
15
- "guests_can_comment":"true",
16
- "guests_can_delete":"false",
17
- "current_bytes":51488,
18
- "max_bytes":104857600.0,
19
- "expiration_length":"1_YEAR_FROM_LAST_VIEW",
20
- "delete_permission_type":"ALLOWED"}
21
- RESPONSE
22
-
23
- test_drop.should be_an_instance_of(Drop)
24
- test_drop.rss.should == "http:\/\/drop.io\/k4gpvnty6tw9ho8u3j4w\/b9b2c8f2b8e655679d2fb62b83f8efec4fb4c8af\/test_drop.rss"
25
- test_drop.voicemail.should == "646-495-9201 x 02302"
26
- test_drop.email.should == "test_drop@drop.io"
27
- test_drop.admin_token.should == "A97KQ4Vk7qQU90"
28
- test_drop.fax.should == "856-632-1999"
29
- test_drop.conference.should == " 218-486-3891 x 915088666"
30
- test_drop.name.should == "test_drop"
31
- test_drop.upload_url.should == "http:\/\/assets.drop.io\/upload"
32
- test_drop.guests_can_add.should == "true"
33
- test_drop.guests_can_comment.should == "true"
34
- test_drop.guests_can_delete.should == "false"
35
- test_drop.current_bytes.should == 51488
36
- test_drop.max_bytes.should == 104857600.0
37
- test_drop.expiration_length.should == "1_YEAR_FROM_LAST_VIEW"
38
- end
39
-
40
- it "should parse lists of Drops" do
41
- drops = Client::Mapper.map_drops <<-RESPONSE
42
- [{"rss":"http:\/\/drop.io\/k4gpvnty6tw9ho8u3j4w\/b9b2c8f2b8e655679d2fb62b83f8efec4fb4c8af\/test_drop.rss",
43
- "voicemail":"646-495-9201 x 02302",
44
- "email":"test_drop@drop.io",
45
- "admin_token":"A97KQ4Vk7qQU90",
46
- "fax":"856-632-1999",
47
- "conference":" 218-486-3891 x 915088666",
48
- "name":"test_drop",
49
- "upload_url":"http:\/\/assets.drop.io\/upload",
50
- "guests_can_add":"true",
51
- "guests_can_comment":"true",
52
- "guests_can_delete":"false",
53
- "current_bytes":51488,
54
- "max_bytes":104857600.0,
55
- "expiration_length":"1_YEAR_FROM_LAST_VIEW"},
56
- {"current_bytes":178857,
57
- "max_bytes":104857600.0,
58
- "voicemail":"646-495-9201 x 72025",
59
- "admin_token":"8a8vfzfvs2",
60
- "email":"0sdcmz7@drop.io",
61
- "upload_url":"http:\/\/assets.drop.io\/upload",
62
- "guests_can_add":"true",
63
- "guests_can_comment":"true",
64
- "guests_can_delete":"false",
65
- "conference":" 218-486-3891 x 680277944",
66
- "name":"0sdcmz7",
67
- "expiration_length":"1_YEAR_FROM_LAST_VIEW",
68
- "fax":"856-632-1999",
69
- "rss":"http:\/\/drop.io\/no9mbevuq3ttmfi6kqen\/3ec4f87d720032bae579cca40740e5e4b267e090\/0sdcmz7.rss"}]
70
- RESPONSE
71
-
72
- drops.should be_an_instance_of(Array)
73
- drops.each_should be_an_instance_of(Drop)
74
- drops[0].name.should == "test_drop"
75
- drops[1].name.should == "0sdcmz7"
76
- end
77
-
78
- it "should parse Assets" do
79
- parent_drop = stub(Drop)
80
- audio = Client::Mapper.map_assets parent_drop, <<-RESPONSE
81
- {"type":"audio",
82
- "thumbnail":"http:\/\/drop.io\/download\/public\/vhahbqybv2dx2vdh0z7c\/8c525895399b8eafcd1621b4bd001ee1797e6679\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/",
83
- "status":"converted",
84
- "filesize":178857,
85
- "name":"audio",
86
- "file":"http:\/\/drop.io\/download\/48f660ba\/b3c057eb4ce606f2f9f478379ea94ab703416ab3\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/audio.mp3\/audio.mp3",
87
- "duration":11,
88
- "track_title":"Unknown",
89
- "artist":"Unknown",
90
- "created_at":"2008/10/15 21:28:55 +0000",
91
- "converted":"http:\/\/drop.io\/download\/48f660ba\/26f6688a110f481b169daaa0a023656d4688dac0\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/converted-audio_converted.mp3"}
92
- RESPONSE
93
-
94
- audio.should be_an_instance_of(Asset)
95
- audio.drop.should == parent_drop
96
- audio.type.should == "audio"
97
- audio.thumbnail.should == "http:\/\/drop.io\/download\/public\/vhahbqybv2dx2vdh0z7c\/8c525895399b8eafcd1621b4bd001ee1797e6679\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/"
98
- audio.status.should == "converted"
99
- audio.filesize.should == 178857
100
- audio.name.should == "audio"
101
- audio.file.should == "http:\/\/drop.io\/download\/48f660ba\/b3c057eb4ce606f2f9f478379ea94ab703416ab3\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/audio.mp3\/audio.mp3"
102
- audio.duration.should == 11
103
- audio.track_title.should == "Unknown"
104
- audio.artist.should == "Unknown"
105
- audio.created_at.should == "2008/10/15 21:28:55 +0000"
106
- audio.converted.should == "http:\/\/drop.io\/download\/48f660ba\/26f6688a110f481b169daaa0a023656d4688dac0\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/converted-audio_converted.mp3"
107
- end
108
-
109
- it "should parse lists of Assets" do
110
- parent_drop = stub(Drop)
111
- assets = Client::Mapper.map_assets parent_drop, <<-RESPONSE
112
- [{"type":"note",
113
- "status":"converted",
114
- "filesize":109,
115
- "name":"about-these-files",
116
- "contents":"These files are vital to our mission.&nbsp; <strong>Please<\/strong> do not delete them.<br \/><br \/>Thank you.",
117
- "title":"About these files",
118
- "created_at":"2008/10/15 21:21:49 +0000"},
119
- {"type":"audio",
120
- "thumbnail":"http:\/\/drop.io\/download\/public\/vhahbqybv2dx2vdh0z7c\/8c525895399b8eafcd1621b4bd001ee1797e6679\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/",
121
- "status":"converted",
122
- "filesize":178857,
123
- "name":"audio",
124
- "file":"http:\/\/drop.io\/download\/48f660ba\/b3c057eb4ce606f2f9f478379ea94ab703416ab3\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/audio.mp3\/audio.mp3",
125
- "duration":11,
126
- "track_title":"Unknown",
127
- "artist":"Unknown",
128
- "created_at":"2008/10/15 21:28:55 +0000",
129
- "converted":"http:\/\/drop.io\/download\/48f660ba\/26f6688a110f481b169daaa0a023656d4688dac0\/1c073ae0-7d29-012b-f659-002241261481\/316995b0-7d2e-012b-b8db-002241261481\/converted-audio_converted.mp3"}]
130
- RESPONSE
131
-
132
- assets.should be_an_instance_of(Array)
133
- assets.each_should be_an_instance_of(Asset)
134
- assets[0].name.should == "about-these-files"
135
- assets[1].name.should == "audio"
136
- end
137
-
138
- it "should parse Comments" do
139
- parent_asset = stub(Asset)
140
- comment = Client::Mapper.map_comments parent_asset, <<-RESPONSE
141
- {"created_at":"2008/09/17 20:47:47 +0000",
142
- "id":1,
143
- "contents":"This is my comment content."}
144
- RESPONSE
145
-
146
- comment.should be_an_instance_of(Comment)
147
- comment.asset.should == parent_asset
148
- comment.created_at.should == "2008/09/17 20:47:47 +0000"
149
- comment.id.should == 1
150
- comment.contents.should == "This is my comment content."
151
- end
152
-
153
- it "should parse lists of Comments" do
154
- parent_asset = stub(Asset)
155
- comments = Client::Mapper.map_comments parent_asset, <<-RESPONSE
156
- [{"contents":"Really? Looks like a waste of space to me. I'm going to delete some of these...",
157
- "created_at":"2008/10/15 21:44:24 +0000",
158
- "id":1},
159
- {"contents":"DON'T DO IT!!",
160
- "created_at":"2008/10/15 21:44:36 +0000",
161
- "id":2}]
162
- RESPONSE
163
-
164
- comments.should be_an_instance_of(Array)
165
- comments.each_should be_an_instance_of(Comment)
166
- comments[0].contents.should =~ /waste of space/
167
- comments[1].contents.should =~ /DON'T/
168
- end
169
- end