graphql 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql.rb +46 -29
  3. data/lib/graphql/call.rb +1 -1
  4. data/lib/graphql/connection.rb +12 -35
  5. data/lib/graphql/field.rb +7 -177
  6. data/lib/graphql/field_definer.rb +5 -15
  7. data/lib/graphql/introspection/{call_node.rb → call_type.rb} +1 -1
  8. data/lib/graphql/introspection/field_type.rb +10 -0
  9. data/lib/graphql/introspection/{root_call_node.rb → root_call_type.rb} +6 -2
  10. data/lib/graphql/introspection/schema_type.rb +17 -0
  11. data/lib/graphql/introspection/{type_node.rb → type_type.rb} +4 -2
  12. data/lib/graphql/node.rb +118 -42
  13. data/lib/graphql/{parser.rb → parser/parser.rb} +9 -4
  14. data/lib/graphql/{transform.rb → parser/transform.rb} +4 -2
  15. data/lib/graphql/query.rb +33 -10
  16. data/lib/graphql/root_call.rb +26 -13
  17. data/lib/graphql/root_call_argument.rb +3 -1
  18. data/lib/graphql/root_call_argument_definer.rb +3 -7
  19. data/lib/graphql/schema/all.rb +46 -0
  20. data/lib/graphql/{schema.rb → schema/schema.rb} +27 -39
  21. data/lib/graphql/schema/schema_validation.rb +32 -0
  22. data/lib/graphql/syntax/fragment.rb +7 -0
  23. data/lib/graphql/syntax/query.rb +3 -2
  24. data/lib/graphql/types/boolean_type.rb +3 -0
  25. data/lib/graphql/types/number_type.rb +3 -0
  26. data/lib/graphql/types/object_type.rb +6 -0
  27. data/lib/graphql/types/string_type.rb +3 -0
  28. data/lib/graphql/version.rb +1 -1
  29. data/readme.md +46 -5
  30. data/spec/graphql/node_spec.rb +6 -5
  31. data/spec/graphql/{parser_spec.rb → parser/parser_spec.rb} +31 -2
  32. data/spec/graphql/{transform_spec.rb → parser/transform_spec.rb} +16 -2
  33. data/spec/graphql/query_spec.rb +27 -9
  34. data/spec/graphql/root_call_spec.rb +15 -1
  35. data/spec/graphql/{schema_spec.rb → schema/schema_spec.rb} +15 -50
  36. data/spec/graphql/schema/schema_validation_spec.rb +48 -0
  37. data/spec/support/nodes.rb +31 -28
  38. metadata +47 -47
  39. data/lib/graphql/introspection/field_node.rb +0 -19
  40. data/lib/graphql/introspection/schema_node.rb +0 -17
  41. data/lib/graphql/types/boolean_field.rb +0 -3
  42. data/lib/graphql/types/connection_field.rb +0 -30
  43. data/lib/graphql/types/cursor_field.rb +0 -9
  44. data/lib/graphql/types/number_field.rb +0 -3
  45. data/lib/graphql/types/object_field.rb +0 -8
  46. data/lib/graphql/types/string_field.rb +0 -3
  47. data/lib/graphql/types/type_field.rb +0 -6
  48. data/spec/graphql/field_spec.rb +0 -63
