kanye 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ gem 'httparty', ">= 0.7.4"
3
3
  gem 'sqlite3'
4
4
  gem 'nokogiri'
5
5
  gem 'ruby-mp3info', '0.6.14'
6
+ gem 'rb-appscript', '0.6.1'
6
7
 
7
8
  group :development do
8
9
  gem "rspec", ">= 2"
data/History ADDED
@@ -0,0 +1,3 @@
1
+ == 0.1.2 2011-06-06
2
+ * major enhancements
3
+ * Added rb-appscript and iTunes class so tracks can be added to playlists
data/README.rdoc CHANGED
@@ -13,6 +13,12 @@ The first time you run +kanye+, it will ask you for your user name.
13
13
  It appears Kanye hasn't been configured yet.
14
14
  What is your hype user name?
15
15
 
16
- This will output to +~/.kanye_rc+ some YAML options. Your downloads will now begin.
16
+ This will output options to <tt>~/.kanye_rc</tt>. Your downloads will now begin.
17
17
 
18
18
  Now that you've configured it, just run +kanye+ any time to go over your latest favorites.
19
+
20
+ == iTunes integration
21
+
22
+ By adding the following to your <tt>~/.kanye_rc</tt> file, Kanye will add tracks to your iTunes library and add them to a playlist named for the current month and year (ie."June 2011")
23
+
24
+ playlist: true
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ Jeweler::Tasks.new do |gem|
15
15
  gem.name = "kanye"
16
16
  gem.homepage = "http://github.com/samvincent/kanye"
17
17
  gem.license = "MIT"
18
- gem.summary = %Q{Ruby HypeM utility}
18
+ gem.summary = %Q{Ruby H-Y-P-E utility}
19
19
  gem.description = %Q{Lyrical genius, voice of a generation.}
20
20
  gem.email = "sam.vincent@mac.com"
21
21
  gem.authors = ["Sam Vincent"]
@@ -25,6 +25,7 @@ Jeweler::Tasks.new do |gem|
25
25
  gem.add_runtime_dependency 'sqlite3'
26
26
  gem.add_runtime_dependency 'nokogiri', '> 1.4.0'
27
27
  gem.add_runtime_dependency 'ruby-mp3info', '0.6.14'
28
+ gem.add_runtime_dependency 'rb-appscript', '0.6.1'
28
29
  # gem.add_development_dependency 'rspec', '> 1.2.3'
29
30
  end
30
31
  Jeweler::RubygemsDotOrgTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
data/bin/kanye CHANGED
@@ -4,6 +4,9 @@ $:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
4
4
  require 'rubygems'
5
5
  require 'kanye'
6
6
 
7
+ require 'shellwords'
8
+ include Shellwords
9
+
7
10
  KANYE_GLASSES = <<-GLASSES
8
11
 
9
12
  ..:ccCCO888@@@@@@@@@@@@@@@@@@@@@@88Coc:
@@ -56,13 +59,14 @@ if File.exist?(Kanye::DEFAULT_CONFIGURATION_PATH)
56
59
  config = load_configuration(Kanye::DEFAULT_CONFIGURATION_PATH)
57
60
  else
58
61
  puts "It appears Kanye doesn't know who you are yet."
59
- print "What is your hype name?"
62
+ print "What is your h-y-p-e name?"
60
63
  name = gets.chomp
61
64
  File.open(Kanye::DEFAULT_CONFIGURATION_PATH, "w") do |f|
62
65
  f.write "username: #{name}\n"
63
66
  f.write "pages: 5\n"
64
67
  f.write "path: #{Kanye::DEFAULT_DOWNLOAD_PATH}\n"
65
68
  f.write "db: #{Kanye::DEFAULT_DB_PATH}\n"
69
+ f.write "playlist: false\n"
66
70
  end
67
71
  config = load_configuration(Kanye::DEFAULT_CONFIGURATION_PATH)
68
72
  end
@@ -81,8 +85,24 @@ unless File.exists? config["db"]
81
85
  end
82
86
 
83
87
  # Grab as many pages as configured
88
+ pages = []
84
89
  (1..(config["pages"])).each do |page|
85
90
  user = config["username"]
86
- kanye = Kanye.new(user, page)
87
- kanye.download_all!
91
+ page = Kanye::Page.new(user, page)
92
+ pages << page
93
+
94
+ page.download_all!
95
+ end
96
+
97
+ if config["playlist"].to_s == "true"
98
+ itunes = Kanye::ITunes.new
99
+ pages.reverse.each do |page|
100
+ page.tracks.reverse.each do |track|
101
+ begin
102
+ itunes.add_to_playlist track.filename, Time.now.strftime("%B %Y")
103
+ `mv #{shellescape track.filename} ~/.Trash`
104
+ rescue MacTypes::FileNotFoundError
105
+ end
106
+ end
107
+ end
88
108
  end
data/kanye.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{kanye}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sam Vincent"]
12
- s.date = %q{2011-06-17}
12
+ s.date = %q{2011-06-30}
13
13
  s.default_executable = %q{kanye}
14
14
  s.description = %q{Lyrical genius, voice of a generation.}
