artemis 0.5.2 → 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 +6 -20
- data/CHANGELOG.md +23 -0
- data/Gemfile +2 -0
- data/README.md +4 -4
- data/artemis.gemspec +0 -1
- data/gemfiles/rails_50.gemfile +3 -1
- data/gemfiles/rails_51.gemfile +3 -1
- data/gemfiles/rails_52.gemfile +3 -1
- data/gemfiles/rails_60.gemfile +3 -1
- data/gemfiles/{rails_40.gemfile → rails_61.gemfile} +5 -3
- data/gemfiles/rails_edge.gemfile +1 -0
- data/lib/artemis/adapters/abstract_adapter.rb +1 -1
- data/lib/artemis/adapters/curb_adapter.rb +1 -1
- data/lib/artemis/adapters/multi_domain_adapter.rb +43 -0
- 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 +2 -2
- data/lib/artemis/graphql_endpoint.rb +11 -5
- data/lib/artemis/railtie.rb +2 -2
- data/lib/artemis/version.rb +1 -1
- 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/spec/adapters_spec.rb +49 -5
- data/spec/test_helper_spec.rb +9 -0
- metadata +10 -24
- data/.travis.yml +0 -69
- data/gemfiles/rails_41.gemfile +0 -12
- data/gemfiles/rails_42.gemfile +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a0f96c5c92adae8e2b52b173e05240aaa8967d8184887f25e3b986abe7db6a6
|
4
|
+
data.tar.gz: bf731d81af95a1ae12c6cc0d1bc01b4f0b13e3d563717d7ee97d3bdbbbc2c18f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 448933d593a7cb931dca4fb128e4a7052792e2c6405f42a797e9f1e9f4bde557fb6845f123a0132e89a53b6f56310c2c0585af74a87acace334dd34d5f74b105
|
7
|
+
data.tar.gz: 6865a729838c972eda26707ea12cddb846a21aea6d1b2c0cd252054054f2f5758b2c81bdd543ddbac5dfc1fd6ca127c31fd83a5a67f6e847230d7eec787d7375
|
@@ -0,0 +1,53 @@
|
|
1
|
+
name: build
|
2
|
+
|
3
|
+
on:
|
4
|
+
- push
|
5
|
+
- pull_request
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
build:
|
9
|
+
strategy:
|
10
|
+
matrix:
|
11
|
+
ruby_version:
|
12
|
+
- '3.0'
|
13
|
+
- '2.7'
|
14
|
+
- '2.6'
|
15
|
+
- '2.5'
|
16
|
+
# - 'jruby-9.2.17.0'
|
17
|
+
gemfile:
|
18
|
+
- gemfiles/rails_61.gemfile
|
19
|
+
- gemfiles/rails_60.gemfile
|
20
|
+
- gemfiles/rails_52.gemfile
|
21
|
+
- gemfiles/rails_51.gemfile
|
22
|
+
- gemfiles/rails_50.gemfile
|
23
|
+
# - gemfiles/rails_edge.gemfile
|
24
|
+
exclude:
|
25
|
+
- ruby_version: '3.0'
|
26
|
+
gemfile: gemfiles/rails_52.gemfile
|
27
|
+
- ruby_version: '3.0'
|
28
|
+
gemfile: gemfiles/rails_51.gemfile
|
29
|
+
- ruby_version: '3.0'
|
30
|
+
gemfile: gemfiles/rails_50.gemfile
|
31
|
+
- ruby_version: '2.7'
|
32
|
+
gemfile: gemfiles/rails_52.gemfile
|
33
|
+
- ruby_version: '2.7'
|
34
|
+
gemfile: gemfiles/rails_51.gemfile
|
35
|
+
- ruby_version: '2.7'
|
36
|
+
gemfile: gemfiles/rails_50.gemfile
|
37
|
+
# - ruby_version: '2.6'
|
38
|
+
# gemfile: gemfiles/rails_edge.gemfile
|
39
|
+
# - ruby_version: '2.5'
|
40
|
+
# gemfile: gemfiles/rails_edge.gemfile
|
41
|
+
runs-on: ubuntu-18.04
|
42
|
+
env:
|
43
|
+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
44
|
+
steps:
|
45
|
+
- uses: actions/checkout@v2
|
46
|
+
- name: Install curl
|
47
|
+
run: sudo apt-get install curl libcurl4-openssl-dev
|
48
|
+
- name: Set up Ruby
|
49
|
+
uses: ruby/setup-ruby@v1
|
50
|
+
with:
|
51
|
+
ruby-version: ${{ matrix.ruby_version }}
|
52
|
+
bundler-cache: true
|
53
|
+
- run: bundle exec rake
|
data/Appraisals
CHANGED
@@ -6,6 +6,12 @@ appraise "rails_edge" do
|
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
+
appraise "rails_61" do
|
10
|
+
gem "rails", '~> 6.1.0'
|
11
|
+
gem "railties", '~> 6.1.0'
|
12
|
+
gem "activesupport", '~> 6.1.0'
|
13
|
+
end
|
14
|
+
|
9
15
|
appraise "rails_60" do
|
10
16
|
gem "rails", '~> 6.0.0.rc1'
|
11
17
|
gem "railties", '~> 6.0.0.rc1'
|
@@ -30,23 +36,3 @@ appraise "rails_50" do
|
|
30
36
|
gem "activesupport", '~> 5.0.0'
|
31
37
|
gem "minitest", '5.10.3'
|
32
38
|
end
|
33
|
-
|
34
|
-
appraise "rails_42" do
|
35
|
-
gem "rails", '~> 4.2.0'
|
36
|
-
gem "railties", '~> 4.2.0'
|
37
|
-
gem "activesupport", '~> 4.2.0'
|
38
|
-
gem "minitest", '5.10.3'
|
39
|
-
end
|
40
|
-
|
41
|
-
appraise "rails_41" do
|
42
|
-
gem "rails", '~> 4.1.0'
|
43
|
-
gem "railties", '~> 4.1.0'
|
44
|
-
gem "activesupport", '~> 4.1.0'
|
45
|
-
gem "minitest", '5.10.3'
|
46
|
-
end
|
47
|
-
|
48
|
-
appraise "rails_40" do
|
49
|
-
gem "rails", '~> 4.0.0'
|
50
|
-
gem "railties", '~> 4.0.0'
|
51
|
-
gem "activesupport", '~> 4.0.0'
|
52
|
-
end
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
## v0.6.0
|
2
|
+
|
3
|
+
_<sup>(unreleased)</sup>_
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* Add support for Ruby 3.0 and Rails 6.0, 6.1
|
8
|
+
* Add the multi domain adapter (744b8ea3)
|
9
|
+
|
10
|
+
#### Fixes
|
11
|
+
|
12
|
+
* ~~Generate fixture YAML files on `rails g artemis:query queryName` (#78)~~ Removed due to a bug for now.
|
13
|
+
* Address warnings from Ruby 2.7 (408adcb3)
|
14
|
+
* Avoid crashing when config/graphql.yml does not exist (@dlackty, #76)
|
15
|
+
|
16
|
+
## [v0.5.2](https://github.com/yuki24/artemis/tree/v0.5.2)
|
17
|
+
|
18
|
+
_<sup>released at 2019-07-26 03:21:43 UTC</sup>_
|
19
|
+
|
20
|
+
#### Fixes
|
21
|
+
|
22
|
+
- Fixes an issue where fixtures can not be looked up properly when the client has two or more words in its name ([@JanStevens](https://github.com/JanStevens), issue: [#72](https://github.com/yuki24/artemis/issues/72), PR: [#73](https://github.com/yuki24/artemis/pull/73))
|
23
|
+
|
1
24
|
## [v0.5.1](https://github.com/yuki24/artemis/tree/v0.5.1)
|
2
25
|
|
3
26
|
_<sup>released at 2019-07-01 14:25:35 UTC</sup>_
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -51,7 +51,7 @@ query($id: String!) {
|
|
51
51
|
}
|
52
52
|
```
|
53
53
|
|
54
|
-
Then you could the class method that has the matching name `artist`:
|
54
|
+
Then you could call the class method that has the matching name `artist`:
|
55
55
|
|
56
56
|
```ruby
|
57
57
|
Artsy.artist(id: "pablo-picasso")
|
@@ -94,7 +94,7 @@ Artemis assumes that the files related to GraphQL are organized in a certain way
|
|
94
94
|
|
95
95
|
## Callbacks
|
96
96
|
|
97
|
-
|
97
|
+
You can use the `before_execute` callback to intercept outgoing requests and the `after_execute` callback to observe the
|
98
98
|
response. A common operation that's done in the `before_execute` hook is assigning a token to the header:
|
99
99
|
|
100
100
|
```ruby
|
@@ -145,7 +145,7 @@ There are four adapter options available. Choose the adapter that best fits on y
|
|
145
145
|
| `:net_http_persistent` | HTTP/1.1 only | **Yes** | **Fast** | [`net-http-persistent 3.0.0+`][nhp]
|
146
146
|
| `:test` | N/A (See Testing)
|
147
147
|
|
148
|
-
|
148
|
+
#### Third-party adapters
|
149
149
|
|
150
150
|
This is a comminuty-maintained adapter. Want to add yours? Send us a pull request!
|
151
151
|
|
@@ -153,7 +153,7 @@ This is a comminuty-maintained adapter. Want to add yours? Send us a pull reques
|
|
153
153
|
| ---------------------- | ------------|
|
154
154
|
| [`:net_http_hmac`](https://github.com/JanStevens/artemis-api-auth/tree/master) | provides a new Adapter for the Artemis GraphQL ruby client to support HMAC Authentication using [ApiAuth](https://github.com/mgomes/api_auth). |
|
155
155
|
|
156
|
-
|
156
|
+
#### Writing your own adapter
|
157
157
|
|
158
158
|
When the built-in adapters do not satisfy your needs, you may want to implement your own adapter. You could do so by following the steps below. Let's implement the [`:net_http_hmac`](https://github.com/JanStevens/artemis-api-auth/tree/master) adapter as an example.
|
159
159
|
|
data/artemis.gemspec
CHANGED
@@ -22,7 +22,6 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_development_dependency "appraisal", ">= 2.2"
|
24
24
|
spec.add_development_dependency "bundler", ">= 1.16"
|
25
|
-
spec.add_development_dependency "curb", ">= 0.9.6"
|
26
25
|
spec.add_development_dependency "net-http-persistent", ">= 3.0"
|
27
26
|
spec.add_development_dependency "rake", ">= 10.0"
|
28
27
|
spec.add_development_dependency "rspec", ">= 3.8"
|
data/gemfiles/rails_50.gemfile
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 5.0.0"
|
6
5
|
gem "pry"
|
7
6
|
gem "pry-byebug", platforms: :mri
|
7
|
+
gem "curb", ">= 0.9.6"
|
8
|
+
gem "webrick"
|
9
|
+
gem "rails", "~> 5.0.0"
|
8
10
|
gem "railties", "~> 5.0.0"
|
9
11
|
gem "activesupport", "~> 5.0.0"
|
10
12
|
gem "minitest", "5.10.3"
|
data/gemfiles/rails_51.gemfile
CHANGED
data/gemfiles/rails_52.gemfile
CHANGED
data/gemfiles/rails_60.gemfile
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 6.0.0.rc1"
|
6
5
|
gem "pry"
|
7
6
|
gem "pry-byebug", platforms: :mri
|
7
|
+
gem "curb", ">= 0.9.6"
|
8
|
+
gem "webrick"
|
9
|
+
gem "rails", "~> 6.0.0.rc1"
|
8
10
|
gem "railties", "~> 6.0.0.rc1"
|
9
11
|
gem "activesupport", "~> 6.0.0.rc1"
|
10
12
|
|
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "rails", "~> 4.0.0"
|
6
5
|
gem "pry"
|
7
6
|
gem "pry-byebug", platforms: :mri
|
8
|
-
gem "
|
9
|
-
gem "
|
7
|
+
gem "curb", ">= 0.9.6"
|
8
|
+
gem "webrick"
|
9
|
+
gem "rails", "~> 6.1.0"
|
10
|
+
gem "railties", "~> 6.1.0"
|
11
|
+
gem "activesupport", "~> 6.1.0"
|
10
12
|
|
11
13
|
gemspec path: "../"
|
data/gemfiles/rails_edge.gemfile
CHANGED
@@ -15,7 +15,7 @@ module Artemis
|
|
15
15
|
"Content-Type" => "application/json"
|
16
16
|
}.freeze
|
17
17
|
|
18
|
-
def initialize(uri, service_name: , timeout: , pool_size: )
|
18
|
+
def initialize(uri, service_name: , timeout: , pool_size: , adapter_options: {})
|
19
19
|
raise ArgumentError, "url is required (given `#{uri.inspect}')" if uri.blank?
|
20
20
|
|
21
21
|
super(uri) # Do not pass in the block to avoid getting #headers and #connection overridden.
|
@@ -13,7 +13,7 @@ module Artemis
|
|
13
13
|
class CurbAdapter < AbstractAdapter
|
14
14
|
attr_reader :multi
|
15
15
|
|
16
|
-
def initialize(uri, service_name: , timeout: , pool_size: )
|
16
|
+
def initialize(uri, service_name: , timeout: , pool_size: , adapter_options: {})
|
17
17
|
super
|
18
18
|
|
19
19
|
@multi = Curl::Multi.new
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'artemis/adapters/abstract_adapter'
|
4
|
+
|
5
|
+
module Artemis
|
6
|
+
module Adapters
|
7
|
+
class MultiDomainAdapter < AbstractAdapter
|
8
|
+
attr_reader :adapter
|
9
|
+
|
10
|
+
def initialize(_uri, service_name: , timeout: , pool_size: , adapter_options: {})
|
11
|
+
@connection_by_url = {}
|
12
|
+
@service_name = service_name.to_s
|
13
|
+
@timeout = timeout
|
14
|
+
@pool_size = pool_size
|
15
|
+
@adapter = adapter_options[:adapter] || :net_http
|
16
|
+
@mutex_for_connection = Mutex.new
|
17
|
+
end
|
18
|
+
|
19
|
+
# Makes an HTTP request for GraphQL query.
|
20
|
+
def execute(document:, operation_name: nil, variables: {}, context: {})
|
21
|
+
url = context[:url]
|
22
|
+
|
23
|
+
if url.nil?
|
24
|
+
raise ArgumentError, 'The MultiDomain adapter requires a url on every request. Please specify a url with a context: ' \
|
25
|
+
'Client.with_context(url: "https://awesomeshop.domain.conm")'
|
26
|
+
end
|
27
|
+
|
28
|
+
connection_for_url(url).execute(document: document, operation_name: operation_name, variables: variables, context: context)
|
29
|
+
end
|
30
|
+
|
31
|
+
def connection
|
32
|
+
raise NotImplementedError, "Calling the #connection method without a URI is not supported. Please use the " \
|
33
|
+
"#connection_for_url(uri) instead."
|
34
|
+
end
|
35
|
+
|
36
|
+
def connection_for_url(url)
|
37
|
+
@connection_by_url[url.to_s] || @mutex_for_connection.synchronize do
|
38
|
+
@connection_by_url[url.to_s] ||= ::Artemis::Adapters.lookup(adapter).new(url, service_name: service_name, timeout: timeout, pool_size: pool_size)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -12,7 +12,7 @@ module Artemis
|
|
12
12
|
class NetHttpPersistentAdapter < NetHttpAdapter
|
13
13
|
attr_reader :_connection, :raw_connection
|
14
14
|
|
15
|
-
def initialize(uri, service_name: , timeout: , pool_size: )
|
15
|
+
def initialize(uri, service_name: , timeout: , pool_size: , adapter_options: {})
|
16
16
|
super
|
17
17
|
|
18
18
|
@raw_connection = Net::HTTP::Persistent.new(name: service_name, pool_size: pool_size)
|
@@ -22,7 +22,7 @@ module Artemis
|
|
22
22
|
self.requests << Request.new(*arguments.values_at(:document, :operation_name, :variables, :context))
|
23
23
|
|
24
24
|
response = responses.detect do |mock|
|
25
|
-
arguments[:operation_name] == mock.operation_name && mock.arguments == :__unspecified__ || arguments[:variables] == mock.arguments
|
25
|
+
arguments[:operation_name] == mock.operation_name && (mock.arguments == :__unspecified__ || arguments[:variables] == mock.arguments)
|
26
26
|
end
|
27
27
|
|
28
28
|
response&.data || {
|
data/lib/artemis/adapters.rb
CHANGED
data/lib/artemis/client.rb
CHANGED
@@ -248,9 +248,9 @@ module Artemis
|
|
248
248
|
# Github.user # => delegates to Github.new(default_context).user
|
249
249
|
#
|
250
250
|
# @api private
|
251
|
-
def method_missing(method_name,
|
251
|
+
def method_missing(method_name, **arguments, &block)
|
252
252
|
if resolve_graphql_file_path(method_name)
|
253
|
-
new(default_context).public_send(method_name,
|
253
|
+
new(default_context).public_send(method_name, **arguments, &block)
|
254
254
|
else
|
255
255
|
super
|
256
256
|
end
|
@@ -33,7 +33,7 @@ module Artemis
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def register!(service_name, configurations)
|
36
|
-
ENDPOINT_INSTANCES[service_name.to_s.underscore] = new(service_name.to_s, configurations.symbolize_keys)
|
36
|
+
ENDPOINT_INSTANCES[service_name.to_s.underscore] = new(service_name.to_s, **configurations.symbolize_keys)
|
37
37
|
end
|
38
38
|
|
39
39
|
##
|
@@ -44,10 +44,16 @@ module Artemis
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
attr_reader :name, :url, :adapter, :timeout, :schema_path, :pool_size
|
47
|
+
attr_reader :name, :url, :adapter, :timeout, :schema_path, :pool_size, :adapter_options
|
48
48
|
|
49
|
-
def initialize(name, url: nil, adapter: :net_http, timeout: 10, schema_path: nil, pool_size: 25)
|
50
|
-
@name
|
49
|
+
def initialize(name, url: nil, adapter: :net_http, timeout: 10, schema_path: nil, pool_size: 25, adapter_options: {})
|
50
|
+
@name = name.to_s
|
51
|
+
@url = url
|
52
|
+
@adapter = adapter
|
53
|
+
@timeout = timeout
|
54
|
+
@schema_path = schema_path
|
55
|
+
@pool_size = pool_size
|
56
|
+
@adapter_options = adapter_options
|
51
57
|
|
52
58
|
@mutex_for_schema = Mutex.new
|
53
59
|
@mutex_for_connection = Mutex.new
|
@@ -66,7 +72,7 @@ module Artemis
|
|
66
72
|
|
67
73
|
def connection
|
68
74
|
@connection || @mutex_for_connection.synchronize do
|
69
|
-
@connection ||= ::Artemis::Adapters.lookup(adapter).new(url, service_name: name, timeout: timeout, pool_size: pool_size)
|
75
|
+
@connection ||= ::Artemis::Adapters.lookup(adapter).new(url, service_name: name, timeout: timeout, pool_size: pool_size, adapter_options: adapter_options)
|
70
76
|
end
|
71
77
|
end
|
72
78
|
end
|
data/lib/artemis/railtie.rb
CHANGED
@@ -57,8 +57,8 @@ module Artemis
|
|
57
57
|
|
58
58
|
initializer 'graphql.client.preload', after: 'graphql.client.load_config' do |app|
|
59
59
|
if app.config.eager_load && app.config.cache_classes
|
60
|
-
Artemis.
|
61
|
-
endpoint_name.
|
60
|
+
Artemis::GraphQLEndpoint.registered_services.each do |endpoint_name|
|
61
|
+
endpoint_name.camelize.constantize.preload!
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
data/lib/artemis/version.rb
CHANGED
@@ -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/spec/adapters_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'rack'
|
3
|
+
require 'webrick'
|
3
4
|
|
4
5
|
describe 'Adapters' do
|
5
6
|
FakeServer = ->(env) {
|
@@ -10,6 +11,16 @@ describe 'Adapters' do
|
|
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: {
|
@@ -102,15 +113,48 @@ describe 'Adapters' do
|
|
102
113
|
|
103
114
|
describe Artemis::Adapters::NetHttpPersistentAdapter do
|
104
115
|
let(:adapter) { Artemis::Adapters::NetHttpPersistentAdapter.new('http://localhost:8000', service_name: nil, timeout: 0.5, pool_size: 5) }
|
105
|
-
let(:timeout_error) { Net::
|
116
|
+
let(:timeout_error) { Net::ReadTimeout }
|
106
117
|
|
107
118
|
it_behaves_like 'an adapter'
|
108
119
|
end
|
109
120
|
|
110
|
-
describe Artemis::Adapters::
|
111
|
-
let(:adapter) { Artemis::Adapters::
|
112
|
-
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 }) }
|
113
123
|
|
114
|
-
|
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
|
115
159
|
end
|
116
160
|
end
|
data/spec/test_helper_spec.rb
CHANGED
@@ -70,6 +70,15 @@ describe Artemis::TestHelper do
|
|
70
70
|
expect(yoshiki.data.artist.name).to eq("Artist Yoshiki")
|
71
71
|
end
|
72
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
|
+
|
73
82
|
it "allows to get raw fixture data as a Hash" do
|
74
83
|
data = stub_graphql("SpotifyClient", :artist).get(:yoshiki)
|
75
84
|
|
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
|
@@ -95,20 +95,6 @@ dependencies:
|
|
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
|
@@ -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
|
@@ -176,18 +162,17 @@ files:
|
|
176
162
|
- doc/CHANGELOG.md.erb
|
177
163
|
- doc/changelog_generator.rb
|
178
164
|
- gemfiles/.bundle/config
|
179
|
-
- gemfiles/rails_40.gemfile
|
180
|
-
- gemfiles/rails_41.gemfile
|
181
|
-
- gemfiles/rails_42.gemfile
|
182
165
|
- gemfiles/rails_50.gemfile
|
183
166
|
- gemfiles/rails_51.gemfile
|
184
167
|
- gemfiles/rails_52.gemfile
|
185
168
|
- gemfiles/rails_60.gemfile
|
169
|
+
- gemfiles/rails_61.gemfile
|
186
170
|
- gemfiles/rails_edge.gemfile
|
187
171
|
- lib/artemis.rb
|
188
172
|
- lib/artemis/adapters.rb
|
189
173
|
- lib/artemis/adapters/abstract_adapter.rb
|
190
174
|
- lib/artemis/adapters/curb_adapter.rb
|
175
|
+
- lib/artemis/adapters/multi_domain_adapter.rb
|
191
176
|
- lib/artemis/adapters/net_http_adapter.rb
|
192
177
|
- lib/artemis/adapters/net_http_persistent_adapter.rb
|
193
178
|
- lib/artemis/adapters/test_adapter.rb
|
@@ -207,6 +192,7 @@ files:
|
|
207
192
|
- lib/generators/artemis/mutation/templates/mutation.graphql
|
208
193
|
- lib/generators/artemis/query/USAGE
|
209
194
|
- lib/generators/artemis/query/query_generator.rb
|
195
|
+
- lib/generators/artemis/query/templates/fixture.yml
|
210
196
|
- lib/generators/artemis/query/templates/query.graphql
|
211
197
|
- lib/tasks/artemis.rake
|
212
198
|
- spec/adapters_spec.rb
|
@@ -230,7 +216,7 @@ homepage: https://github.com/yuki24/artemis
|
|
230
216
|
licenses:
|
231
217
|
- MIT
|
232
218
|
metadata: {}
|
233
|
-
post_install_message:
|
219
|
+
post_install_message:
|
234
220
|
rdoc_options: []
|
235
221
|
require_paths:
|
236
222
|
- lib
|
@@ -245,8 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
231
|
- !ruby/object:Gem::Version
|
246
232
|
version: '0'
|
247
233
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
249
|
-
signing_key:
|
234
|
+
rubygems_version: 3.2.26
|
235
|
+
signing_key:
|
250
236
|
specification_version: 4
|
251
237
|
summary: GraphQL on Rails
|
252
238
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
script: bundle exec rake
|
3
|
-
cache: bundler
|
4
|
-
sudo: false
|
5
|
-
|
6
|
-
before_install: gem install bundler -v 1.17.3
|
7
|
-
|
8
|
-
rvm:
|
9
|
-
- 2.6.2
|
10
|
-
- 2.5.5
|
11
|
-
- 2.4.5
|
12
|
-
- 2.3.8
|
13
|
-
- ruby-head
|
14
|
-
# - jruby-9.2.3.0
|
15
|
-
# - jruby-head
|
16
|
-
|
17
|
-
gemfile:
|
18
|
-
- gemfiles/rails_60.gemfile
|
19
|
-
- gemfiles/rails_52.gemfile
|
20
|
-
- gemfiles/rails_51.gemfile
|
21
|
-
- gemfiles/rails_50.gemfile
|
22
|
-
- gemfiles/rails_42.gemfile
|
23
|
-
- gemfiles/rails_41.gemfile
|
24
|
-
- gemfiles/rails_40.gemfile
|
25
|
-
- gemfiles/rails_edge.gemfile
|
26
|
-
|
27
|
-
matrix:
|
28
|
-
allow_failures:
|
29
|
-
- rvm: ruby-head
|
30
|
-
# - rvm: jruby-9.2.3.0
|
31
|
-
# - rvm: jruby-head
|
32
|
-
- gemfile: gemfiles/rails_edge.gemfile
|
33
|
-
- gemfile: gemfiles/rails_41.gemfile
|
34
|
-
- gemfile: gemfiles/rails_40.gemfile
|
35
|
-
exclude:
|
36
|
-
- rvm: ruby-head
|
37
|
-
gemfile: gemfiles/rails_40.gemfile
|
38
|
-
- rvm: ruby-head
|
39
|
-
gemfile: gemfiles/rails_41.gemfile
|
40
|
-
- rvm: ruby-head
|
41
|
-
gemfile: gemfiles/rails_42.gemfile
|
42
|
-
- rvm: 2.6.2
|
43
|
-
gemfile: gemfiles/rails_50.gemfile
|
44
|
-
- rvm: 2.6.2
|
45
|
-
gemfile: gemfiles/rails_42.gemfile
|
46
|
-
- rvm: 2.6.2
|
47
|
-
gemfile: gemfiles/rails_41.gemfile
|
48
|
-
- rvm: 2.6.2
|
49
|
-
gemfile: gemfiles/rails_40.gemfile
|
50
|
-
- rvm: 2.5.5
|
51
|
-
gemfile: gemfiles/rails_50.gemfile
|
52
|
-
- rvm: 2.5.5
|
53
|
-
gemfile: gemfiles/rails_42.gemfile
|
54
|
-
- rvm: 2.5.5
|
55
|
-
gemfile: gemfiles/rails_41.gemfile
|
56
|
-
- rvm: 2.5.5
|
57
|
-
gemfile: gemfiles/rails_40.gemfile
|
58
|
-
- rvm: 2.4.5
|
59
|
-
gemfile: gemfiles/rails_edge.gemfile
|
60
|
-
- rvm: 2.4.5
|
61
|
-
gemfile: gemfiles/rails_60.gemfile
|
62
|
-
- rvm: 2.4.5
|
63
|
-
gemfile: gemfiles/rails_41.gemfile
|
64
|
-
- rvm: 2.4.5
|
65
|
-
gemfile: gemfiles/rails_40.gemfile
|
66
|
-
- rvm: 2.3.8
|
67
|
-
gemfile: gemfiles/rails_edge.gemfile
|
68
|
-
- rvm: 2.3.8
|
69
|
-
gemfile: gemfiles/rails_60.gemfile
|
data/gemfiles/rails_41.gemfile
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "rails", "~> 4.1.0"
|
6
|
-
gem "pry"
|
7
|
-
gem "pry-byebug", platforms: :mri
|
8
|
-
gem "railties", "~> 4.1.0"
|
9
|
-
gem "activesupport", "~> 4.1.0"
|
10
|
-
gem "minitest", "5.10.3"
|
11
|
-
|
12
|
-
gemspec path: "../"
|
data/gemfiles/rails_42.gemfile
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "rails", "~> 4.2.0"
|
6
|
-
gem "pry"
|
7
|
-
gem "pry-byebug", platforms: :mri
|
8
|
-
gem "railties", "~> 4.2.0"
|
9
|
-
gem "activesupport", "~> 4.2.0"
|
10
|
-
gem "minitest", "5.10.3"
|
11
|
-
|
12
|
-
gemspec path: "../"
|