class NewsApi::Query

Attributes

news_api_key[RW]
uri[RW]

Public Class Methods

new(key) click to toggle source
# File lib/metonym/lib/news_api.rb, line 8
def initialize(key)
  @news_api_key = key
  @news_api = NewsApi::NewsApiRepository.new(key)
end

Public Instance Methods

everything(args, **options) click to toggle source
# File lib/metonym/lib/news_api.rb, line 13
def everything(args, **options)
  request('everything', args: args, format: define_response_format(options))
end
sources(args, **options) click to toggle source
# File lib/metonym/lib/news_api.rb, line 21
def sources(args, **options)
  request('sources', args: args, format: define_response_format(options))
end
top_headlines(args, **options) click to toggle source
# File lib/metonym/lib/news_api.rb, line 17
def top_headlines(args, **options)
  request('top-headlines', args: args, format: define_response_format(options))
end

Private Instance Methods

define_response_format(options) click to toggle source
# File lib/metonym/lib/news_api.rb, line 27
def define_response_format(options)
  options[:format] || 'json'
end
request(resource, args:, format:) click to toggle source
# File lib/metonym/lib/news_api.rb, line 31
def request(resource, args:, format:)
  validate_query_parameters(args, format, resource)

  case resource
  when 'top-headlines'
    response = @news_api.top_headlines(query: args)
  when 'everything'
    response = @news_api.everything(query: args)
  when 'sources'
    response = @news_api.sources(query: args)
  end
rescue StandardError => e
  response = { errors: e.to_s }
ensure
  presenter = NewsApi::NewsApiResponsePresenter.new
  return presenter.generate_formatted_response(response, format)
end
validate_query_parameters(args, format, resource) click to toggle source
# File lib/metonym/lib/news_api.rb, line 49
def validate_query_parameters(args, format, resource)
  v = Validate::NewsApiQueryValidator.new(@news_api_key, args: args, format: format, endpoint: resource)
  raise v unless v
end