soundcloud-ruby-api-wrapper 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 3
4
- :patch: 3
4
+ :patch: 4
@@ -4,6 +4,29 @@ module Soundcloud
4
4
  # self.site = 'http://api.soundcloud.dev'
5
5
 
6
6
 
7
+ def send_files(method,path,resource)
8
+ params = ActiveSupport::OrderedHash.new
9
+ self.attributes.reject { |k,v| data_attributes.include?(k)}.each { |k,v|
10
+ params["#{resource}[#{k}]".to_sym] = v
11
+ }
12
+
13
+ # ignore is added because the multipart gem is adding an extra new line
14
+ # to the last parameter which will break parsing of track[sharing]
15
+ params[:ignore] = 'multipart bug'
16
+
17
+ files = {}
18
+ data_attributes.each do |attr|
19
+ files["#{resource}[#{attr}]".to_sym] = self.attributes[attr] if self.attributes.has_key?(attr)
20
+ self.attributes[attr] = nil
21
+ end
22
+
23
+ response = connection.handle_response(self.class.send_multipart_request(method,path,files,params))
24
+
25
+ self.id = id_from_response(response)
26
+ load_attributes_from_response(response)
27
+
28
+ end
29
+
7
30
  # has_many_single_changeable and can_be_a_single_changeable is mostly used in combination with has_many.
8
31
  #
9
32
  # can_be_a_single_changeable expects to have a resource /me which is the logged-in user
@@ -39,7 +62,7 @@ module Soundcloud
39
62
  #
40
63
  # friend.has_friend?(stranger.id)
41
64
  # => checks if stranger and friend are friend, returns true or false
42
-
65
+
43
66
  def self.can_be_a_single_changeable(*args)
44
67
  args.each do |k|
45
68
  singular = k.to_s
@@ -41,6 +41,8 @@ module Soundcloud
41
41
  class Playlist < Base
42
42
  belongs_to :user
43
43
  # has_many :permissions
44
+ cattr_accessor :data_attributes
45
+ self.data_attributes = ['artwork_data']
44
46
  cattr_accessor :element_name
45
47
  self.element_name = 'playlist'
46
48
  def initialize(*args)
@@ -48,6 +50,26 @@ module Soundcloud
48
50
  #create empty tracks array if not existing
49
51
  attributes['tracks'] = Array.new if not self.tracks?
50
52
  end
53
+
54
+ def update
55
+ if data_attributes.all? { |attr| self.attributes[attr].nil? }
56
+ super
57
+ else
58
+ send_files(:put,"/playlists/#{self.id}",'playlist')
59
+ end
60
+ end
61
+
62
+ def create
63
+ if data_attributes.all? { |attr| self.attributes[attr].nil? }
64
+ super
65
+ else
66
+ # default to private
67
+ if self.sharing?.nil?
68
+ self.sharing = 'private'
69
+ end
70
+ send_files(:post,'/playlists', 'playlist')
71
+ end
72
+ end
51
73
  end
52
74
  end
53
75
  end
@@ -85,7 +85,9 @@ module Soundcloud
85
85
  belongs_to :user
86
86
  has_many :permissions, :comments
87
87
  can_be_a_single_changeable :favorite
88
-
88
+ cattr_accessor :data_attributes
89
+ self.data_attributes = ['asset_data', 'artwork_data']
90
+
89
91
  cattr_accessor :element_name
90
92
  self.element_name = 'track'
91
93
 
@@ -111,38 +113,22 @@ module Soundcloud
111
113
  end
112
114
 
113
115
  def update
114
- unless attributes[:asset_data].nil?
115
- raise 'Multipart update is NotImplemented'
116
- self.class.send_multipart_request(:put,'/tracks/#{self.id}','replacement[asset_data]',@asset_data)
116
+ if data_attributes.all? { |attr| self.attributes[attr].nil? }
117
+ super
118
+ else
119
+ send_files(:put,"/tracks/#{self.id}",'track')
117
120
  end
