class Musicz::Search::Repository
Attributes
request[R]
Public Class Methods
new(request: default_request)
click to toggle source
# File lib/musicz/search/repository.rb, line 9 def initialize(request: default_request) @request = request end
Public Instance Methods
by_id(_id_options)
click to toggle source
# File lib/musicz/search/repository.rb, line 13 def by_id(_id_options) raise NotImplementedError, "subclass must implement" end
Private Instance Methods
build_error(response)
click to toggle source
# File lib/musicz/search/repository.rb, line 80 def build_error(response) if response.code == 400 # JSON parseable parsed = JSON.parse(response.body) Musicz::Entities::Error.new(parsed) else Musicz::Entities::Error.new( help: "Unknown error", error: response.body ) end end
build_query_param(query_terms)
click to toggle source
# File lib/musicz/search/repository.rb, line 69 def build_query_param(query_terms) valid_terms = query_terms.to_h.to_a.reject { |terms| terms[0].to_s.empty? } query_items = valid_terms.map { |terms| "#{terms[0]}:#{terms[1]}" } query_items.join(" AND ") end
by_id_with_entity(id_options, endpoint, entity_class)
click to toggle source
# File lib/musicz/search/repository.rb, line 25 def by_id_with_entity(id_options, endpoint, entity_class) endpoint = "#{endpoint}/#{id_options.id}" parameters = inc_params(id_options.relationships).merge(format_params) response = request.get(endpoint: endpoint, parameters: parameters) if response.success? entity_class.new(JSON.parse(response.body)) else build_error(response) end end
by_query_with_entity(query_terms, endpoint, entity_class)
click to toggle source
# File lib/musicz/search/repository.rb, line 46 def by_query_with_entity(query_terms, endpoint, entity_class) parameters = {query: build_query_param(query_terms)} .merge(format_params) response = request.get(endpoint: endpoint, parameters: parameters) return build_error(response) unless response.success? entity_class.new(JSON.parse(response.body)) end
by_term_with_entity(term, endpoint, entity_class)
click to toggle source
# File lib/musicz/search/repository.rb, line 36 def by_term_with_entity(term, endpoint, entity_class) query = {query: term}.merge(format_params) response = request.get(endpoint: endpoint, parameters: query) if response.success? entity_class.new(JSON.parse(response.body)) else build_error(response) end end
default_request()
click to toggle source
# File lib/musicz/search/repository.rb, line 21 def default_request Musicz::Request.build end
format_params()
click to toggle source
# File lib/musicz/search/repository.rb, line 55 def format_params { fmt: "json" } end
inc_params(relations)
click to toggle source
# File lib/musicz/search/repository.rb, line 61 def inc_params(relations) return {} if relations.empty? { inc: relations.join("+") } end