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