rbrainz 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/CHANGES +13 -1
  2. data/LICENSE +1 -1
  3. data/README +2 -2
  4. data/Rakefile +2 -2
  5. data/TODO +9 -2
  6. data/doc/README.rdoc +5 -5
  7. data/examples/getartist.rb +3 -2
  8. data/examples/getlabel.rb +3 -2
  9. data/examples/getrelease.rb +5 -2
  10. data/examples/getreleasegroup.rb +53 -0
  11. data/examples/gettrack.rb +3 -2
  12. data/examples/getuser.rb +2 -1
  13. data/examples/rate.rb +44 -0
  14. data/examples/searchartists.rb +3 -2
  15. data/examples/searchcdstubs.rb +41 -0
  16. data/examples/searchlabels.rb +3 -2
  17. data/examples/searchreleasegroups.rb +36 -0
  18. data/examples/searchreleases.rb +6 -4
  19. data/examples/searchtracks.rb +3 -2
  20. data/examples/submit_isrcs.rb +52 -0
  21. data/examples/tag.rb +3 -2
  22. data/lib/rbrainz.rb +2 -1
  23. data/lib/rbrainz/core_ext.rb +2 -1
  24. data/lib/rbrainz/core_ext/mbid.rb +2 -1
  25. data/lib/rbrainz/core_ext/net_http_digest.rb +3 -2
  26. data/lib/rbrainz/core_ext/range.rb +3 -2
  27. data/lib/rbrainz/core_ext/range/equality.rb +2 -1
  28. data/lib/rbrainz/data/countrynames.rb +6 -3
  29. data/lib/rbrainz/data/languagenames.rb +3 -2
  30. data/lib/rbrainz/data/releasetypenames.rb +3 -2
  31. data/lib/rbrainz/data/scriptnames.rb +3 -2
  32. data/lib/rbrainz/model.rb +3 -2
  33. data/lib/rbrainz/model/alias.rb +3 -2
  34. data/lib/rbrainz/model/artist.rb +11 -3
  35. data/lib/rbrainz/model/collection.rb +3 -2
  36. data/lib/rbrainz/model/default_factory.rb +18 -6
  37. data/lib/rbrainz/model/disc.rb +3 -2
  38. data/lib/rbrainz/model/entity.rb +2 -102
  39. data/lib/rbrainz/model/incomplete_date.rb +3 -2
  40. data/lib/rbrainz/model/individual.rb +11 -2
  41. data/lib/rbrainz/model/isrc.rb +100 -0
  42. data/lib/rbrainz/model/label.rb +5 -2
  43. data/lib/rbrainz/model/mbid.rb +28 -9
  44. data/lib/rbrainz/model/rateable.rb +34 -0
  45. data/lib/rbrainz/model/rating.rb +56 -0
  46. data/lib/rbrainz/model/relateable.rb +118 -0
  47. data/lib/rbrainz/model/relation.rb +2 -1
  48. data/lib/rbrainz/model/release.rb +17 -3
  49. data/lib/rbrainz/model/release_event.rb +3 -2
  50. data/lib/rbrainz/model/release_group.rb +97 -0
  51. data/lib/rbrainz/model/scored_collection.rb +3 -2
  52. data/lib/rbrainz/model/tag.rb +5 -4
  53. data/lib/rbrainz/model/taggable.rb +27 -0
  54. data/lib/rbrainz/model/track.rb +15 -2
  55. data/lib/rbrainz/model/user.rb +3 -2
  56. data/lib/rbrainz/utils.rb +2 -1
  57. data/lib/rbrainz/utils/data.rb +3 -2
  58. data/lib/rbrainz/utils/helper.rb +8 -2
  59. data/lib/rbrainz/version.rb +3 -2
  60. data/lib/rbrainz/webservice.rb +12 -7
  61. data/lib/rbrainz/webservice/filter.rb +53 -4
  62. data/lib/rbrainz/webservice/includes.rb +72 -11
  63. data/lib/rbrainz/webservice/mbxml.rb +129 -67
  64. data/lib/rbrainz/webservice/query.rb +156 -16
  65. data/lib/rbrainz/webservice/webservice.rb +104 -116
  66. data/test/lib/mock_webservice.rb +9 -2
  67. data/test/lib/test_entity.rb +2 -97
  68. data/test/lib/test_factory.rb +9 -1
  69. data/test/lib/test_rateable.rb +31 -0
  70. data/test/lib/test_relateable.rb +103 -0
  71. data/test/lib/test_taggable.rb +36 -0
  72. data/test/lib/testing_helper.rb +17 -2
  73. data/test/test-data/invalid/artist/ratings_1.xml +6 -0
  74. data/test/test-data/invalid/artist/ratings_2.xml +6 -0
  75. data/test/test-data/valid/artist/Tchaikovsky-2.xml +6 -0
  76. data/test/test-data/valid/label/Atlantic_Records_3.xml +6 -0
  77. data/test/test-data/valid/release-group/The_Cure_1.xml +36 -0
  78. data/test/test-data/valid/release/Highway_61_Revisited_2.xml +6 -0
  79. data/test/test-data/valid/track/Silent_All_These_Years_4.xml +3 -0
  80. data/test/test-data/valid/track/Silent_All_These_Years_6.xml +8 -0
  81. data/test/test_alias.rb +2 -1
  82. data/test/test_artist.rb +24 -2
  83. data/test/test_artist_filter.rb +2 -1
  84. data/test/test_artist_includes.rb +13 -3
  85. data/test/test_collection.rb +3 -2
  86. data/test/test_default_factory.rb +8 -1
  87. data/test/test_disc.rb +2 -1
  88. data/test/test_incomplete_date.rb +2 -1
  89. data/test/test_isrc.rb +87 -0
  90. data/test/test_label.rb +8 -1
  91. data/test/test_label_filter.rb +2 -1
  92. data/test/test_label_includes.rb +10 -3
  93. data/test/test_mbid.rb +2 -1
  94. data/test/test_mbxml.rb +93 -2
  95. data/test/test_query.rb +68 -5
  96. data/test/test_range_equality.rb +2 -1
  97. data/test/test_rating.rb +46 -0
  98. data/test/test_relation.rb +2 -1
  99. data/test/test_release.rb +37 -2
  100. data/test/test_release_event.rb +2 -1
  101. data/test/test_release_filter.rb +15 -2
  102. data/test/test_release_group.rb +104 -0
  103. data/test/test_release_group_filter.rb +61 -0
  104. data/test/test_release_group_includes.rb +46 -0
  105. data/test/test_release_includes.rb +16 -3
  106. data/test/test_scored_collection.rb +3 -2
  107. data/test/test_tag.rb +2 -1
  108. data/test/test_track.rb +28 -1
  109. data/test/test_track_filter.rb +2 -1
  110. data/test/test_track_includes.rb +13 -3
  111. data/test/test_utils.rb +2 -1
  112. data/test/test_webservice.rb +11 -1
  113. metadata +38 -20
  114. data/debian/changelog +0 -11
  115. data/debian/compat +0 -1
  116. data/debian/control +0 -13
  117. data/debian/copyright +0 -25
  118. data/debian/rules +0 -48
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
2
3
  #
