grooveshark-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", ">= 0"
12
+ gem "jeweler", "~> 1.8.4"
13
+ gem "rcov", ">= 0"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.8)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
7
+ git (1.2.5)
8
+ i18n (0.6.1)
9
+ jeweler (1.8.4)
10
+ bundler (~> 1.0)
11
+ git (>= 1.2.5)
12
+ rake
13
+ rdoc
14
+ json (1.7.5)
15
+ multi_json (1.3.6)
16
+ rake (0.9.2.2)
17
+ rcov (1.0.0)
18
+ rdoc (3.12)
19
+ json (~> 1.4)
20
+ shoulda (3.3.0)
21
+ shoulda-context (~> 1.0)
22
+ shoulda-matchers (~> 1.4)
23
+ shoulda-context (1.0.0)
24
+ shoulda-matchers (1.4.0)
25
+ activesupport (>= 3.0.0)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ bundler
32
+ jeweler (~> 1.8.4)
33
+ rcov
34
+ rdoc (~> 3.12)
35
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Gabriel Scholz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ grooveshark-ruby
2
+
3
+ a = Grooveshark.new(key, secret)
4
+ a.authenticate('username', 'password')
5
+ /* do things */
6
+ a.logout
7
+
8
+ Added by myself and required to create a token
9
+
10
+ makeToken
11
+
12
+ Working
13
+
14
+ startSession
15
+ authenticate
16
+ authenticateUser
17
+ authenticateToken
18
+ logout
19
+ getCountry
20
+ getUserPlaylists
21
+ getUserPlaylistsSubscribed
22
+ getUserFavoriteSongs
23
+ removeUserFavoriteSongs
24
+ getUserInfo
25
+ unsubscribePlaylist
26
+ getPlaylist
27
+ getServiceDescription
28
+ pingService
29
+ getPlaylistInfo
30
+ getSongIDFromTinysongBase62
31
+ getSongURLFromTinysongBase62
32
+ getSongURLFromSongID
33
+ getPlaylistURLFromPlaylistID
34
+ getTinysongURLFromSongID
35
+ getUserLibrarySongs
36
+ removeUserLibrarySongs
37
+ deletePlaylist
38
+ getUserIDFromUsername
39
+ getAlbumsInfo
40
+ getAlbumSongs
41
+ getSongsInfo
42
+ getDoesAlbumExist
43
+ getDoesSongExist
44
+ getDoesArtistExist
45
+ getArtistPopularSongs
46
+ getArtistAlbums
47
+
48
+ Sorta working
49
+
50
+ addUserFavoriteSong (sometimes returns false, which seems to be fixed by adding or removing []-brackets)
51
+ getPopularSongsToday (setting limit to anything doesn't work)
52
+ getPopularSongsMonth (setting limit to anything doesn't work)
53
+ createPlaylist (songIDs has to be passed in as an array, i.e. [songIDs], even if it's a single song)
54
+ getArtistsInfo (returns an empty array unless argument is passed in as an array)
55
+ getArtistVerifiedAlbums (returns a list of albums, most of them with the property `"IsVerified"=>false`??)
56
+
57
+ Not working
58
+
59
+ addUserLibrarySongs (returns `"success"=> true` but doesn't actually add songs to anything)
60
+ subscribePlaylist (just returns `"success"=> false` with no explanation?)
61
+ undeletePlaylist (just returns `"success"=> false` with no explanation?)
62
+
63
+ Not enough permissions with standard API key
64
+
65
+ getAutoplaySong
66
+ getAutoplayTags
67
+ startAutoplayTag
68
+ startAutoplay
69
+ removeVoteUpAutoplaySong
70
+ voteUpAutoplaySong
71
+ addSongToAutoplay
72
+ removeSongFromAutoplay
73
+ removeVoteDownAutoplaySong
74
+ voteDownAutoplaySong
75
+ getUserPlaylistsByUserID
76
+ getUserInfoFromUserID
77
+ getSimilarArtists
78
+ registerUser
79
+ getUserSubscriptionDetails
80
+
81
+ Not tested
82
+
83
+ getAutocompleteSearchResults
84
+ getSubscriberStreamKey
85
+ markStreamKeyOver30Secs
86
+ markSongComplete
87
+ getTrialInfo
88
+ createTrial
89
+ setPlaylistSongs
90
+ getPlaylistSongs
91
+ renamePlaylist
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "grooveshark-ruby"
18
+ gem.homepage = "http://github.com/garbles/grooveshark-ruby"
19
+ gem.license = "MIT"
20
+ gem.summary = "An easy-to-use ruby wrapper for the Grooveshark API"
21
+ gem.description = "An easy-to-use ruby wrapper for the Grooveshark API"
22
+ gem.email = "scholz.gabe@gmail.com"
23
+ gem.authors = ["Gabriel Scholz"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rdoc/task'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "grooveshark-ruby #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,17 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+
4
+ require 'grooveshark-ruby/autocomplete'
5
+ require 'grooveshark-ruby/autoplay'
6
+ require 'grooveshark-ruby/core'
7
+ require 'grooveshark-ruby/new'
8
+ require 'grooveshark-ruby/recs'
9
+ require 'grooveshark-ruby/register'
10
+ require 'grooveshark-ruby/request'
11
+ require 'grooveshark-ruby/search'
12
+ require 'grooveshark-ruby/sessions'
13
+ require 'grooveshark-ruby/subscriberstreams'
14
+ require 'grooveshark-ruby/tinysong'
15
+ require 'grooveshark-ruby/trials'
16
+ require 'grooveshark-ruby/urls'
17
+ require 'grooveshark-ruby/users'
@@ -0,0 +1,7 @@
1
+ class Grooveshark
2
+
3
+ def getAutocompleteSearchResults(query, type, limit = false)
4
+ request('getAutocompleteSearchResults', {'query' => query, 'type' => type, 'limit' => limit})
5
+ end # haven't tested
6
+
7
+ end
@@ -0,0 +1,43 @@
1
+ class Grooveshark
2
+
3
+ def getAutoplaySong(autoplayState)
4
+ request('getAutoplaySong', {'autoplayState' => autoplayState})
5
+ end
6
+
7
+ def getAutoplayTags
8
+ request('getAutoplayTags')
9
+ end
10
+
11
+ def startAutoplayTag(tagID)
12
+ request('startAutoplayTag', {'tagID' => tagID})
13
+ end
14
+
15
+ def startAutoplay(artistIDs, songIDs = nil)
16
+ request('startAutoplay', {'artistIDs' => artistIDs, 'songIDs' => songIDs})
17
+ end
18
+
19
+ def removeVoteUpAutoplaySong(song, autoplayState)
20
+ request('removeVoteUpAutoplaySong', {'song' => song, 'autoplayState' => autoplayState})
21
+ end
22
+
23
+ def voteUpAutoplaySong(song, autoplayState)
24
+ request('voteUpAutoplaySong', {'song' => song, 'autoplayState' => autoplayState})
25
+ end
26
+
27
+ def addSongToAutoplay(song, autoplayState)
28
+ request('addSongToAutoplay', {'song' => song, 'autoplayState' => autoplayState})
29
+ end
30
+
31
+ def removeSongFromAutoplay(song, autoplayState)
32
+ request('removeSongFromAutoplay', {'song' => song, 'autoplayState' => autoplayState})
33
+ end
34
+
35
+ def removeVoteDownAutoplaySong(song, autoplayState)
36
+ request('removeVoteDownAutoplaySong', {'song' => song, 'autoplayState' => autoplayState})
37
+ end
38
+
39
+ def voteDownAutoplaySong(song, autoplayState)
40
+ request('voteDownAutoplaySong', {'song' => song, 'autoplayState' => autoplayState})
41
+ end
42
+
43
+ end
@@ -0,0 +1,168 @@
1
+ class Grooveshark
2
+
3
+ def addUserLibrarySongs(songIDs, albumIDs, artistIDs)
4
+ request('addUserLibrarySongs', {'songIDs' => songIDs, 'albumIDs' => albumIDs, 'artistIDs' => artistIDs})
5
+ end
6
+
7
+ def getUserLibrarySongs(limit = nil, page = nil)
8
+ request('getUserLibrarySongs', {'limit' => limit, 'page' => page})['result']
9
+ end
10
+
11
+ def removeUserLibrarySongs(songIDs, albumIDs, artistIDs)
12
+ request('removeUserLibrarySongs', {'songIDs' => songIDs, 'albumIDs' => albumIDs, 'artistIDs' => artistIDs})
13
+ end
14
+
15
+ def getUserPlaylists(limit = nil)
16
+ request('getUserPlaylists', {'limit' => limit})['result']['playlists']
17
+ end
18
+
19
+ def subscribePlaylist(playlistID)
20
+ request('subscribePlaylist', {'playlistID' => playlistID})
21
+ end
22
+
23
+ def getUserPlaylistsSubscribed
24
+ request('getUserPlaylistsSubscribed')['result']['playlists']
25
+ end
26
+
27
+ def getUserFavoriteSongs(limit = nil)
28
+ request('getUserFavoriteSongs', {'limit' => limit})['result']['songs']
29
+ end
30
+
31
+ def removeUserFavoriteSongs(songIDs)
32
+ request('removeUserFavoriteSongs', {'songIDs' => songIDs})
33
+ end
34
+
35
+ def getUserInfo
36
+ request('getUserInfo')['result']
37
+ end
38
+
39
+ def getUserSubscriptionDetails
40
+ request('getUserSubscriptionDetails')['result']
41
+ end
42
+
43
+ def addUserFavoriteSong(songID)
44
+ request('addUserFavoriteSong', {'songID' => songID})
45
+ end
46
+
47
+ def unsubscribePlaylist(playlistID)
48
+ request('unsubscribePlaylist', {'playlistID' => playlistID})
49
+ end
50
+
51
+ def getPlaylist(playlistID, limit = nil)
52
+ request('getPlaylist', {'playlistID' => playlistID, 'limit' => limit})['result']
53
+ end
54
+
55
+ def getPopularSongsToday(limit = nil)
56
+ request('getPopularSongsToday', {'limit' => limit})['result']['songs']
57
+ end
58
+
59
+ def getCountry(ip = nil)
60
+ request('getCountry', {'ip' => ip})['result']
61
+ end
62
+
63
+ def getPopularSongsMonth(limit = nil)
64
+ request('getPopularSongsMonth', {'limit' => limit})['result']['songs']
65
+ end
66
+
67
+ def getServiceDescription
68
+ request('getServiceDescription')['result']
69
+ end
70
+
71
+ def pingService
72
+ request('pingService')['result']
73
+ end
74
+
75
+ def getPlaylistInfo(playlistID)
76
+ request('getPlaylistInfo', {'playlistID' => playlistID})['result']
77
+ end
78
+
79
+ def undeletePlaylist(playlistID)
80
+ request('undeletePlaylist', {'playlistID' => playlistID})
81
+ end
82
+
83
+ def createPlaylist(name, songIDs)
84
+ request('createPlaylist', {'name' => name, 'songIDs' => songIDs})
85
+ end
86
+
87
+ def renamePlaylist(playlistID, name)
88
+ request('renamePlaylist', {'playlistID' => playlistID, 'name' => name})
89
+ end
90
+
91
+ def deletePlaylist(playlistID)
92
+ request('deletePlaylist', {'playlistID' => playlistID})
93
+ end
94
+
95
+ def setPlaylistSongs(playlistID, songIDs)
96
+ request('setPlaylistSongs', {'playlistID' => playlistID, 'songIDs' => songIDs})
97
+ end
98
+
99
+ def getPlaylistSongs(playlistID, limit = nil)
100
+ request('getPlaylistSongs', {'playlistID' => playlistID, 'limit' => limit})
101
+ end
102
+
103
+ def makeToken(username, password)
104
+ Digest::MD5.hexdigest(username.downcase + Digest::MD5.hexdigest(password))
105
+ end
106
+
107
+ def getUserIDFromUsername(username)
108
+ request('getUserIDFromUsername', {'username' => username})
109
+ end
110
+
111
+ def getAlbumsInfo(albumIDs)
112
+ request('getAlbumsInfo', {'albumIDs' => albumIDs})['result']['albums']
113
+ end
114
+
115
+ def getAlbumSongs(albumID, limit = nil)
116
+ request('getAlbumSongs', {'albumID' => albumID, 'limit' => limit})['result']['songs']
117
+ end
118
+
119
+ def getArtistsInfo(artistIDs)
120
+ request('getArtistsInfo', {'artistIDs' => artistIDs})['result']['artists']
121
+ end
122
+
123
+ def getSongsInfo(songIDs)
124
+ request('getSongsInfo', {'songIDs' => songIDs})['result']['songs']
125
+ end
126
+
127
+ def getDoesAlbumExist(albumID)
128
+ request('getDoesAlbumExist', {'albumID' => albumID})['result']
129
+ end
130
+
131
+ def getDoesSongExist(songID)
132
+ request('getDoesSongExist', {'songID' => songID})['result']
133
+ end
134
+
135
+ def getDoesArtistExist(artistID)
136
+ request('getDoesArtistExist', {'artistID' => artistID})['result']
137
+ end
138
+
139
+ def getArtistVerifiedAlbums(artistID)
140
+ request('getArtistVerifiedAlbums', {'artistID' => artistID})['result']['albums']
141
+ end
142
+
143
+ def getArtistPopularSongs(artistID)
144
+ request('getArtistPopularSongs', {'artistID' => artistID})['result']['songs']
145
+ end
146
+
147
+ def getArtistAlbums(artistID)
148
+ request('getArtistAlbums', {'artistID' => artistID})['result']['albums']
149
+ end
150
+
151
+ def authenticate(login, password)
152
+ password = Digest::MD5.hexdigest(password)
153
+ user = request('authenticate', {'login' => login, 'password' => password}, true)['result']
154
+ end
155
+
156
+ def authenticateUser(username, token)
157
+ request('authenticateUser', {'username' => username, 'token' => token}, true)['result']
158
+ end
159
+
160
+ def authenticateToken(token)
161
+ request('authenticateToken', {'token' => token}, true)['result']
162
+ end
163
+
164
+ def logout
165
+ request('logout')
166
+ end
167
+
168
+ end
@@ -0,0 +1,12 @@
1
+ class Grooveshark
2
+
3
+ attr_reader :session
4
+
5
+ def initialize(key, secret)
6
+ @key = key
7
+ @secret = secret
8
+ @session = startSession
9
+ # @ipaddress = request.remote_ip
10
+ end
11
+
12
+ end
@@ -0,0 +1,7 @@
1
+ class Grooveshark
2
+
3
+ def getSimilarArtists(artistID, limit = nil, page = nil)
4
+ request('getSimilarArtists', {'artistID' => artistID, 'limit' => limit, 'page' => page})
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class Grooveshark
2
+
3
+ def registerUser(emailAddress, password, fullName, username = nil, gender = nil, birthDate = nil)
4
+ request('registerUser', {'emailAddress' => emailAddress, 'password' => password, 'fullName' => fullName, 'username' => username, 'gender' => gender, 'birthDate' => birthDate}, true)
5
+ end
6
+
7
+ end
@@ -0,0 +1,17 @@
1
+ class Grooveshark
2
+
3
+ def request(method, params = {}, secure = false, session = @session)
4
+ data = {
5
+ "method" => method,
6
+ "parameters" => params,
7
+ "header" => { "wsKey" => @key,
8
+ "sessionID" => session
9
+ }
10
+ }.to_json
11
+ sig = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::MD5.new, @secret, data)
12
+ url = "#{secure ? 'https' : 'http'}://api.grooveshark.com/ws3.php?sig=#{sig}"
13
+ response = RestClient.post(url, data)
14
+ JSON.parse(response)
15
+ end
16
+
17
+ end
@@ -0,0 +1,19 @@
1
+ class Grooveshark
2
+
3
+ def getSongSearchResults(query, country, limit = nil, offset = nil)
4
+ request('getSongSearchResults', { 'query' => query, 'country' => country, 'limit' => limit, 'offset' => offset })['result']['songs']
5
+ end
6
+
7
+ def getPlaylistSearchResults(query, limit = false, offset = false)
8
+ request('getPlaylistSearchResults', { 'query' => query, 'limit' => limit, 'offset' => offset })['result']['playlists']
9
+ end
10
+
11
+ def getAlbumSearchResults(query, limit = false, offset = false)
12
+ request('getAlbumSearchResults', { 'query' => query, 'limit' => limit, 'offset' => offset })['result']['albums']
13
+ end
14
+
15
+ def getArtistSearchResults(query, limit = false, offset = false)
16
+ request('getArtistSearchResults', { 'query' => query, 'limit' => limit, 'offset' => offset })['result']['artists']
17
+ end
18
+
19
+ end
@@ -0,0 +1,7 @@
1
+ class Grooveshark
2
+
3
+ def startSession
4
+ request('startSession', {}, true, nil)['result']['sessionID']
5
+ end
6
+
7
+ end
@@ -0,0 +1,15 @@
1
+ class Grooveshark
2
+
3
+ def getSubscriberStreamKey(songID, country, lowBitrate = nil, uniqueID = nil)
4
+ request('getSubscriberStreamKey', {'songID' => songID, 'country' => country, 'lowBitrate' => lowBitrate, 'uniqueID' => uniqueID})
5
+ end
6
+
7
+ def markStreamKeyOver30Secs(streamKey, streamServerID, uniqueID = nil)
8
+ request('markStreamKeyOver30Secs', {'streamKey' => streamKey, 'streamServerID' => streamServerID, 'uniqueID' => uniqueID})
9
+ end
10
+
11
+ def markSongComplete(songID, streamKey, streamServerID, autoplayState = nil)
12
+ request('markSongComplete', {'songID' => songID, 'streamKey' => streamKey, 'streamServerID' => streamServerID, 'autoplayState' => autoplayState})
13
+ end
14
+
15
+ end
@@ -0,0 +1,7 @@
1
+ class Grooveshark
2
+
3
+ def getSongIDFromTinysongBase62(base62)
4
+ request('getSongIDFromTinysongBase62', {'base62' => base62})
5
+ end
6
+
7
+ end
@@ -0,0 +1,11 @@
1
+ class Grooveshark
2
+
3
+ def getTrialInfo(uniqueID)
4
+ request('getTrialInfo', {'uniqueID' => uniqueID})
5
+ end
6
+
7
+ def createTrial(uniqueID)
8
+ request('createTrial', {'uniqueID' => uniqueID})
9
+ end
10
+
11
+ end
@@ -0,0 +1,19 @@
1
+ class Grooveshark
2
+
3
+ def getSongURLFromTinysongBase62(base62)
4
+ request('getSongURLFromTinysongBase62', {'base62' => base62})['result']['url']
5
+ end
6
+
7
+ def getSongURLFromSongID(songID)
8
+ request('getSongURLFromSongID', {'songID' => songID})['result']['url']
9
+ end
10
+
11
+ def getPlaylistURLFromPlaylistID(playlistID)
12
+ request('getPlaylistURLFromPlaylistID', {'playlistID' => playlistID})['result']['url']
13
+ end
14
+
15
+ def getTinysongURLFromSongID(songID)
16
+ request('getTinysongURLFromSongID', {'songID' => songID})['result']['url']
17
+ end
18
+
19
+ end
@@ -0,0 +1,11 @@
1
+ class Grooveshark
2
+
3
+ def getUserPlaylistsByUserID(userID, limit = nil)
4
+ request('getUserPlaylistsByUserID', {'userID' => userID, 'limit' => limit})
5
+ end
6
+
7
+ def getUserInfoFromUserID(userID)
8
+ request('getUserInfoFromUserID', {'userID' => userID})
9
+ end
10
+
11
+ end
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: grooveshark-ruby
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Gabriel Scholz
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-10-12 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ name: shoulda
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ hash: 31
42
+ segments:
43
+ - 3
44
+ - 12
45
+ version: "3.12"
46
+ type: :development
47
+ name: rdoc
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :development
61
+ name: bundler
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ hash: 63
71
+ segments:
72
+ - 1
73
+ - 8
74
+ - 4
75
+ version: 1.8.4
76
+ type: :development
77
+ name: jeweler
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :development
91
+ name: rcov
92
+ version_requirements: *id005
93
+ description: An easy-to-use ruby wrapper for the Grooveshark API
94
+ email: scholz.gabe@gmail.com
95
+ executables: []
96
+
97
+ extensions: []
98
+
99
+ extra_rdoc_files:
100
+ - LICENSE.txt
101
+ - README.md
102
+ files:
103
+ - .document
104
+ - Gemfile
105
+ - Gemfile.lock
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - VERSION
110
+ - lib/grooveshark-ruby.rb
111
+ - lib/grooveshark-ruby/autocomplete.rb
112
+ - lib/grooveshark-ruby/autoplay.rb
113
+ - lib/grooveshark-ruby/core.rb
114
+ - lib/grooveshark-ruby/new.rb
115
+ - lib/grooveshark-ruby/recs.rb
116
+ - lib/grooveshark-ruby/register.rb
117
+ - lib/grooveshark-ruby/request.rb
118
+ - lib/grooveshark-ruby/search.rb
119
+ - lib/grooveshark-ruby/sessions.rb
120
+ - lib/grooveshark-ruby/subscriberstreams.rb
121
+ - lib/grooveshark-ruby/tinysong.rb
122
+ - lib/grooveshark-ruby/trials.rb
123
+ - lib/grooveshark-ruby/urls.rb
124
+ - lib/grooveshark-ruby/users.rb
125
+ homepage: http://github.com/garbles/grooveshark-ruby
126
+ licenses:
127
+ - MIT
128
+ post_install_message:
129
+ rdoc_options: []
130
+
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ hash: 3
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ hash: 3
148
+ segments:
149
+ - 0
150
+ version: "0"
151
+ requirements: []
152
+
153
+ rubyforge_project:
154
+ rubygems_version: 1.8.24
155
+ signing_key:
156
+ specification_version: 3
157
+ summary: An easy-to-use ruby wrapper for the Grooveshark API
158
+ test_files: []
159
+