fragment-alpha-sdk 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
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