15
15
  s.email = %q{sam.vincent@mac.com}
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.files = [
22
22
  ".document",
23
23
  "Gemfile",
24
+ "History",
24
25
  "LICENSE.txt",
25
26
  "README.rdoc",
26
27
  "Rakefile",
@@ -29,8 +30,12 @@ Gem::Specification.new do |s|
29
30
  "kanye.gemspec",
30
31
  "lib/kanye.rb",
31
32
  "lib/kanye/history.rb",
33
+ "lib/kanye/itunes.rb",
34
+ "lib/kanye/page.rb",
32
35
  "lib/kanye/track.rb",
33
36
  "spec/data/sample.html",
37
+ "spec/data/super.mp3",
38
+ "spec/kanye/itunes_spec.rb",
34
39
  "spec/kanye/track_spec.rb",
35
40
  "spec/kanye_spec.rb",
36
41
  "spec/spec_helper.rb"
@@ -39,8 +44,9 @@ Gem::Specification.new do |s|
39
44
  s.licenses = ["MIT"]
40
45
  s.require_paths = ["lib"]
41
46
  s.rubygems_version = %q{1.6.2}
42
- s.summary = %q{Ruby HypeM utility}
47
+ s.summary = %q{Ruby H-Y-P-E utility}
43
48
  s.test_files = [
49
+ "spec/kanye/itunes_spec.rb",
44
50
  "spec/kanye/track_spec.rb",
45
51
  "spec/kanye_spec.rb",
46
52
  "spec/spec_helper.rb"
@@ -54,6 +60,7 @@ Gem::Specification.new do |s|
54
60
  s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
55
61
  s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
56
62
  s.add_runtime_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
63
+ s.add_runtime_dependency(%q<rb-appscript>, ["= 0.6.1"])
57
64
  s.add_development_dependency(%q<rspec>, [">= 2"])
58
65
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
59
66
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -61,11 +68,13 @@ Gem::Specification.new do |s|
61
68
  s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
62
69
  s.add_runtime_dependency(%q<nokogiri>, ["> 1.4.0"])
63
70
  s.add_runtime_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
71
+ s.add_runtime_dependency(%q<rb-appscript>, ["= 0.6.1"])
64
72
  else
65
73
  s.add_dependency(%q<httparty>, [">= 0.7.4"])
66
74
  s.add_dependency(%q<sqlite3>, [">= 0"])
67
75
  s.add_dependency(%q<nokogiri>, [">= 0"])
68
76
  s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
77
+ s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
69
78
  s.add_dependency(%q<rspec>, [">= 2"])
70
79
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
71
80
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -73,12 +82,14 @@ Gem::Specification.new do |s|
73
82
  s.add_dependency(%q<sqlite3>, [">= 0"])
74
83
  s.add_dependency(%q<nokogiri>, ["> 1.4.0"])
75
84
  s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
85
+ s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
76
86
  end
77
87
  else
78
88
  s.add_dependency(%q<httparty>, [">= 0.7.4"])
79
89
  s.add_dependency(%q<sqlite3>, [">= 0"])
80
90
  s.add_dependency(%q<nokogiri>, [">= 0"])
81
91
  s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
92
+ s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
82
93
  s.add_dependency(%q<rspec>, [">= 2"])
83
94
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
84
95
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -86,6 +97,7 @@ Gem::Specification.new do |s|
86
97
  s.add_dependency(%q<sqlite3>, [">= 0"])
87
98
  s.add_dependency(%q<nokogiri>, ["> 1.4.0"])
88
99
  s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
100
+ s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
89
101
  end
90
102
  end
91
103
 
data/lib/kanye.rb CHANGED
@@ -3,68 +3,24 @@ require 'nokogiri'
3
3
  require 'mp3info'
4
4
  require 'sqlite3'
5
5
 
6
+ require 'kanye/page'
6
7
  require 'kanye/track'
7
8
  require 'kanye/history'
9
+ require 'kanye/itunes'
8
10
 
9
- class Kanye
10
- attr_reader :html, :response, :tracks
11
-
11
+ module Kanye
12
12
  DEFAULT_CONFIGURATION_PATH = File.expand_path("~/.kanye_rc")
13
13
  DEFAULT_DOWNLOAD_PATH = File.expand_path("~/Music/Kanye/")
14
14
  DEFAULT_DB_PATH = File.expand_path("~/Music/Kanye/.history.db")
15
-
16
- def initialize(path, page=1)
17
- @response = HTTParty.get url(path, page)
18
- @tracks = []
19
- @cookie = @response.headers['set-cookie']
20
- @html = @response.parsed_response
21
- parse_response
22
- end
23
-
24
- def download_all!
25
- while tracks.size > 0
26
- current_track = tracks.pop
27
- history = History.new(DEFAULT_DB_PATH)
28
- unless history.exists?(current_track)
29
- current_track.download!
30
- history.insert(current_track)
31
- puts "\tInserted song into db"
32
- end
15
+ BASE_URL = 'h' + 'y' + 'p' + 'e' + 'm' + '.com'
16
+
17
+ class << self
18
+ def download_path
19
+ @@download_path ||= DEFAULT_DOWNLOAD_PATH
33
20
  end
34
- end
35
-
36
- def url(path, page=1)
37
- "http://hypem.com/"+path+"/"+page.to_s+"?ax=1&ts="+timestamp
38
- end
39
-
40
- def self.download_path
41
- @@download_path ||= DEFAULT_DOWNLOAD_PATH
42
- end
43
-
44
- def self.db_path
45
- @@db_path ||= DEFAULT_DB_PATH
46
- end
47
-
48
- protected
49
-
50
- def parse_response
51
- html_doc = Nokogiri::HTML(@html)
52
- ids = @html.scan /\tid:\'(\w*)\'/
53
- keys = @html.scan /\tkey:\s+?\'([\d\w]*)\'/
54
- artists = html_doc.css('.track_name .artist').map { |node| node.content.strip }
55
- titles = html_doc.css('.track_name .artist + a').map { |node| node.content.strip }
56
- [ids, keys, titles, artists].each(&:flatten!)
57
-
58
- ids.each_with_index do |id, i|
59
- @tracks << Track.new(:id => ids[i],
60
- :key => keys[i],
61
- :title => titles[i],
62
- :artist => artists[i],
63
- :cookie => @cookie)
21
+
22
+ def db_path
23
+ @@db_path ||= DEFAULT_DB_PATH
64
24
  end
65
25
  end
66
-
67
- def timestamp
68
- ("%10.10f" % Time.now.utc.to_f).gsub('.','')
69
- end
70
26
  end
data/lib/kanye/history.rb CHANGED
@@ -1,14 +1,16 @@
1
- class History
2
- attr_reader :db
3
- def initialize(db_file)
4
- @db = SQLite3::Database.new(db_file)
5
- end
1
+ module Kanye
2
+ class History
3
+ attr_reader :db
4
+ def initialize(db_file)
5
+ @db = SQLite3::Database.new(db_file)
6
+ end
6
7
 
7
- def insert(track)
8
- db.execute("insert into tracks values (?, ?)", [nil, track.id])
9
- end
8
+ def insert(track)
9
+ db.execute("insert into tracks values (?, ?)", [nil, track.id])
10
+ end
10
11
 
11
- def exists?(track)
12
- db.execute("select * from tracks where key=?", track.id).any?
12
+ def exists?(track)
13
+ db.execute("select * from tracks where key=?", track.id).any?
14
+ end
13
15
  end
14
- end
16
+ end
@@ -0,0 +1,28 @@
1
+ require 'appscript'
2
+
3
+ module Kanye
4
+ class ITunes
5
+ include Appscript
6
+
7
+ def add_to_playlist(file, playlist_name)
8
+ list = playlist(playlist_name) || create_playlist(playlist_name)
9
+ raise "Playlist could not be found or created" unless list
10
+ track = itunes.add MacTypes::Alias.path(file)
11
+ track.duplicate(:to => list)
12
+ end
13
+
14
+ def playlist(name)
15
+ itunes.user_playlists[its.name.eq(name)].get.first
16
+ end
17
+
18
+ def create_playlist(name)
19
+ itunes.make(:new => :user_playlist, :with_properties => {:name => name})
20
+ end
21
+
22
+ private
23
+
24
+ def itunes
25
+ app('iTunes')
26
+ end
27
+ end
28
+ end
data/lib/kanye/page.rb ADDED
@@ -0,0 +1,57 @@
1
+ module Kanye
2
+ class Page
3
+ attr_reader :html, :response, :tracks
4
+
5
+
6
+ def initialize(path, page=1)
7
+ @response = HTTParty.get url(path, page)
8
+ @tracks = []
9
+ @cookie = @response.headers['set-cookie']
10
+ @html = @response.parsed_response
11
+ parse_response
12
+ end
13
+
14
+ def download_all!
15
+ tracks.each do |current_track|
16
+ history = History.new(DEFAULT_DB_PATH)
17
+ unless history.exists?(current_track)
18
+ begin
19
+ current_track.download!
20
+ rescue Mp3InfoError => e
21
+ print e.message
22
+ end
23
+
24
+ history.insert(current_track)
25
+ puts "\tInserted song into db"
26
+ end
27
+ end
28
+ end
29
+
30
+ def url(path, page=1)
31
+ "http://#{BASE_URL}/"+path+"/"+page.to_s+"?ax=1&ts="+timestamp
32
+ end
33
+
34
+ protected
35
+
36
+ def parse_response
37
+ html_doc = Nokogiri::HTML(@html)
38
+ ids = @html.scan /\tid:\'(\w*)\'/
39
+ keys = @html.scan /\tkey:\s+?\'([\d\w]*)\'/
40
+ artists = html_doc.css('.track_name .artist').map { |node| node.content.strip }
41
+ titles = html_doc.css('.track_name .artist + a').map { |node| node.content.strip }
42
+ [ids, keys, titles, artists].each { |a| a.flatten!; a.reverse! }
43
+
44
+ ids.each_with_index do |id, i|
45
+ @tracks << Track.new(:id => ids[i],
46
+ :key => keys[i],
47
+ :title => titles[i],
48
+ :artist => artists[i],
49
+ :cookie => @cookie)
50
+ end
51
+ end
52
+
53
+ def timestamp
54
+ ("%10.10f" % Time.now.utc.to_f).gsub('.','')
55
+ end
56
+ end
57
+ end
data/lib/kanye/track.rb CHANGED
@@ -1,53 +1,57 @@
1
- class NoKeyError < StandardError; end
1
+ module Kanye
2
+ class NoKeyError < StandardError; end
2
3
 
3
- class Track
4
- def initialize(params={})
5
- @id = params[:id]
6
- @key = params[:key]
7
- @title = params[:title]
8
- @artist = params[:artist]
9
- @cookie = params[:cookie]
10
- end
4
+ class Track
5
+ def initialize(params={})
6
+ @id = params[:id]
7
+ @key = params[:key]
8
+ @title = params[:title]
9
+ @artist = params[:artist]
10
+ @cookie = params[:cookie]
11
+ end
11
12
 
12
- attr_reader :id, :key, :title, :artist, :cookie
13
+ attr_reader :id, :key, :title, :artist, :cookie
13
14
 
14
- def url
15
- 'http://hypem.com/serve/play/'+ id + '/' + key + ".mp3"
16
- end
15
+ def url
16
+ "http://#{BASE_URL}/serve/source/" + id + '/' + key
17
+ end
17
18
 
18
- def download!
19
- raise(NoKeyError, "Couldn't find :key for '#{self}'") if key.blank?
20
- response = HTTParty.get(url, :headers => {'cookie' => cookie})
19
+ def download!
20
+ raise(NoKeyError, "Couldn't find :key for '#{self}'") if key.blank?
21
21
 
22
- print "Attempting to download ", self
23
- puts "\n\tDownloading song..."
22
+ response = HTTParty.get(url, :headers => {'cookie' => cookie})
23
+ raise "Response Code '#{response.code}' - Something has changed." unless response.code == 200
24
24
 
25
- File.open(filename, "wb") do |f|
26
- f.write(response.parsed_response)
27
- end
28
25
 
29
- set_id3_tags!
30
- end
26
+ print "Attempting to download ", self
27
+ puts "\n\tDownloading song..."
31
28
 
32
- def to_s
33
- "(" + [key, title, artist].join(", ") + ")"
34
- end
29
+ mp3_url = response.parsed_response["url"]
30
+ mp3_response = HTTParty.get(mp3_url)
31
+
32
+ File.open(filename, "wb") do |f|
33
+ f.write(mp3_response.parsed_response)
34
+ end
35
+
36
+ set_id3_tags!
37
+ end
38
+
39
+ def to_s
40
+ "(" + [key, title, artist].join(", ") + ")"
41
+ end
35
42
 
36
- def filename
37
- name = [artist,title].join('-').gsub(/[ \/]/, "-").downcase
38
- File.join(Kanye.download_path, name + ".mp3")
39
- end
43
+ def filename
44
+ name = [artist,title].join('-').gsub(/[ \/]/, "-").downcase
45
+ File.join(Kanye.download_path, name + ".mp3")
46
+ end
40
47
 
41
- private
48
+ private
42
49
 
43
- def set_id3_tags!
44
- begin
45
- Mp3Info.open(filename, :encoding => 'utf-8') do |mp3|
50
+ def set_id3_tags!
51
+ Mp3Info.open(filename) do |mp3|
46
52
  mp3.tag.artist = artist
47
53
  mp3.tag.title = title
48
54
  end
49
- rescue Mp3InfoError => e
50
- print e.message
51
55
  end
52
56
  end
53
- end
57
+ end
@@ -11,7 +11,7 @@
11
11
 
12
12
  <div class="message-push" id="flash-warning" style="display: none">
13
13
  <div id="message-intro">
14
- <p>You seem to be missing <a href="http://www.adobe.com/support/flashplayer/downloads.html">Adobe's Flash Player</a>, please install it before attempting to listen to music on the Machine.</p>
14
+ <p>You seem to be missing <a href="http://www.adobe.com/support/flashplayer/downloads.html">Adobe's Flash Player</a>, please install it before attempting to listen to music on the .</p>
15
15
  </div>
16
16
  </div>
17
17
 
@@ -69,7 +69,7 @@
69
69
 
70
70
 
71
71
  <h3 class="track_name">
72
- <a class="artist" title="Rusko - search hype machine for this artist" href="/artist/Rusko">
72
+ <a class="artist" title="Rusko - search for this artist" href="/artist/Rusko">
73
73
  Rusko</a>
74
74
  -
75
75
 
@@ -170,7 +170,7 @@
170
170
  href="http://www.melophobe.com/concert-reviews/rusko-doorly-sir-kutz-roseland-theater-portland-or1/"
171
171
  title="Read this post: Rusko + Doorly + Sir Kutz – Ros&hellip;">
172
172
  Posted 4 days ago&nbsp;&raquo;<span style="background:url(
173
- http://static-ak.hypem.net/images/albumart2.gif
173
+ http://static-ak.m.net/images/albumart2.gif
174
174
  );"></span></a>
175
175
 
176
176
  </p>
@@ -198,7 +198,7 @@
198
198
 
199
199
 
200
200
  <h3 class="track_name">
201
- <a class="artist" title="Rusko - search hype machine for this artist" href="/artist/Rusko">
201
+ <a class="artist" title="Rusko - search for this artist" href="/artist/Rusko">
202
202
  Rusko</a>
203
203
  -
204
204
 
@@ -299,7 +299,7 @@
299
299
  href="http://www.earmilk.com/2011/04/18/rusko-everyday-the-remixes/"
300
300
  title="Read this post: Rusko – Everyday [The Remixes]">
301
301
  Posted 3 days ago&nbsp;&raquo;<span style="background:url(
302
- http://static-ak.hypem.net/thumbs/3/1459123.png
302
+ http://static-ak.m.net/thumbs/3/1459123.png
303
303
  );"></span></a>
