lib/musicbrainz/release.rb in musicbrainz-0.6.0 vs lib/musicbrainz/release.rb in musicbrainz-0.7.0

- old
+ new

@@ -1,42 +1,43 @@ # -*- encoding: utf-8 -*- + module MusicBrainz - class Release < MusicBrainz::Base - attr_accessor :id, :title, :status, :format, :date, :country - @tracks + class Release < Base + field :id, String + field :title, String + field :status, String + field :format, String + field :date, Time + field :country, String + def tracks - if @tracks.nil? and not self.id.nil? - @tracks = [] - Nokogiri::XML(self.class.load(:release, :id => self.id, :inc => [:recordings, :media], :limit => 100)).css('medium-list > medium > track-list > track').each do |r| - @tracks << MusicBrainz::Track.parse_xml(r) - end + @tracks ||= nil + if @tracks.nil? and !id.nil? + @tracks = self.class.load({ + :parser => :release_tracks, + :create_models => MusicBrainz::Track + }, { + :resource => :release, + :id => id, + :inc => [:recordings, :media], + :limit => 100 + }) + @tracks.sort{ |a, b| a.position <=> b.position } end - @tracks.sort{ |a, b| a.position <=> b.position } + @tracks end - def self.find mbid - xml = Nokogiri::XML(self.load(:release, :id => mbid, :inc => [:media])).css('release').first - self.parse_xml(xml) unless xml.nil? - end - - def self.parse_xml xml - @release = MusicBrainz::Release.new - @release.id = self.safe_get_attr(xml, nil, 'id') - @release.title = self.safe_get_value(xml, 'title') - @release.status = self.safe_get_value(xml, 'status') - @release.format = self.safe_get_value(xml, 'medium-list > medium > format') - date = xml.css('date').empty? ? '2030-12-31' : xml.css('date').text - if date.length == 0 - date = '2030-12-31' - elsif date.length == 4 - date += '-12-31' - elsif date.length == 7 - date += '-31' + class << self + def find(mbid) + load({ + :parser => :release_model, + :create_model => MusicBrainz::Release + }, { + :resource => :release, + :id => mbid, + :inc => [:media] + }) end - date = date.split('-') - @release.date = Time.utc(date[0], date[1], date[2]) - @release.country = self.safe_get_value(xml, 'country') - @release end end end