Skip to content

Commit

Permalink
Add medium tracks
Browse files Browse the repository at this point in the history
  • Loading branch information
Richard-Degenne committed Jan 14, 2025
1 parent 779ee89 commit 32afe32
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 4 deletions.
3 changes: 3 additions & 0 deletions lib/musicbrainz/bindings/medium.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ def parse(xml)
{
position: (xml.xpath('./position').text rescue nil),
format: (xml.xpath('./format').text rescue nil),
tracks: xml.xpath('./track-list/track').map do |track_xml|
MusicBrainz::Bindings::Track.parse(track_xml)
end
}
end

Expand Down
5 changes: 5 additions & 0 deletions lib/musicbrainz/models/medium.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,10 @@ module MusicBrainz
class Medium < BaseModel
field :position, Integer
field :format, String
field :tracks, Array

def tracks=(tracks_data)
@tracks = tracks_data.map { |track_data| Track.new(track_data) }
end
end
end
2 changes: 1 addition & 1 deletion lib/musicbrainz/models/release.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Release < BaseModel
field :quality, String

def mediums
@mediums ||= client.load(:release, { id: id, inc: [:media], limit: 100 }, {
@mediums ||= client.load(:release, { id: id, inc: [:recordings, :media], limit: 100 }, {
binding: :release_mediums,
create_models: :medium,
sort: :position
Expand Down
19 changes: 19 additions & 0 deletions spec/bindings/medium_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,30 @@
<medium>
<position>1</position>
<format id="9712d52a-4509-3d4b-a1a2-67c88c643e31">CD</format>
<track-list>
<track id="0501cf38-48b7-3026-80d2-717d574b3d6a">
<position>1</position>
<number>1</number>
<length>233013</length>
<recording id="b3015bab-1540-4d4e-9f30-14872a1525f7">
<title>Empire</title>
<length>233013</length>
<first-release-date>2006-08-25</first-release-date>
</recording>
</track>
</track-list>
</medium>
XML

it 'contains medium attributes' do
expect(parse).to include(position: '1', format: 'CD')
end

it 'contains track attributes' do
expect(parse[:tracks].first).to include(
id: '0501cf38-48b7-3026-80d2-717d574b3d6a', position: '1', length: '233013',
recording_id: 'b3015bab-1540-4d4e-9f30-14872a1525f7', title: 'Empire'
)
end
end
end
11 changes: 8 additions & 3 deletions spec/models/release_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@
mock url: 'http://musicbrainz.org/ws/2/release/2225dd4c-ae9a-403b-8ea0-9e05014c778f?inc=media+release-groups',
fixture: 'release/find_2225dd4c-ae9a-403b-8ea0-9e05014c778f.xml'

mock url: 'http://musicbrainz.org/ws/2/release/2225dd4c-ae9a-403b-8ea0-9e05014c778f?inc=media&limit=100',
fixture: 'release/find_2225dd4c-ae9a-403b-8ea0-9e05014c778f.xml'

mock url: 'http://musicbrainz.org/ws/2/release/2225dd4c-ae9a-403b-8ea0-9e05014c778f?inc=recordings+media&limit=100',
fixture: 'release/find_2225dd4c-ae9a-403b-8ea0-9e05014c778f_tracks.xml'

Expand Down Expand Up @@ -58,6 +55,14 @@
expect(mediums.first.position).to eq 1
expect(mediums.first.format).to eq "CD"
end

it "gets correct mediums tracks" do
expect(mediums.first.tracks.length).to eq 11
expect(mediums.first.tracks.first.position).to eq 1
expect(mediums.first.tracks.first.recording_id).to eq "b3015bab-1540-4d4e-9f30-14872a1525f7"
expect(mediums.first.tracks.first.title).to eq "Empire"
expect(mediums.first.tracks.first.length).to eq 233013
end
end

describe '#tracks' do
Expand Down

0 comments on commit 32afe32

Please sign in to comment.