3
4
  # Example script which searches the database for
4
5
  # tracks and displays the track data.
5
6
  #
6
- # $Id: searchtracks.rb 160 2007-07-27 13:18:04Z phw $
7
+ # $Id: searchtracks.rb 254 2009-05-13 20:04:36Z phw $
7
8
 
8
9
  # Just make sure we can run this example from the command
9
10
  # line even if RBrainz is not yet installed properly.
@@ -32,4 +33,4 @@ tracks = query.get_tracks(track_filter)
32
33
  # indicates how good the track matches the search parameters.
33
34
  tracks.each do |entry|
34
35
  print "%s: \"%s\" (%i%%)\r\n" % [entry.entity.artist, entry.entity.title, entry.score]
35
- end
36
+ end
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Example for submitting ISRCs to MusicBrainz.
5
+ # This script will submit the ISRCs for the release Clayman by In Flames
6
+ # (http://musicbrainz.org/album/1de625a1-55a5-4f8a-96f9-6d0a2a37ddcd.html).
7
+ # The ISRCs were taken from the GEMA database at
8
+ # http://mgonline.gema.de/soundcarrier/searchTracks.do?id=370495&seq=1&title=CLAYMAN
9
+ #
10
+ # $Id: submit_isrcs.rb 273 2009-05-24 22:29:04Z phw $
11
+
12
+ # Just make sure we can run this example from the command
13
+ # line even if RBrainz is not yet installed properly.
14
+ $: << 'lib/' << '../lib/'
15
+
16
+ # Load RBrainz and include the MusicBrainz namespace.
17
+ require 'rbrainz'
18
+ include MusicBrainz
19
+
20
+ # Get the username and password
21
+ print 'Username: ' unless ARGV[0]
22
+ username = ARGV[0] ? ARGV[0] : STDIN.gets.strip
23
+ print 'Password: ' unless ARGV[1]
24
+ password = ARGV[1] ? ARGV[1] : STDIN.gets.strip
25
+
26
+ # Set the authentication for the webservice.
27
+ ws = Webservice::Webservice.new(
28
+ :host => 'musicbrainz.org',
29
+ :username => username,
30
+ :password => password
31
+ )
32
+
33
+ # Create a new Query object which will provide
34
+ # us an interface to the MusicBrainz web service.
35
+ query = Webservice::Query.new(ws, :client_id => 'RBrainz test ' + RBRAINZ_VERSION)
36
+
37
+ # Submit the ISRCs for some tracks.
38
+ query.submit_isrcs([
39
+ ['7f574ec1-344c-4ae1-970d-3c757f9a717e', 'DED830049301'],
40
+ ['1393122c-364c-4fb6-9a4b-17eddce90152', 'DED830049302'],
41
+ ['2634965c-5299-4958-b0dc-47b166bb6898', 'DED830049303'],
42
+ ['dad6b8a4-0412-4a80-9123-3e0ebddaf82d', 'DED830049304'],
43
+ ['e1f7e805-33f3-4663-b294-3805b82405f9', 'DED830049305'],
44
+ ['d9f932ad-de0d-44ca-bf35-ae8184f63909', 'DED830049306'],
45
+ ['c983b62d-f528-433f-a402-a6317ce3d2d8', 'DED830049307'],
46
+ ['9d50b06a-4136-427f-8d11-b2efb0141da6', 'DED830049308'],
47
+ ['f2af3e3f-3f9f-4f8d-8b60-1d1b709aaf69', 'DED830049309'],
48
+ ['059384bc-fb45-445e-ab77-950d6ccf587a', 'DED830049310'],
49
+ ['2f4d7b47-a4ba-495a-b447-60b8287ed9c9', 'DED830049311'],
50
+ ])
51
+
52
+ puts "ISRCs submitted."
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
2
3
  #
