artemis 0.4.0 → 0.6.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +53 -0
- data/Appraisals +22 -16
- data/CHANGELOG.md +63 -6
- data/Gemfile +2 -1
- data/README.md +62 -32
- data/artemis.gemspec +7 -8
- data/banner.png +0 -0
- data/gemfiles/rails_50.gemfile +6 -3
- data/gemfiles/rails_51.gemfile +5 -3
- data/gemfiles/rails_52.gemfile +5 -3
- data/gemfiles/rails_60.gemfile +13 -0
- data/gemfiles/{rails_42.gemfile → rails_61.gemfile} +5 -4
- data/gemfiles/rails_edge.gemfile +2 -1
- data/lib/artemis/adapters/abstract_adapter.rb +6 -1
- data/lib/artemis/adapters/curb_adapter.rb +2 -2
- data/lib/artemis/adapters/multi_domain_adapter.rb +43 -0
- data/lib/artemis/adapters/net_http_adapter.rb +1 -3
- data/lib/artemis/adapters/net_http_persistent_adapter.rb +1 -1
- data/lib/artemis/adapters/test_adapter.rb +1 -1
- data/lib/artemis/adapters.rb +1 -0
- data/lib/artemis/client.rb +45 -19
- data/lib/artemis/graphql_endpoint.rb +24 -6
- data/lib/artemis/railtie.rb +15 -13
- data/lib/artemis/test_helper.rb +41 -14
- data/lib/artemis/version.rb +1 -1
- data/lib/artemis.rb +32 -1
- data/lib/generators/artemis/install/install_generator.rb +2 -2
- data/lib/generators/artemis/mutation/templates/mutation.graphql +1 -1
- data/lib/generators/artemis/query/query_generator.rb +13 -1
- data/lib/generators/artemis/query/templates/fixture.yml +19 -0
- data/lib/generators/artemis/query/templates/query.graphql +1 -1
- data/lib/tasks/artemis.rake +3 -3
- data/spec/adapters_spec.rb +56 -10
- data/spec/callbacks_spec.rb +14 -0
- data/spec/client_spec.rb +26 -1
- data/spec/fixtures/responses/{artist.yml → metaphysics/artist.yml} +7 -0
- data/spec/fixtures/responses/{artwork.json → metaphysics/artwork.json} +0 -0
- data/spec/fixtures/responses/spotify_client/artist.yml +5 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/test_helper_spec.rb +34 -4
- metadata +36 -46
- data/.travis.yml +0 -34
data/lib/artemis/version.rb
CHANGED
data/lib/artemis.rb
CHANGED
@@ -1,3 +1,34 @@
|
|
1
1
|
require "artemis/version"
|
2
2
|
require "artemis/client"
|
3
|
-
require "artemis/railtie" if defined?(Rails)
|
3
|
+
require "artemis/railtie" if defined?(Rails)
|
4
|
+
|
5
|
+
module Artemis
|
6
|
+
def self.config_for_graphql(app)
|
7
|
+
if app.respond_to?(:config_for)
|
8
|
+
app.config_for(:graphql)
|
9
|
+
else
|
10
|
+
config_for(:graphql, app: app)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# backported from https://github.com/rails/rails/blob/b9ca94ca/railties/lib/rails/application.rb#L226
|
15
|
+
# TODO: Remove once dropping Rails <= 4.1 support
|
16
|
+
def self.config_for(name, app:, env: Rails.env)
|
17
|
+
if name.is_a?(Pathname)
|
18
|
+
yaml = name
|
19
|
+
else
|
20
|
+
yaml = Pathname.new("#{app.paths["config"].existent.first}/#{name}.yml")
|
21
|
+
end
|
22
|
+
|
23
|
+
if yaml.exist?
|
24
|
+
require "erb"
|
25
|
+
(YAML.load(ERB.new(yaml.read).result) || {})[env] || {}
|
26
|
+
else
|
27
|
+
raise "Could not load configuration. No such file - #{yaml}"
|
28
|
+
end
|
29
|
+
rescue Psych::SyntaxError => e
|
30
|
+
raise "YAML syntax error occurred while parsing #{yaml}. " \
|
31
|
+
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
|
32
|
+
"Error: #{e.message}"
|
33
|
+
end
|
34
|
+
end
|
@@ -56,7 +56,7 @@ YAML
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def client_file_name
|
59
|
-
if mountable_engine?
|
59
|
+
if respond_to?(:mountable_engine?) && mountable_engine?
|
60
60
|
"app/operations/#{namespaced_path}/#{file_name}.rb"
|
61
61
|
else
|
62
62
|
"app/operations/#{file_name}.rb"
|
@@ -64,7 +64,7 @@ YAML
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def query_dir_gitkeep
|
67
|
-
if mountable_engine?
|
67
|
+
if respond_to?(:mountable_engine?) && mountable_engine?
|
68
68
|
"app/operations/#{namespaced_path}/#{file_name}/.gitkeep"
|
69
69
|
else
|
70
70
|
"app/operations/#{file_name}/.gitkeep"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
mutation<%= arguments.present? && "(#{ arguments.map {|name, type| "$#{name}: #{type.type}" }.join(", ") })" %> {
|
1
|
+
mutation<%= arguments.present? && "(#{ arguments.map {|name, type| "$#{name}: #{type.type.to_type_signature}" }.join(", ") })" %> {
|
2
2
|
<%= target_mutation.name %><%= arguments.present? && "(#{ arguments.map {|name, type| "#{name}: $#{name}" }.join(", ") })" %> {
|
3
3
|
# Add fields here...
|
4
4
|
}
|
@@ -14,6 +14,10 @@ class Artemis::QueryGenerator < Rails::Generators::Base
|
|
14
14
|
template "query.graphql", graphql_file_path
|
15
15
|
end
|
16
16
|
|
17
|
+
# def generate_text_fixture_file
|
18
|
+
# template "fixture.yml", text_fixture_path
|
19
|
+
# end
|
20
|
+
|
17
21
|
private
|
18
22
|
|
19
23
|
def query_name
|
@@ -21,7 +25,11 @@ class Artemis::QueryGenerator < Rails::Generators::Base
|
|
21
25
|
end
|
22
26
|
|
23
27
|
def graphql_file_path
|
24
|
-
"app/operations/#{service_name.underscore}/#{
|
28
|
+
"app/operations/#{service_name.underscore}/#{qualified_name}.graphql"
|
29
|
+
end
|
30
|
+
|
31
|
+
def text_fixture_path
|
32
|
+
File.join(Artemis::Railtie.config.artemis.fixture_path, service_name.underscore, "#{qualified_name}.yml")
|
25
33
|
end
|
26
34
|
|
27
35
|
def arguments
|
@@ -49,4 +57,8 @@ class Artemis::QueryGenerator < Rails::Generators::Base
|
|
49
57
|
end
|
50
58
|
end
|
51
59
|
end
|
60
|
+
|
61
|
+
def qualified_name
|
62
|
+
graphql_file_name.presence || query_name
|
63
|
+
end
|
52
64
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# You can stub GraphQL queries by calling the `stub_graphql' method in test:
|
2
|
+
#
|
3
|
+
# stub_graphql(<%= service_name.camelize %>, :<%= qualified_name.underscore %>).to_return(:<%= target_query.name %>_1)
|
4
|
+
#
|
5
|
+
# Or with a arguments matcher:
|
6
|
+
#
|
7
|
+
# stub_graphql(<%= service_name.camelize %>, :<%= qualified_name.underscore %>, <%= arguments.map {|name, _| "#{name}: \"...\"" }.join(", ") %>).to_return(:<%= target_query.name %>_2)
|
8
|
+
#
|
9
|
+
|
10
|
+
<%= target_query.name %>_1:
|
11
|
+
data:
|
12
|
+
<% target_query.type.fields.values.each do |field| -%>
|
13
|
+
<%= field.name %>: # type: <%= field.type.to_type_signature %>
|
14
|
+
<% end %>
|
15
|
+
<%= target_query.name %>_2:
|
16
|
+
data:
|
17
|
+
<% target_query.type.fields.values.each do |field| -%>
|
18
|
+
<%= field.name %>: # type: <%= field.type.to_type_signature %>
|
19
|
+
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
query<%= arguments.present? && "(#{ arguments.map {|name, type| "$#{name}: #{type.type}" }.join(", ") })" %> {
|
1
|
+
query<%= arguments.present? && "(#{ arguments.map {|name, type| "$#{name}: #{type.type.to_type_signature}" }.join(", ") })" %> {
|
2
2
|
<%= target_query.name %><%= arguments.present? && "(#{ arguments.map {|name, type| "#{name}: $#{name}" }.join(", ") })" %> {
|
3
3
|
# Add fields here...
|
4
4
|
}
|
data/lib/tasks/artemis.rake
CHANGED
@@ -12,7 +12,7 @@ namespace :graphql do
|
|
12
12
|
service = if ENV['SERVICE']
|
13
13
|
ENV['SERVICE']
|
14
14
|
else
|
15
|
-
services = Rails.application
|
15
|
+
services = Artemis.config_for_graphql(Rails.application).keys
|
16
16
|
|
17
17
|
if services.size == 1
|
18
18
|
services.first
|
@@ -22,7 +22,7 @@ namespace :graphql do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
headers = ENV['AUTHORIZATION'] ? { Authorization: ENV['AUTHORIZATION'] } : {}
|
25
|
-
service_class = service.camelize.constantize
|
25
|
+
service_class = service.to_s.camelize.constantize
|
26
26
|
schema_path = service_class.endpoint.schema_path
|
27
27
|
schema = service_class.connection
|
28
28
|
.execute(
|
@@ -44,4 +44,4 @@ namespace :graphql do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
|
-
end
|
47
|
+
end
|
data/spec/adapters_spec.rb
CHANGED
@@ -1,20 +1,31 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'rack'
|
3
|
+
require 'webrick'
|
3
4
|
|
4
5
|
describe 'Adapters' do
|
5
6
|
FakeServer = ->(env) {
|
6
7
|
case env['PATH_INFO']
|
7
8
|
when '/slow_server'
|
8
|
-
sleep
|
9
|
+
sleep 1.1
|
9
10
|
|
10
11
|
[200, {}, ['{}']]
|
11
12
|
when '/500'
|
12
13
|
[500, {}, ['Server error']]
|
14
|
+
when '/test_multi_domain'
|
15
|
+
body = {
|
16
|
+
data: {
|
17
|
+
body: "Endpoint switched.",
|
18
|
+
},
|
19
|
+
errors: [],
|
20
|
+
extensions: {}
|
21
|
+
}.to_json
|
22
|
+
|
23
|
+
[200, {}, [body]]
|
13
24
|
else
|
14
25
|
body = {
|
15
26
|
data: {
|
16
27
|
body: JSON.parse(env['rack.input'].read),
|
17
|
-
headers: env.select {|key, val| key.
|
28
|
+
headers: env.select {|key, val| key.match("^HTTP.*|^CONTENT.*|^AUTHORIZATION.*") }
|
18
29
|
.collect {|key, val| [key.gsub(/^HTTP_/, ''), val.downcase] }
|
19
30
|
.to_h,
|
20
31
|
},
|
@@ -69,6 +80,8 @@ describe 'Adapters' do
|
|
69
80
|
expect(response['data']['body']['query']).to eq(GraphQL::Client::IntrospectionDocument.to_query_string)
|
70
81
|
expect(response['data']['body']['variables']).to eq('id' => 'yayoi-kusama')
|
71
82
|
expect(response['data']['body']['operationName']).to eq('IntrospectionQuery')
|
83
|
+
expect(response['data']['headers']['CONTENT_TYPE']).to eq('application/json')
|
84
|
+
expect(response['data']['headers']['ACCEPT']).to eq('application/json')
|
72
85
|
expect(response['errors']).to eq([])
|
73
86
|
expect(response['extensions']).to eq({})
|
74
87
|
end
|
@@ -92,23 +105,56 @@ describe 'Adapters' do
|
|
92
105
|
end
|
93
106
|
|
94
107
|
describe Artemis::Adapters::NetHttpAdapter do
|
95
|
-
let(:adapter) { Artemis::Adapters::NetHttpAdapter.new('http://localhost:8000', service_name: nil, timeout:
|
108
|
+
let(:adapter) { Artemis::Adapters::NetHttpAdapter.new('http://localhost:8000', service_name: nil, timeout: 0.5, pool_size: 5) }
|
96
109
|
let(:timeout_error) { Net::ReadTimeout }
|
97
110
|
|
98
111
|
it_behaves_like 'an adapter'
|
99
112
|
end
|
100
113
|
|
101
114
|
describe Artemis::Adapters::NetHttpPersistentAdapter do
|
102
|
-
let(:adapter) { Artemis::Adapters::NetHttpPersistentAdapter.new('http://localhost:8000', service_name: nil, timeout:
|
103
|
-
let(:timeout_error) { Net::
|
115
|
+
let(:adapter) { Artemis::Adapters::NetHttpPersistentAdapter.new('http://localhost:8000', service_name: nil, timeout: 0.5, pool_size: 5) }
|
116
|
+
let(:timeout_error) { Net::ReadTimeout }
|
104
117
|
|
105
118
|
it_behaves_like 'an adapter'
|
106
119
|
end
|
107
120
|
|
108
|
-
describe Artemis::Adapters::
|
109
|
-
let(:adapter) { Artemis::Adapters::
|
110
|
-
let(:timeout_error) { Curl::Err::TimeoutError }
|
121
|
+
describe Artemis::Adapters::MultiDomainAdapter do
|
122
|
+
let(:adapter) { Artemis::Adapters::MultiDomainAdapter.new('ignored', service_name: nil, timeout: 0.5, pool_size: 5, adapter_options: { adapter: :net_http }) }
|
111
123
|
|
112
|
-
|
124
|
+
it 'makes an actual HTTP request' do
|
125
|
+
response = adapter.execute(document: GraphQL::Client::IntrospectionDocument, context: { url: 'http://localhost:8000/test_multi_domain' })
|
126
|
+
|
127
|
+
expect(response['data']['body']).to eq("Endpoint switched.")
|
128
|
+
expect(response['errors']).to eq([])
|
129
|
+
expect(response['extensions']).to eq({})
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'raises an error when context.url is not specified' do
|
133
|
+
expect do
|
134
|
+
adapter.execute(document: GraphQL::Client::IntrospectionDocument)
|
135
|
+
end.to raise_error(ArgumentError, 'The MultiDomain adapter requires a url on every request. Please specify a ' \
|
136
|
+
'url with a context: Client.with_context(url: "https://awesomeshop.domain.conm")')
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'raises an error when it receives a server error' do
|
140
|
+
expect do
|
141
|
+
adapter.execute(document: GraphQL::Client::IntrospectionDocument, context: { url: 'http://localhost:8000/500' })
|
142
|
+
end.to raise_error(Artemis::GraphQLServerError, "Received server error status 500: Server error")
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'allows for overriding timeout' do
|
146
|
+
expect do
|
147
|
+
adapter.execute(document: GraphQL::Client::IntrospectionDocument, context: { url: 'http://localhost:8000/slow_server' })
|
148
|
+
end.to raise_error(Net::ReadTimeout)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
if RUBY_ENGINE == 'ruby'
|
153
|
+
describe Artemis::Adapters::CurbAdapter do
|
154
|
+
let(:adapter) { Artemis::Adapters::CurbAdapter.new('http://localhost:8000', service_name: nil, timeout: 2, pool_size: 5) }
|
155
|
+
let(:timeout_error) { Curl::Err::TimeoutError }
|
156
|
+
|
157
|
+
it_behaves_like 'an adapter'
|
158
|
+
end
|
113
159
|
end
|
114
|
-
end
|
160
|
+
end
|
data/spec/callbacks_spec.rb
CHANGED
@@ -19,6 +19,20 @@ describe "#{GraphQL::Client} Callbacks" do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
Spotify = Class.new(Artemis::Client) do
|
23
|
+
def self.name
|
24
|
+
'Spotify'
|
25
|
+
end
|
26
|
+
|
27
|
+
before_execute do
|
28
|
+
raise "this callback should not get invoked"
|
29
|
+
end
|
30
|
+
|
31
|
+
after_execute do
|
32
|
+
raise "this callback should not get invoked"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
22
36
|
describe ".before_execute" do
|
23
37
|
it "gets invoked before executing" do
|
24
38
|
Client.artist(id: 'yayoi-kusama', context: { user_id: 'yuki24' })
|
data/spec/client_spec.rb
CHANGED
@@ -97,6 +97,31 @@ describe GraphQL::Client do
|
|
97
97
|
GRAPHQL
|
98
98
|
end
|
99
99
|
|
100
|
+
it "can make a GraphQL request with #execute" do
|
101
|
+
Metaphysics.execute(:artist, id: "yayoi-kusama")
|
102
|
+
|
103
|
+
request = requests[0]
|
104
|
+
|
105
|
+
expect(request.operation_name).to eq('Metaphysics__Artist')
|
106
|
+
expect(request.variables).to eq('id' => 'yayoi-kusama')
|
107
|
+
expect(request.context).to eq({})
|
108
|
+
expect(request.document.to_query_string).to eq(<<~GRAPHQL.strip)
|
109
|
+
query Metaphysics__Artist($id: String!) {
|
110
|
+
artist(id: $id) {
|
111
|
+
name
|
112
|
+
bio
|
113
|
+
birthday
|
114
|
+
}
|
115
|
+
}
|
116
|
+
GRAPHQL
|
117
|
+
end
|
118
|
+
|
119
|
+
it "can make a GraphQL request with #execute" do
|
120
|
+
expect { Metaphysics.execute(:does_not_exist) }
|
121
|
+
.to raise_error(Artemis::GraphQLFileNotFound)
|
122
|
+
.with_message(/Query does_not_exist\.graphql not found/)
|
123
|
+
end
|
124
|
+
|
100
125
|
it "assigns context to the request when provided as an argument" do
|
101
126
|
context = { headers: { Authorization: 'bearer ...' } }
|
102
127
|
|
@@ -158,4 +183,4 @@ describe GraphQL::Client do
|
|
158
183
|
ensure
|
159
184
|
files.each {|file| File.delete(file) }
|
160
185
|
end
|
161
|
-
end
|
186
|
+
end
|
File without changes
|
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,7 @@ require 'pry-byebug' if RUBY_ENGINE == 'ruby'
|
|
12
12
|
# The only method that doesn't need test coverage is +Artemis::Client.query_paths+. The rest of the methods should be
|
13
13
|
# tested, but we don't have any test setup for that yet.
|
14
14
|
Artemis::Client.query_paths = [File.join(__dir__, 'fixtures')]
|
15
|
+
Artemis::GraphQLEndpoint.suppress_warnings_on_schema_load = true
|
15
16
|
Artemis::GraphQLEndpoint.register!(:metaphysics, adapter: :test, url: '', schema_path: 'spec/fixtures/metaphysics/schema.json')
|
16
17
|
Artemis::GraphQLEndpoint.lookup(:metaphysics).load_schema!
|
17
18
|
|
data/spec/test_helper_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'artemis/test_helper'
|
2
2
|
require 'date'
|
3
3
|
|
4
|
-
describe
|
4
|
+
describe Artemis::TestHelper do
|
5
5
|
include Artemis::TestHelper
|
6
6
|
|
7
7
|
def graphql_fixture_path
|
@@ -53,12 +53,42 @@ describe GraphQL::Client do
|
|
53
53
|
it "can mock a GraphQL request for a query that has a query name"
|
54
54
|
|
55
55
|
it "raises an exception if the specified fixture file does not exist" do
|
56
|
-
expect { stub_graphql(Metaphysics, :does_not_exist) }
|
57
|
-
.to raise_error(Artemis::FixtureNotFound, %r|
|
56
|
+
expect { stub_graphql(Metaphysics, :does_not_exist).to_return(:data) }
|
57
|
+
.to raise_error(Artemis::FixtureNotFound, %r|does_not_exist.{yml,json}|)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "raises an exception if the specified fixture file exists but fixture key does not exist" do
|
61
61
|
expect { stub_graphql(Metaphysics, :artist).to_return(:does_not_exist) }
|
62
|
-
.to raise_error(Artemis::FixtureNotFound, %r|spec/fixtures/responses/artist.yml|)
|
62
|
+
.to raise_error(Artemis::FixtureNotFound, %r|spec/fixtures/responses/metaphysics/artist.yml|)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "picks up the fixture for the given different service if multiple services have the exact same fixture" do
|
66
|
+
stub_graphql(Metaphysics, :artist).to_return(:yoshiki)
|
67
|
+
|
68
|
+
yoshiki = Metaphysics.artist(id: "artist-yoshiki")
|
69
|
+
|
70
|
+
expect(yoshiki.data.artist.name).to eq("Artist Yoshiki")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "can mock separate GraphQL queries with the same arguments" do
|
74
|
+
stub_graphql("SpotifyClient", :artist, id: "yoshiki").to_return(:yoshiki)
|
75
|
+
stub_graphql(Metaphysics, :artist, id: "yoshiki").to_return(:yoshiki)
|
76
|
+
|
77
|
+
yoshiki = Metaphysics.artist(id: "yoshiki")
|
78
|
+
|
79
|
+
expect(yoshiki.data.artist.name).to eq("Artist Yoshiki")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "allows to get raw fixture data as a Hash" do
|
83
|
+
data = stub_graphql("SpotifyClient", :artist).get(:yoshiki)
|
84
|
+
|
85
|
+
expect(data).to eq({
|
86
|
+
"data" => {
|
87
|
+
"artist" => {
|
88
|
+
"id" => "pianist-yoshiki",
|
89
|
+
"name" => "Pianist Yoshiki"
|
90
|
+
}
|
91
|
+
}
|
92
|
+
})
|
63
93
|
end
|
64
94
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artemis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Allured
|
8
8
|
- Yuki Nishijima
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -17,138 +17,124 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 4.
|
20
|
+
version: 4.0.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 4.
|
27
|
+
version: 4.0.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: railties
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 4.0.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 4.0.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name: graphql
|
43
|
+
name: graphql
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: '1.8'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: '1.8'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: graphql-client
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: 0.13.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 0.13.0
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: appraisal
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '2.2'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '2.2'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: bundler
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '1.16'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - "
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '1.16'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: curb
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 0.9.6
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 0.9.6
|
112
98
|
- !ruby/object:Gem::Dependency
|
113
99
|
name: net-http-persistent
|
114
100
|
requirement: !ruby/object:Gem::Requirement
|
115
101
|
requirements:
|
116
|
-
- - "
|
102
|
+
- - ">="
|
117
103
|
- !ruby/object:Gem::Version
|
118
104
|
version: '3.0'
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
108
|
requirements:
|
123
|
-
- - "
|
109
|
+
- - ">="
|
124
110
|
- !ruby/object:Gem::Version
|
125
111
|
version: '3.0'
|
126
112
|
- !ruby/object:Gem::Dependency
|
127
113
|
name: rake
|
128
114
|
requirement: !ruby/object:Gem::Requirement
|
129
115
|
requirements:
|
130
|
-
- - "
|
116
|
+
- - ">="
|
131
117
|
- !ruby/object:Gem::Version
|
132
118
|
version: '10.0'
|
133
119
|
type: :development
|
134
120
|
prerelease: false
|
135
121
|
version_requirements: !ruby/object:Gem::Requirement
|
136
122
|
requirements:
|
137
|
-
- - "
|
123
|
+
- - ">="
|
138
124
|
- !ruby/object:Gem::Version
|
139
125
|
version: '10.0'
|
140
126
|
- !ruby/object:Gem::Dependency
|
141
127
|
name: rspec
|
142
128
|
requirement: !ruby/object:Gem::Requirement
|
143
129
|
requirements:
|
144
|
-
- - "
|
130
|
+
- - ">="
|
145
131
|
- !ruby/object:Gem::Version
|
146
132
|
version: '3.8'
|
147
133
|
type: :development
|
148
134
|
prerelease: false
|
149
135
|
version_requirements: !ruby/object:Gem::Requirement
|
150
136
|
requirements:
|
151
|
-
- - "
|
137
|
+
- - ">="
|
152
138
|
- !ruby/object:Gem::Version
|
153
139
|
version: '3.8'
|
154
140
|
description: GraphQL client on Rails + Convention over Configuration = ❤️
|
@@ -159,9 +145,9 @@ executables: []
|
|
159
145
|
extensions: []
|
160
146
|
extra_rdoc_files: []
|
161
147
|
files:
|
148
|
+
- ".github/workflows/ruby.yml"
|
162
149
|
- ".gitignore"
|
163
150
|
- ".rspec"
|
164
|
-
- ".travis.yml"
|
165
151
|
- Appraisals
|
166
152
|
- CHANGELOG.md
|
167
153
|
- CODE_OF_CONDUCT.md
|
@@ -170,20 +156,23 @@ files:
|
|
170
156
|
- README.md
|
171
157
|
- Rakefile
|
172
158
|
- artemis.gemspec
|
159
|
+
- banner.png
|
173
160
|
- bin/console
|
174
161
|
- bin/setup
|
175
162
|
- doc/CHANGELOG.md.erb
|
176
163
|
- doc/changelog_generator.rb
|
177
164
|
- gemfiles/.bundle/config
|
178
|
-
- gemfiles/rails_42.gemfile
|
179
165
|
- gemfiles/rails_50.gemfile
|
180
166
|
- gemfiles/rails_51.gemfile
|
181
167
|
- gemfiles/rails_52.gemfile
|
168
|
+
- gemfiles/rails_60.gemfile
|
169
|
+
- gemfiles/rails_61.gemfile
|
182
170
|
- gemfiles/rails_edge.gemfile
|
183
171
|
- lib/artemis.rb
|
184
172
|
- lib/artemis/adapters.rb
|
185
173
|
- lib/artemis/adapters/abstract_adapter.rb
|
186
174
|
- lib/artemis/adapters/curb_adapter.rb
|
175
|
+
- lib/artemis/adapters/multi_domain_adapter.rb
|
187
176
|
- lib/artemis/adapters/net_http_adapter.rb
|
188
177
|
- lib/artemis/adapters/net_http_persistent_adapter.rb
|
189
178
|
- lib/artemis/adapters/test_adapter.rb
|
@@ -203,6 +192,7 @@ files:
|
|
203
192
|
- lib/generators/artemis/mutation/templates/mutation.graphql
|
204
193
|
- lib/generators/artemis/query/USAGE
|
205
194
|
- lib/generators/artemis/query/query_generator.rb
|
195
|
+
- lib/generators/artemis/query/templates/fixture.yml
|
206
196
|
- lib/generators/artemis/query/templates/query.graphql
|
207
197
|
- lib/tasks/artemis.rake
|
208
198
|
- spec/adapters_spec.rb
|
@@ -216,8 +206,9 @@ files:
|
|
216
206
|
- spec/fixtures/metaphysics/artists.graphql
|
217
207
|
- spec/fixtures/metaphysics/artwork.graphql
|
218
208
|
- spec/fixtures/metaphysics/schema.json
|
219
|
-
- spec/fixtures/responses/artist.yml
|
220
|
-
- spec/fixtures/responses/artwork.json
|
209
|
+
- spec/fixtures/responses/metaphysics/artist.yml
|
210
|
+
- spec/fixtures/responses/metaphysics/artwork.json
|
211
|
+
- spec/fixtures/responses/spotify_client/artist.yml
|
221
212
|
- spec/spec_helper.rb
|
222
213
|
- spec/test_helper_spec.rb
|
223
214
|
- tmp/.gitkeep
|
@@ -225,7 +216,7 @@ homepage: https://github.com/yuki24/artemis
|
|
225
216
|
licenses:
|
226
217
|
- MIT
|
227
218
|
metadata: {}
|
228
|
-
post_install_message:
|
219
|
+
post_install_message:
|
229
220
|
rdoc_options: []
|
230
221
|
require_paths:
|
231
222
|
- lib
|
@@ -240,9 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
231
|
- !ruby/object:Gem::Version
|
241
232
|
version: '0'
|
242
233
|
requirements: []
|
243
|
-
|
244
|
-
|
245
|
-
signing_key:
|
234
|
+
rubygems_version: 3.2.26
|
235
|
+
signing_key:
|
246
236
|
specification_version: 4
|
247
237
|
summary: GraphQL on Rails
|
248
238
|
test_files: []
|