Class: BrainzReleases::Search

Inherits:
Object
  • Object
show all
Defined in:
lib/brainz_releases/search.rb

Defined Under Namespace

Classes: ConfigError, Error, ResponseError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ Search

Returns a new instance of Search.

Raises:



20
21
22
23
24
# File 'lib/brainz_releases/search.rb', line 20

def initialize(*args, &block)
  (block.arity < 1 ? self.instance_eval(&block) : block.call(self)) if block
  raise ConfigError, "You must provide a :name or :mbid parameter" if [name, mbid].all?(&:nil?)
  raise ConfigError, "You must provide a user_agent parameter to identify your requests" if user_agent.nil?
end

Instance Attribute Details

#end_dateObject

Returns the value of attribute end_date.



14
15
16
# File 'lib/brainz_releases/search.rb', line 14

def end_date
  @end_date
end

#mbidObject

Returns the value of attribute mbid.



14
15
16
# File 'lib/brainz_releases/search.rb', line 14

def mbid
  @mbid
end

#nameObject

Returns the value of attribute name.



14
15
16
# File 'lib/brainz_releases/search.rb', line 14

def name
  @name
end

#start_dateObject

Returns the value of attribute start_date.



14
15
16
# File 'lib/brainz_releases/search.rb', line 14

def start_date
  @start_date
end

#user_agentObject

Returns the value of attribute user_agent.



14
15
16
# File 'lib/brainz_releases/search.rb', line 14

def user_agent
  @user_agent
end

Class Method Details

.search(*args, &block) ⇒ Object



16
17
18
# File 'lib/brainz_releases/search.rb', line 16

def self.search(*args, &block)
  Search.new(*args, &block).results
end

Instance Method Details

#releases_xmlObject



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/brainz_releases/search.rb', line 41

def releases_xml
  http = Net::HTTP.new(uri.host)
  request = Net::HTTP::Get.new(uri.request_uri, {"User-Agent" => user_agent})
  response = http.request(request)
  case response.code
  when "200"
    @releases_xml = Nokogiri::XML(response.body)
  else
    raise ResponseError, "There is a problem accessing the Music Brainz api"
  end
end

#resultsObject

Returns an array of BrainzReleases::Release objects



54
55
56
57
58
59
60
# File 'lib/brainz_releases/search.rb', line 54

def results
  (releases = []).tap do 
    releases_xml.xpath('//xmlns:release').each do |node|
      releases << BrainzReleases::Release.build_from_node(node)
    end
  end
end

#uriObject

Musicbrainz uri to request releases



37
38
39
# File 'lib/brainz_releases/search.rb', line 37

def uri
  URI.parse("http://musicbrainz.org/ws/2/release/?type=xml&query=#{query}")
end