3
4
  # Example script showing the use of folksonomy tagging with RBrainz.
4
5
  # It asks the user for his username and password and a MBID and queries the
5
6
  # MusicBrainz server for the tags, the user has applied to the entitity with
6
7
  # the given MBID. Afterwards the user can submit new tags.
7
8
  #
8
- # $Id: getuser.rb 145 2007-07-19 13:11:44Z phw $
9
+ # $Id: tag.rb 273 2009-05-24 22:29:04Z phw $
9
10
 
10
11
  # Just make sure we can run this example from the command
11
12
  # line even if RBrainz is not yet installed properly.
@@ -40,4 +41,4 @@ puts tags.to_a.join(', ')
40
41
  # Ask the user for new tags and submit them
41
42
  print 'Enter new tags: '
42
43
  new_tags = STDIN.gets.strip
43
- query.submit_user_tags(mbid, new_tags)
44
+ query.submit_user_tags(mbid, new_tags)
@@ -1,4 +1,5 @@
1
- # $Id: rbrainz.rb 145 2007-07-19 13:11:44Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: rbrainz.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # This is actually just a convenient shortcut that allows
4
5
  # the user to use RBrainz by just using <tt>require 'rbrainz'</tt>.
@@ -1,4 +1,5 @@
1
- # $Id: core_ext.rb 132 2007-07-12 19:55:52Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: core_ext.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: mbid.rb 148 2007-07-19 17:26:33Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: mbid.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Core extensions to add a to_mbid conversion to existing classes.
4
5
  #