304
304
 
305
305
  </p>
@@ -327,7 +327,7 @@
327
327
 
328
328
 
329
329
  <h3 class="track_name">
330
- <a class="artist" title="Washed Out feat. Caroline Polachek - search hype machine for this artist" href="/artist/Washed Out feat. Caroline Polachek">
330
+ <a class="artist" title="Washed Out feat. Caroline Polachek - search for this artist" href="/artist/Washed Out feat. Caroline Polachek">
331
331
  Washed Out feat. Caroline Polachek</a>
332
332
  -
333
333
 
@@ -428,7 +428,7 @@
428
428
  href="http://www.tiltmag.com/2011/04/washed-out-signs-to-sub-pop.html"
429
429
  title="Read this post: Washed Out Signs to Sub Pop">
430
430
  Posted 14 hrs ago&nbsp;&raquo;<span style="background:url(
431
- http://static-ak.hypem.net/thumbs/6/1461916.png
431
+ http://static-ak.m.net/thumbs/6/1461916.png
432
432
  );"></span></a>
433
433
 
434
434
  </p>
@@ -456,7 +456,7 @@
456
456
 
457
457
 
458
458
  <h3 class="track_name">
459
- <a class="artist" title="Le Castle Vania - search hype machine for this artist" href="/artist/Le Castle Vania">
459
+ <a class="artist" title="Le Castle Vania - search for this artist" href="/artist/Le Castle Vania">
460
460
  Le Castle Vania</a>
