mixcloud-rb 0.0.1

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.
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'hashie'
3
+ require 'httparty'
4
+
5
+ module MixCloud
6
+
7
+ class Artist < Hashie::Dash
8
+ include HTTParty
9
+ format :json
10
+ base_uri MixCloud::BASE_URL
11
+
12
+ property :url
13
+ property :name
14
+ property :key
15
+ property :slug
16
+ property :type
17
+ property :metadata, :default => {}
18
+
19
+ def self.find(artist)
20
+ res = self.get("/artist/#{artist}?metadata=1")
21
+ self.new res
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'hashie'
3
+ require 'httparty'
4
+
5
+ module MixCloud
6
+
7
+ class Category < Hashie::Dash
8
+ include HTTParty
9
+ format :json
10
+ base_uri MixCloud.base_uri
11
+
12
+ property :name
13
+ property :url
14
+ property :key
15
+ property :slug
16
+ property :type
17
+ property :format
18
+ property :pictures, :default => {}
19
+ property :metadata, :default => {}
20
+
21
+ def self.find(category)
22
+ res = self.get("/categories/#{category}?metadata=1")
23
+ self.new res
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ category = MixCloud::Category.find("ambient")
31
+ puts category
File without changes
File without changes
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ require 'hashie'
3
+ require 'httparty'
4
+
5
+ module MixCloud
6
+ class Tag < Hashie::Dash
7
+ include HTTParty
8
+ attr_writer :options
9
+
10
+ format :json
11
+ base_uri MixCloud::BASE_URL
12
+
13
+ property :url
14
+ property :type
15
+ property :name
16
+ property :key
17
+ property :metadata, :default => {}
18
+ property :data, :default => {}
19
+ property :popular, :default => {}
20
+
21
+ def initialize(tag_name, options={})
22
+ @options = options
23
+ @tag = self.class.get("/tag/#{tag_name}", :query => @options)
24
+
25
+ @tag['metadata']['connections'].each do |k,v|
26
+ @tag['metadata'][k.to_sym] = v
27
+ end
28
+ @tag['metadata'].delete('connections')
29
+
30
+ super @tag
31
+ end
32
+
33
+ def popular(options=nil)
34
+ options = options ||= @options
35
+ self.popular = self.class.get("#{self[:key]}popular/", :query => options)
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,7 @@
1
+ module MixCloud
2
+
3
+ class Track < Hashie::Dash
4
+ include HTTParty
5
+ base_uri 'http://api.mixcloud.com/'
6
+ end
7
+ end
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'hashie'
3
+ require 'httparty'
4
+
5
+ module MixCloud
6
+ class User < Hashie::Dash
7
+ include HTTParty
8
+ attr_writer :options
9
+
10
+ format :json
11
+ base_uri MixCloud::BASE_URL
12
+
13
+ property :username
14
+ property :city
15
+ property :cloudcast_count
16
+ property :following_count
17
+ property :url
18
+ property :pictures, :defaul => {}
19
+ property :listen_count
20
+ property :updated_time
21
+ property :created_time
22
+ property :biog
23
+ property :key
24
+ property :country
25
+ property :follower_count
26
+ property :favorite_count
27
+ property :country
28
+ property :name
29
+ property :type
30
+ property :metadata, :default => {}
31
+
32
+ def initialize(user_name, options={})
33
+ @options = options
34
+ @user = self.class.get("/#{user_name}?metadata=1", :query => @options)
35
+
36
+ @user['metadata']['connections'].each do |k,v|
37
+ @user['metadata'][k.to_sym] = v
38
+ end
39
+ @user['metadata'].delete('connections')
40
+
41
+ @user['metadata'].each do |k,v|
42
+ self.class.send(:define_method, "#{k}".downcase) do |options|
43
+ options = options ||= @options
44
+ self.class.get("#{self.metadata[k.to_sym]}", :query => @options)
45
+ end
46
+ end
47
+
48
+ super @user
49
+ end
50
+
51
+ def self.find(user_name, options={})
52
+ self.new user_name, options
53
+ end
54
+
55
+ end
56
+ end
data/lib/mixcloud.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'hashie'
3
+ require 'httparty'
4
+
5
+ directory = File.expand_path(File.dirname(__FILE__))
6
+
7
+ module MixCloud
8
+
9
+ VERSION = '0.0.1'
10
+ BASE_URL = 'http://api.mixcloud.com'
11
+
12
+ end
13
+
14
+ require File.join(directory, 'mixcloud', 'artist')
15
+ require File.join(directory, 'mixcloud', 'user')
16
+ require File.join(directory, 'mixcloud', 'tag')
17
+ require File.join(directory, 'mixcloud', 'track')
@@ -0,0 +1,28 @@
1
+ require "mixcloud"
2
+ require "test/unit"
3
+
4
+ class TestMixCloudArtist < Test::Unit::TestCase
5
+
6
+ def setup
7
+ artist_name = "aphex-twin"
8
+ @artist = MixCloud::Artist.find("aphex-twin");
9
+ end
10
+
11
+ def test_artist_properties
12
+ assert_equal(@artist.name, "Aphex Twin")
13
+ assert_equal(@artist.key, "/artist/aphex-twin/")
14
+ assert_equal(@artist.slug,"aphex-twin")
15
+ assert_equal(@artist.url, "http://www.mixcloud.com/artist/aphex-twin/")
16
+ assert_equal(@artist.type, "artist")
17
+ end
18
+
19
+ def test_artist_has_metadata
20
+ assert_equal(@artist.metadata.size, 1 )
21
+ end
22
+
23
+ def test_artist_metadata_properties
24
+ assert_equal(@artist.metadata["connections"]["popular"], MixCloud::BASE_URL + "/artist/aphex-twin/popular/")
25
+ assert_equal(@artist.metadata["connections"]["new"], MixCloud::BASE_URL + "/artist/aphex-twin/new/")
26
+ end
27
+
28
+ end
@@ -0,0 +1,36 @@
1
+ require "mixcloud"
2
+ require "test/unit"
3
+
4
+ class TestMixCloudTag < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @tag = MixCloud::Tag.new("funk", {:limit => 1, :offset=> 1, :metadata => 1})
8
+ end
9
+
10
+ def test_tag_properties
11
+ assert_equal(@tag.url, 'http://www.mixcloud.com/tag/funk/')
12
+ assert_equal(@tag.type, 'tag')
13
+ assert_equal(@tag.name, 'Funk')
14
+ assert_equal(@tag.key, '/tag/funk/')
15
+ end
16
+
17
+ def test_tag_has_metadata
18
+ assert_equal(@tag.metadata.size, 3 )
19
+ end
20
+
21
+ def test_tag_metadata_properties
22
+ assert_equal(@tag.metadata[:popular], MixCloud::BASE_URL + '/tag/funk/popular/' )
23
+ assert_equal(@tag.metadata[:new], MixCloud::BASE_URL + '/tag/funk/new/' )
24
+ end
25
+
26
+
27
+ def test_tag_popular
28
+ assert_equal(@tag.popular.length, 3)
29
+ end
30
+
31
+ def test_tags_pagination
32
+ assert_equal(@tag.popular['paging']['previous'], MixCloud::BASE_URL + '/tag/funk/popular/?metadata=1&limit=1&offset=0' )
33
+ assert_equal(@tag.popular['paging']['next'], MixCloud::BASE_URL + '/tag/funk/popular/?metadata=1&limit=1&offset=2' )
34
+ end
35
+
36
+ end
@@ -0,0 +1,91 @@
1
+ require "mixcloud"
2
+ require "test/unit"
3
+
4
+ class TestMixCloudUser < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @user = MixCloud::User.find("spartacus", { :limit => 1, :offset => 1, :metadata => 1 } )
8
+ @user_feed = @user.feed
9
+ @user_comments = @user.comments
10
+ @user_followers = @user.followers
11
+ @user_following = @user.following
12
+ @user_favorites = @user.favorites
13
+ @user_cloudcasts = @user.cloudcasts
14
+ @user_listens = @user.listens
15
+ end
16
+
17
+ def test_user_properties
18
+ assert_equal(@user.username, "spartacus")
19
+ assert_equal(@user.city, 'London')
20
+ assert_equal(@user.cloudcast_count, 3)
21
+ assert_equal(@user.following_count, 26)
22
+ assert_equal(@user.url, 'http://www.mixcloud.com/spartacus/')
23
+ assert_equal(@user.pictures.length, 6)
24
+ assert_equal(@user.listen_count, 373)
25
+ assert_equal(@user.biog, "Part of the Mixcloud team - since Mixcloud was just a good idea.")
26
+ assert_equal(@user.key, '/spartacus/')
27
+ assert_equal(@user.country, "United Kingdom")
28
+ assert_equal(@user.type, 'user')
29
+ assert_equal(@user.name, 'Spartacus')
30
+ end
31
+
32
+ def test_user_has_metadata
33
+ assert_equal(@user.metadata.size, 7)
34
+ end
35
+
36
+ def test_user_metadata_properties
37
+ assert_equal(@user.metadata[:feed], MixCloud::BASE_URL + '/spartacus/feed/' )
38
+ assert_equal(@user.metadata[:comments], MixCloud::BASE_URL + '/spartacus/comments/' )
39
+ assert_equal(@user.metadata[:followers], MixCloud::BASE_URL + '/spartacus/followers/' )
40
+ assert_equal(@user.metadata[:favorites], MixCloud::BASE_URL + '/spartacus/favorites/' )
41
+ assert_equal(@user.metadata[:following], MixCloud::BASE_URL + '/spartacus/following/' )
42
+ assert_equal(@user.metadata[:listens], MixCloud::BASE_URL + '/spartacus/listens/' )
43
+ end
44
+
45
+ def test_user_feed_properties
46
+ assert_equal(@user_feed['data'].length, 1)
47
+ assert_equal(@user_feed['data'][0]['from']['url'], 'http://www.mixcloud.com/spartacus/')
48
+ end
49
+
50
+ def test_user_comments_properties
51
+ assert_equal(@user_comments['paging']['previous'],'http://api.mixcloud.com/spartacus/comments/?metadata=1&limit=1&offset=0')
52
+ assert_equal(@user_comments['paging']['next'],'http://api.mixcloud.com/spartacus/comments/?metadata=1&limit=1&offset=2')
53
+
54
+ assert_equal(@user_comments['data'].nil?, false)
55
+ assert_equal(@user_comments['name'],'Comments on Spartacus\'s profile')
56
+ end
57
+
58
+ def test_user_followers_properties
59
+ assert_equal(@user_followers['paging']['previous'],'http://api.mixcloud.com/spartacus/followers/?metadata=1&limit=1&offset=0')
60
+ assert_equal(@user_followers['paging']['next'],'http://api.mixcloud.com/spartacus/followers/?metadata=1&limit=1&offset=2')
61
+ assert_equal(@user_followers['data'].nil?, false)
62
+ assert_equal(@user_followers['name'],'Spartacus\'s followers')
63
+ end
64
+
65
+ def test_user_favorites_properties
66
+ assert_equal(@user_favorites['paging']['previous'],'http://api.mixcloud.com/spartacus/favorites/?metadata=1&limit=1&offset=0')
67
+ assert_equal(@user_favorites['paging']['next'],'http://api.mixcloud.com/spartacus/favorites/?metadata=1&limit=1&offset=2')
68
+ assert_equal(@user_favorites['data'].nil?, false)
69
+ assert_equal(@user_favorites['name'],'Spartacus\'s favorites')
70
+ end
71
+
72
+ def test_user_following_properties
73
+ assert_equal(@user_following['paging']['previous'],'http://api.mixcloud.com/spartacus/following/?metadata=1&limit=1&offset=0')
74
+ assert_equal(@user_following['paging']['next'],'http://api.mixcloud.com/spartacus/following/?metadata=1&limit=1&offset=2')
75
+ assert_equal(@user_following['data'].nil?, false)
76
+ end
77
+
78
+ def test_user_cloudcasts_properties
79
+ assert_equal(@user_cloudcasts['paging']['previous'],'http://api.mixcloud.com/spartacus/cloudcasts/?metadata=1&limit=1&offset=0')
80
+ assert_equal(@user_cloudcasts['data'].nil?, false)
81
+ assert_equal(@user_cloudcasts['name'],'Spartacus\'s Cloudcasts')
82
+ end
83
+
84
+ def test_user_listens_properties
85
+ assert_equal(@user_listens['paging']['previous'],'http://api.mixcloud.com/spartacus/listens/?metadata=1&limit=1&offset=0')
86
+ assert_equal(@user_listens['paging']['next'],'http://api.mixcloud.com/spartacus/listens/?metadata=1&limit=1&offset=2')
87
+ assert_equal(@user_listens['data'].nil?, false)
88
+ assert_equal(@user_listens['name'],'Spartacus\'s listens')
89
+ end
90
+
91
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mixcloud-rb
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Joao Da Silva
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-29 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ hash: 23
28
+ segments:
29
+ - 0
30
+ - 2
31
+ - 0
32
+ version: 0.2.0
33
+ name: hashie
34
+ prerelease: false
35
+ requirement: *id001
36
+ type: :runtime
37
+ - !ruby/object:Gem::Dependency
38
+ version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 15
44
+ segments:
45
+ - 0
46
+ - 5
47
+ - 2
48
+ version: 0.5.2
49
+ name: httparty
50
+ prerelease: false
51
+ requirement: *id002
52
+ type: :runtime
53
+ description: Ruby wrapper for the mixcloud.com API
54
+ email: joao@codedefinition.com
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files: []
60
+
61
+ files:
62
+ - lib/mixcloud/artist.rb
63
+ - lib/mixcloud/category.rb
64
+ - lib/mixcloud/cloudcast.rb
65
+ - lib/mixcloud/search.rb
66
+ - lib/mixcloud/tag.rb
67
+ - lib/mixcloud/track.rb
68
+ - lib/mixcloud/user.rb
69
+ - lib/mixcloud.rb
70
+ - test/unit/mixcloud_artist_test.rb
71
+ - test/unit/mixcloud_tag_test.rb
72
+ - test/unit/mixcloud_user_test.rb
73
+ has_rdoc: true
74
+ homepage: http://github.com/jsilva/mixcloud-rb/
75
+ licenses: []
76
+
77
+ post_install_message:
78
+ rdoc_options: []
79
+
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ hash: 23
97
+ segments:
98
+ - 1
99
+ - 3
100
+ - 6
101
+ version: 1.3.6
102
+ requirements: []
103
+
104
+ rubyforge_project:
105
+ rubygems_version: 1.3.7
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: Ruby wrapper for the mixcloud.com API
109
+ test_files:
110
+ - test/unit/mixcloud_artist_test.rb
111
+ - test/unit/mixcloud_tag_test.rb
112
+ - test/unit/mixcloud_user_test.rb