Class: FragmentClient
- Inherits:
-
Object
- Object
- FragmentClient
- Extended by:
- T::Sig
- Defined in:
- lib/fragment_client.rb
Overview
A client for Fragment
Instance Method Summary collapse
- #create_conn(client_id, client_secret) ⇒ Object
- #define_method_from_queries(queries) ⇒ Object
-
#initialize(client_id, client_secret, extra_queries_filename: nil, execute: FragmentGraphQl::HTTP) ⇒ FragmentClient
constructor
A new instance of FragmentClient.
- #query(query, variables) ⇒ Object
- #set_instance_variables(execute, client_id, client_secret) ⇒ Object
Constructor Details
#initialize(client_id, client_secret, extra_queries_filename: nil, execute: FragmentGraphQl::HTTP) ⇒ FragmentClient
Returns a new instance of FragmentClient.
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/fragment_client.rb', line 39 def initialize(client_id, client_secret, extra_queries_filename: nil, execute: FragmentGraphQl::HTTP) set_instance_variables(execute, client_id, client_secret) define_method_from_queries(FragmentGraphQl::Queries) return if extra_queries_filename.nil? queries = FragmentGraphQl::Client.parse( File.read(extra_queries_filename) ) define_method_from_queries(queries) end |
Instance Method Details
#create_conn(client_id, client_secret) ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/fragment_client.rb', line 68 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 f.response :raise_error end, Faraday::Connection) end |
#define_method_from_queries(queries) ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/fragment_client.rb', line 57 def define_method_from_queries(queries) queries.constants.each do |qry| name = qry.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(qry), v) end end end |
#query(query, variables) ⇒ Object
78 79 80 |
# File 'lib/fragment_client.rb', line 78 def query(query, variables) @client.query(query, variables: variables, context: { access_token: @token }) end |
#set_instance_variables(execute, client_id, client_secret) ⇒ Object
50 51 52 53 54 55 |
# File 'lib/fragment_client.rb', line 50 def set_instance_variables(execute, client_id, client_secret) @client = T.let(GraphQL::Client.new(schema: FragmentGraphQl::Schema, execute: execute), GraphQL::Client) conn = create_conn(client_id, client_secret) # TODO: the token may need to be refreshed if the client is around for a long time @token = T.let(get_token(conn, client_id), String) end |