461
461
  -
462
462
 
@@ -557,7 +557,7 @@
557
557
  href="http://www.themusicninja.com/electro-dj-falcon-thomas-bangalter-together-le-castle-vania-computer-clubs-summer-bootleg-mix/"
558
558
  title="Read this post: [Electro] DJ Falcon + Thomas Bang&hellip;">
559
559
  Posted 9 hrs ago&nbsp;&raquo;<span style="background:url(
560
- http://static-ak.hypem.net/thumbs/7/1462247.png
560
+ http://static-ak.m.net/thumbs/7/1462247.png
561
561
  );"></span></a>
562
562
 
563
563
  </p>
@@ -585,7 +585,7 @@
585
585
 
586
586
 
587
587
  <h3 class="track_name">
588
- <a class="artist" title="Earl Da Grey - search hype machine for this artist" href="/artist/Earl Da Grey">
588
+ <a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
589
589
  Earl Da Grey</a>
590
590
  -
591
591
 
@@ -682,7 +682,7 @@
682
682
  href="http://www.ilictronix.com/2011/04/not-my-cup-of-tea.html"
683
683
  title="Read this post: Not My Cup of Tea">
684
684
  Posted 5 days ago&nbsp;&raquo;<span style="background:url(
685
- http://static-ak.hypem.net/thumbs/3/1457903.png
685
+ http://static-ak.m.net/thumbs/3/1457903.png
686
686
  );"></span></a>