@@ -1,4 +1,5 @@
1
- # $Id: net_http_digest.rb 182 2007-10-16 14:46:17Z nigel_graham $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: net_http_digest.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -86,4 +87,4 @@ module Net # :nodoc:
86
87
  return header
87
88
  end
88
89
  end
89
- end
90
+ end
@@ -1,4 +1,5 @@
1
- # $Id: range.rb 154 2007-07-24 12:39:02Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: range.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -12,4 +13,4 @@ class Range #:nodoc:
12
13
  # Extend Range with additional comparison operations.
13
14
  include MusicBrainz::CoreExtensions::Range::Equality
14
15
 
15
- end
16
+ end
@@ -1,4 +1,5 @@
1
- # $Id: equality.rb 154 2007-07-24 12:39:02Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: equality.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: countrynames.rb 141 2007-07-17 14:21:12Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: countrynames.rb 259 2009-05-17 17:44:00Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -242,7 +243,9 @@ module MusicBrainz
242
243
  'MZ' => 'Mozambique',
243
244
  'BA' => 'Bosnia and Herzegovina',
244
245
  'CD' => 'Congo, The Democratic Republic of the',
245
- 'CS' => 'Serbia and Montenegro',
246
+ 'CS' => 'Serbia and Montenegro (historical, 2003-2006)',
247
+ 'RS' => 'Serbia',
248
+ 'ME' => 'Montenegro',
246
249
  'HR' => 'Croatia',
247
250
  'KP' => 'Korea (North), Democratic People\'s Republic of',
248
251
  'KR' => 'Korea (South), Republic of',
@@ -258,4 +261,4 @@ module MusicBrainz
258
261
  }
259
262
 
260
263
  end
261
- end
264
+ end
@@ -1,4 +1,5 @@
1
- # $Id: languagenames.rb 141 2007-07-17 14:21:12Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: languagenames.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -404,4 +405,4 @@ module MusicBrainz
404
405
  'SQI' => 'Albanian',
405
406
  }
406
407
  end
407
- end
408
+ end
@@ -1,4 +1,5 @@
1
- # $Id: releasetypenames.rb 141 2007-07-17 14:21:12Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: releasetypenames.rb 273 2009-05-24 22:29:04Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -31,4 +32,4 @@ module MusicBrainz
31
32
  }
32
33
 
33
34
  end
34
- end
35
+ end
@@ -1,4 +1,5 @@
1
- # $Id: scriptnames.rb 141 2007-07-17 14:21:12Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: scriptnames.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -64,4 +65,4 @@ module MusicBrainz
64
65
  }
65
66
 
66
67
  end
67
- end
68
+ end
@@ -1,4 +1,5 @@
1
- # $Id: model.rb 143 2007-07-18 11:40:55Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: model.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -37,4 +38,4 @@ module MusicBrainz # :nodoc:
37
38
  VARIOUS_ARTISTS_ID = MBID.new('89ad4ac3-39f7-470e-963a-56509c546377', Artist.entity_type)
38
39
 
39
40
  end
40
- end
41
+ end
@@ -1,4 +1,5 @@
1
- # $Id: alias.rb 145 2007-07-19 13:11:44Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: alias.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -44,4 +45,4 @@ module MusicBrainz
44
45
  end
45
46
 
46
47
  end
