Module: DuodealerAPI::GraphQL
- Defined in:
- lib/duodealer_api/graphql.rb,
lib/duodealer_api/graphql/railtie.rb,
lib/duodealer_api/graphql/http_client.rb
Defined Under Namespace
Classes: HTTPClient, Railtie
Constant Summary
collapse
- DEFAULT_SCHEMA_LOCATION_PATH =
Pathname('duodealer_graphql_schemas')
- InvalidSchema =
Class.new(StandardError)
- InvalidClient =
Class.new(StandardError)
Class Method Summary
collapse
Class Method Details
.clear_clients ⇒ Object
38
39
40
|
# File 'lib/duodealer_api/graphql.rb', line 38
def clear_clients
@_client_cache = {}
end
|
.client(api_version = DuodealerAPI::Base.api_version.handle) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/duodealer_api/graphql.rb', line 15
def client(api_version = DuodealerAPI::Base.api_version.handle)
initialize_client_cache
cached_client = @_client_cache[api_version]
if cached_client
cached_client
else
schema_file = schema_location.join("#{api_version}.json")
if !schema_file.exist?
raise InvalidClient, " Client for API version \#{api_version} does not exist because no schema file exists at `\#{schema_file}`.\n\n To dump the schema file, use the `rake duodealer_api:graphql:dump` task.\n MSG\n else\n puts '[WARNING] Client was not pre-initialized. Ensure `DuodealerAPI::GraphQL.initialize_clients` is called during app initialization.'\n initialize_clients\n @_client_cache[api_version]\n end\n end\nend\n"
|
.initialize_clients ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/duodealer_api/graphql.rb', line 42
def initialize_clients
initialize_client_cache
Dir.glob(schema_location.join("*.json")).each do |schema_file|
schema_file = Pathname(schema_file)
matches = schema_file.basename.to_s.match(/^#{DuodealerAPI::ApiVersion::HANDLE_FORMAT}\.json$/)
if matches
api_version = DuodealerAPI::ApiVersion.new(handle: matches[1])
else
raise InvalidSchema, "Invalid schema file name `#{schema_file}`. Does not match format of: `<version>.json`."
end
schema = ::GraphQL::Client.load_schema(schema_file.to_s)
client = ::GraphQL::Client.new(schema: schema, execute: HTTPClient.new(api_version)).tap do |c|
c.allow_dynamic_queries = true
end
@_client_cache[api_version.handle] = client
end
end
|
.schema_location ⇒ Object
64
65
66
|
# File 'lib/duodealer_api/graphql.rb', line 64
def schema_location
@schema_location || DEFAULT_SCHEMA_LOCATION_PATH
end
|
.schema_location=(path) ⇒ Object
68
69
70
|
# File 'lib/duodealer_api/graphql.rb', line 68
def schema_location=(path)
@schema_location = Pathname(path)
end
|