687
687
 
688
688
  </p>
@@ -710,7 +710,7 @@
710
710
 
711
711
  <div class="same-post section-track" >
712
712
  <h3 class="track_name">
713
- <a class="artist" title="Earl Da Grey - search hype machine for this artist" href="/artist/Earl Da Grey">
713
+ <a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
714
714
  Earl Da Grey </a> -
715
715
  <a title="Heavenly Motion - go to page for this track" href="/item/1ar7k/Earl+Da+Grey+-+Heavenly+Motion">
716
716
  Heavenly Motion </a>
@@ -789,7 +789,7 @@
789
789
 
790
790
  <div class="same-post section-track" >
791
791
  <h3 class="track_name">
792
- <a class="artist" title="Earl Da Grey - search hype machine for this artist" href="/artist/Earl Da Grey">
792
+ <a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
793
793
  Earl Da Grey </a> -
794
794
  <a title="Millionaire Radio - go to page for this track" href="/item/1ar7g/Earl+Da+Grey+-+Millionaire+Radio">
795
795
  Millionaire Radio </a>
@@ -868,7 +868,7 @@
868
868
 
869
869
  <div class="same-post section-track" >
870
870
  <h3 class="track_name">
871
- <a class="artist" title="Earl Da Grey - search hype machine for this artist" href="/artist/Earl Da Grey">
871
+ <a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
872
872
  Earl Da Grey </a> -
873
873
  <a title="Taboo - go to page for this track" href="/item/1ar7h/Earl+Da+Grey+-+Taboo">
874
874
  Taboo </a>
@@ -941,14 +941,14 @@
941
941
  </div><!-- same-post -->
942
942
 
943
943
  </div><!-- section-player -->
944
- </div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the Machine with the music YOU <em>Love</em> &bull; <strong>Sign Up Now &raquo;</strong></span></a>
944
+ </div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the with the music YOU <em>Love</em> &bull; <strong>Sign Up Now &raquo;</strong></span></a>
945
945
  <div class="section section-track section-odd">
946
946
  <div class="section-player" >
947
947
 
948
948
 
949
949
 
950
950
  <h3 class="track_name">
951
- <a class="artist" title="James Varnish - search hype machine for this artist" href="/artist/James Varnish">
951
+ <a class="artist" title="James Varnish - search for this artist" href="/artist/James Varnish">
952
952
  James Varnish</a>
953
953
  -
954
954
 
@@ -1045,7 +1045,7 @@
1045
1045
  href="http://www.vacayvitamins.com/electro/together-boston-2011-music-arts-technology/"
1046
1046
  title="Read this post: Together Boston 2011 (Music, Arts&hellip;">
1047
1047
  Posted 4 days ago&nbsp;&raquo;<span style="background:url(
1048
- http://static-ak.hypem.net/thumbs/5/1458305.png
1048
+ http://static-ak.m.net/thumbs/5/1458305.png
1049
1049
  );"></span></a>
1050
1050
 
1051
1051
  </p>
@@ -1073,7 +1073,7 @@
1073
1073
 
1074
1074
 
1075
1075
  <h3 class="track_name">
1076
- <a class="artist" title="Jamaica - search hype machine for this artist" href="/artist/Jamaica">
1076
+ <a class="artist" title="Jamaica - search for this artist" href="/artist/Jamaica">
1077
1077
  Jamaica</a>
1078
1078
  -
1079
1079
 
@@ -1174,7 +1174,7 @@
1174
1174
  href="http://allthingsgomusic.com/interview-jamaica"
1175
1175
  title="Read this post: Interview: Jamaica">
1176
1176
  Posted 4 days ago&nbsp;&raquo;<span style="background:url(
1177
- http://static-ak.hypem.net/thumbs/6/1458346.png
1177
+ http://static-ak.m.net/thumbs/6/1458346.png
1178
1178
  );"></span></a>
1179
1179
 
1180
1180
  </p>
@@ -1202,7 +1202,7 @@
1202
1202
 
1203
1203
 
1204
1204
  <h3 class="track_name">
1205
- <a class="artist" title="Radiohead - search hype machine for this artist" href="/artist/Radiohead">
1205
+ <a class="artist" title="Radiohead - search for this artist" href="/artist/Radiohead">
1206
1206
  Radiohead</a>
1207
1207
  -
1208
1208
 
@@ -1303,7 +1303,7 @@
1303
1303
  href="http://tympanogram.com/music/stream-radiohead-supercollider/"
1304
1304
  title="Read this post: [stream] Radiohead // Supercollid&hellip;">
1305
1305
  Posted 14 hrs ago&nbsp;&raquo;<span style="background:url(
1306
- http://static-ak.hypem.net/thumbs/0/1461900.png
1306
+ http://static-ak.m.net/thumbs/0/1461900.png
1307
1307
  );"></span></a>
1308
1308
 
1309
1309
  </p>
@@ -1331,7 +1331,7 @@
1331
1331
 
1332
1332
 
1333
1333
  <h3 class="track_name">
1334
- <a class="artist" title="Dillon Francis - search hype machine for this artist" href="/artist/Dillon Francis">
1334
+ <a class="artist" title="Dillon Francis - search for this artist" href="/artist/Dillon Francis">
1335
1335
  Dillon Francis</a>
1336
1336
  -
1337
1337
 
@@ -1432,7 +1432,7 @@
1432
1432
  href="http://www.tiltmag.com/2011/04/la-dubstep-takeover-ooah-love-i-need.html"
