grooveshark-ruby 0.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.
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
+