@@ -1,19 +0,0 @@
1
- class GraphQL::Introspection::FieldNode < GraphQL::Node
2
- exposes "GraphQL::Field"
3
- field.string(:name)
4
- field.string(:type)
5
- field.string(:description)
6
- field.connection(:calls)
7
-
8
- def calls
9
- target.calls.values
10
- end
11
-
12
- def name
13
- schema_name
14
- end
15
-
16
- def type
17
- value_type
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- class GraphQL::Introspection::SchemaNode < GraphQL::Node
2
- exposes "GraphQL::Schema"
3
- field.connection(:calls)
4
- field.connection(:types)
5
-
6
- def cursor
7
- "schema"
8
- end
9
-
10
- def types
11
- @target.types.values
12
- end
13
-
14
- def calls
15
- target.calls.values
16
- end
17
- end
@@ -1,3 +0,0 @@
1
- class GraphQL::Types::BooleanField < GraphQL::Field
2
- type :boolean
3
- end
@@ -1,30 +0,0 @@
1
- class GraphQL::Types::ConnectionField < GraphQL::Field
2
- type "connection"
3
-
4
- ["connection_class_name", "node_class_name"].each do |method_name|
5
- define_method(method_name) do
6
- const_get(method_name.upcase)
7
- end
8
- end
9
-
10
- def connection_class
11
- if connection_class_name.present?
12
- Object.const_get(connection_class_name)
13
- else
14
- GraphQL::SCHEMA.get_connection(name)
15
- end
16
- end
17
-
18
- def as_node
19
- items = finished_value
20
- connection_class.new(
21
- items,
22
- query: query,
23
- fields: fields,
24
- )
25
- end
26
-
27
- def as_result
28
- as_node.as_result
29
- end
30
- end
@@ -1,9 +0,0 @@
1
- class GraphQL::Types::CursorField
2
- def initialize(value)
3
- @value = value
4
- end
5
-
6
- def as_result
7
- @value.to_s
8
- end
9
- end
@@ -1,3 +0,0 @@
1
- class GraphQL::Types::NumberField < GraphQL::Field
2
- type "number"
3
- end
@@ -1,8 +0,0 @@
1
- class GraphQL::Types::ObjectField < GraphQL::Field
2
- type "object"
3
- def as_result
4
- node_class = GraphQL::SCHEMA.type_for_object(finished_value)
5
- node = node_class.new(finished_value, query: query, fields: fields)
6
- node.as_result
7
- end
8
- end
@@ -1,3 +0,0 @@
1
- class GraphQL::Types::StringField < GraphQL::Field
2
- type :string
3
- end
@@ -1,6 +0,0 @@
1
- class GraphQL::Types::TypeField < GraphQL::Types::ObjectField
2
- type "__type__"
3
- def finished_value
4
- GraphQL::SCHEMA.get_type(self.owner.class.schema_name)
5
- end
6
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
- require 'ostruct'
3
-
4
- describe GraphQL::Field do
5
- let(:owner) { OpenStruct.new(name: "TestOwner")}
6
- let(:field) { GraphQL::Field.create_class(name: "high_fives", type: :number, owner_class: owner).new(query: {}) }
7
-
8
- describe '#name' do
9
- it 'is present' do
10
- assert_equal field.name, "high_fives"
11
- end
12
- it 'defaults to name' do
13
- assert_equal "high_fives", field.name
14
- end
15
- end
16
-
17
- describe '.call' do
18
- let(:content_field) { Nodes::PostNode.all_fields["content"] }
19
- it 'doesnt register a call twice' do
20
- assert_equal 3, content_field.calls.size
21
- call = content_field.calls.first[1]
22
- content_field.call(call.name, call.lambda)
23
- content_field.call(call.name, call.lambda)
24
- assert_equal 3, content_field.calls.size
25
- end
26
- end
27
-
28
- describe '.to_s' do
29
- it 'includes name' do
30
- assert_match(/high_fives/, field.class.to_s)
31
- end
32
- it 'includes owner name' do
33
- assert_match(/TestOwner/, field.class.to_s)
34
- end
35
- end
36
-
37
- describe '__type__' do
38
- let(:query_string) { "type(post) { fields { edges { node { name, type, calls { edges { node { name } }} } } } } "}
39
- let(:query) { GraphQL::Query.new(query_string, context: {}) }
40
- let(:result) { query.as_result }
41
- let(:id_field) { result["post"]["fields"]["edges"][1]["node"] }
42
- let(:title_field) { result["post"]["fields"]["edges"][2]["node"] }
43
- let(:comments_field) { result["post"]["fields"]["edges"][5]["node"] }
44
- let(:content_field) { result["post"]["fields"]["edges"][3]["node"] }
45
-
46
- it 'has name' do
47
- assert_equal "id", id_field["name"]
48
- assert_equal "title", title_field["name"]
49
- assert_equal "comments", comments_field["name"]
50
- end
51
-
52
- it 'has type' do
53
- assert_equal "number", id_field["type"]
54
- assert_equal "string", title_field["type"]
55
- assert_equal "connection", comments_field["type"]
56
- end
57
-
58
- it 'has calls' do
59
- assert_equal 3, content_field["calls"]["edges"].length
60
- assert_equal ["from", "for", "select"], content_field["calls"]["edges"].map {|c| c["node"]["name"] }
61
- end
62
- end
63
- end