1433
1433
  title="Read this post: L.A. DUBSTEP TAKEOVER! OOAH - The&hellip;">
1434
1434
  Posted yesterday&nbsp;&raquo;<span style="background:url(
1435
- http://static-ak.hypem.net/thumbs/1/1461131.png
1435
+ http://static-ak.m.net/thumbs/1/1461131.png
1436
1436
  );"></span></a>
1437
1437
 
1438
1438
  </p>
@@ -1460,7 +1460,7 @@
1460
1460
 
1461
1461
 
1462
1462
  <h3 class="track_name">
1463
- <a class="artist" title="The Human League - search hype machine for this artist" href="/artist/The Human League">
1463
+ <a class="artist" title="The Human League - search for this artist" href="/artist/The Human League">
1464
1464
  The Human League</a>
1465
1465
  -
1466
1466
 
@@ -1561,7 +1561,7 @@
1561
1561
  href="http://www.vacayvitamins.com/electro/mix-monday-alex-metric-bbc-radio-1-essential-mix/"
1562
1562
  title="Read this post: Mix Monday – Alex Metric BBC Ra&hellip;">
1563
1563
  Posted 3 days ago&nbsp;&raquo;<span style="background:url(
1564
- http://static-ak.hypem.net/thumbs/0/1458840.png
1564
+ http://static-ak.m.net/thumbs/0/1458840.png
1565
1565
  );"></span></a>
1566
1566
 
1567
1567
  </p>
@@ -1589,7 +1589,7 @@
1589
1589
 
1590
1590
  <div class="same-post section-track" >
1591
1591
  <h3 class="track_name">
1592
- <a class="artist" title="His Majesty Andre - search hype machine for this artist" href="/artist/His Majesty Andre">
1592
+ <a class="artist" title="His Majesty Andre - search for this artist" href="/artist/His Majesty Andre">
1593
1593
  His Majesty Andre </a> -
1594
1594
  <a title="Clubs - go to page for this track" href="/item/1as5w/His+Majesty+Andre+-+Clubs">
1595
1595
  Clubs </a>
@@ -1668,7 +1668,7 @@
1668
1668
 
1669
1669
  <div class="same-post section-track" >
1670
1670
  <h3 class="track_name">
1671
- <a class="artist" title="Cassian - search hype machine for this artist" href="/artist/Cassian">
1671
+ <a class="artist" title="Cassian - search for this artist" href="/artist/Cassian">
1672
1672
  Cassian </a> -
1673
1673
  <a title="Getting High (Original Mix) - go to page for this track" href="/item/1as5v/Cassian+-+Getting+High+Original+Mix+">
1674
1674
  Getting High (Original Mix) </a>
@@ -1747,7 +1747,7 @@
1747
1747
 
1748
1748
  <div class="same-post section-track" >
1749
1749
  <h3 class="track_name">
1750
- <a class="artist" title="Les Rythmes Digitales - search hype machine for this artist" href="/artist/Les Rythmes Digitales">
1750
+ <a class="artist" title="Les Rythmes Digitales - search for this artist" href="/artist/Les Rythmes Digitales">
1751
1751
  Les Rythmes Digitales </a> -
1752
1752
  <a title="About Funk - go to page for this track" href="/item/1as5z/Les+Rythmes+Digitales+-+About+Funk">
1753
1753
  About Funk </a>
@@ -1826,7 +1826,7 @@
1826
1826
 
1827
1827
  <div class="same-post section-track" >
1828
1828
  <h3 class="track_name">
1829
- <a class="artist" title="BeatauCue - search hype machine for this artist" href="/artist/BeatauCue">
1829
+ <a class="artist" title="BeatauCue - search for this artist" href="/artist/BeatauCue">
1830
1830
  BeatauCue </a> -
1831
1831
  <a title="Behold - go to page for this track" href="/item/1873c/BeatauCue+-+Behold">
1832
1832
  Behold </a>
@@ -1906,14 +1906,14 @@
1906
1906
  </div><!-- same-post -->
1907
1907
 
1908
1908
  </div><!-- section-player -->
1909
- </div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the Machine with the music YOU <em>Love</em> &bull; <strong>Sign Up Now &raquo;</strong></span></a>
1909
+ </div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the with the music YOU <em>Love</em> &bull; <strong>Sign Up Now &raquo;</strong></span></a>
1910
1910
  <div class="section section-track section-even">
1911
1911
  <div class="section-player" >
1912
1912
 
1913
1913
 
1914
1914
 
1915
1915
  <h3 class="track_name">
1916
- <a class="artist" title="Toddla T - search hype machine for this artist" href="/artist/Toddla T">
1916
+ <a class="artist" title="Toddla T - search for this artist" href="/artist/Toddla T">
1917
1917
  Toddla T</a>
1918
1918
  -
1919
1919
 
@@ -2014,7 +2014,7 @@
2014
2014
  href="http://schitzpopinov.com/blog/words-with-doorly"
2015
2015
  title="Read this post: Words with Doorly">
2016
2016
  Posted yesterday&nbsp;&raquo;<span style="background:url(
2017
- http://static-ak.hypem.net/thumbs/4/1461244.png
2017
+ http://static-ak.m.net/thumbs/4/1461244.png
2018
2018
  );"></span></a>
2019
2019
 
2020
2020
  </p>
@@ -2042,7 +2042,7 @@
2042
2042
 
2043
2043
 
2044
2044
  <h3 class="track_name">
2045
- <a class="artist" title="Danger Granger - search hype machine for this artist" href="/artist/Danger Granger">
2045
+ <a class="artist" title="Danger Granger - search for this artist" href="/artist/Danger Granger">
2046
2046
  Danger Granger</a>
2047
2047
  -
2048
2048
 
@@ -2131,7 +2131,7 @@
2131
2131
  title="See other tracks posted by this blog"
2132
2132
  href="/blog/earmilk/11067">
