artemis 0.4.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|