118
- super
119
121
  end
120
122
 
121
123
  def create
122
- if self.asset_data.nil?
124
+ if data_attributes.all? { |attr| self.attributes[attr].nil? }
123
125
  super
124
126
  else
125
- #post asset_data
126
-
127
127
  # default to private
128
128
  if self.sharing?.nil?
129
129
  self.sharing = 'private'
130
130
  end
131
-
132
- params = ActiveSupport::OrderedHash.new
133
- self.attributes.reject { |k,v| k.to_s == 'asset_data'}.each { |k,v|
134
- params["track[#{k}]".to_sym] = v
135
- }
136
-
137
- # ignore is added because the multipart gem is adding an extra new line
138
- # to the last parameter which will break parsing of track[sharing]
139
- params[:ignore] = 'multipart bug'
140
-
141
- response = connection.handle_response(self.class.send_multipart_request(:post,'/tracks','track[asset_data]',self.asset_data,params))
142
-
143
- self.id = id_from_response(response)
144
- load_attributes_from_response(response)
145
- self.asset_data = nil
131
+ send_files(:post,'/tracks','track')
146
132
  end
147
133
  end
148
134
  end
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{ruby-api-wrapper}
5
- s.version = "0.3.3"
5
+ s.version = "0.3.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Johannes Wagener"]
9
- s.date = %q{2009-07-22}
9
+ s.date = %q{2009-09-03}
10
10
  s.email = %q{johannes@wagener.cc}