2133
2133
  earmilk</a>
2134
- &ldquo;Mashup Monday – We’re going to melt you faces off with enough mashed up music to make you wanna slap&hellip;&rdquo;
2134
+ &ldquo;Mashup Monday going to melt you faces off with enough mashed up music to make you wanna slap&hellip;&rdquo;
2135
2135
  <a
2136
2136
  class="readpost"
2137
2137
  target="_blank"
@@ -2139,7 +2139,7 @@
2139
2139
  href="http://www.earmilk.com/2011/04/18/mashup-monday-week-20/"
2140
2140
  title="Read this post: Mashup Monday – Week 20">
2141
2141
  Posted 3 days ago&nbsp;&raquo;<span style="background:url(
2142
- http://static-ak.hypem.net/thumbs/9/1459019.png
2142
+ http://static-ak.m.net/thumbs/9/1459019.png
2143
2143
  );"></span></a>
2144
2144
 
2145
2145
  </p>
@@ -2167,7 +2167,7 @@
2167
2167
 
2168
2168
  <div class="same-post section-track" >
2169
2169
  <h3 class="track_name">
2170
- <a class="artist" title="DEFEP - search hype machine for this artist" href="/artist/DEFEP">
2170
+ <a class="artist" title="DEFEP - search for this artist" href="/artist/DEFEP">
2171
2171
  DEFEP </a> -
2172
2172
  <a title="Rolling it Right (Afrojack vs Adele) - go to page for this track" href="/item/1asae/DEFEP+-+Rolling+it+Right+Afrojack+vs+Adele+">
2173
2173
  Rolling it Right (Afrojack vs Adele) </a>
Binary file
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+ require 'appscript'
3
+
4
+ describe Kanye::ITunes do
5
+ include Appscript
6
+ KANYE_TEST = 'KANYE_TEST'
7
+
8
+ describe :add_to_playlist do
9
+ let(:list) { Kanye::ITunes.new.playlist(KANYE_TEST) }
10
+ after { begin app('iTunes').delete(list); rescue; end }
11
+
12
+ context "when file found" do
13
+ context "and playlist is June" do
14
+ let(:file) { File.expand_path('spec/data/super.mp3') }
15
+
16
+ before do
17
+ Kanye::ITunes.new.add_to_playlist(file, KANYE_TEST)
18
+ end
19
+
20
+ it "should add song to playlist" do
21
+ tracks = app('iTunes').user_playlists[its.name.eq(KANYE_TEST)].first.tracks.name.get
22
+ tracks.should include('super')
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ describe :playlist do
29
+ let(:list) { Kanye::ITunes.new.create_playlist(KANYE_TEST) }
30
+ before { list }
31
+ after { begin app('iTunes').delete(list); rescue; end }
32
+
33
+ context "playlist is found" do
34
+ it "should return appscript reference" do
35
+ Kanye::ITunes.new.playlist(KANYE_TEST).class.should == Appscript::Reference
36
+ end
37
+ end
38
+
39
+ context "playlist can not be found" do
40
+ before { app('iTunes').delete list }
41
+ it "should return nil" do
42
+ Kanye::ITunes.new.playlist(KANYE_TEST).should be_nil
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Track do
3
+ describe Kanye::Track do
4
4
  before do
5
- @track = Track.new(:id => 'id', :key => 'key', :artist => 'Alan Braxe', :title => 'Rubicon', :cookie => 'cookie')
5
+ @track = Kanye::Track.new(:id => 'id', :key => 'key', :artist => 'Alan Braxe', :title => 'Rubicon', :cookie => 'cookie')
6
6
  end
7
7
 
8
8
  describe "url" do
9
9
  it "should contain contain :id and :key" do
10
- @track.url.should == "http://hypem.com/serve/play/id/key.mp3"
10
+ @track.url.should == "http://#{Kanye::BASE_URL}/serve/source/id/key"
11
11
  end
12
12
  end
13
13
 
@@ -19,12 +19,12 @@ describe Track do
19
19
 
20
20
  describe "download!" do
21
21
  before do
22
- HTTParty.stub!(:get)
22
+ HTTParty.stub!(:get) { mock(:response, :parsed_response => {}, :code => 200) }
23
23
  File.stub!(:open)
24
24
  Mp3Info.stub!(:open)
25
25
  end
26
26
 
27
- it "should request mp3 from hypem with cookie" do
27
+ it "should request mp3 with cookie" do
28
28
  HTTParty.should_receive(:get).with(@track.url, {:headers => {"cookie" => @track.cookie}})
29
29
  @track.download!
30
30
  end
data/spec/kanye_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Kanye do
3
+ describe Kanye::Page do
4
4
  describe '#parse_response' do
5
5
  let(:html) { File.open('spec/data/sample.html', 'r').read }
6
6
 
@@ -12,7 +12,7 @@ describe Kanye do
12
12
  HTTParty.stub!(:get).and_return(resp)
13
13
  end
14
14
 
15
- let(:kanye) { Kanye.new('test') }
15
+ let(:kanye) { Kanye::Page.new('test') }
16
16
 
17
17
  describe 'format strings' do
18
18
  results = [
@@ -37,7 +37,7 @@ describe Kanye do
37
37
  ["Danger Granger","Daniel is a Wild Cat (Porter Robinson vs Bat For Lashes)","1asad","65257400b1a1266adb3173f029bbb1a8","yesplease"],
38
38
  ["DEFEP","Rolling it Right (Afrojack vs Adele)","1asae","63cbcb3a740e1ad0cb7163b23e33a9d6","yesplease"]
39
39
  ]
40
- results.each_with_index do |track, index|
40
+ results.reverse!.each_with_index do |track, index|
41
41
  describe "track No. #{index+1}" do
42
42
  subject { kanye.tracks[index] }