47
- end
48
+ end
@@ -1,4 +1,5 @@
1
- # $Id: artist.rb 140 2007-07-17 13:27:54Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: artist.rb 258 2009-05-17 17:43:58Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -6,7 +7,6 @@
6
7
  # See LICENSE[file:../LICENSE.html] for permissions.
7
8
 
8
9
  require 'rbrainz/model/individual'
9
- require 'rbrainz/model/alias'
10
10
 
11
11
  module MusicBrainz
12
12
  module Model
@@ -37,7 +37,15 @@ module MusicBrainz
37
37
  # See Entity::ENTITY_TYPE.
38
38
  ENTITY_TYPE = :artist # :nodoc:
39
39
 
40
+ # A Collection of release groups of this artist.
41
+ attr_reader :release_groups
42
+
43
+ def initialize(id=nil, type=nil, name=nil, sort_name=nil)
44
+ super id, type, name, sort_name
45
+ @release_groups = Collection.new
46
+ end
47
+
40
48
  end
41
49
 
42
50
  end
43
- end
51
+ end
@@ -1,4 +1,5 @@
1
- # $Id: collection.rb 172 2007-08-24 11:19:19Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: collection.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -101,4 +102,4 @@ module MusicBrainz
101
102
  end
102
103
 
103
104
  end
104
- end
105
+ end
@@ -1,4 +1,5 @@
1
- # $Id: default_factory.rb 143 2007-07-18 11:40:55Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: default_factory.rb 273 2009-05-24 22:29:04Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -7,6 +8,7 @@
7
8
 
8
9
  require 'rbrainz/model/artist'
9
10
  require 'rbrainz/model/label'
11
+ require 'rbrainz/model/release_group'
10
12
  require 'rbrainz/model/release'
11
13
  require 'rbrainz/model/track'
12
14
  require 'rbrainz/model/user'
@@ -21,13 +23,15 @@ module MusicBrainz
21
23
  # <tt>:label</tt>, <tt>:release</tt> or <tt>:track</tt>).
22
24
  def new_entity(entity_type)
23
25
  case entity_type
24
- when :artist
26
+ when Artist.entity_type
25
27
  new_artist
26
- when :label
28
+ when Label.entity_type
27
29
  new_label
28
- when :release
30
+ when ReleaseGroup.entity_type
31
+ new_release_group
32
+ when Release.entity_type
29
33
  new_release
30
- when :track
34
+ when Track.entity_type
31
35
  new_track
32
36
  end
33
37
  end
@@ -40,6 +44,10 @@ module MusicBrainz
40
44
  Label.new
41
45
  end
42
46
 
47
+ def new_release_group
48
+ ReleaseGroup.new
49
+ end
50
+
43
51
  def new_release
44
52
  Release.new
45
53
  end
@@ -68,6 +76,10 @@ module MusicBrainz
68
76
  Tag.new
69
77
  end
70
78
 
79
+ def new_rating
80
+ Rating.new
81
+ end
82
+
71
83
  def new_user
72
84
  User.new
73
85
  end
@@ -75,4 +87,4 @@ module MusicBrainz
75
87
  end
76
88
 
77
89
  end
78
- end
90
+ end
@@ -1,4 +1,5 @@
1
- # $Id: disc.rb 141 2007-07-17 14:21:12Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: disc.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -64,4 +65,4 @@ module MusicBrainz
64
65
  end
65
66
 
66
67
  end
67
- end
68
+ end
@@ -1,4 +1,5 @@
1
- # $Id: entity.rb 162 2007-07-29 17:44:11Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: entity.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -6,10 +7,6 @@
6
7
  # See LICENSE[file:../LICENSE.html] for permissions.
7
8
 
8
9
  require 'rbrainz/model/mbid'
9
- require 'rbrainz/model/relation'
10
- require 'rbrainz/model/collection'
11
- require 'rbrainz/model/tag'
12
- require 'set'
13
10
 
14
11
  module MusicBrainz
15
12
  module Model
@@ -45,21 +42,10 @@ module MusicBrainz
45
42
  # The MusicBrainz ID. A MBID containing an absolute URI.
46
43
  attr_reader :id
