fragment-alpha-sdk 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fragment_client.rb +28 -15
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 123eb6ee84493101bbe1b79713f786d25ec62f30adfe298684f698d60058cca4
4
- data.tar.gz: 1ab1324fe497737d22abd0d0c4e9a49456ae30897fb4057d20183545b57d1262
3
+ metadata.gz: 8bebeaf8a7e6c7a422cfcc85e6a060a270ed461c8119bfb76c69582d4362841d
4
+ data.tar.gz: 0b17b4bad7ccd4af2043ada105c53c6c1d1d3b2be8e7cfe467e416ee35fa78d7
5
5
  SHA512:
6
- metadata.gz: 0d38fdf8f38acfbec7a8561f1cae835cf8727e2fb724ec28cfeadc9878559eb5d1e1cff0d9384ac43e74ded16b22af255c2487fb4ef27cd7b7d0db26a78b30eb
7
- data.tar.gz: a576073d63e2faa3e0ccda0263d41addc835a9f0404791570283b9f71acd1e2cd7b4ad9ea5c40d02e881635544888ab67ab6cb9e5373eca8a03a39629c7a1f33
6
+ metadata.gz: 0b3656f69339faec7845b37d3b42252a3a25b62f30a95154acf577a3fe2dfbf87ea5bd78c65140420956333be07687ec66a7b810b733efbf719cf3b5710f70e0
7
+ data.tar.gz: 91e9f7916930ad8c24d39e56b8c767474809ff9933bdcf3ba83fae7b03968c756805a9a4ecde9e2f4ef740b0110b14cdda31f92bc8c8e4237525691a0377a0a5
@@ -11,17 +11,17 @@ require 'sorbet-runtime'
11
11
  # A support module for the client
12
12
  module FragmentGraphQl
13
13
  extend T::Sig
14
- http = GraphQL::Client.const_get(:HTTP).new('https://api.fragment.dev/graphql') do
14
+ HTTP = T.let(GraphQL::Client.const_get(:HTTP).new('https://api.fragment.dev/graphql') do
15
15
  extend T::Sig
16
16
  sig { params(context: T.untyped).returns(T::Hash[T.untyped, T.untyped]) }
17
17
  def headers(context)
18
18
  { 'Authorization' => 'Bearer %s' % context[:access_token] }
19
19
  end
20
- end
20
+ end, GraphQL::Client::HTTP)
21
21
 
22
22
  Schema = T.let(GraphQL::Client.load_schema("#{__dir__}/fragment.schema.json"), T.untyped)
23
23
 
24
- Client = T.let(GraphQL::Client.new(schema: Schema, execute: http), GraphQL::Client)
24
+ Client = T.let(GraphQL::Client.new(schema: Schema, execute: HTTP), GraphQL::Client)
25
25
 
26
26
  Queries = T.let(Client.parse(
27
27
  File.read("#{__dir__}/queries.graphql")
@@ -32,9 +32,14 @@ end
32
32
  class FragmentClient
33
33
  extend T::Sig
34
34
 
35
- sig { params(client_id: String, client_secret: String, extra_queries_filename: T.nilable(String)).void }
36
- def initialize(client_id, client_secret, extra_queries_filename: nil)
35
+ sig do
36
+ params(client_id: String, client_secret: String, extra_queries_filename: T.nilable(String),
37
+ execute: GraphQL::Client::HTTP).void
38
+ end
39
+ def initialize(client_id, client_secret, extra_queries_filename: nil, execute: FragmentGraphQl::HTTP)
40
+ @client = T.let(GraphQL::Client.new(schema: FragmentGraphQl::Schema, execute: execute), GraphQL::Client)
37
41
  conn = create_conn(client_id, client_secret)
42
+ # TODO: the token may need to be refreshed if the client is around for a long time
38
43
  @token = T.let(get_token(conn, client_id), String)
39
44
  FragmentGraphQl::Queries.constants.each do |q|
40
45
  name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
@@ -51,12 +56,16 @@ class FragmentClient
51
56
  File.read(extra_queries_filename)
52
57
  )
53
58
  queries.constants.each do |q|
54
- name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
55
- format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
56
- end.gsub(/^[A-Z]/, &:downcase)
57
- define_singleton_method(name) do |v|
58
- query(queries.const_get(q), v)
59
- end
59
+ define_method_from_query(q, queries)
60
+ end
61
+ end
62
+
63
+ def define_method_from_query(q, queries)
64
+ name = q.to_s.gsub(/[a-z]([A-Z])/) do |m|
65
+ format('%<lower>s_%<upper>s', lower: m[0], upper: m[1].downcase)
66
+ end.gsub(/^[A-Z]/, &:downcase)
67
+ define_singleton_method(name) do |v|
68
+ query(queries.const_get(q), v)
60
69
  end
61
70
  end
62
71
 
@@ -65,22 +74,26 @@ class FragmentClient
65
74
  f.request :url_encoded
66
75
  f.request :authorization, :basic, client_id, client_secret
67
76
  f.adapter :net_http
77
+ f.response :raise_error
68
78
  end, Faraday::Connection)
69
79
  end
70
80
 
71
81
  sig { params(query: T.untyped, variables: T.untyped).returns(T.untyped) }
72
82
  def query(query, variables)
73
- FragmentGraphQl::Client.query(query, variables: variables, context: { access_token: @token })
83
+ @client.query(query, variables: variables, context: { access_token: @token })
74
84
  end
75
85
 
76
86
  private
77
87
 
78
88
  sig { params(conn: Faraday::Connection, client_id: String).returns(String) }
79
89
  def get_token(conn, client_id)
80
- response = conn.post('/oauth2/token') do |req|
81
- req.body = format('grant_type=client_credentials&scope=https://api.fragment.dev/*&client_id=%s', client_id)
90
+ begin
91
+ response = conn.post('/oauth2/token') do |req|
92
+ req.body = format('grant_type=client_credentials&scope=https://api.fragment.dev/*&client_id=%s', client_id)
93
+ end
94
+ rescue Faraday::ClientError => e
95
+ raise StandardError, "oauth Authentication failed: '%s'" % e.to_s
82
96
  end
83
-
84
97
  T.let(JSON.parse(response.body)['access_token'], String)
85
98
  end
86
99
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fragment-alpha-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - fragment