File: nested_resources.rb

package info (click to toggle)
ruby-gh 0.21.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,644 kB
  • sloc: ruby: 1,793; makefile: 4
file content (51 lines) | stat: -rw-r--r-- 1,320 bytes parent folder | download
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