47
44
 
48
- # A Collection of Tag objects assigned to this entity.
49
- attr_reader :tags
50
-
51
45
  # Create a new Entity. You can assign a MusicBrainz identifier to the
52
46
  # created entity with the parameter _mbid_ (see id=).
53
47
  def initialize(mbid=nil)
54
48
  self.id = mbid
55
- @tags = Collection.new
56
- @relations = {
57
- Relation::TO_ARTIST => Collection.new,
58
- Relation::TO_RELEASE => Collection.new,
59
- Relation::TO_TRACK => Collection.new,
60
- Relation::TO_LABEL => Collection.new,
61
- Relation::TO_URL => Collection.new,
62
- }
63
49
  end
64
50
 
65
51
  # Set the MBID.
@@ -97,92 +83,6 @@ module MusicBrainz
97
83
  self.class.entity_type
98
84
  end
99
85
 
100
- #
101
- # Adds a relation.
102
- #
103
- # This method adds _relation_ to the list of relations. The
104
- # given relation has to be initialized, at least the target
105
- # type has to be set.
106
- #
107
- def add_relation(relation)
108
- @relations[relation.target_type] << relation
109
- end
110
-
111
- #
112
- # Returns a list of relations.
113
- #
114
- # If _target_type_ is given, only relations of that target
115
- # type are returned. For MusicBrainz, the following target
116
- # types are defined:
117
- # - Relation::TO_ARTIST
118
- # - Relation::TO_RELEASE
119
- # - Relation::TO_TRACK
120
- # - Relation::TO_URL
121
- #
122
- # If _target_type_ is Relation::TO_ARTIST, for example,
123
- # this method returns all relations between this Entity and
124
- # artists.
125
- #
126
- # You may use the _relation_type_ parameter to further restrict
127
- # the selection. If it is set, only relations with the given
128
- # relation type are returned. The _required_attributes_ sequence
129
- # lists attributes that have to be part of all returned relations.
130
- #
131
- # If _direction_ is set, only relations with the given reading
132
- # direction are returned. You can use the Relation::DIR_FORWARD,
133
- # Relation::DIR_BACKWARD, and Relation::DIR_BOTH constants
134
- # for this.
135
- #
136
- def get_relations(options = {:target_type => nil, :relation_type => nil,
137
- :required_attributes => [], :direction => nil})
138
- Utils.check_options options,
139
- :target_type, :relation_type, :required_attributes, :direction
140
-
141
- target_type = Utils.add_namespace(options[:target_type], NS_REL_1)
142
- relation_type = Utils.add_namespace(options[:relation_type], NS_REL_1)
143
- required_attributes =
144
- options[:required_attributes] ? options[:required_attributes] : []
145
- direction = options[:direction]
146
-
147
- # Select all relevant relations depending on the requested target type
148
- if target_type
149
- result = @relations[target_type].to_a
150
- else
151
- result = @relations.values.flatten
152
- end
153
-
154
- # Filter for direction
155
- #
156
- result = result.find_all { |r| r.direction == direction } if direction
157
-
158
- # Filter for relation type
159
- #
160
- result = result.find_all{ |r| r.type == relation_type } if relation_type
161
-
162
- # Filter for attributes
163
- #
164
- required = required_attributes.map{|a| Utils.add_namespace(a, NS_REL_1)}.to_set
165
- result.find_all do |r|
166
- required.subset?( r.attributes.to_set )
167
- end
168
- end
169
-
170
- #
171
- # Returns a list of target types available for this entity.
172
- #
173
- # Use this to find out to which types of targets this entity
174
- # has relations. If the entity only has relations to tracks and
175
- # artists, for example, then a list containg the strings
176
- # Relation::TO_TRACK and Relation::TO_ARTIST is returned.
177
- #
178
- def relation_target_types
179
- result = []
180
- @relations.each_pair {|type, relations|
181
- result << type unless relations.empty?
182
- }
183
- return result
184
- end
185
-
186
86
  end
187
87
 
188
88
  end