graphql-docs 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/README.md +16 -12
- data/Rakefile +26 -15
- data/graphql-docs.gemspec +2 -1
- data/lib/graphql-docs/client.rb +2 -1
- data/lib/graphql-docs/configuration.rb +6 -1
- data/lib/graphql-docs/generator.rb +26 -2
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_api-box.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_content.scss +0 -0
- data/lib/graphql-docs/layouts/assets/_sass/_fonts.scss +21 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_header.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_mobile.scss +1 -1
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_normalize.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_search.scss +2 -2
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_sidebar.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_syntax.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/_types.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/_sass/screen.scss +0 -0
- data/{sample_assets → lib/graphql-docs/layouts/assets}/css/screen.scss +0 -0
- data/lib/graphql-docs/layouts/assets/images/graphiql-headers.png +0 -0
- data/lib/graphql-docs/layouts/assets/images/graphiql-variables.png +0 -0
- data/lib/graphql-docs/layouts/assets/images/graphiql.png +0 -0
- data/lib/graphql-docs/layouts/assets/images/menu.png +0 -0
- data/lib/graphql-docs/layouts/assets/images/navbar.png +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.eot +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.ttf +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.woff +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.woff2 +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.eot +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.ttf +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.woff +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.woff2 +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.eot +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.ttf +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.woff +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.woff2 +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.eot +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.ttf +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.woff +0 -0
- data/lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.woff2 +0 -0
- data/lib/graphql-docs/layouts/default.html +16 -5
- data/lib/graphql-docs/layouts/graphql_objects.html +1 -1
- data/lib/graphql-docs/layouts/includes/connections.html +1 -1
- data/lib/graphql-docs/layouts/includes/fields.html +1 -1
- data/lib/graphql-docs/layouts/includes/input_fields.html +1 -1
- data/lib/graphql-docs/layouts/includes/possible_types.html +1 -1
- data/lib/graphql-docs/layouts/includes/sidebar.html +9 -9
- data/lib/graphql-docs/layouts/index.md +7 -0
- data/lib/graphql-docs/parser.rb +9 -2
- data/lib/graphql-docs/renderer.rb +2 -1
- data/lib/graphql-docs/version.rb +1 -1
- metadata +64 -28
- data/sample_assets/_sass/_fonts.scss +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaa1474842e99247ca5ed73d7bb1fb4eaf1ed3cf
|
4
|
+
data.tar.gz: 78c24d6cfe911f4990cf5453650aab0ea3b00026
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b814f147f59e77c4a912741a66f494b033825c82c7206f8d5869ac31f38a0d5c910c93bd41ce95e6e22acaac2bbc7d8340a5eef745177079e9a97f82ec2410b9
|
7
|
+
data.tar.gz: 68d4bd88d2cb35d7ae765da04abab98273036e02f60faf68794673205f10409eb32836de653c4b9088f5f3accb40fd0612a6498207d4d7962eb217c05b89ee02
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
Easily generate beautiful documentation from your GraphQL schema.
|
4
4
|
|
5
|
+
![sample](https://cloud.githubusercontent.com/assets/64050/23438604/6a23add0-fdc7-11e6-8852-ef41e8451033.png)
|
6
|
+
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
@@ -23,22 +25,22 @@ Or install it yourself as:
|
|
23
25
|
Simple! Call `GraphQLDocs.generate`, taking care to pass in the GraphQL endpoint:
|
24
26
|
|
25
27
|
``` ruby
|
26
|
-
GraphQLDocs.build(url:
|
28
|
+
GraphQLDocs.build(url: 'http://graphql.org/swapi-graphql/')
|
27
29
|
```
|
28
30
|
|
29
31
|
If your GraphQL endpoint requires authentication, you can provide a username or password, or an access token:
|
30
32
|
|
31
33
|
``` ruby
|
32
34
|
options = {
|
33
|
-
url:
|
34
|
-
login:
|
35
|
-
password:
|
35
|
+
url: 'http://graphql.org/swapi-graphql/'
|
36
|
+
login: 'gjtorikian',
|
37
|
+
password: 'lolnowai'
|
36
38
|
}
|
37
39
|
GraphQLDocs.build(options)
|
38
40
|
|
39
41
|
options = {
|
40
|
-
url:
|
41
|
-
access_token:
|
42
|
+
url: 'http://graphql.org/swapi-graphql/'
|
43
|
+
access_token: 'something123'
|
42
44
|
}
|
43
45
|
|
44
46
|
GraphQLDocs.build(options)
|
@@ -52,12 +54,12 @@ GraphQLDocs.build(path: 'location/to/sw-api.json')
|
|
52
54
|
|
53
55
|
## Breakdown
|
54
56
|
|
55
|
-
There are several
|
57
|
+
There are several phases going on in one little `GraphQLDocs.build` call:
|
56
58
|
|
57
59
|
* The GraphQL JSON is _fetched_ (if you passed `url`) through `GraphQL::Client` (or simply read if you passed `path`).
|
58
60
|
* `GraphQL::Parser` manipulates that JSON into a slightly saner format.
|
59
61
|
* `GraphQL::Generator` takes that JSON and converts it into HTML.
|
60
|
-
* `GraphQL::
|
62
|
+
* `GraphQL::Renderer` technically runs as part of the generation phase. It passes the contents of each page through a Markdown renderer.
|
61
63
|
|
62
64
|
If you wanted to, you could break these calls up individually. For example:
|
63
65
|
|
@@ -110,14 +112,14 @@ In your ERB layouts, there are several helper methods you can use. The helper me
|
|
110
112
|
* `slugify(str)` - This slugifies the given string.
|
111
113
|
* `include(filename, opts)` - This embeds a template from your `includes` folder, passing along the local options provided.
|
112
114
|
* `markdown(string)` - This converts a string from Markdown to HTML.
|
115
|
+
* `graphql_mutation_types`, `graphql_object_types`, `graphql_interface_types`, `graphql_enum_types`, `graphql_union_types`, `graphql_input_object_types`, `graphql_scalar_types` - Collections of the various GraphQL types.
|
113
116
|
|
114
|
-
To call these methods, you must use the dot notation, such as `<%= slugify.(text) %>`.
|
117
|
+
To call these methods within templates, you must use the dot notation, such as `<%= slugify.(text) %>`.
|
115
118
|
|
116
119
|
## Configuration
|
117
120
|
|
118
121
|
The following options are available:
|
119
122
|
|
120
|
-
|
121
123
|
| Option | Description | Default |
|
122
124
|
| :----- | :---------- | :------ |
|
123
125
|
| `access_token` | Uses this token while making requests through `GraphQLDocs::Client`. | `nil` |
|
@@ -126,14 +128,16 @@ The following options are available:
|
|
126
128
|
| `path` | `GraphQLDocs::Client` loads a JSON file found at this location, representing the response from an introspection query. | `nil` |
|
127
129
|
| `url` | `GraphQLDocs::Client` makes a `POST` request to this URL, passing along the introspection query. | `nil` |
|
128
130
|
| `output_dir` | The location of the output HTML. | `./output/` |
|
131
|
+
| `use_default_styles` | Indicates if you want to use the default styles. | `true` |
|
132
|
+
| `base_url` | Indicates the base URL to prepend for assets and links. | `true` |
|
129
133
|
| `delete_output` | Deletes `output_dir` before generating content. | `false` |
|
130
134
|
| `pipeline_config` | Defines two sub-keys, `pipeline` and `context`, which are used by `html-pipeline` when rendering your output. | `pipeline` has `ExtendedMarkdownFilter`, `EmojiFilter`, and `TableOfContentsFilter`. `context` has `gfm: false` and `asset_root` set to GitHub's CDN. |
|
131
135
|
| `renderer` | The rendering class to use. | `GraphQLDocs::Renderer`
|
132
|
-
| `templates` | The templates to use when generating HTML. You may override any of the following keys: `includes`, `objects`, `mutations`, `interfaces`, `enums`, `unions`, `input_objects`, `scalars`. | The
|
136
|
+
| `templates` | The templates to use when generating HTML. You may override any of the following keys: `includes`, `objects`, `mutations`, `interfaces`, `enums`, `unions`, `input_objects`, `scalars`, `index`. | The defaults are found in _lib/graphql-docs/layouts/_.
|
133
137
|
|
134
138
|
## Development
|
135
139
|
|
136
|
-
After checking out the repo, run `script/bootstrap` to install dependencies. Then, run `rake test` to run the tests. You can also run `
|
140
|
+
After checking out the repo, run `script/bootstrap` to install dependencies. Then, run `rake test` to run the tests. You can also run `bundle exec rake console` for an interactive prompt that will allow you to experiment.
|
137
141
|
|
138
142
|
## Sample site
|
139
143
|
|
data/Rakefile
CHANGED
@@ -22,30 +22,41 @@ task :console do
|
|
22
22
|
Pry.start
|
23
23
|
end
|
24
24
|
|
25
|
-
task :
|
25
|
+
task :generate_sample, [:base_url] do |task, args|
|
26
26
|
require 'graphql-docs'
|
27
|
-
require 'sass'
|
28
27
|
|
29
28
|
options = {}
|
30
|
-
options[:output_dir] = 'sample'
|
31
29
|
options[:delete_output] = true
|
30
|
+
options[:base_url] = args.base_url || ''
|
32
31
|
options[:path] = File.join(File.dirname(__FILE__), 'test', 'graphql-docs', 'fixtures', 'gh-api.json')
|
33
32
|
|
34
33
|
GraphQLDocs.build(options)
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
sass = File.join('sample_assets', 'css', 'screen.scss')
|
40
|
-
system `sass --sourcemap=none #{sass}:style.css`
|
36
|
+
task :sample => [:generate_sample] do
|
37
|
+
require 'webrick'
|
41
38
|
|
42
|
-
|
39
|
+
puts 'Navigate to http://localhost:3000 to see the sample docs'
|
43
40
|
|
44
|
-
|
45
|
-
|
41
|
+
server = WEBrick::HTTPServer.new Port: 3000
|
42
|
+
server.mount '/', WEBrick::HTTPServlet::FileHandler, 'output'
|
43
|
+
trap('INT') { server.stop }
|
44
|
+
server.start
|
45
|
+
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
desc 'Generate and publish docs to gh-pages'
|
48
|
+
task :publish do
|
49
|
+
Rake::Task[:generate_sample].invoke('https://www.gjtorikian.com/graphql-docs/')
|
50
|
+
Dir.mktmpdir do |tmp|
|
51
|
+
system "mv output/* #{tmp}"
|
52
|
+
system 'git checkout gh-pages'
|
53
|
+
system 'rm -rf *'
|
54
|
+
system "mv #{tmp}/* ."
|
55
|
+
message = "Site updated at #{Time.now.utc}"
|
56
|
+
system 'git add .'
|
57
|
+
system "git commit -am #{message.shellescape}"
|
58
|
+
system 'git push origin gh-pages --force'
|
59
|
+
system 'git checkout master'
|
60
|
+
system 'echo yolo'
|
61
|
+
end
|
51
62
|
end
|
data/graphql-docs.gemspec
CHANGED
@@ -28,14 +28,15 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency 'github-markdown', '0.6.9'
|
29
29
|
spec.add_dependency 'extended-markdown-filter', '~> 0.4'
|
30
30
|
spec.add_dependency 'gemoji', '2.1.0'
|
31
|
+
spec.add_dependency 'sass', '~> 3.4'
|
31
32
|
|
32
33
|
spec.add_development_dependency 'awesome_print'
|
33
34
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
35
|
+
spec.add_development_dependency 'html-proofer', '~> 3.4'
|
34
36
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
35
37
|
spec.add_development_dependency 'minitest-focus', '~> 1.1'
|
36
38
|
spec.add_development_dependency 'pry', '~> 0.10.0'
|
37
39
|
spec.add_development_dependency 'rake', '~> 10.0'
|
38
40
|
spec.add_development_dependency 'rubocop-github'
|
39
|
-
spec.add_development_dependency 'sass', '~> 3.4'
|
40
41
|
spec.add_development_dependency 'webmock', '~> 2.3'
|
41
42
|
end
|
data/lib/graphql-docs/client.rb
CHANGED
@@ -30,10 +30,11 @@ module GraphQLDocs
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def fetch
|
33
|
-
@faraday.post do |req|
|
33
|
+
res = @faraday.post do |req|
|
34
34
|
req.headers['Content-Type'] = 'application/json'
|
35
35
|
req.body = "{ \"query\": \"#{GraphQL::Introspection::INTROSPECTION_QUERY.gsub("\n", '')}\" }"
|
36
36
|
end
|
37
|
+
res.body
|
37
38
|
end
|
38
39
|
|
39
40
|
def inspect
|
@@ -22,9 +22,12 @@ module GraphQLDocs
|
|
22
22
|
}
|
23
23
|
},
|
24
24
|
renderer: GraphQLDocs::Renderer,
|
25
|
+
use_default_styles: true,
|
26
|
+
base_url: '',
|
25
27
|
|
26
28
|
templates: {
|
27
29
|
default: "#{File.dirname(__FILE__)}/layouts/default.html",
|
30
|
+
|
28
31
|
includes: "#{File.dirname(__FILE__)}/layouts/includes",
|
29
32
|
objects: "#{File.dirname(__FILE__)}/layouts/graphql_objects.html",
|
30
33
|
mutations: "#{File.dirname(__FILE__)}/layouts/graphql_mutations.html",
|
@@ -32,7 +35,9 @@ module GraphQLDocs
|
|
32
35
|
enums: "#{File.dirname(__FILE__)}/layouts/graphql_enums.html",
|
33
36
|
unions: "#{File.dirname(__FILE__)}/layouts/graphql_unions.html",
|
34
37
|
input_objects: "#{File.dirname(__FILE__)}/layouts/graphql_input_objects.html",
|
35
|
-
scalars: "#{File.dirname(__FILE__)}/layouts/graphql_scalars.html"
|
38
|
+
scalars: "#{File.dirname(__FILE__)}/layouts/graphql_scalars.html",
|
39
|
+
|
40
|
+
index: "#{File.dirname(__FILE__)}/layouts/index.md",
|
36
41
|
}
|
37
42
|
}.freeze
|
38
43
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'erb'
|
2
|
+
require 'sass'
|
2
3
|
|
3
4
|
module GraphQLDocs
|
4
5
|
class Generator
|
@@ -32,6 +33,21 @@ module GraphQLDocs
|
|
32
33
|
create_graphql_input_object_pages
|
33
34
|
create_graphql_scalar_pages
|
34
35
|
|
36
|
+
unless @options[:templates][:index].nil?
|
37
|
+
write_file('static', 'index', File.read(@options[:templates][:index]))
|
38
|
+
end
|
39
|
+
|
40
|
+
if @options[:use_default_styles]
|
41
|
+
assets_dir = File.join(File.dirname(__FILE__), 'layouts', 'assets')
|
42
|
+
FileUtils.mkdir_p(File.join(@options[:output_dir], 'assets'))
|
43
|
+
|
44
|
+
sass = File.join(assets_dir, 'css', 'screen.scss')
|
45
|
+
system `sass --sourcemap=none #{sass}:#{@options[:output_dir]}/assets/style.css`
|
46
|
+
|
47
|
+
FileUtils.cp_r(File.join(assets_dir, 'images'), File.join(@options[:output_dir], 'assets'))
|
48
|
+
FileUtils.cp_r(File.join(assets_dir, 'webfonts'), File.join(@options[:output_dir], 'assets'))
|
49
|
+
end
|
50
|
+
|
35
51
|
true
|
36
52
|
end
|
37
53
|
|
@@ -106,8 +122,16 @@ module GraphQLDocs
|
|
106
122
|
private
|
107
123
|
|
108
124
|
def write_file(type, name, contents)
|
109
|
-
|
110
|
-
|
125
|
+
if type == 'static'
|
126
|
+
if name == 'index'
|
127
|
+
path = @options[:output_dir]
|
128
|
+
else
|
129
|
+
path = File.join(@options[:output_dir], name)
|
130
|
+
end
|
131
|
+
else
|
132
|
+
path = File.join(@options[:output_dir], type, name.downcase)
|
133
|
+
FileUtils.mkdir_p(path)
|
134
|
+
end
|
111
135
|
contents = @renderer.render(type, name, contents)
|
112
136
|
File.write(File.join(path, 'index.html'), contents) unless contents.nil?
|
113
137
|
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
@import "//hello.myfonts.net/count/2c4b9d";
|
2
|
+
@font-face {
|
3
|
+
font-family: 'ProximaNova-Light';
|
4
|
+
src: url("webfonts/2C4B9D_B_0.eot");
|
5
|
+
src: url("webfonts/2C4B9D_B_0.eot?#iefix") format('embedded-opentype'), url("webfonts/2C4B9D_B_0.woff2") format('woff2'), url("webfonts/2C4B9D_B_0.woff") format('woff'), url("webfonts/2C4B9D_B_0.ttf") format('truetype');
|
6
|
+
}
|
7
|
+
@font-face {
|
8
|
+
font-family: 'ProximaNova-Semibold';
|
9
|
+
src: url("webfonts/2C4B9D_C_0.eot");
|
10
|
+
src: url("webfonts/2C4B9D_C_0.eot?#iefix") format('embedded-opentype'), url("webfonts/2C4B9D_C_0.woff2") format('woff2'), url("webfonts/2C4B9D_C_0.woff") format('woff'), url("webfonts/2C4B9D_C_0.ttf") format('truetype');
|
11
|
+
}
|
12
|
+
@font-face {
|
13
|
+
font-family: 'ProximaNova-Regular';
|
14
|
+
src: url("webfonts/2C4B9D_D_0.eot");
|
15
|
+
src: url("webfonts/2C4B9D_D_0.eot?#iefix") format('embedded-opentype'), url("webfonts/2C4B9D_D_0.woff2") format('woff2'), url("webfonts/2C4B9D_D_0.woff") format('woff'), url("webfonts/2C4B9D_D_0.ttf") format('truetype');
|
16
|
+
}
|
17
|
+
@font-face {
|
18
|
+
font-family: 'ProximaNova-Bold';
|
19
|
+
src: url("webfonts/2C4B9D_E_0.eot");
|
20
|
+
src: url("webfonts/2C4B9D_E_0.eot?#iefix") format('embedded-opentype'), url("webfonts/2C4B9D_E_0.woff2") format('woff2'), url("webfonts/2C4B9D_E_0.woff") format('woff'), url("webfonts/2C4B9D_E_0.ttf") format('truetype');
|
21
|
+
}
|
File without changes
|
File without changes
|
@@ -8,7 +8,7 @@
|
|
8
8
|
padding: 7px 12px 6px 32px;
|
9
9
|
border-radius: 20px;
|
10
10
|
border: 1px solid #ddd;
|
11
|
-
background: url("../images/search.png") 8px 6px no-repeat;
|
11
|
+
background: url("../assets/images/search.png") 8px 6px no-repeat;
|
12
12
|
background-size: 20px;
|
13
13
|
transition: border-color 0.25s ease;
|
14
14
|
&:focus {
|
@@ -25,7 +25,7 @@
|
|
25
25
|
padding: 7px 12px 6px 32px;
|
26
26
|
border-radius: 20px;
|
27
27
|
border: 1px solid #ddd;
|
28
|
-
background: url("../images/search.png") 8px 6px no-repeat;
|
28
|
+
background: url("../assets/images/search.png") 8px 6px no-repeat;
|
29
29
|
background-size: 20px;
|
30
30
|
transition: border-color 0.25s ease;
|
31
31
|
&:focus {
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -5,9 +5,21 @@
|
|
5
5
|
<meta name="description" content="<%= name %> GraphQL documentation">
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
7
7
|
<title><%= name %></title>
|
8
|
-
<link
|
9
|
-
<
|
10
|
-
<script
|
8
|
+
<link rel="stylesheet" href="<%= base_url %>/assets/style.css">
|
9
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.2.2/anchor.min.js"></script>
|
10
|
+
<script>
|
11
|
+
|
12
|
+
// Add anchors on DOMContentLoaded
|
13
|
+
document.addEventListener("DOMContentLoaded", function(event) {
|
14
|
+
anchors.options = {
|
15
|
+
placement: 'left',
|
16
|
+
visible: 'hover',
|
17
|
+
icon: '¶'
|
18
|
+
};
|
19
|
+
anchors.add('h3');
|
20
|
+
});
|
21
|
+
|
22
|
+
</script>
|
11
23
|
</head>
|
12
24
|
<body>
|
13
25
|
|
@@ -19,8 +31,6 @@
|
|
19
31
|
</div>
|
20
32
|
<div id="content">
|
21
33
|
|
22
|
-
<h1><%= name %></h1>
|
23
|
-
|
24
34
|
<%= contents %>
|
25
35
|
|
26
36
|
</div>
|
@@ -35,5 +45,6 @@
|
|
35
45
|
<div id="mobile-shade"></div>
|
36
46
|
|
37
47
|
</div>
|
48
|
+
|
38
49
|
</body>
|
39
50
|
</html>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
<ul>
|
10
10
|
<% type['interfaces'].each do |interface| %>
|
11
|
-
<li><code><a href="
|
11
|
+
<li><code><a href="<%= base_url %>/interface/<%= slugify.(interface['name']) %>"><%= interface['name'] %></a></code></li>
|
12
12
|
<% end %>
|
13
13
|
</ul>
|
14
14
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<% connections.each do |connection| %>
|
2
2
|
|
3
3
|
<div class="field-entry my-4">
|
4
|
-
<span class="field-name connection-name"><%= connection['name'] %> (<a href="
|
4
|
+
<span class="field-name connection-name"><%= connection['name'] %> (<a href="<%= base_url %>/object/<%= slugify.(connection['type']['ofType']['name']) %>" class="js-connection-name"><code><%= connection['type']['ofType']['name'] %></code></a>)</span>
|
5
5
|
|
6
6
|
<div class="description-wrapper">
|
7
7
|
<%= connection['description'] %>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<% @type_name = field['type']['ofType']['name'] %>
|
25
25
|
<% end %>
|
26
26
|
|
27
|
-
<span class="field-name"><%= field['name'] %> (<code><a href="
|
27
|
+
<span class="field-name"><%= field['name'] %> (<code><a href="<%= base_url %>/<%= @type_path.downcase %>/<%= slugify.(@type_name) %>"><%= @type_name %></a></code>)</span>
|
28
28
|
|
29
29
|
<div class="description-wrapper">
|
30
30
|
<% if field['isDeprecated'] %>
|
@@ -26,7 +26,7 @@
|
|
26
26
|
<% @type_name = field['type']['ofType']['name'] %>
|
27
27
|
<% end %>
|
28
28
|
|
29
|
-
<span class="field-name"><%= field['name'] %> (<a href="
|
29
|
+
<span class="field-name"><%= field['name'] %> (<a href="<%= base_url %>/<%= @type_path.downcase %>/<%= slugify.(@type_name) %>"><code><%= @type_name %></code></a>)</span>
|
30
30
|
|
31
31
|
<div class="description-wrapper">
|
32
32
|
<%= field['description'] %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<ul>
|
4
4
|
|
5
5
|
<% possible_types.each do |possible_type| %>
|
6
|
-
<li><a href="
|
6
|
+
<li><a href="<%= base_url %>/object/<%= slugify.(possible_type['name']) %>"><%= possible_type['name'] %></a></li>
|
7
7
|
<% end %>
|
8
8
|
|
9
9
|
</ul>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<li>
|
3
3
|
<ul class="menu-root">
|
4
4
|
<li>
|
5
|
-
GraphQL Reference
|
5
|
+
<a href="/">GraphQL Reference</a>
|
6
6
|
</ul>
|
7
7
|
</li>
|
8
8
|
|
@@ -10,12 +10,12 @@
|
|
10
10
|
<p>Queries</p>
|
11
11
|
<ul class="menu-root">
|
12
12
|
<li>
|
13
|
-
<a href="
|
13
|
+
<a href="<%= base_url %>/object/query/" class="sidebar-link<% if title == "Query" %> current<% end %>">
|
14
14
|
RootQuery
|
15
15
|
</a>
|
16
16
|
</li>
|
17
17
|
<li>
|
18
|
-
<a href="
|
18
|
+
<a href="<%= base_url %>/object/mutation" class="sidebar-link<% if title == "Mutation" %> current<% end %>">
|
19
19
|
Mutation
|
20
20
|
</a>
|
21
21
|
</li>
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<% end %>
|
44
44
|
|
45
45
|
<li>
|
46
|
-
<a href="
|
46
|
+
<a href="<%= base_url %>/object/<%= @name.downcase %>/index.html" class="sidebar-link<% if title == @name %> current<% end %>">
|
47
47
|
<%= @name %>
|
48
48
|
</a>
|
49
49
|
</li>
|
@@ -57,7 +57,7 @@
|
|
57
57
|
<% graphql_interface_types.().each do |type| %>
|
58
58
|
<% @name = type["name"] %>
|
59
59
|
<li>
|
60
|
-
<a href="
|
60
|
+
<a href="<%= base_url %>/interface/<%= @name.downcase %>/index.html" class="sidebar-link<% if title == @name %> current<% end %>">
|
61
61
|
<%= @name %>
|
62
62
|
</a>
|
63
63
|
</li>
|
@@ -75,7 +75,7 @@
|
|
75
75
|
<% next %>
|
76
76
|
<% end %>
|
77
77
|
<li>
|
78
|
-
<a href="
|
78
|
+
<a href="<%= base_url %>/enum/<%= @name.downcase %>/index.html" class="sidebar-link<% if title == @name %> current<% end %>">
|
79
79
|
<%= @name %>
|
80
80
|
</a>
|
81
81
|
</li>
|
@@ -89,7 +89,7 @@
|
|
89
89
|
<% graphql_union_types.().each do |type| %>
|
90
90
|
<% @name = type["name"] %>
|
91
91
|
<li>
|
92
|
-
<a href="
|
92
|
+
<a href="<%= base_url %>/union/<%= @name.downcase %>/index.html" class="sidebar-link<% if title == @name %> current<% end %>">
|
93
93
|
<%= @name %>
|
94
94
|
</a>
|
95
95
|
</li>
|
@@ -103,7 +103,7 @@
|
|
103
103
|
<% graphql_input_object_types.().each do |type| %>
|
104
104
|
<% @name = type["name"] %>
|
105
105
|
<li>
|
106
|
-
<a href="
|
106
|
+
<a href="<%= base_url %>/input_object/<%= @name.downcase %>/index.html" class="sidebar-link<% if title == @name %> current<% end %>">
|
107
107
|
<%= @name %>
|
108
108
|
</a>
|
109
109
|
</li>
|
@@ -117,7 +117,7 @@
|
|
117
117
|
<% graphql_scalar_types.().each do |type| %>
|
118
118
|
<% @name = type["name"] %>
|
119
119
|
<li>
|
120
|
-
<a href="
|
120
|
+
<a href="<%= base_url %>/scalar/<%= @name.downcase %>/index.html" class="sidebar-link<% if title == @name %> current<% end %>">
|
121
121
|
<%= @name %>
|
122
122
|
</a>
|
123
123
|
</li>
|
data/lib/graphql-docs/parser.rb
CHANGED
@@ -23,9 +23,16 @@ module GraphQLDocs
|
|
23
23
|
type_kinds.each do |kind|
|
24
24
|
@processed_schema["#{kind.downcase}_types"] = @processed_schema['types'].select { |t| t['kind'] == kind }
|
25
25
|
end
|
26
|
-
|
26
|
+
mutation_types = @processed_schema['object_types'].select do |t|
|
27
27
|
t['name'] == 'Mutation'
|
28
|
-
end
|
28
|
+
end
|
29
|
+
|
30
|
+
@processed_schema['mutation_types'] = if mutation_types.empty?
|
31
|
+
[]
|
32
|
+
else
|
33
|
+
@processed_schema['mutation_types'] = mutation_types.first['fields']
|
34
|
+
end
|
35
|
+
|
29
36
|
# TODO: should the 'types' key be deleted now?
|
30
37
|
|
31
38
|
@processed_schema
|
@@ -36,7 +36,8 @@ module GraphQLDocs
|
|
36
36
|
def render(type, name, contents)
|
37
37
|
contents = @pipeline.to_html(contents)
|
38
38
|
return contents if @graphql_default_layout.nil?
|
39
|
-
opts =
|
39
|
+
opts = @options
|
40
|
+
opts = opts.merge({ contents: contents, type: type, name: name}).merge(helper_methods)
|
40
41
|
@graphql_default_layout.result(OpenStruct.new(opts).instance_eval { binding })
|
41
42
|
end
|
42
43
|
|
data/lib/graphql-docs/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen Torikian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 2.1.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sass
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.4'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.4'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: awesome_print
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +136,20 @@ dependencies:
|
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '1.14'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: html-proofer
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.4'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.4'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
154
|
name: minitest
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,20 +220,6 @@ dependencies:
|
|
192
220
|
- - ">="
|
193
221
|
- !ruby/object:Gem::Version
|
194
222
|
version: '0'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: sass
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - "~>"
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '3.4'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - "~>"
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '3.4'
|
209
223
|
- !ruby/object:Gem::Dependency
|
210
224
|
name: webmock
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,6 +254,39 @@ files:
|
|
240
254
|
- lib/graphql-docs/configuration.rb
|
241
255
|
- lib/graphql-docs/generator.rb
|
242
256
|
- lib/graphql-docs/helpers.rb
|
257
|
+
- lib/graphql-docs/layouts/assets/_sass/_api-box.scss
|
258
|
+
- lib/graphql-docs/layouts/assets/_sass/_content.scss
|
259
|
+
- lib/graphql-docs/layouts/assets/_sass/_fonts.scss
|
260
|
+
- lib/graphql-docs/layouts/assets/_sass/_header.scss
|
261
|
+
- lib/graphql-docs/layouts/assets/_sass/_mobile.scss
|
262
|
+
- lib/graphql-docs/layouts/assets/_sass/_normalize.scss
|
263
|
+
- lib/graphql-docs/layouts/assets/_sass/_search.scss
|
264
|
+
- lib/graphql-docs/layouts/assets/_sass/_sidebar.scss
|
265
|
+
- lib/graphql-docs/layouts/assets/_sass/_syntax.scss
|
266
|
+
- lib/graphql-docs/layouts/assets/_sass/_types.scss
|
267
|
+
- lib/graphql-docs/layouts/assets/_sass/screen.scss
|
268
|
+
- lib/graphql-docs/layouts/assets/css/screen.scss
|
269
|
+
- lib/graphql-docs/layouts/assets/images/graphiql-headers.png
|
270
|
+
- lib/graphql-docs/layouts/assets/images/graphiql-variables.png
|
271
|
+
- lib/graphql-docs/layouts/assets/images/graphiql.png
|
272
|
+
- lib/graphql-docs/layouts/assets/images/menu.png
|
273
|
+
- lib/graphql-docs/layouts/assets/images/navbar.png
|
274
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.eot
|
275
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.ttf
|
276
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.woff
|
277
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_B_0.woff2
|
278
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.eot
|
279
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.ttf
|
280
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.woff
|
281
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_C_0.woff2
|
282
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.eot
|
283
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.ttf
|
284
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.woff
|
285
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_D_0.woff2
|
286
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.eot
|
287
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.ttf
|
288
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.woff
|
289
|
+
- lib/graphql-docs/layouts/assets/webfonts/2C4B9D_E_0.woff2
|
243
290
|
- lib/graphql-docs/layouts/default.html
|
244
291
|
- lib/graphql-docs/layouts/graphql_enums.html
|
245
292
|
- lib/graphql-docs/layouts/graphql_input_objects.html
|
@@ -255,21 +302,10 @@ files:
|
|
255
302
|
- lib/graphql-docs/layouts/includes/possible_types.html
|
256
303
|
- lib/graphql-docs/layouts/includes/sidebar.html
|
257
304
|
- lib/graphql-docs/layouts/includes/values.html
|
305
|
+
- lib/graphql-docs/layouts/index.md
|
258
306
|
- lib/graphql-docs/parser.rb
|
259
307
|
- lib/graphql-docs/renderer.rb
|
260
308
|
- lib/graphql-docs/version.rb
|
261
|
-
- sample_assets/_sass/_api-box.scss
|
262
|
-
- sample_assets/_sass/_content.scss
|
263
|
-
- sample_assets/_sass/_fonts.scss
|
264
|
-
- sample_assets/_sass/_header.scss
|
265
|
-
- sample_assets/_sass/_mobile.scss
|
266
|
-
- sample_assets/_sass/_normalize.scss
|
267
|
-
- sample_assets/_sass/_search.scss
|
268
|
-
- sample_assets/_sass/_sidebar.scss
|
269
|
-
- sample_assets/_sass/_syntax.scss
|
270
|
-
- sample_assets/_sass/_types.scss
|
271
|
-
- sample_assets/_sass/screen.scss
|
272
|
-
- sample_assets/css/screen.scss
|
273
309
|
- script/bootstrap
|
274
310
|
- script/console
|
275
311
|
homepage: https://github.com/gjtorikian/graphql-docs
|
@@ -1,21 +0,0 @@
|
|
1
|
-
@import "//hello.myfonts.net/count/2c4b9d";
|
2
|
-
@font-face {
|
3
|
-
font-family: 'ProximaNova-Light';
|
4
|
-
src: url("/assets/webfonts/2C4B9D_B_0.eot");
|
5
|
-
src: url("/assets/webfonts/2C4B9D_B_0.eot?#iefix") format('embedded-opentype'), url("/assets/webfonts/2C4B9D_B_0.woff2") format('woff2'), url("/assets/webfonts/2C4B9D_B_0.woff") format('woff'), url("/assets/webfonts/2C4B9D_B_0.ttf") format('truetype');
|
6
|
-
}
|
7
|
-
@font-face {
|
8
|
-
font-family: 'ProximaNova-Semibold';
|
9
|
-
src: url("/assets/webfonts/2C4B9D_C_0.eot");
|
10
|
-
src: url("/assets/webfonts/2C4B9D_C_0.eot?#iefix") format('embedded-opentype'), url("/assets/webfonts/2C4B9D_C_0.woff2") format('woff2'), url("/assets/webfonts/2C4B9D_C_0.woff") format('woff'), url("/assets/webfonts/2C4B9D_C_0.ttf") format('truetype');
|
11
|
-
}
|
12
|
-
@font-face {
|
13
|
-
font-family: 'ProximaNova-Regular';
|
14
|
-
src: url("/assets/webfonts/2C4B9D_D_0.eot");
|
15
|
-
src: url("/assets/webfonts/2C4B9D_D_0.eot?#iefix") format('embedded-opentype'), url("/assets/webfonts/2C4B9D_D_0.woff2") format('woff2'), url("/assets/webfonts/2C4B9D_D_0.woff") format('woff'), url("/assets/webfonts/2C4B9D_D_0.ttf") format('truetype');
|
16
|
-
}
|
17
|
-
@font-face {
|
18
|
-
font-family: 'ProximaNova-Bold';
|
19
|
-
src: url("/assets/webfonts/2C4B9D_E_0.eot");
|
20
|
-
src: url("/assets/webfonts/2C4B9D_E_0.eot?#iefix") format('embedded-opentype'), url("/assets/webfonts/2C4B9D_E_0.woff2") format('woff2'), url("/assets/webfonts/2C4B9D_E_0.woff") format('woff'), url("/assets/webfonts/2C4B9D_E_0.ttf") format('truetype');
|
21
|
-
}
|