metallum 0.2.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.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format nested
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2
data/CHANGELOG ADDED
@@ -0,0 +1,15 @@
1
+ 09.09.2011
2
+ ----------
3
+ Peco Danajlovski <vortexmk@gmail.com>
4
+ * Started this CHANGELOG
5
+ * Introduced guard for automatic testing
6
+ * Implemented fetching basic band info
7
+ * Version bump to 0.1.0
8
+
9
+ 10.09.2011
10
+ ----------
11
+ Peco Danajlovski <vortexmk@gmail.com>
12
+ * Implemented fetching of all album urls from band's discography
13
+ * Refactored the classes into separate files
14
+ * Implemented fetching basic info for albums
15
+ * Version bump to 0.2.0
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'mechanize'
4
+
5
+ group :development, :test do
6
+ gem "rspec", "~> 2.6.0"
7
+ gem "bundler"
8
+ gem "jeweler"
9
+ gem "guard"
10
+ gem "guard-rspec"
11
+ gem "rb-inotify"
12
+ gem "libnotify"
13
+ end
14
+
15
+ # Specify your gem's dependencies in metallum.gemspec
16
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard 'rspec', :version => 2, :cli => "--color --format nested --fail-fast" do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
6
+
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core'
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec) do |spec|
6
+ spec.pattern = FileList['spec/**/*_spec.rb']
7
+ end
8
+
9
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
10
+ spec.pattern = 'spec/**/*_spec.rb'
11
+ spec.rcov = true
12
+ end
13
+
14
+ task :default => :spec
15
+
16
+ require 'rdoc/task'
17
+ Rake::RDocTask.new do |rdoc|
18
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
19
+
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = "metal-archives #{version}"
22
+ rdoc.rdoc_files.include('README*')
23
+ rdoc.rdoc_files.include('lib/**/*.rb')
24
+ end
@@ -0,0 +1,54 @@
1
+ class Album
2
+
3
+ def initialize(album_page)
4
+ @page = album_page
5
+ end
6
+
7
+ def title
8
+ element = @page.search("//h1[@class='album_name']")
9
+ element.text
10
+ end
11
+
12
+ def band_name
13
+ element = @page.search("//h2[@class='band_name']")
14
+ element.text
15
+ end
16
+
17
+ def album_type
18
+ element = @page.search("//div[@id='album_info']//dl[1]//dd[1]")
19
+ element.text
20
+ end
21
+
22
+ def release_date
23
+ element = @page.search("//div[@id='album_info']//dl[1]//dd[2]")
24
+ element.text
25
+ end
26
+
27
+ def record_label
28
+ element = @page.search("//div[@id='album_info']//dl[2]//dd[1]")
29
+ element.text
30
+ end
31
+
32
+ def track_list
33
+ tracks = []
34
+ elements = @page.search("//div[@id='album_tabs_tracklist']//table//tbody//tr[@class='odd' or @class='even']")
35
+ elements.each do |element|
36
+ track = Track.new
37
+ track.title = element.children[2].text.strip
38
+ track.duration = element.children[4].text.strip
39
+ tracks << track
40
+ end
41
+ return tracks
42
+ end
43
+
44
+ class Track
45
+
46
+ attr_accessor :title, :duration
47
+
48
+ def initialize
49
+ @duration = "0:00"
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,62 @@
1
+ class Band
2
+
3
+ def initialize(band_page, discography_page)
4
+ @page = band_page
5
+ @discography = discography_page
6
+ end
7
+
8
+ def name
9
+ element = @page.search("h1[@class='band_name']")
10
+ element.text.strip!
11
+ end
12
+
13
+ def country
14
+ element = @page.search("//div[@id='band_info']//dl//dd[1]//a")
15
+ element.children[0].text
16
+ end
17
+
18
+ def location
19
+ element = @page.search("//div[@id='band_info']//dl[1]//dd[2]")
20
+ element.text
21
+ end
22
+
23
+ def status
24
+ element = @page.search("//div[@id='band_info']//dl[1]//dd[3]")
25
+ element.text
26
+ end
27
+
28
+ def year_formed
29
+ element = @page.search("//div[@id='band_info']//dl//dd[4]")
30
+ element.text
31
+ end
32
+
33
+ def genre
34
+ element = @page.search("//div[@id='band_info']//dl[2]//dd[1]")
35
+ element.text
36
+ end
37
+
38
+ def lyrical_themes
39
+ element = @page.search("//div[@id='band_info']//dl[2]//dd[2]")
40
+ element.text
41
+ end
42
+
43
+ def record_label
44
+ element = @page.search("//div[@id='band_info']//dl[2]//dd[3]")
45
+ element.text
46
+ end
47
+
48
+ def photo_url
49
+ element = @page.search("//a[@id='photo']//img")
50
+ element.attribute("src").text
51
+ end
52
+
53
+ def logo_url
54
+ element = @page.search("//a[@id='logo']//img")
55
+ element.attribute("src").text
56
+ end
57
+
58
+ def album_urls
59
+ elements = @discography.search("//tbody//tr//td[1]/a").map { |el| el.attribute("href").text }
60
+ end
61
+
62
+ end
@@ -0,0 +1,27 @@
1
+ module Metallum
2
+
3
+ # DISCOGRAPHY_URL = "http://www.metal-archives.com/band/discography/id/3/tab/all"
4
+
5
+ class Agent
6
+
7
+ def initialize(url)
8
+ @agent = Mechanize.new
9
+ @page = @agent.get(url)
10
+ @discography = @agent.get("http://www.metal-archives.com/band/discography/id/#{extract_band_id}/tab/all")
11
+ end
12
+
13
+ def fetch_band
14
+ band = Band.new(@page, @discography)
15
+ end
16
+
17
+ def fetch_album
18
+ album = Album.new(@page)
19
+ end
20
+
21
+ def extract_band_id
22
+ @page.uri.to_s.match(/\/(\d+)/)[1]
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,3 @@
1
+ module Metallum
2
+ VERSION = "0.2.1"
3
+ end
data/lib/metallum.rb ADDED
@@ -0,0 +1,7 @@
1
+ require "metallum/version"
2
+ require "mechanize"
3
+ require "metallum/band"
4
+ require "metallum/album"
5
+ require "metallum/metallum"
6
+
7
+
data/metallum.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "metallum/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "metallum"
7
+ s.version = Metallum::VERSION
8
+ s.authors = ["Peco Danajlovski"]
9
+ s.email = ["vortexmk@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Metallum is a simple gem that fetches various data from metal-archives.com}
12
+ s.description = %q{Metallum is a simple gem that fetches various data from metal-archives.com}
13
+
14
+ s.rubyforge_project = "metallum"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Album" do
4
+
5
+ before(:each) do
6
+ @album_url = "http://www.metal-archives.com/albums/Dream_Theater/A_Dramatic_Turn_of_Events/309671"
7
+ @agent = Metallum::Agent.new(@album_url)
8
+ @album = @agent.fetch_album
9
+ end
10
+
11
+ it "should fetch the title of the album" do
12
+ @album.title.should == "A Dramatic Turn of Events"
13
+ end
14
+
15
+ it "should fetch the name of the band" do
16
+ @album.band_name.should == "Dream Theater"
17
+ end
18
+
19
+ it "should fetch the type of the album" do
20
+ @album.album_type.should == "Full-length"
21
+ end
22
+
23
+ it "should fetch the release date" do
24
+ @album.release_date.should == "September 13th, 2011"
25
+ end
26
+
27
+ it "should fetch the record label" do
28
+ @album.record_label.should == "Roadrunner Records"
29
+ end
30
+
31
+ it "should fetch track list" do
32
+ @album.track_list.size == 9
33
+ end
34
+
35
+ it "should fetch track titles" do
36
+ @album.track_list[0].title.should == "On the Backs of Angels"
37
+ @album.track_list[8].title.should == "Beneath the Surface"
38
+ end
39
+
40
+ it "should fetch the track length" do
41
+ @album.track_list[3].duration.should == "06:57"
42
+ @album.track_list[6].duration.should == "03:56"
43
+ end
44
+
45
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Band" do
4
+
5
+ before(:each) do
6
+ @band_url = 'http://www.metal-archives.com/bands/Blind_Guardian/3'
7
+ @agent = Metallum::Agent.new(@band_url)
8
+ @band = @agent.fetch_band
9
+ end
10
+
11
+ it "should fetch a band's name from url for band 'Hell'" do
12
+ @band_url = 'http://www.metal-archives.com/bands/Hell/5849'
13
+ @agent = Metallum::Agent.new(@band_url)
14
+ band = @agent.fetch_band
15
+ band.name.should == "Hell"
16
+ end
17
+
18
+ it "should fetch the band's name from url for band 'Blind Guardian'" do
19
+ @band.name.should == "Blind Guardian"
20
+ end
21
+
22
+ it "should fetch the band's country of origin" do
23
+ @band.country.should == "Germany"
24
+ end
25
+
26
+ it "should fetch the band's location" do
27
+ @band.location.should == "Krefeld, North Rhine-Westphalia"
28
+ end
29
+
30
+ it "should fetch band's status" do
31
+ @band.status.should == "Active"
32
+ end
33
+
34
+ it "should fetch the band's year of creation" do
35
+ @band.year_formed.should == "1986"
36
+ end
37
+
38
+ it "should fetch the band's genre" do
39
+ @band.genre.should == "Speed Metal (early), Power Metal (Later)"
40
+ end
41
+
42
+ it "should fetch band's lyrical themes" do
43
+ @band.lyrical_themes.should == "Epic Tales, Legends, Fantasy, Tolkien, Literature"
44
+ end
45
+
46
+ it "should fetch band's record label" do
47
+ @band.record_label.should == "Nuclear Blast Records"
48
+ end
49
+
50
+ it "should fetch band's photo url" do
51
+ @band.photo_url.should == "http://www.metal-archives.com/images/3/3_photo.jpg"
52
+ end
53
+
54
+ it "should fetch band's logo url" do
55
+ @band.logo_url.should == "http://www.metal-archives.com/images/3/3_logo.gif"
56
+ end
57
+
58
+ it "should fetch array of album urls" do
59
+ @band.album_urls[0] = "http://www.metal-archives.com/albums/Blind_Guardian/Battalions_of_Fear/9"
60
+ @band.album_urls[3] = "http://www.metal-archives.com/albums/Blind_Guardian/Follow_the_Blind/10"
61
+ end
62
+
63
+ end
64
+
@@ -0,0 +1,7 @@
1
+ # coding: utf-8
2
+ # require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+ require 'spec_helper'
4
+
5
+ describe Metallum do
6
+
7
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'metallum'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ # Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+ # require 'spec_helper'
10
+
11
+ RSpec.configure do |config|
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metallum
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.2.1
6
+ platform: ruby
7
+ authors:
8
+ - Peco Danajlovski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-09-10 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Metallum is a simple gem that fetches various data from metal-archives.com
18
+ email:
19
+ - vortexmk@gmail.com
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - .rspec
29
+ - .rvmrc
30
+ - CHANGELOG
31
+ - Gemfile
32
+ - Guardfile
33
+ - Rakefile
34
+ - lib/metallum.rb
35
+ - lib/metallum/album.rb
36
+ - lib/metallum/band.rb
37
+ - lib/metallum/metallum.rb
38
+ - lib/metallum/version.rb
39
+ - metallum.gemspec
40
+ - spec/metallum/album_spec.rb
41
+ - spec/metallum/band_spec.rb
42
+ - spec/metallum/metallum_spec.rb
43
+ - spec/spec_helper.rb
44
+ has_rdoc: true
45
+ homepage: ""
46
+ licenses: []
47
+
48
+ post_install_message:
49
+ rdoc_options: []
50
+
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ requirements: []
66
+
67
+ rubyforge_project: metallum
68
+ rubygems_version: 1.6.2
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Metallum is a simple gem that fetches various data from metal-archives.com
72
+ test_files: []
73
+