graphql-preview 0.1.0 → 0.1.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f347cb86eb4816cfc558fb65055fcda2249e734f
|
4
|
+
data.tar.gz: d81f1b198bbf98b13cdf16a264e5cfe5d5f53f25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae4f82e144f8ce339adf5583643ee9d8052146dca49ce14a82cc2c0f823727a6d5a958dd28a183defac7f762729a013631302a2259f0e2cb9c89b75101f309e3
|
7
|
+
data.tar.gz: 64128cb0e7e0ee790e997ee7483b6072c031a0a786b06faf51940ee1edf6c8854247e050d539156508b2faa1baf587544502ca1e2de9c2e84c5655e731b75236
|
data/lib/graphql-preview.rb
CHANGED
@@ -14,10 +14,18 @@ module GraphQLPreview
|
|
14
14
|
raise ArgumentError, "[GraphQLPreview] `:schema_previews` was not provided to the `context`"
|
15
15
|
end
|
16
16
|
|
17
|
-
context[:
|
17
|
+
schema_preview_environment = context[:schema_preview_environment] || SchemaModification::DEFAULT_ENVIRONMENT
|
18
|
+
|
19
|
+
toggled_by_preview = member.metadata[:preview_toggled_by][schema_preview_environment]
|
20
|
+
|
21
|
+
if toggled_by_preview
|
22
|
+
context[:schema_previews].include?(toggled_by_preview.toggled_by)
|
23
|
+
else
|
24
|
+
false
|
25
|
+
end
|
18
26
|
end
|
19
27
|
|
20
|
-
def self.use(schema_def, enabled_previews: [])
|
28
|
+
def self.use(schema_def, enabled_previews: [], possible_environments: [SchemaModification::DEFAULT_ENVIRONMENT])
|
21
29
|
unless enabled_previews.is_a?(Array)
|
22
30
|
raise ArgumentError, "Expected `enabled_previews` to be an array, but it was `#{enabled_previews.class}`"
|
23
31
|
end
|
@@ -29,8 +37,8 @@ module GraphQLPreview
|
|
29
37
|
end
|
30
38
|
|
31
39
|
schema = schema_def.target
|
32
|
-
schema_def.instrument(:field, Instrumenter.new(enabled_previews))
|
33
|
-
enabled_previews.each { |preview| preview.apply_to_schema(schema) }
|
40
|
+
schema_def.instrument(:field, Instrumenter.new(enabled_previews, possible_environments))
|
41
|
+
enabled_previews.each { |preview| preview.apply_to_schema(schema, possible_environments) }
|
34
42
|
schema.metadata[:enabled_previews] = enabled_previews
|
35
43
|
end
|
36
44
|
end
|
@@ -1,8 +1,14 @@
|
|
1
1
|
module GraphQLPreview
|
2
2
|
module Extensions
|
3
3
|
module EnabledPreviews
|
4
|
-
def enabled_previews
|
5
|
-
metadata[:enabled_previews]
|
4
|
+
def enabled_previews(environment = nil)
|
5
|
+
metadata[:enabled_previews].select do |preview|
|
6
|
+
if environment.nil?
|
7
|
+
true
|
8
|
+
else
|
9
|
+
preview.environments.nil? || preview.environments.include?(environment)
|
10
|
+
end
|
11
|
+
end
|
6
12
|
end
|
7
13
|
end
|
8
14
|
end
|
@@ -2,8 +2,9 @@ module GraphQLPreview
|
|
2
2
|
# Modify each field & argument in the schema so that
|
3
3
|
# its metadata contains the preview, if there is one.
|
4
4
|
class Instrumenter
|
5
|
-
def initialize(enabled_previews)
|
5
|
+
def initialize(enabled_previews, possible_environments)
|
6
6
|
@enabled_previews = enabled_previews
|
7
|
+
@possible_environments = possible_environments
|
7
8
|
end
|
8
9
|
|
9
10
|
def instrument(type, field)
|
@@ -28,9 +29,19 @@ module GraphQLPreview
|
|
28
29
|
if obj.metadata[:preview_toggled_by]
|
29
30
|
raise ArgumentError, "Couldn't add `#{preview}` to `#{obj.name}`: it's already toggled with `#{obj.metadata[:preview_toggled_by].toggled_by}`"
|
30
31
|
end
|
31
|
-
|
32
|
+
|
33
|
+
environments = if preview.environments
|
34
|
+
preview.environments
|
35
|
+
else
|
36
|
+
@possible_environments
|
37
|
+
end
|
38
|
+
|
39
|
+
value = Hash[environments.map{ |env| [env, preview] }]
|
40
|
+
|
41
|
+
obj.metadata[:preview_toggled_by] = value
|
42
|
+
|
32
43
|
if obj.respond_to?(:mutation) && (mut = obj.mutation)
|
33
|
-
mut.metadata[:preview_toggled_by] =
|
44
|
+
mut.metadata[:preview_toggled_by] = value
|
34
45
|
end
|
35
46
|
end
|
36
47
|
end
|
@@ -1,5 +1,15 @@
|
|
1
1
|
module GraphQLPreview
|
2
2
|
class SchemaModification
|
3
|
+
DEFAULT_ENVIRONMENT = :all
|
4
|
+
|
5
|
+
def self.environments(*new_environments)
|
6
|
+
if new_environments.length > 0
|
7
|
+
@environments = new_environments
|
8
|
+
else
|
9
|
+
@environments
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
3
13
|
def self.to_h
|
4
14
|
{
|
5
15
|
title: title,
|
@@ -77,8 +87,16 @@ module GraphQLPreview
|
|
77
87
|
set_preview_toggled_by_on_members(schema, nil)
|
78
88
|
end
|
79
89
|
|
80
|
-
def self.apply_to_schema(schema)
|
81
|
-
|
90
|
+
def self.apply_to_schema(schema, possible_environments)
|
91
|
+
environments = if self.environments
|
92
|
+
self.environments
|
93
|
+
else
|
94
|
+
possible_environments
|
95
|
+
end
|
96
|
+
|
97
|
+
value = Hash[environments.map{ |env| [env, self] }]
|
98
|
+
|
99
|
+
set_preview_toggled_by_on_members(schema, value)
|
82
100
|
end
|
83
101
|
|
84
102
|
private
|
@@ -98,7 +116,7 @@ module GraphQLPreview
|
|
98
116
|
|
99
117
|
# unless we're unsetting the preview, don't allow adding a new value
|
100
118
|
if value && member.metadata[:preview_toggled_by]
|
101
|
-
raise ArgumentError, "Couldn't add `#{self.toggled_by}` to `#{member.name}`: it's already toggled with `#{member.metadata[:preview_toggled_by]
|
119
|
+
raise ArgumentError, "Couldn't add `#{self.toggled_by}` to `#{member.name}`: it's already toggled with `#{member.metadata[:preview_toggled_by]}`"
|
102
120
|
end
|
103
121
|
|
104
122
|
member.metadata[:preview_toggled_by] = value
|
@@ -108,10 +126,6 @@ module GraphQLPreview
|
|
108
126
|
field.metadata[:preview_toggled_by] = value
|
109
127
|
end
|
110
128
|
end
|
111
|
-
|
112
|
-
if member.respond_to?(:mutation) && member.mutation
|
113
|
-
member.mutation.metadata[:preview_toggled_by] = value
|
114
|
-
end
|
115
129
|
end
|
116
130
|
end
|
117
131
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-preview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen J. Torikian
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-04-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: graphql
|
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
154
|
version: '0'
|
155
155
|
requirements: []
|
156
156
|
rubyforge_project:
|
157
|
-
rubygems_version: 2.6.
|
157
|
+
rubygems_version: 2.6.13
|
158
158
|
signing_key:
|
159
159
|
specification_version: 4
|
160
160
|
summary: Provide a system for toggling parts of a GraphQL schema on.
|