class Specular::Integration::GitHub

Public Class Methods

new(github_token:, repo:) click to toggle source
# File lib/specular/integration/github.rb, line 9
def initialize(github_token:, repo:)
  @https = GraphQL::Client::HTTP.new('https://api.github.com/graphql') do
    define_method(:headers) do |_context|
      {
        "User-Agent": "Specular/#{Specular.version}",
        "Authorization": "Bearer #{github_token}"
      }
    end
  end

  @repo = repo

  @schema = GraphQL::Client.load_schema(@https)
  @client = GraphQL::Client.new(schema: @schema, execute: @https)

  @client.allow_dynamic_queries = true
end

Public Instance Methods

create_issue!(title:, body:) click to toggle source
# File lib/specular/integration/github.rb, line 63
def create_issue!(title:, body:)
  result = @client.query(
    self.issue_mutation,
    variables: {
      input: {
        title: title,
        body: body,
        repositoryId: self.repository_id
      }
    }
  )

  {
    url: result.data.create_issue.issue.url
  }
end
issue_mutation() click to toggle source
# File lib/specular/integration/github.rb, line 37
  def issue_mutation
    @issue_mutation ||= @client.parse <<-'GRAPHQL'
      mutation ($input: CreateIssueInput!) {
        createIssue(input: $input) {
          issue {
            url
          }
        }
      }
    GRAPHQL
  end
repository_id() click to toggle source
# File lib/specular/integration/github.rb, line 49
def repository_id
  owner, name = URI.parse(@repo).path.split('/')[1,2]

  result = @client.query(
    self.repository_query,
    variables: {
      name: name,
      owner: owner
    }
  )

  result.data.repository.id
end
repository_query() click to toggle source
# File lib/specular/integration/github.rb, line 27
  def repository_query
    @repository_query ||= @client.parse <<-'GRAPHQL'
      query ($name: String!, $owner: String!) {
        repository(name: $name, owner: $owner) {
          id
        }
      }
    GRAPHQL
  end