musicbrainz_wrapper 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODllMmEwOGE4NzU5NjdiNGZhMTU0NGU4YzUzMzIyOWMxZmUxNGI2Yg==
5
+ data.tar.gz: !binary |-
6
+ Y2YzNDVmYzhiM2JiMDFjZDA1YzFiZmQ5NzEwOGIyZWE3OTBhNzkxYQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ODgxNjZkZDVjMWRiNzcxMWJjM2RjZGRjODg4ZjQ1M2Q2NDAyZWMxMmMzNjM1
10
+ N2ZkNzRkZjk2ZDE0MGM4YWVkNjBhZWI5OTk3ODViMjgyNmE2Y2I5Y2RjYWJi
11
+ ZjZjNjM2ZDdiODAwNzdkZWYyODg1YWJkNjM4OTgxNmNkNDJiOGQ=
12
+ data.tar.gz: !binary |-
13
+ Zjk3YjJhZTJmYWU5YWQ4ZjEzZDFmYzBiMTZhM2E5NWViMzM1MTdmNGU3MGFk
14
+ M2MyZTFlNDhjZTI0MjkxY2M1ODBiYWJkMzFlZjM5YWJmY2FmYzc1MTU5MzE0
15
+ YWM1NWMwNjZmNDg3Mzk0ZDAwYWFmZjA1OTJlODZiZDUyY2Q1MTA=
data/.DS_Store ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in musicbrainz_wrapper.gemspec
4
+ gemspec
5
+
6
+ gem 'rspec'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 tomallen400
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # MusicbrainzWrapper
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'musicbrainz_wrapper'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install musicbrainz_wrapper
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
data/lib/.DS_Store ADDED
Binary file
@@ -0,0 +1,6 @@
1
+ module Musicbrainz
2
+
3
+ end
4
+
5
+ # Loading sequence.
6
+ require File.dirname(__FILE__) + "/wrapper/wrapper"
@@ -0,0 +1,2 @@
1
+ require "musicbrainz_wrapper/version"
2
+ require "musicbrainz"
@@ -0,0 +1,3 @@
1
+ module MusicbrainzWrapper
2
+ VERSION = "0.0.1"
3
+ end
Binary file
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::Alias
2
+
3
+ attr_accessor :name, :sort_name, :locale, :type, :primary, :begin_date, :end_date
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::Area
2
+
3
+ attr_accessor :id, :name, :sort_name, :disambiguation, :iso_3166_3_codes, :iso_3166_2_codes, :iso_3166_1_codes
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,36 @@
1
+ class Musicbrainz::Artist
2
+
3
+ attr_accessor :id, :name, :sort_name, :disambiguation, :ipis, :type, :country, :area, :begin_area, :life_span, :aliases, :tags
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.child_initializers
10
+ end
11
+
12
+ def child_initializers
13
+ self.area = Musicbrainz::Area.new(self.area) if self.area
14
+ self.begin_area = Musicbrainz::Area.new(self.begin_area) if self.begin_area
15
+ self.life_span = Musicbrainz::Area.new(self.life_span) if self.life_span
16
+ self.aliases_initialize if self.aliases
17
+ self.tags_initialize if self.tags
18
+ end
19
+
20
+ def aliases_initialize
21
+ array = []
22
+ self.aliases.each do |a|
23
+ array << Musicbrainz::Alias.new(a)
24
+ end
25
+ self.aliases = array
26
+ end
27
+
28
+ def tags_initialize
29
+ array = []
30
+ self.tags.each do |a|
31
+ array << Musicbrainz::Tag.new(a)
32
+ end
33
+ self.tags = array
34
+ end
35
+
36
+ end
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::CoverArtArchive
2
+
3
+ attr_accessor :count, :front, :artwork, :back, :darkened
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,26 @@
1
+ class Musicbrainz::Label
2
+
3
+ attr_accessor :id, :name, :sort_name, :country, :disambiguation, :ipis, :type, :score, :label_code, :country, :area, :life_span, :tags
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.child_initializers
10
+ end
11
+
12
+ def child_initializers
13
+ self.area = Musicbrainz::Area.new(self.area) if self.area
14
+ self.life_span = Musicbrainz::Area.new(self.life_span) if self.life_span
15
+ self.tags_initialize if self.tags
16
+ end
17
+
18
+ def tags_initialize
19
+ array = []
20
+ self.tags.each do |a|
21
+ array << Musicbrainz::Tag.new(a)
22
+ end
23
+ self.tags = array
24
+ end
25
+
26
+ end
@@ -0,0 +1,12 @@
1
+ class Musicbrainz::LabelInfo
2
+
3
+ attr_accessor :catalog_number, :label
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.label = Musicbrainz::Label.new(self.label) if self.label
10
+ end
11
+
12
+ end
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::LifeSpan
2
+
3
+ attr_accessor :begin, :end, :ended
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::Media
2
+
3
+ attr_accessor :format, :disc_count, :track_count
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,53 @@
1
+ class Musicbrainz::Recording
2
+
3
+ attr_accessor :id, :title, :disambiguation, :score, :length, :video, :artist_credit, :releases, :tags, :relations, :recording, :work
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.child_initializers
10
+ end
11
+
12
+ def child_initializers
13
+ self.recording = Musicbrainz::Recording.new(self.recording) if self.recording
14
+ self.work = Musicbrainz::Work.new(self.work) if self.work
15
+ self.artists_initialize if self.artist_credit
16
+ self.tags_initialize if self.tags
17
+ self.releases_initialize if self.releases
18
+ self.relations_initialize if self.relations
19
+ end
20
+
21
+ def artists_initialize
22
+ array = []
23
+ self.artist_credit.each do |a|
24
+ array << Musicbrainz::Artist.new(a["artist"]) if a["artist"]
25
+ end
26
+ self.artist_credit = array
27
+ end
28
+
29
+ def tags_initialize
30
+ array = []
31
+ self.tags.each do |a|
32
+ array << Musicbrainz::Tag.new(a)
33
+ end
34
+ self.tags = array
35
+ end
36
+
37
+ def releases_initialize
38
+ array = []
39
+ self.releases.each do |a|
40
+ array << Musicbrainz::Release.new(a)
41
+ end
42
+ self.releases = array
43
+ end
44
+
45
+ def relations_initialize
46
+ array = []
47
+ self.relations.each do |a|
48
+ array << Musicbrainz::Relation.new(a)
49
+ end
50
+ self.relations = array
51
+ end
52
+
53
+ end
@@ -0,0 +1,18 @@
1
+ class Musicbrainz::Relation
2
+
3
+ attr_accessor :type, :type_id, :direction, :artist, :end, :ended, :begin, :attributes, :work, :recording
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.child_initializers
10
+ end
11
+
12
+ def child_initializers
13
+ self.recording = Musicbrainz::Recording.new(self.recording) if self.recording
14
+ self.artist = Musicbrainz::Artist.new(self.artist) if self.artist
15
+ self.work = Musicbrainz::Work.new(self.work) if self.work
16
+ end
17
+
18
+ end
@@ -0,0 +1,64 @@
1
+ class Musicbrainz::Release
2
+
3
+ attr_accessor :id, :title, :score, :count, :status, :text_representation, :artist_credit, :release_group, :area, :date, :country, :release_events, :label_info, :barcode, :asin, :track_count, :media, :cover_art_archive, :quality, :relations
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.child_initializers
10
+ end
11
+
12
+ def child_initializers
13
+ self.area = Musicbrainz::Area.new(self.area) if self.area
14
+ self.text_representation = Musicbrainz::TextRepresentation.new(self.text_representation) if self.text_representation
15
+ self.release_group = Musicbrainz::ReleaseGroup.new(self.release_group) if self.release_group
16
+ self.cover_art_archive = Musicbrainz::CoverArtArchive.new(self.cover_art_archive) if self.cover_art_archive
17
+ self.artists_initialize if self.artist_credit
18
+ self.media_initialize if self.media
19
+ self.label_info_initialize if self.label_info
20
+ self.release_events_initialize if self.release_events
21
+ self.relations_initialize if self.relations
22
+ end
23
+
24
+ def artists_initialize
25
+ array = []
26
+ self.artist_credit.each do |a|
27
+ array << Musicbrainz::Artist.new(a["artist"]) if a["artist"]
28
+ end
29
+ self.artist_credit = array
30
+ end
31
+
32
+ def media_initialize
33
+ array = []
34
+ self.media.each do |a|
35
+ array << Musicbrainz::Media.new(a)
36
+ end
37
+ self.media = array
38
+ end
39
+
40
+ def label_info_initialize
41
+ array = []
42
+ self.label_info.each do |a|
43
+ array << Musicbrainz::LabelInfo.new(a)
44
+ end
45
+ self.label_info = array
46
+ end
47
+
48
+ def release_events_initialize
49
+ array = []
50
+ self.release_events.each do |a|
51
+ array << Musicbrainz::ReleaseEvent.new(a)
52
+ end
53
+ self.release_events = array
54
+ end
55
+
56
+ def relations_initialize
57
+ array = []
58
+ self.relations.each do |a|
59
+ array << Musicbrainz::Relation.new(a)
60
+ end
61
+ self.relations = array
62
+ end
63
+
64
+ end
@@ -0,0 +1,12 @@
1
+ class Musicbrainz::ReleaseEvent
2
+
3
+ attr_accessor :area, :date
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.area = Musicbrainz::Area.new(self.area) if self.area
10
+ end
11
+
12
+ end
@@ -0,0 +1,42 @@
1
+ class Musicbrainz::ReleaseGroup
2
+
3
+ attr_accessor :id, :title, :count, :score, :primary_type, :secondary_types, :artist_credit, :disambiguation, :first_release_date, :releases, :tags
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.child_initializers
10
+ end
11
+
12
+ def child_initializers
13
+ self.artists_initialize if self.artist_credit
14
+ self.releases_initialize if self.releases
15
+ self.tags_initialize if self.tags
16
+ end
17
+
18
+ def artists_initialize
19
+ array = []
20
+ self.artist_credit.each do |a|
21
+ array << Musicbrainz::Artist.new(a["artist"]) if a["artist"]
22
+ end
23
+ self.artist_credit = array
24
+ end
25
+
26
+ def releases_initialize
27
+ array = []
28
+ self.releases.each do |a|
29
+ array << Musicbrainz::Release.new(a)
30
+ end
31
+ self.releases = array
32
+ end
33
+
34
+ def tags_initialize
35
+ array = []
36
+ self.tags.each do |a|
37
+ array << Musicbrainz::Tag.new(a)
38
+ end
39
+ self.tags = array
40
+ end
41
+
42
+ end
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::Tag
2
+
3
+ attr_accessor :count, :name
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ class Musicbrainz::TextRepresentation
2
+
3
+ attr_accessor :language, :script
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,20 @@
1
+ class Musicbrainz::Work
2
+
3
+ attr_accessor :id, :title, :type, :score, :language, :relations, :iswcs, :disambiguation
4
+
5
+ def initialize args
6
+ args.each do |k, v|
7
+ instance_variable_set("@#{k.gsub('-', '_')}", v) unless v.nil?
8
+ end
9
+ self.relations_initialize if self.relations
10
+ end
11
+
12
+ def relations_initialize
13
+ array = []
14
+ self.relations.each do |a|
15
+ array << Musicbrainz::Relation.new(a)
16
+ end
17
+ self.relations = array
18
+ end
19
+
20
+ end
@@ -0,0 +1,217 @@
1
+ class Musicbrainz::Wrapper
2
+
3
+ require 'net/https'
4
+ require 'uri'
5
+ require 'json'
6
+
7
+ attr_accessor :username, :password
8
+
9
+ @@api_url = "http://musicbrainz.org/ws/2/"
10
+
11
+ Dir[File.join(File.dirname(__FILE__), "resources", "*.rb")].each { |file| require file }
12
+
13
+ def initialize args
14
+ args.each do |k, v|
15
+ instance_variable_set("@#{k}", v) unless v.nil?
16
+ end
17
+ end
18
+
19
+ # artist, label, recording, release, release-group, work, area, url, isrc, iswc, discid
20
+ # discids, media, isrcs, artist-credits, various-artists, aliases, annotation, tags, ratings, user-tags, user-ratings
21
+ # artist-rels, label-rels, recording-rels, release-rels, release-group-rels, url-rels, work-rels
22
+ # recording-level-rels, work-level-rels
23
+
24
+ def artist(params)
25
+ # artist(:id => "id", :inc => {:isrcs => true, :artist-rels => true})
26
+ response = self.query(Musicbrainz::Wrapper.create_query_string('artist', params), :single)
27
+ Musicbrainz::Artist.new(response) if !response.nil?
28
+ end
29
+
30
+ def artists(params)
31
+ response = self.query(Musicbrainz::Wrapper.create_query_string('artist', params), :multiple)
32
+ if !response.nil?
33
+ array = []
34
+ response.each do |a|
35
+ array << Musicbrainz::Artist.new(a)
36
+ end
37
+ array
38
+ end
39
+ end
40
+
41
+ def label(params)
42
+ response = self.query(Musicbrainz::Wrapper.create_query_string('label', params), :single)
43
+ Musicbrainz::Label.new(response) if !response.nil?
44
+ end
45
+
46
+ def labels(params)
47
+ response = self.query(Musicbrainz::Wrapper.create_query_string('label', params), :multiple)
48
+ if !response.nil?
49
+ array = []
50
+ response.each do |a|
51
+ array << Musicbrainz::Label.new(a)
52
+ end
53
+ array
54
+ end
55
+ end
56
+
57
+ def recording(params)
58
+ response = self.query(Musicbrainz::Wrapper.create_query_string('recording', params), :single)
59
+ Musicbrainz::Recording.new(response) if !response.nil?
60
+ end
61
+
62
+ def recordings(params)
63
+ response = self.query(Musicbrainz::Wrapper.create_query_string('recording', params), :multiple)
64
+ if !response.nil?
65
+ array = []
66
+ response.each do |a|
67
+ array << Musicbrainz::Recording.new(a)
68
+ end
69
+ array
70
+ end
71
+ end
72
+
73
+ def release(params)
74
+ response = self.query(Musicbrainz::Wrapper.create_query_string('release', params), :single)
75
+ Musicbrainz::Release.new(response) if !response.nil?
76
+ end
77
+
78
+ def releases(params)
79
+ response = self.query(Musicbrainz::Wrapper.create_query_string('release', params), :multiple)
80
+ if !response.nil?
81
+ array = []
82
+ response.each do |a|
83
+ array << Musicbrainz::Release.new(a)
84
+ end
85
+ array
86
+ end
87
+ end
88
+
89
+ def release_group(params)
90
+ response = self.query(Musicbrainz::Wrapper.create_query_string('release-group', params), :single)
91
+ Musicbrainz::ReleaseGroup.new(response) if !response.nil?
92
+ end
93
+
94
+ def release_groups(params)
95
+ response = self.query(Musicbrainz::Wrapper.create_query_string('release-group', params), :multiple)
96
+ if !response.nil?
97
+ array = []
98
+ response.each do |a|
99
+ array << Musicbrainz::ReleaseGroup.new(a)
100
+ end
101
+ array
102
+ end
103
+ end
104
+
105
+ def work(params)
106
+ response = self.query(Musicbrainz::Wrapper.create_query_string('work', params), :single)
107
+ Musicbrainz::Work.new(response) if !response.nil?
108
+ end
109
+
110
+ def works(params)
111
+ response = self.query(Musicbrainz::Wrapper.create_query_string('work', params), :multiple)
112
+ if !response.nil?
113
+ array = []
114
+ response.each do |a|
115
+ array << Musicbrainz::Work.new(a)
116
+ end
117
+ array
118
+ end
119
+ end
120
+
121
+ # Query String
122
+ # releases(:artist => "The Rolling Stones", :release => "Sticky Fingers", :inc => {:isrcs => true, :artist-rels => true})
123
+ # release/?query=artist:The%20Rolling%20Stones+release=Sticky%20Fingers&inc=isrcs&fmt=json
124
+ # release(:id => "id", :inc => {:isrcs => true, :artist-rels => true})
125
+ # recording/8d2338a2-4acc-4d99-b2a7-1151f428cab6?inc=isrcs+artist-rels&fmt=json
126
+ def self.create_query_string(start, params)
127
+ if params.is_a?(Hash) && params.count > 0
128
+ ending = hash_to_query_string(params)
129
+ "#{start}/#{ending}#{question_mark_or_ampersand(ending)}fmt=json"
130
+ else
131
+ "#{start}/"
132
+ end
133
+ end
134
+
135
+ def self.hash_to_query_string(hash)
136
+ if hash[:id]
137
+ string = hash[:id]
138
+ else
139
+ string = '?query='
140
+ string += query_array(hash).join('+')
141
+ end
142
+ append_inc(string, hash)
143
+ end
144
+
145
+ def self.query_array(hash)
146
+ array = []
147
+ hash.each do |k, v|
148
+ array << "#{k}:#{URI.encode(v, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))}" unless k == :inc
149
+ end
150
+ array
151
+ end
152
+
153
+ def self.append_inc(url, hash)
154
+ if hash[:inc]
155
+ "#{url}#{question_mark_or_ampersand(url)}inc=#{inc_values_array(hash[:inc]).join('+')}"
156
+ else
157
+ url
158
+ end
159
+ end
160
+
161
+ def self.inc_values_array(hash)
162
+ array = []
163
+ hash.each do |k, v|
164
+ array << k.to_s.gsub('_', '-') if v == true
165
+ end
166
+ array
167
+ end
168
+
169
+ def self.question_mark_or_ampersand(string)
170
+ if string.include?('?')
171
+ '&'
172
+ else
173
+ '?'
174
+ end
175
+ end
176
+
177
+ # Hit Musicbrainz API
178
+ def query(ending, type)
179
+ query = @@api_url + ending
180
+ response = self.send_query(query)
181
+ Musicbrainz::Wrapper.parse_response(response, type)
182
+ end
183
+
184
+ def send_query(query)
185
+ sleep 1
186
+ uri = URI.parse(query)
187
+ http = Net::HTTP.new(uri.host, uri.port)
188
+ request = Net::HTTP::Get.new(uri.request_uri)
189
+ http.request(request)
190
+ end
191
+
192
+ def self.parse_response(response, type)
193
+ if response.is_a?(Net::HTTPOK)
194
+ json = JSON.parse(response.body) rescue {}
195
+ if type == :multiple
196
+ if json["artist"]
197
+ json["artist"]
198
+ elsif json["labels"]
199
+ json["labels"]
200
+ elsif json["release-groups"]
201
+ json["release-groups"]
202
+ elsif json["releases"]
203
+ json["releases"]
204
+ elsif json["recording"]
205
+ json["recording"]
206
+ elsif json["work"]
207
+ json["work"]
208
+ else
209
+ json
210
+ end
211
+ else
212
+ json
213
+ end
214
+ end
215
+ end
216
+
217
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'musicbrainz_wrapper/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "musicbrainz_wrapper"
8
+ spec.version = MusicbrainzWrapper::VERSION
9
+ spec.authors = ["tomallen400"]
10
+ spec.email = ["tomallen4000@gmail.com"]
11
+ spec.description = "A object orientated gem for the Musizbrainz API"
12
+ spec.summary = "A object orientated gem for the Musizbrainz API"
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Musicbrainz do
4
+
5
+ end
@@ -0,0 +1,20 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ config.color_enabled = true
12
+
13
+ # Run specs in random order to surface order dependencies. If you find an
14
+ # order dependency and want to debug it, you can fix the order by providing
15
+ # the seed, which is printed after each run.
16
+ # --seed 1234
17
+ config.order = 'random'
18
+ end
19
+
20
+ require 'musicbrainz_wrapper'
@@ -0,0 +1,164 @@
1
+ require 'spec_helper'
2
+
3
+ describe Musicbrainz::Wrapper do
4
+
5
+ let(:wrapper) { Musicbrainz::Wrapper.new(:username => 'username', :password => 'password') }
6
+ let(:api_point) { 'http://musicbrainz.org/ws/2/' }
7
+ let(:album_query) { 'release/d883e644-5ec0-4928-9ccd-fc78bc306a46?fmt=json' }
8
+ let(:albums_query) { 'release/?query=artist:The%20Rolling%20Stones&fmt=json' }
9
+ subject { wrapper }
10
+
11
+ it { should respond_to(:username) }
12
+ it { should respond_to(:password) }
13
+
14
+ # Query String
15
+ describe "create_query_string" do
16
+ subject { Musicbrainz::Wrapper.create_query_string('release', {:artist => "The Rolling Stones", :release => "Sticky Fingers", :inc => {:isrcs => true, :artist_rels => true}}) }
17
+ it { should be_an_instance_of String }
18
+ it { should include('artist:The%20Rolling%20Stones+release:Sticky%20Fingers') }
19
+ it "should add id to string preceded by a / if id supplied" do
20
+ Musicbrainz::Wrapper.create_query_string('release', {:id => "id", :inc => {:isrcs => true, :artist_rels => true}}).should include('/id')
21
+ end
22
+ it "should add each of the passed queries preceded by ?query= and separate with +s" do
23
+ should include('?query=artist:The%20Rolling%20Stones+release:Sticky%20Fingers')
24
+ end
25
+ it "should add all incs" do
26
+ should include('&inc=isrcs+artist-rels')
27
+ end
28
+ it "should add &fmt=json to end of string" do
29
+ should include('&fmt=json')
30
+ end
31
+ it "should return the start if passed blank hash" do
32
+ Musicbrainz::Wrapper.create_query_string('release', {}).should == 'release/'
33
+ end
34
+ it "should return the start if not passed hash" do
35
+ Musicbrainz::Wrapper.create_query_string('release', nil).should == 'release/'
36
+ end
37
+ end
38
+
39
+ describe "hash_to_query_string" do
40
+ it "should return a string" do
41
+ Musicbrainz::Wrapper.hash_to_query_string(:id => "123456").should be_an_instance_of String
42
+ end
43
+ it "should return id if id supplied" do
44
+ Musicbrainz::Wrapper.hash_to_query_string(:id => "123456").should == "123456"
45
+ end
46
+ it "should return ?query=queries if no id" do
47
+ Musicbrainz::Wrapper.hash_to_query_string(:artist => "The Rolling Stones", :release => "Sticky Fingers").should == "?query=artist:The%20Rolling%20Stones+release:Sticky%20Fingers"
48
+ end
49
+ end
50
+
51
+ describe "query_array" do
52
+ subject { Musicbrainz::Wrapper.query_array(:artist => "Stones", :release => "Sticky Fingers", :inc => {:isrcs => true, :artist_rels => true}) }
53
+ it { should be_an_instance_of Array }
54
+ it { subject.first.should be_an_instance_of String }
55
+ it { should have(2).Strings }
56
+ it { should include('artist:Stones') }
57
+ it { should include('release:Sticky%20Fingers') }
58
+ end
59
+
60
+ describe "append_inc" do
61
+ subject { Musicbrainz::Wrapper.append_inc('string', {:artist => "The Rolling Stones", :release => "Sticky Fingers", :inc => {:isrcs => true, :artist_rels => true}}) }
62
+ it { should be_an_instance_of String }
63
+ context "when inc exists" do
64
+ it { should include('?inc=') }
65
+ it "should include &inc= if string does contain ?" do
66
+ Musicbrainz::Wrapper.append_inc('?string', {:artist => "The Rolling Stones", :release => "Sticky Fingers", :inc => {:isrcs => true, :artist_rels => true}}).should include('&inc=')
67
+ end
68
+ it { should include('inc=isrcs+artist-rels') }
69
+ end
70
+ context "when inc doesn't exist" do
71
+ it "should return the original string if inc does not exist" do
72
+ Musicbrainz::Wrapper.append_inc('string', {:artist => "The Rolling Stones", :release => "Sticky Fingers"}).should == 'string'
73
+ end
74
+ end
75
+ end
76
+
77
+ describe "inc_values_array" do
78
+ subject { Musicbrainz::Wrapper.inc_values_array(:isrcs => true, :artist_rels => true, :something_else => false) }
79
+ it { should be_an_instance_of Array }
80
+ it { subject.first.should be_an_instance_of String }
81
+ it "should have a value for each that has true" do
82
+ should have(2).Strings
83
+ end
84
+ it "should replace all _ with -" do
85
+ should include('artist-rels')
86
+ end
87
+ end
88
+
89
+ describe "question_mark_or_ampersand" do
90
+ it "should return a string" do
91
+ Musicbrainz::Wrapper.question_mark_or_ampersand("string").should be_an_instance_of String
92
+ end
93
+ it "should return a ? if one is not already in string" do
94
+ Musicbrainz::Wrapper.question_mark_or_ampersand("string").should == '?'
95
+ end
96
+ it "should return a & if a ? is in string" do
97
+ Musicbrainz::Wrapper.question_mark_or_ampersand("string?").should == '&'
98
+ end
99
+ end
100
+
101
+ # Hit Musicbrainz API
102
+ describe "query", :slow => true do
103
+ context "is passed a plural object" do
104
+ it "should return an array" do
105
+ wrapper.query(albums_query).should be_an_instance_of Array
106
+ end
107
+ end
108
+ context "is passed a single object" do
109
+ it "should return a hash" do
110
+ wrapper.query(album_query).should be_an_instance_of Hash
111
+ end
112
+ end
113
+ context "is passed bad data" do
114
+ it "should return nil" do
115
+ wrapper.query("something_else").should be_nil
116
+ end
117
+ end
118
+ end
119
+
120
+ describe "send_query", :slow => true do
121
+ context "when sent a good request" do
122
+ it "should return a Net::HTTPOK object" do
123
+ wrapper.send_query(api_point + album_query).should be_an_instance_of Net::HTTPOK
124
+ end
125
+ it "should return a string as the body" do
126
+ wrapper.send_query(api_point + album_query).body.should be_an_instance_of String
127
+ end
128
+ end
129
+ context "when sent a bad request" do
130
+ it "should return a Net::HTTPBadRequest object" do
131
+ wrapper.send_query(api_point + 'release/d8').should be_an_instance_of Net::HTTPBadRequest
132
+ end
133
+ end
134
+ context "when not finding an object" do
135
+ it "should return a Net::HTTPNotFound object" do
136
+ wrapper.send_query(api_point + 'release/d883e644-5ec0-4928-9ccd-fc78bc306a47').should be_an_instance_of Net::HTTPNotFound
137
+ end
138
+ end
139
+ end
140
+
141
+ describe "parse_response", :slow => true do
142
+ context "when passed a good response" do
143
+ context "for a single object" do
144
+ it "should return a hash" do
145
+ response = wrapper.send_query(api_point + album_query)
146
+ Musicbrainz::Wrapper.parse_response(response).should be_an_instance_of Hash
147
+ end
148
+ end
149
+ context "for multiple objects" do
150
+ it "should return an array" do
151
+ response = wrapper.send_query(api_point + albums_query)
152
+ Musicbrainz::Wrapper.parse_response(response).should be_an_instance_of Array
153
+ end
154
+ end
155
+ end
156
+ context "when passed a bad response" do
157
+ it "should return nil" do
158
+ response = wrapper.send_query(api_point + 'release/d8')
159
+ Musicbrainz::Wrapper.parse_response(response).should be_nil
160
+ end
161
+ end
162
+ end
163
+
164
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: musicbrainz_wrapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - tomallen400
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A object orientated gem for the Musizbrainz API
42
+ email:
43
+ - tomallen4000@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .DS_Store
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - lib/.DS_Store
55
+ - lib/musicbrainz.rb
56
+ - lib/musicbrainz_wrapper.rb
57
+ - lib/musicbrainz_wrapper/version.rb
58
+ - lib/wrapper/.DS_Store
59
+ - lib/wrapper/resources/alias.rb
60
+ - lib/wrapper/resources/area.rb
61
+ - lib/wrapper/resources/artist.rb
62
+ - lib/wrapper/resources/cover_art_archive.rb
63
+ - lib/wrapper/resources/label.rb
64
+ - lib/wrapper/resources/label_info.rb
65
+ - lib/wrapper/resources/life_span.rb
66
+ - lib/wrapper/resources/media.rb
67
+ - lib/wrapper/resources/recording.rb
68
+ - lib/wrapper/resources/relation.rb
69
+ - lib/wrapper/resources/release.rb
70
+ - lib/wrapper/resources/release_event.rb
71
+ - lib/wrapper/resources/release_group.rb
72
+ - lib/wrapper/resources/tag.rb
73
+ - lib/wrapper/resources/text_representation.rb
74
+ - lib/wrapper/resources/work.rb
75
+ - lib/wrapper/wrapper.rb
76
+ - musicbrainz_wrapper.gemspec
77
+ - spec/musicbrainz_wrapper_spec.rb
78
+ - spec/spec_helper.rb
79
+ - spec/wrapper/wrapper_spec.rb
80
+ homepage: ''
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.0.3
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: A object orientated gem for the Musizbrainz API
104
+ test_files:
105
+ - spec/musicbrainz_wrapper_spec.rb
106
+ - spec/spec_helper.rb
107
+ - spec/wrapper/wrapper_spec.rb