graphql-idl-parser 0.0.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 +7 -0
- data/.gitignore +17 -0
- data/.gitmodules +4 -0
- data/.travis.yml +28 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +35 -0
- data/Rakefile +39 -0
- data/ext/graphql-idl-parser/extconf.rb +39 -0
- data/ext/graphql-idl-parser/graphql-idl-parser.c +227 -0
- data/ext/graphql-idl-parser/graphql-idl-parser.h +27 -0
- data/graphql-idl-parser.gemspec +28 -0
- data/lib/graphql-idl-parser.rb +34 -0
- data/lib/graphql-idl-parser/version.rb +3 -0
- data/script/bootstrap +11 -0
- data/script/cibuild +5 -0
- data/script/update_submodules +21 -0
- metadata +144 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 140e46859bc93230d1d6ab77585ac60add046620
|
4
|
+
data.tar.gz: 3763416e5e5495e9c002c31b2d7250d989074f5a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e564993dbc210343566966090c19e225fcaf3d1dbed9a231d207d2ed533a904bf2289b2fb39fefb9504b9bd871f7a22427a27a66d621f95a917c38aafbb41d1f
|
7
|
+
data.tar.gz: c9bf8c3221a7604a08292c42045aa6c9377579b024674f19dfc00e36dec500762c3b6c3d78818be6a6950d6023b97664886eb15a423107d4d22ff31d54f84193
|
data/.gitignore
ADDED
data/.gitmodules
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
sudo: false
|
2
|
+
language: ruby
|
3
|
+
rvm:
|
4
|
+
- 2.4.0
|
5
|
+
cache:
|
6
|
+
directories:
|
7
|
+
- $HOME/.rvm/gems
|
8
|
+
- $HOME/.cargo
|
9
|
+
- $HOME/.multirust
|
10
|
+
|
11
|
+
env:
|
12
|
+
global:
|
13
|
+
- RUST_VERSION=stable
|
14
|
+
|
15
|
+
git:
|
16
|
+
depth: 10
|
17
|
+
submodules: false
|
18
|
+
|
19
|
+
before_install:
|
20
|
+
- sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
|
21
|
+
- git submodule update --init --recursive
|
22
|
+
# Install Rust
|
23
|
+
- if [ ! -e "$HOME/.cargo/bin" ]; then curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain $RUST_VERSION -y; fi
|
24
|
+
- export PATH="$HOME/.cargo/bin:$PATH"
|
25
|
+
- rustup default $RUST_VERSION
|
26
|
+
|
27
|
+
script:
|
28
|
+
- script/cibuild
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2017 Garen Torikian
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# GraphQL-IDL-Parser
|
2
|
+
|
3
|
+
This gem will accept a GraphQL IDL file and parse it. It uses [gjtorikian/graphql-idl-parser](https://github.com/gjtorikian/graphql-idl-parser) as the mechanism
|
4
|
+
for this, which is written in Rust, making this blazing fast.
|
5
|
+
|
6
|
+
[](https://travis-ci.org/gjtorikian/graphql-idl-parser-ruby)
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'graphql-idl-parser'
|
14
|
+
```
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install graphql-idl-parser
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
``` ruby
|
27
|
+
# feed it a file
|
28
|
+
parser = GraphQL::IDLParser.new(filename: contents)
|
29
|
+
|
30
|
+
# or feed it a string
|
31
|
+
parser = GraphQL::IDLParser.new(schema: contents)
|
32
|
+
|
33
|
+
# execute!
|
34
|
+
results = parser.process
|
35
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/extensiontask'
|
5
|
+
|
6
|
+
task default: :test
|
7
|
+
|
8
|
+
Rake::TestTask.new(:test) do |t|
|
9
|
+
t.libs << 'test'
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.test_files = FileList['test/**/*_test.rb']
|
12
|
+
end
|
13
|
+
|
14
|
+
# Gem Spec
|
15
|
+
gem_spec = Gem::Specification.load('graphql-idl-parser.gemspec')
|
16
|
+
|
17
|
+
Rake::ExtensionTask.new('graphql-idl-parser', gem_spec) do |ext|
|
18
|
+
ext.name = 'graphqlidlparser'
|
19
|
+
ext.lib_dir = File.join('lib', 'graphql-idl-parser')
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Pretty format C code'
|
23
|
+
task :format do
|
24
|
+
puts `astyle --indent=spaces=2 --style=1tbs --keep-one-line-blocks \
|
25
|
+
$(ack -n -f --type=cpp --type=cc ext/graphql-idl-parser/)`
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'Benchmark loading an IDL file'
|
29
|
+
task :benchmark do
|
30
|
+
require 'benchmark'
|
31
|
+
require 'graphql'
|
32
|
+
require 'graphql-idl-parser'
|
33
|
+
|
34
|
+
schema = File.read(File.join('ext', 'graphql-idl-parser', 'graphql-idl-parser', 'test', 'github.graphql'))
|
35
|
+
|
36
|
+
Benchmark.bm(10) do |x|
|
37
|
+
x.report('this-gem: ') { parser = GraphQL::IDLParser.new(schema: schema); parser.process }
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'mkmf'
|
3
|
+
require 'rbconfig'
|
4
|
+
include FileUtils
|
5
|
+
|
6
|
+
LIBDIR = RbConfig::CONFIG['libdir']
|
7
|
+
INCLUDEDIR = RbConfig::CONFIG['includedir']
|
8
|
+
EXT_DIR = File.expand_path(File.join(File.dirname(__FILE__), 'graphql-idl-parser'))
|
9
|
+
FFI_DIR = File.expand_path(File.join(EXT_DIR, 'graphql-idl-parser-ffi'))
|
10
|
+
HEADER_DIR = File.expand_path(File.join(EXT_DIR, 'graphql-idl-parser-ffi', 'includes'))
|
11
|
+
|
12
|
+
if ENV['TRAVIS']
|
13
|
+
type = 'debug'
|
14
|
+
target = ''
|
15
|
+
flag = '-O0'
|
16
|
+
else
|
17
|
+
type = 'release'
|
18
|
+
target = '--release'
|
19
|
+
flag = '-O2'
|
20
|
+
end
|
21
|
+
|
22
|
+
RELEASE_DIR = File.join(FFI_DIR, 'target', type)
|
23
|
+
|
24
|
+
if !system('cargo --version') || !system('rustc --version')
|
25
|
+
raise '\n\n\n[ERROR]: You have to install Rust with Cargo (https://www.rust-lang.org/)'
|
26
|
+
end
|
27
|
+
|
28
|
+
`cargo build #{target} --manifest-path #{File.join(FFI_DIR, 'Cargo.toml')}`
|
29
|
+
|
30
|
+
$LIBS << ' -lgraphqlidlparser'
|
31
|
+
|
32
|
+
HEADER_DIRS = [INCLUDEDIR, HEADER_DIR]
|
33
|
+
LIB_DIRS = [LIBDIR, RELEASE_DIR]
|
34
|
+
|
35
|
+
dir_config('graphql-idl-parser', HEADER_DIRS, LIB_DIRS)
|
36
|
+
|
37
|
+
$CFLAGS << " #{flag} -std=c11 -Wall -pedantic -Werror -Wfatal-errors -Wstrict-aliasing"
|
38
|
+
|
39
|
+
create_makefile('graphql-idl-parser/graphqlidlparser')
|
@@ -0,0 +1,227 @@
|
|
1
|
+
#include "graphql-idl-parser.h"
|
2
|
+
|
3
|
+
static VALUE rb_mGraphQL;
|
4
|
+
static VALUE rb_cGraphQLIDLParser;
|
5
|
+
|
6
|
+
VALUE convert_string(const char* c_string) {
|
7
|
+
VALUE rb_string;
|
8
|
+
int enc;
|
9
|
+
|
10
|
+
if (c_string == NULL) {
|
11
|
+
return Qnil;
|
12
|
+
}
|
13
|
+
|
14
|
+
rb_string = rb_str_new2(c_string);
|
15
|
+
enc = rb_enc_find_index("UTF-8");
|
16
|
+
rb_enc_associate_index(rb_string, enc);
|
17
|
+
|
18
|
+
return rb_string;
|
19
|
+
}
|
20
|
+
|
21
|
+
VALUE convert_type_info(struct FieldType c_field_type) {
|
22
|
+
VALUE rb_hash = rb_hash_new();
|
23
|
+
|
24
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(c_field_type.name));
|
25
|
+
rb_hash_aset(rb_hash, CSTR2SYM("info"), convert_string(c_field_type.info));
|
26
|
+
|
27
|
+
return rb_hash;
|
28
|
+
}
|
29
|
+
|
30
|
+
VALUE convert_array_of_strings(struct array_of_strings c_array_of_strings) {
|
31
|
+
VALUE rb_array = rb_ary_new();
|
32
|
+
size_t i;
|
33
|
+
|
34
|
+
if (c_array_of_strings.length == 0) {
|
35
|
+
return rb_array;
|
36
|
+
}
|
37
|
+
|
38
|
+
for (i = 0; i < c_array_of_strings.length; i++) {
|
39
|
+
rb_ary_push(rb_array, convert_string(c_array_of_strings.data[i]));
|
40
|
+
}
|
41
|
+
|
42
|
+
return rb_array;
|
43
|
+
}
|
44
|
+
|
45
|
+
VALUE convert_array_of_arguments(struct array_of_arguments c_array_of_arguments) {
|
46
|
+
VALUE rb_array = rb_ary_new();
|
47
|
+
VALUE rb_hash;
|
48
|
+
size_t i;
|
49
|
+
|
50
|
+
if (c_array_of_arguments.length == 0) {
|
51
|
+
return rb_array;
|
52
|
+
}
|
53
|
+
|
54
|
+
for (i = 0; i < c_array_of_arguments.length; i++) {
|
55
|
+
rb_hash = rb_hash_new();
|
56
|
+
|
57
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(c_array_of_arguments.data[i].name));
|
58
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(c_array_of_arguments.data[i].description));
|
59
|
+
rb_hash_aset(rb_hash, CSTR2SYM("type_info"), convert_type_info(c_array_of_arguments.data[i].type_info));
|
60
|
+
rb_hash_aset(rb_hash, CSTR2SYM("default_value"), convert_string(c_array_of_arguments.data[i].default_value));
|
61
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(c_array_of_arguments.data[i].directives));
|
62
|
+
|
63
|
+
rb_ary_push(rb_array, rb_hash);
|
64
|
+
}
|
65
|
+
|
66
|
+
return rb_array;
|
67
|
+
}
|
68
|
+
|
69
|
+
VALUE convert_array_of_fields(struct array_of_fields c_array_of_fields) {
|
70
|
+
VALUE rb_array = rb_ary_new();
|
71
|
+
VALUE rb_hash;
|
72
|
+
size_t i;
|
73
|
+
|
74
|
+
if (c_array_of_fields.length == 0) {
|
75
|
+
return rb_array;
|
76
|
+
}
|
77
|
+
|
78
|
+
for (i = 0; i < c_array_of_fields.length; i++) {
|
79
|
+
rb_hash = rb_hash_new();
|
80
|
+
|
81
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(c_array_of_fields.data[i].name));
|
82
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(c_array_of_fields.data[i].description));
|
83
|
+
rb_hash_aset(rb_hash, CSTR2SYM("type_info"), convert_type_info(c_array_of_fields.data[i].type_info));
|
84
|
+
rb_hash_aset(rb_hash, CSTR2SYM("arguments"), convert_array_of_arguments(c_array_of_fields.data[i].arguments));
|
85
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(c_array_of_fields.data[i].directives));
|
86
|
+
|
87
|
+
rb_ary_push(rb_array, rb_hash);
|
88
|
+
}
|
89
|
+
|
90
|
+
return rb_array;
|
91
|
+
}
|
92
|
+
|
93
|
+
VALUE convert_array_of_values(struct array_of_values c_array_of_values) {
|
94
|
+
VALUE rb_array = rb_ary_new();
|
95
|
+
VALUE rb_hash;
|
96
|
+
size_t i;
|
97
|
+
|
98
|
+
if (c_array_of_values.length == 0) {
|
99
|
+
return rb_array;
|
100
|
+
}
|
101
|
+
|
102
|
+
for (i = 0; i < c_array_of_values.length; i++) {
|
103
|
+
rb_hash = rb_hash_new();
|
104
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(c_array_of_values.data[i].name));
|
105
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(c_array_of_values.data[i].description));
|
106
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(c_array_of_values.data[i].directives));
|
107
|
+
|
108
|
+
rb_ary_push(rb_array, rb_hash);
|
109
|
+
}
|
110
|
+
|
111
|
+
return rb_array;
|
112
|
+
}
|
113
|
+
|
114
|
+
VALUE convert_array_of_directives(struct array_of_directives c_array_of_directives) {
|
115
|
+
VALUE rb_array = rb_ary_new();
|
116
|
+
VALUE rb_hash;
|
117
|
+
VALUE rb_arguments_array;
|
118
|
+
VALUE rb_arguments_hash;
|
119
|
+
|
120
|
+
size_t i, j;
|
121
|
+
|
122
|
+
if (c_array_of_directives.length == 0) {
|
123
|
+
return rb_array;
|
124
|
+
}
|
125
|
+
|
126
|
+
for (i = 0; i < c_array_of_directives.length; i++) {
|
127
|
+
rb_hash = rb_hash_new();
|
128
|
+
rb_arguments_array = rb_ary_new();
|
129
|
+
|
130
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(c_array_of_directives.data[i].name));
|
131
|
+
rb_hash_aset(rb_hash, CSTR2SYM("arguments"), rb_arguments_array);
|
132
|
+
|
133
|
+
for (j = 0; j < c_array_of_directives.data[i].arguments.length; j++) {
|
134
|
+
rb_arguments_hash = rb_hash_new();
|
135
|
+
rb_hash_aset(rb_arguments_hash, CSTR2SYM("name"), convert_string(c_array_of_directives.data[i].arguments.data[j].name));
|
136
|
+
rb_hash_aset(rb_arguments_hash, CSTR2SYM("value"), convert_string(c_array_of_directives.data[i].arguments.data[j].value));
|
137
|
+
|
138
|
+
rb_ary_push(rb_arguments_array, rb_arguments_hash);
|
139
|
+
}
|
140
|
+
|
141
|
+
rb_ary_push(rb_array, rb_hash);
|
142
|
+
}
|
143
|
+
|
144
|
+
return rb_array;
|
145
|
+
}
|
146
|
+
|
147
|
+
static VALUE GRAPHQLIDLPARSERPROCESS_process(VALUE self)
|
148
|
+
{
|
149
|
+
VALUE rb_schema = rb_iv_get(self, "@schema");
|
150
|
+
VALUE rb_definitions;
|
151
|
+
VALUE rb_hash;
|
152
|
+
GraphQLTypes* types = NULL;
|
153
|
+
size_t types_len = 0;
|
154
|
+
uint8_t err;
|
155
|
+
const char *schema = StringValueCStr(rb_schema);
|
156
|
+
|
157
|
+
err = gqlidl_parse_schema(schema, &types, &types_len);
|
158
|
+
|
159
|
+
if (err > 0) {
|
160
|
+
printf("Error: Return code %d", err);
|
161
|
+
exit(err);
|
162
|
+
}
|
163
|
+
|
164
|
+
rb_definitions = rb_ary_new();
|
165
|
+
|
166
|
+
for (size_t i = 0; i < types_len; i++) {
|
167
|
+
rb_hash = rb_hash_new();
|
168
|
+
|
169
|
+
if (strcmp(types[i].typename, "scalar") == 0) {
|
170
|
+
rb_hash_aset(rb_hash, CSTR2SYM("typename"), convert_string(types[i].typename));
|
171
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(types[i].scalar_type.name));
|
172
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(types[i].scalar_type.description));
|
173
|
+
}
|
174
|
+
else if (strcmp(types[i].typename, "object") == 0) {
|
175
|
+
rb_hash_aset(rb_hash, CSTR2SYM("typename"), convert_string(types[i].typename));
|
176
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(types[i].object_type.description));
|
177
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(types[i].object_type.name));
|
178
|
+
rb_hash_aset(rb_hash, CSTR2SYM("implements"), convert_array_of_strings(types[i].object_type.implements));
|
179
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(types[i].object_type.directives));
|
180
|
+
rb_hash_aset(rb_hash, CSTR2SYM("fields"), convert_array_of_fields(types[i].object_type.fields));
|
181
|
+
}
|
182
|
+
else if (strcmp(types[i].typename, "enum") == 0) {
|
183
|
+
rb_hash_aset(rb_hash, CSTR2SYM("typename"), convert_string(types[i].typename));
|
184
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(types[i].enum_type.description));
|
185
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(types[i].enum_type.name));
|
186
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(types[i].enum_type.directives));
|
187
|
+
rb_hash_aset(rb_hash, CSTR2SYM("values"), convert_array_of_values(types[i].enum_type.values));
|
188
|
+
}
|
189
|
+
else if (strcmp(types[i].typename, "interface") == 0) {
|
190
|
+
rb_hash_aset(rb_hash, CSTR2SYM("typename"), convert_string(types[i].typename));
|
191
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(types[i].interface_type.description));
|
192
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(types[i].interface_type.name));
|
193
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(types[i].interface_type.directives));
|
194
|
+
rb_hash_aset(rb_hash, CSTR2SYM("fields"), convert_array_of_fields(types[i].interface_type.fields));
|
195
|
+
}
|
196
|
+
else if (strcmp(types[i].typename, "union") == 0) {
|
197
|
+
rb_hash_aset(rb_hash, CSTR2SYM("typename"), convert_string(types[i].typename));
|
198
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(types[i].union_type.description));
|
199
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(types[i].union_type.name));
|
200
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(types[i].union_type.directives));
|
201
|
+
rb_hash_aset(rb_hash, CSTR2SYM("values"), convert_array_of_strings(types[i].union_type.values));
|
202
|
+
}
|
203
|
+
else if (strcmp(types[i].typename, "input_object") == 0) {
|
204
|
+
rb_hash_aset(rb_hash, CSTR2SYM("typename"), convert_string(types[i].typename));
|
205
|
+
rb_hash_aset(rb_hash, CSTR2SYM("description"), convert_string(types[i].input_object_type.description));
|
206
|
+
rb_hash_aset(rb_hash, CSTR2SYM("name"), convert_string(types[i].input_object_type.name));
|
207
|
+
rb_hash_aset(rb_hash, CSTR2SYM("directives"), convert_array_of_directives(types[i].input_object_type.directives));
|
208
|
+
rb_hash_aset(rb_hash, CSTR2SYM("fields"), convert_array_of_fields(types[i].input_object_type.fields));
|
209
|
+
}
|
210
|
+
else {
|
211
|
+
printf("\nError: Unknown type %s\n", types[i].typename);
|
212
|
+
exit(1);
|
213
|
+
}
|
214
|
+
|
215
|
+
rb_ary_push(rb_definitions, rb_hash);
|
216
|
+
}
|
217
|
+
|
218
|
+
return rb_definitions;
|
219
|
+
}
|
220
|
+
|
221
|
+
void Init_graphqlidlparser()
|
222
|
+
{
|
223
|
+
rb_mGraphQL = rb_define_module("GraphQL");
|
224
|
+
rb_cGraphQLIDLParser = rb_define_class_under(rb_mGraphQL, "IDLParser", rb_cObject);
|
225
|
+
|
226
|
+
rb_define_method(rb_cGraphQLIDLParser, "process", GRAPHQLIDLPARSERPROCESS_process, 0);
|
227
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#ifndef GRAPHQLIDLPARSER_H
|
2
|
+
#define GRAPHQLIDLPARSER_H
|
3
|
+
|
4
|
+
#ifndef __MSXML_LIBRARY_DEFINED__
|
5
|
+
#define __MSXML_LIBRARY_DEFINED__
|
6
|
+
#endif
|
7
|
+
|
8
|
+
#define CSTR2SYM(s) (ID2SYM(rb_intern((s))))
|
9
|
+
|
10
|
+
#include "ruby.h"
|
11
|
+
#include <ruby/encoding.h>
|
12
|
+
#include "gql-idl-parser.h"
|
13
|
+
|
14
|
+
#include "graphql-idl-parser.h"
|
15
|
+
|
16
|
+
static VALUE rb_mGraphQL;
|
17
|
+
static VALUE rb_cGraphQLIDLParser;
|
18
|
+
|
19
|
+
VALUE convert_string(const char* c_string);
|
20
|
+
VALUE convert_type_info(struct FieldType c_field_type);
|
21
|
+
VALUE convert_array_of_strings(struct array_of_strings c_array_of_strings);
|
22
|
+
VALUE convert_array_of_arguments(struct array_of_arguments c_array_of_arguments);
|
23
|
+
VALUE convert_array_of_fields(struct array_of_fields c_array_of_fields);
|
24
|
+
VALUE convert_array_of_values(struct array_of_values c_array_of_values);
|
25
|
+
VALUE convert_array_of_directives(struct array_of_directives c_array_of_directives);
|
26
|
+
|
27
|
+
#endif
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'graphql-idl-parser/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'graphql-idl-parser'
|
8
|
+
spec.version = GraphQLIDLParser::VERSION
|
9
|
+
spec.authors = ['Garen J. Torikian']
|
10
|
+
spec.email = ['gjtorikian@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'A parser for the GraphQL IDL format.'
|
13
|
+
spec.homepage = 'https://www.github.com/gjtorikian/graphql-idl-parser-ruby'
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
|
+
f.match(%r{^(test|spec|features)/})
|
16
|
+
end
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
spec.extensions = ['ext/graphql-idl-parser/extconf.rb']
|
21
|
+
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.14'
|
23
|
+
spec.add_development_dependency 'graphql', '~> 1.6'
|
24
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
25
|
+
spec.add_development_dependency 'pry-byebug'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'rake-compiler', '~> 0.9'
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'graphql-idl-parser/graphqlidlparser'
|
2
|
+
require 'graphql-idl-parser/version'
|
3
|
+
|
4
|
+
module GraphQL
|
5
|
+
class IDLParser
|
6
|
+
def initialize(filename: nil, schema: nil)
|
7
|
+
if !filename.nil? && !schema.nil?
|
8
|
+
raise ArgumentError, 'Pass in `filename` or `schema`, but not both!'
|
9
|
+
end
|
10
|
+
|
11
|
+
if filename.nil? && schema.nil?
|
12
|
+
raise ArgumentError, 'Pass in either `filename` or `schema`'
|
13
|
+
end
|
14
|
+
|
15
|
+
if filename
|
16
|
+
unless filename.is_a?(String)
|
17
|
+
raise TypeError, "Expected `String`, got `#{filename.class}`"
|
18
|
+
end
|
19
|
+
|
20
|
+
unless File.exist?(filename)
|
21
|
+
raise ArgumentError, "#{filename} does not exist!"
|
22
|
+
end
|
23
|
+
|
24
|
+
@schema = File.read(filename)
|
25
|
+
else
|
26
|
+
unless schema.is_a?(String)
|
27
|
+
raise TypeError, "Expected `String`, got `#{schema.class}`"
|
28
|
+
end
|
29
|
+
|
30
|
+
@schema = schema
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/script/bootstrap
ADDED
data/script/cibuild
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
if [ -z "$1" ]; then
|
6
|
+
BRANCH="master"
|
7
|
+
else
|
8
|
+
BRANCH=$1
|
9
|
+
fi
|
10
|
+
|
11
|
+
echo "Using $BRANCH..."
|
12
|
+
|
13
|
+
echo "Checking out graphql-idl-parser"
|
14
|
+
echo "---------------------"
|
15
|
+
cd ext/graphql-idl-parser/graphql-idl-parser
|
16
|
+
git fetch origin
|
17
|
+
git checkout $BRANCH && git pull
|
18
|
+
sha=`git rev-parse HEAD`
|
19
|
+
cd ../../..
|
20
|
+
git add ext/graphql-idl-parser/graphql-idl-parser
|
21
|
+
git commit -m "Update graphql-idl-parser to $(git config submodule.ext/graphql-idl-parser/graphql-idl-parser.url | sed s_.git\$__)/commit/${sha}"
|
metadata
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: graphql-idl-parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Garen J. Torikian
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.14'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: graphql
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake-compiler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
97
|
+
description:
|
98
|
+
email:
|
99
|
+
- gjtorikian@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions:
|
102
|
+
- ext/graphql-idl-parser/extconf.rb
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".gitmodules"
|
107
|
+
- ".travis.yml"
|
108
|
+
- Gemfile
|
109
|
+
- LICENSE.txt
|
110
|
+
- README.md
|
111
|
+
- Rakefile
|
112
|
+
- ext/graphql-idl-parser/extconf.rb
|
113
|
+
- ext/graphql-idl-parser/graphql-idl-parser.c
|
114
|
+
- ext/graphql-idl-parser/graphql-idl-parser.h
|
115
|
+
- graphql-idl-parser.gemspec
|
116
|
+
- lib/graphql-idl-parser.rb
|
117
|
+
- lib/graphql-idl-parser/version.rb
|
118
|
+
- script/bootstrap
|
119
|
+
- script/cibuild
|
120
|
+
- script/update_submodules
|
121
|
+
homepage: https://www.github.com/gjtorikian/graphql-idl-parser-ruby
|
122
|
+
licenses: []
|
123
|
+
metadata: {}
|
124
|
+
post_install_message:
|
125
|
+
rdoc_options: []
|
126
|
+
require_paths:
|
127
|
+
- lib
|
128
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
requirements: []
|
139
|
+
rubyforge_project:
|
140
|
+
rubygems_version: 2.6.12
|
141
|
+
signing_key:
|
142
|
+
specification_version: 4
|
143
|
+
summary: A parser for the GraphQL IDL format.
|
144
|
+
test_files: []
|