11
11
  s.extra_rdoc_files = [
12
12
  "LICENSE",
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "lib/soundcloud/models/track.rb",
30
30
  "lib/soundcloud/models/user.rb",
31
31
  "ruby-api-wrapper.gemspec",
32
+ "spec/fixtures/test_artwork.gif",
32
33
  "spec/fixtures/test_track.mp3",
33
34
  "spec/soundcloud_comment_spec.rb",
34
35
  "spec/soundcloud_event_spec.rb",
Binary file
@@ -43,4 +43,23 @@ describe 'Soundcloud::Models::Playlist' do
43
43
  pl.user.online.should_not be nil
44
44
  end
45
45
 
46
+
47
+ it "should be able to update a playlist artwork" do
48
+ test_artwork_file = File.new( File.dirname(__FILE__) + '/fixtures/test_artwork.gif')
49
+ playlist = @sc.Playlist.find('my-static-playlist')
50
+ old_artwork = playlist.artwork_url
51
+ playlist.artwork_data = test_artwork_file
52
+
53
+ playlist.save
54
+ playlist.artwork_url.should_not == old_artwork
55
+ end
56
+
57
+ it "should be able to create a new playlist with artwork" do
58
+ #track = @sc.Track.find('static-test-track')
59
+ test_artwork_file = File.new( File.dirname(__FILE__) + '/fixtures/test_artwork.gif')
60
+
61
+ playlist = @sc.Playlist.create({:title => 'test', :artwork_data => test_artwork_file})
62
+ playlist.artwork_url.should_not == nil
63
+ #playlist.destroy
64
+ end
46
65
  end
@@ -25,6 +25,7 @@ describe "Soundcloud::Models::Track" do
25
25
 
26
26
  end
27
27
 
28
+
28
29
  it "should be able to create a new track and default to sharing=private" do
29
30
  test_track_file = File.new( File.dirname(__FILE__) + '/fixtures/test_track.mp3')
30
31
  track = @sc.Track.create({:title => "test", :asset_data => test_track_file})
@@ -33,6 +34,15 @@ describe "Soundcloud::Models::Track" do
33
34
  track.destroy
34
35
  end
35
36
 
37
+ it "should be able to create a new track with artwork" do
38
+ test_track_file = File.new( File.dirname(__FILE__) + '/fixtures/test_track.mp3')
39
+ test_artwork_file = File.new( File.dirname(__FILE__) + '/fixtures/test_artwork.gif')
40
+ track = @sc.Track.create({:title => "test", :asset_data => test_track_file, :artwork_data => test_artwork_file})
41
+
42
+ track.artwork_url.should_not == nil
43
+ track.destroy
44
+ end
45
+
36
46
  it "should be able to create a new public track and sharing should stay public" do
37
47
  test_track_file = File.new( File.dirname(__FILE__) + '/fixtures/test_track.mp3')
38
48
  track = @sc.Track.create({:title => "test", :sharing => 'public', :asset_data => test_track_file})
@@ -41,6 +51,17 @@ describe "Soundcloud::Models::Track" do
41
51
  track.destroy
42
52
  end
43
53
 
54
+ it "should be able to update a track artwork" do
55
+ test_artwork_file = File.new( File.dirname(__FILE__) + '/fixtures/test_artwork.gif')
56
+ track = @sc.Track.find('static-test-track')
57
+ old_artwork = track.artwork_url
58
+ track.artwork_data = test_artwork_file
59
+
60
+ track.save
61
+ track.artwork_url.should_not == old_artwork
62
+ end
63
+
64
+
44
65
  it 'should be able to create a new track and remove it' do
45
66
  test_track_file = File.new(File.dirname(__FILE__) + '/fixtures/test_track.mp3')
46
67
 
@@ -57,15 +78,61 @@ describe "Soundcloud::Models::Track" do
57
78
 
58
79
  it 'should be able to update an attribute' do
59
80
  track = @sc.Track.find('static-test-track')
81
+ time = Time.now
82
+ track.title = "T #{time}"
83
+ track.save
84
+ track.title = 'something else'
85
+
86
+ track.reload
60
87
 
61
- track.title = 'This is updated'
88
+ track.title.should == "T #{time}"
89
+ end
90
+
91
+ it 'should be able to update tag_list directly' do
92
+ track = @sc.Track.find('static-test-track')
93
+ time = Time.now
94
+ track.tag_list = "T#{time} B#{time}"
62
95
  track.save
96
+ track.tag_list = 'something else'
63
97
 
64
98
  track.reload
65
99
 
66
- track.title.should == 'This is updated'
100
+ track.tag_list.should == "T#{time} B#{time}"
67
101
  end
68
102
 
103
+ # it 'should be able to read the tags array' do
104
+ # track = @sc.Track.new
105
+ #
106
+ # track.tag_list = "bla blub"
107
+ #
108
+ # track.tags.include?('bla').should == true
109
+ # track.tags.include?('blub').should == true
110
+ # end
111
+ #
112
+ #
113
+ # it 'should be able to write to the tags array' do
114
+ # track = @sc.Track.new
115
+ #
116
+ # track.tags << 'bla'
117
+ # track.tags << 'blub'
118
+ #
119
+ # track.tag_list.should == "bla blub"
120
+ # end
121
+
122
+ #it 'should be able to update the tags array' do
123
+ # track = @sc.Track.find('static-test-track')
124
+ # time = Time.now
125
+ # track.tags << "'bl ub'"
126
+ # track.save
127
+ # track.tags.include?("'bl ub'").should == true
128
+ #
129
+ # track.tags.delete('')
130
+ #
131
+ # #reload
132
+ # #tag_list.should_contain
133
+ # #tags.include? 'bla
134
+ #end
135
+
69
136
  it 'should be able to add a user to permissions of a track and delete it again' do
70
137
  track = @sc.Track.find(:one, :from => '/users/api-test-1/tracks/static-test-track')
71
138
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soundcloud-ruby-api-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Wagener
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-22 00:00:00 -07:00
12
+ date: 2009-09-03 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -58,6 +58,7 @@ files:
58
58
  - lib/soundcloud/models/track.rb
59
59
  - lib/soundcloud/models/user.rb
60
60
  - ruby-api-wrapper.gemspec
61
+ - spec/fixtures/test_artwork.gif
61
62
  - spec/fixtures/test_track.mp3
62
63
  - spec/soundcloud_comment_spec.rb
63
64
  - spec/soundcloud_event_spec.rb