Class: FragmentClient

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/fragment_client.rb

Overview

A client for Fragment

Instance Method Summary collapse

Constructor Details

#initialize(client_id, client_secret, extra_queries_filename: nil) ⇒ FragmentClient

Returns a new instance of FragmentClient.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/fragment_client.rb', line 36

def initialize(client_id, client_secret, extra_queries_filename: nil)
  conn = create_conn(client_id, client_secret)
  @token = T.let(get_token(conn, client_id), String)
  FragmentGraphQl::Queries.constants.each do |q|
    name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
      format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
    end.gsub(/^[A-Z]/, &:downcase)
    define_singleton_method(name) do |v|
      query(FragmentGraphQl::Queries.const_get(q), v)
    end
  end

  return if extra_queries_filename.nil?

  queries = FragmentGraphQl::Client.parse(
    File.read(extra_queries_filename)
  )
  queries.constants.each do |q|
    name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
      format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
    end.gsub(/^[A-Z]/, &:downcase)
    define_singleton_method(name) do |v|
      query(queries.const_get(q), v)
    end
  end
end

Instance Method Details

#create_conn(client_id, client_secret) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/fragment_client.rb', line 63

def create_conn(client_id, client_secret)
  T.let(Faraday.new('https://auth.fragment.dev') do |f|
    f.request :url_encoded
    f.request :authorization, :basic, client_id, client_secret
    f.adapter :net_http
  end, Faraday::Connection)
end

#query(query, variables) ⇒ Object



72
73
74
# File 'lib/fragment_client.rb', line 72

def query(query, variables)
  FragmentGraphQl::Client.query(query, variables: variables, context: { access_token: @token })
end