43
43
  its(:artist) { should == results[index][0] }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanye
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sam Vincent
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-17 00:00:00 -07:00
18
+ date: 2011-06-30 00:00:00 -07:00
19
19
  default_executable: kanye
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -79,9 +79,25 @@ dependencies:
79
79
  type: :runtime
80
80
  version_requirements: *id004
81
81
  - !ruby/object:Gem::Dependency
82
- name: rspec
82
+ name: rb-appscript
83
83
  prerelease: false
84
84
  requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - "="
88
+ - !ruby/object:Gem::Version
89
+ hash: 5
90
+ segments:
91
+ - 0
92
+ - 6
93
+ - 1
94
+ version: 0.6.1
95
+ type: :runtime
96
+ version_requirements: *id005
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ prerelease: false
100
+ requirement: &id006 !ruby/object:Gem::Requirement
85
101
  none: false
86
102
  requirements:
87
103
  - - ">="
@@ -91,11 +107,11 @@ dependencies:
91
107
  - 2
92
108
  version: "2"
93
109
  type: :development
94
- version_requirements: *id005
110
+ version_requirements: *id006
95
111
  - !ruby/object:Gem::Dependency
96
112
  name: bundler
97
113
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
114
+ requirement: &id007 !ruby/object:Gem::Requirement
99
115
  none: false
100
116
  requirements:
101
117
  - - ~>
@@ -107,11 +123,11 @@ dependencies:
107
123
  - 0
108
124
  version: 1.0.0
109
125
  type: :development
110
- version_requirements: *id006
126
+ version_requirements: *id007
111
127
  - !ruby/object:Gem::Dependency
112
128
  name: jeweler
113
129
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::Requirement
130
+ requirement: &id008 !ruby/object:Gem::Requirement
115
131
  none: false
116
132
  requirements:
117
133
  - - ~>
@@ -123,11 +139,11 @@ dependencies:
123
139
  - 2
124
140
  version: 1.5.2
125
141
  type: :development
126
- version_requirements: *id007
142
+ version_requirements: *id008
127
143
  - !ruby/object:Gem::Dependency
128
144
  name: httparty
129
145
  prerelease: false
130
- requirement: &id008 !ruby/object:Gem::Requirement
146
+ requirement: &id009 !ruby/object:Gem::Requirement
131
147
  none: false
132
148
  requirements:
133
149
  - - ">="
@@ -139,11 +155,11 @@ dependencies:
139
155
  - 4
140
156
  version: 0.7.4
141
157
  type: :runtime
142
- version_requirements: *id008
158
+ version_requirements: *id009
143
159
  - !ruby/object:Gem::Dependency
144
160
  name: sqlite3
145
161
  prerelease: false
146
- requirement: &id009 !ruby/object:Gem::Requirement
162
+ requirement: &id010 !ruby/object:Gem::Requirement
147
163
  none: false
148
164
  requirements:
149
165
  - - ">="
@@ -153,11 +169,11 @@ dependencies:
153
169
  - 0
154
170
  version: "0"
155
171
  type: :runtime
156
- version_requirements: *id009
172
+ version_requirements: *id010
157
173
  - !ruby/object:Gem::Dependency
158
174
  name: nokogiri
159
175
  prerelease: false
160
- requirement: &id010 !ruby/object:Gem::Requirement
176
+ requirement: &id011 !ruby/object:Gem::Requirement
161
177
  none: false
162
178
  requirements:
163
179
  - - ">"
@@ -169,11 +185,11 @@ dependencies:
169
185
  - 0
170
186
  version: 1.4.0
171
187
  type: :runtime
172
- version_requirements: *id010
188
+ version_requirements: *id011
173
189
  - !ruby/object:Gem::Dependency
174
190
  name: ruby-mp3info
175
191
  prerelease: false
176
- requirement: &id011 !ruby/object:Gem::Requirement
192
+ requirement: &id012 !ruby/object:Gem::Requirement
177
193
  none: false
178
194
  requirements:
179
195
  - - "="
@@ -185,7 +201,23 @@ dependencies:
185
201
  - 14
186
202
  version: 0.6.14
187
203
  type: :runtime
188
- version_requirements: *id011
204
+ version_requirements: *id012
205
+ - !ruby/object:Gem::Dependency
206
+ name: rb-appscript
207
+ prerelease: false
208
+ requirement: &id013 !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - "="
212
+ - !ruby/object:Gem::Version
213
+ hash: 5
214
+ segments:
215
+ - 0
216
+ - 6
217
+ - 1
218
+ version: 0.6.1
219
+ type: :runtime
220
+ version_requirements: *id013
189
221
  description: Lyrical genius, voice of a generation.
190
222
  email: sam.vincent@mac.com
191
223
  executables:
@@ -198,6 +230,7 @@ extra_rdoc_files:
198
230
  files:
199
231
  - .document
200
232
  - Gemfile
233
+ - History
201
234
  - LICENSE.txt
202
235
  - README.rdoc
203
236
  - Rakefile
@@ -206,8 +239,12 @@ files:
206
239
  - kanye.gemspec
207
240
  - lib/kanye.rb
208
241
  - lib/kanye/history.rb
242
+ - lib/kanye/itunes.rb
243
+ - lib/kanye/page.rb
209
244
  - lib/kanye/track.rb
210
245
  - spec/data/sample.html
246
+ - spec/data/super.mp3
247
+ - spec/kanye/itunes_spec.rb
211
248
  - spec/kanye/track_spec.rb
212
249
  - spec/kanye_spec.rb
213
250
  - spec/spec_helper.rb
@@ -244,8 +281,9 @@ rubyforge_project:
244
281
  rubygems_version: 1.6.2
245
282
  signing_key:
246
283
  specification_version: 3
247
- summary: Ruby HypeM utility
284
+ summary: Ruby H-Y-P-E utility
248
285
  test_files:
286
+ - spec/kanye/itunes_spec.rb
249
287
  - spec/kanye/track_spec.rb
250
288
  - spec/kanye_spec.rb
251
289
  - spec/spec_helper.rb