class Faraday::Hypermedia::LinkExtractorGithub

Public Instance Methods

process_response(response_env) click to toggle source
# File lib/faraday/hypermedia/link_extractor.rb, line 34
def process_response(response_env)
  doc = parse(response_env[:body])
  if doc.is_a? Hash
    link_template_props, link_props = doc.select { |name, _| name.end_with?('_url') }.partition { |_, url| url =~ RE_URI_TEMPLATE }
    self_url = doc['url']
    return if link_props.empty? && self_url.nil?
    link_values = build_link_values(link_props)
    link_values.unshift(%(<#{self_url}>;rel="self")) if self_url
    item_props = doc.map { |name, c| [name, c['url']] if c.is_a?(Hash) && c['url'] }.compact
    link_values.concat build_item_link_values(item_props)
    link_template_values = build_link_values(link_template_props)
  elsif doc.is_a? Array
    # treat it as a collection
    item_props = doc.map { |d| [d['name'], d['url']] if d['url'] }.compact
    return if item_props.empty?
    link_values = build_item_link_values(item_props)
    link_template_values = []
  else
    return
  end
  link_header = link_values.join(',')
  unless link_header.empty?
    if response_env[:response_headers]['link']
      response_env[:response_headers]['link'] += ",#{link_header}"
    else
      response_env[:response_headers]['link'] = link_header
    end
  end
  link_template_header = link_template_values.join(',')
  unless link_template_header.empty?
    if response_env[:response_headers]['link-template']
      response_env[:response_headers]['link-template'] += ",#{link_template_header}"
    else
      response_env[:response_headers]['link-template'] = link_template_header
    end
  end
end

Private Instance Methods