From 2f2fe392d1f8ad599b94952e4608ce5dd1c69c42 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Mon, 13 Jan 2014 08:32:45 +0000 Subject: [PATCH 1/3] Add find_by_discid method. --- lib/musicbrainz/models/release.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/musicbrainz/models/release.rb b/lib/musicbrainz/models/release.rb index 8262838..0efc237 100644 --- a/lib/musicbrainz/models/release.rb +++ b/lib/musicbrainz/models/release.rb @@ -10,7 +10,7 @@ module MusicBrainz field :asin, String field :barcode, String field :quality, String - + def tracks @tracks ||= client.load(:release, { id: id, inc: [:recordings, :media], limit: 100 }, { binding: :release_tracks, @@ -26,6 +26,13 @@ module MusicBrainz create_model: :release }) end + + def find_by_discid(id) + client.load(:discid, { id: id, inc: [:media, :release_groups] }, { + binding: :release_group_releases, + create_models: :release + }) + end end end end From c65b270799f8d6c263f3b7fec2b5aa348957fbfd Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Mon, 13 Jan 2014 10:23:42 +0000 Subject: [PATCH 2/3] Add bindings for discid/release-list. --- lib/musicbrainz.rb | 1 + lib/musicbrainz/bindings/discid_releases.rb | 13 +++++++++++++ lib/musicbrainz/models/release.rb | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 lib/musicbrainz/bindings/discid_releases.rb diff --git a/lib/musicbrainz.rb b/lib/musicbrainz.rb index 9a01624..cbc3049 100644 --- a/lib/musicbrainz.rb +++ b/lib/musicbrainz.rb @@ -24,6 +24,7 @@ require "musicbrainz/models/track" require "musicbrainz/bindings/artist" require "musicbrainz/bindings/artist_search" require "musicbrainz/bindings/artist_release_groups" +require "musicbrainz/bindings/discid_releases" require "musicbrainz/bindings/relations" require "musicbrainz/bindings/release_group" require "musicbrainz/bindings/release_group_search" diff --git a/lib/musicbrainz/bindings/discid_releases.rb b/lib/musicbrainz/bindings/discid_releases.rb new file mode 100644 index 0000000..1210d32 --- /dev/null +++ b/lib/musicbrainz/bindings/discid_releases.rb @@ -0,0 +1,13 @@ +module MusicBrainz + module Bindings + module DiscidReleases + def parse(xml) + xml.xpath('./disc/release-list/release').map do |xml| + MusicBrainz::Bindings::Release.parse(xml) + end + end + + extend self + end + end +end diff --git a/lib/musicbrainz/models/release.rb b/lib/musicbrainz/models/release.rb index 0efc237..9f49133 100644 --- a/lib/musicbrainz/models/release.rb +++ b/lib/musicbrainz/models/release.rb @@ -28,8 +28,8 @@ module MusicBrainz end def find_by_discid(id) - client.load(:discid, { id: id, inc: [:media, :release_groups] }, { - binding: :release_group_releases, + client.load(:discid, { id: id }, { + binding: :discid_releases, create_models: :release }) end From 97b0c50073fbf1aca5654130af1750020b74306d Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Mon, 13 Jan 2014 10:52:27 +0000 Subject: [PATCH 3/3] Add spec for releases by discid. --- spec/models/release_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/models/release_spec.rb b/spec/models/release_spec.rb index 066d09c..9654fb0 100644 --- a/spec/models/release_spec.rb +++ b/spec/models/release_spec.rb @@ -35,4 +35,12 @@ describe MusicBrainz::Release do tracks.first.title.should == "Empire" tracks.first.length.should == 233013 end + + it "gets a list of matching releases for a discid" do + releases = MusicBrainz::Release.find_by_discid("pmzhT6ZlFiwSRCdVwV0eqire5_Y-") + releases.length.should == 2 + releases.first.id.should == "7a31cd5f-6a57-4fca-a731-c521df1d3b78" + releases.first.title.should == "Kveikur" + releases.first.asin.should == "B00C1GBOU6" + end end