graphql 0.0.3 → 0.0.4

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.
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