1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
# frozen_string_literal: true
require 'gh'
module GH
# Public: ...
class NestedResources < Wrapper
wraps GH::Normalizer
double_dispatch
def modify_hash(hash, loaded = false) # rubocop:disable Style/OptionalBooleanParameter
hash = super(hash)
link = hash['_links']['self'] unless loaded || hash['_links'].nil?
set_links hash, Addressable::URI.parse(link['href']) if link
hash
end
def add(hash, link, name, path = name)
hash['_links'][name] ||= { 'href' => nested(link, path) }
end
def nested(link, path)
new_link = link.dup
if path.start_with? '/'
new_link.path = path
else
new_link.path += path
end
new_link
end
def set_links(hash, link)
case link.path
when '/gists'
add hash, link, 'public'
add hash, link, 'starred'
when %r{^/repos/[^/]+/[^/]+$}
add hash, link, 'commits', 'git/commits'
add hash, link, 'refs', 'git/refs'
add hash, link, 'tags', 'git/tags'
add hash, link, 'issues'
when %r{^/repos/[^/]+/[^/]+/issues/\d+$}
add hash, link, 'comments'
add hash, link, 'events'
when '/user'
add hash, link, 'gists', '/gists'
add hash, link, 'issues', '/issues'
end
end
end
end
|