graphql 0.10.7 → 0.10.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/graphql/language/parser.rb +1 -1
- data/lib/graphql/language/transform.rb +5 -4
- data/lib/graphql/version.rb +1 -1
- data/readme.md +17 -5
- data/spec/graphql/language/transform_spec.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed91d2fd1d191758d362b06dd3af5bcc53589fad
|
4
|
+
data.tar.gz: a5b9d8f9ff219f4db84e24a569a6b396d034cd87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb2d62a66e88dc88e52ff05cb00317b79ee05a9aa0a3a36280d2f6aab2f6d7df1205c32e327d743227f9a491ce9d7ea66283e147633482a6f0973ce27abbe125
|
7
|
+
data.tar.gz: 31400a2541cbf1673b7b83c823d5be985daab47ec68085345b248cdbcd9373f4e1b31ef94f31da14e3468a177ab36998a5b84a37e24a99b47c73c9bd7dede970
|
@@ -99,7 +99,7 @@ module GraphQL
|
|
99
99
|
rule(:value_int) { (value_sign? >> match('\d').repeat(1)).as(:int) }
|
100
100
|
rule(:value_string) { str('"') >> value_string_char.repeat.maybe.as(:optional_string_content).as(:string) >> str('"')}
|
101
101
|
rule(:value_string_char) { value_string_escaped_char | value_string_escaped_unicode | value_string_source_char}
|
102
|
-
rule(:value_string_escaped_char) { str("\\") >> match('["
|
102
|
+
rule(:value_string_escaped_char) { str("\\") >> match('["\\\\/bfnrt]') }
|
103
103
|
rule(:value_string_escaped_unicode) { str("\\") >> match('u[\dA-Fa-f]{4}')}
|
104
104
|
rule(:value_string_source_char) { (str('"') | str("\\") | value_string_line_terminator).absent? >> any }
|
105
105
|
rule(:value_string_line_terminator) {
|
@@ -71,7 +71,7 @@ module GraphQL
|
|
71
71
|
rule(alias_name: simple(:a)) { a }
|
72
72
|
optional_sequence(:optional_field_arguments)
|
73
73
|
rule(field_argument_name: simple(:n), field_argument_value: simple(:v)) { CREATE_NODE[:Argument, name: n.to_s, value: v, position_source: n]}
|
74
|
-
rule(field_argument_name: simple(:n), field_argument_value:
|
74
|
+
rule(field_argument_name: simple(:n), field_argument_value: subtree(:v)) { CREATE_NODE[:Argument, name: n.to_s, value: v, position_source: n]}
|
75
75
|
optional_sequence(:optional_selections)
|
76
76
|
optional_sequence(:optional_directives)
|
77
77
|
|
@@ -86,7 +86,7 @@ module GraphQL
|
|
86
86
|
rule(non_null_type: simple(:t)) { CREATE_NODE[:NonNullType, of_type: t, line: t.line, col: t.col] }
|
87
87
|
|
88
88
|
# Values
|
89
|
-
rule(array:
|
89
|
+
rule(array: subtree(:v)) { v }
|
90
90
|
rule(array: simple(:v)) { [] } # just `nil`
|
91
91
|
rule(boolean: simple(:v)) { v == "true" ? true : false }
|
92
92
|
rule(input_object: sequence(:v)) { CREATE_NODE[:InputObject, pairs: v, line: (v.first ? v.first.line : 1), col: (v.first ? v.first.col : 1)] }
|
@@ -95,13 +95,14 @@ module GraphQL
|
|
95
95
|
rule(int: simple(:v)) { v.to_i }
|
96
96
|
rule(float: simple(:v)) { v.to_f }
|
97
97
|
|
98
|
-
ESCAPES = /\\
|
98
|
+
ESCAPES = /\\["\\\/bfnrt]/
|
99
|
+
ESCAPES_REPLACE = { '\\"' => '"', "\\\\" => "\\", "\\/" => '/', "\\b" => "\b", "\\f" => "\f", "\\n" => "\n", "\\r" => "\r", "\\t" => "\t" }
|
99
100
|
UTF_8 = /\\u[\da-f]{4}/i
|
100
101
|
UTF_8_REPLACE = -> (m) { [m[-4..-1].to_i(16)].pack('U') }
|
101
102
|
|
102
103
|
rule(string: simple(:v)) {
|
103
104
|
string = v.to_s
|
104
|
-
string.gsub!(ESCAPES,
|
105
|
+
string.gsub!(ESCAPES, ESCAPES_REPLACE)
|
105
106
|
string.gsub!(UTF_8, &UTF_8_REPLACE)
|
106
107
|
string
|
107
108
|
}
|
data/lib/graphql/version.rb
CHANGED
data/readme.md
CHANGED
@@ -9,9 +9,10 @@
|
|
9
9
|
A Ruby implementation of [GraphQL](http://graphql.org/).
|
10
10
|
|
11
11
|
- Guides
|
12
|
-
- [Introduction](
|
13
|
-
- [Defining Your Schema](
|
14
|
-
- [Executing Queries](
|
12
|
+
- [Introduction](http://www.rubydoc.info/github/rmosolgo/graphql-ruby/file/guides/introduction.md)
|
13
|
+
- [Defining Your Schema](http://www.rubydoc.info/github/rmosolgo/graphql-ruby/file/guides/defining_your_schema.md)
|
14
|
+
- [Executing Queries](http://www.rubydoc.info/github/rmosolgo/graphql-ruby/file/guides/executing_queries.md)
|
15
|
+
- [Testing](http://www.rubydoc.info/github/rmosolgo/graphql-ruby/file/guides/testing.md)
|
15
16
|
|
16
17
|
- [API Documentation](http://www.rubydoc.info/github/rmosolgo/graphql-ruby)
|
17
18
|
|
@@ -92,6 +93,19 @@ If you're building a backend for [Relay](http://facebook.github.io/relay/), you'
|
|
92
93
|
- A JSON dump of the schema, which you can get by sending [`GraphQL::Introspection::INTROSPECTION_QUERY`](https://github.com/rmosolgo/graphql-ruby/blob/master/lib/graphql/introspection/introspection_query.rb)
|
93
94
|
- Relay-specific helpers for GraphQL like Connections, node fields, and global ids. Here's one example of those: [`graphql-relay`](https://github.com/rmosolgo/graphql-relay-ruby)
|
94
95
|
|
96
|
+
## Getting Started Tutorials
|
97
|
+
|
98
|
+
#### Series: Building a blog in GraphQL and Relay on Rails
|
99
|
+
1. **Introduction:** https://medium.com/@gauravtiwari/graphql-and-relay-on-rails-getting-started-955a49d251de
|
100
|
+
2. **Part1:** https://medium.com/@gauravtiwari/graphql-and-relay-on-rails-creating-types-and-schema-b3f9b232ccfc
|
101
|
+
3. **Part2:**
|
102
|
+
https://medium.com/@gauravtiwari/graphql-and-relay-on-rails-first-relay-powered-react-component-cb3f9ee95eca
|
103
|
+
|
104
|
+
#### Tutorials
|
105
|
+
1. https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152
|
106
|
+
2. https://blog.jacobwgillespie.com/from-rest-to-graphql-b4e95e94c26b#.4cjtklrwt
|
107
|
+
3. http://mgiroux.me/2015/getting-started-with-rails-graphql-relay/
|
108
|
+
4. http://mgiroux.me/2015/uploading-files-using-relay-with-rails/
|
95
109
|
|
96
110
|
## To Do
|
97
111
|
|
@@ -119,8 +133,6 @@ If you're building a backend for [Relay](http://facebook.github.io/relay/), you'
|
|
119
133
|
- This is a good chance to make an `Operation` abstraction of which `query`, `mutation` and `subscription` are members
|
120
134
|
- For a subscription, `graphql` would send an outbound message to the system (allow the host application to manage its own subscriptions via Pusher, ActionCable, whatever)
|
121
135
|
- Documentation
|
122
|
-
- Write a "Getting started with Rails"-type blog post
|
123
|
-
- Compile existing articles & slide decks and link to them from a guide
|
124
136
|
|
125
137
|
## Goals
|
126
138
|
|
@@ -24,6 +24,7 @@ describe GraphQL::Language::Transform do
|
|
24
24
|
someStuff(vars: [1,2,3])
|
25
25
|
someOtherStuff(input: {ints: [1,2,3]})
|
26
26
|
someEmptyStuff(emptyObj: {}, emptySpaceObj: { })
|
27
|
+
evenMoreStuff(arg: [[1]])
|
27
28
|
}
|
28
29
|
}
|
29
30
|
|
@@ -143,4 +144,9 @@ describe GraphQL::Language::Transform do
|
|
143
144
|
assert_equal(1, get_result("query { me }").parts.length)
|
144
145
|
assert_equal(1, get_result("mutation { touch }").parts.length)
|
145
146
|
end
|
147
|
+
|
148
|
+
it 'transforms escaped characters' do
|
149
|
+
res = get_result("{quoted: \"\\\" \\\\ \\/ \\b \\f \\n \\r \\t\"}", parse: :value_input_object)
|
150
|
+
assert_equal("\" \\ / \b \f \n \r \t", res.pairs[0].value)
|
151
|
+
end
|
146
152
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|