relay-rb 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c976d6b1f308d77fad6f43623d821150b45df13
4
- data.tar.gz: d396a7d982e23b6ca71bafbbdbc438b444c0ea6b
3
+ metadata.gz: 5a49741538c409a6e3ee34d698b4f2622dad3ce1
4
+ data.tar.gz: d0d793be807f2827b2d269bd91159e912cfa1d05
5
5
  SHA512:
6
- metadata.gz: 914555d8c843092f3a6fbe1cec290ae032784a4296b32eaf1245d65429693a9305e2e5e5a55ac84f54ba2a45b38cd7fc1813105b6410c4ca452e3c0fc3c29651
7
- data.tar.gz: 70c0950fcf1b438467aef315b0f572febb7c17609cc4e9d6e00a0f23ea338e5a1b58d10e3560520e4dc47c5224e9fd96899ac1a67df10ebfcd7f7cc76fbec079
6
+ metadata.gz: dd78e0f67fb94f95b719fb629061969e8ee4fa0601d2176d4e54c5501cd16afc7ce973ea48c0a69d9c04823b074b3f53c6eaf365b594f014fc190b14c079155d
7
+ data.tar.gz: a5bad862afe77abb1584245ac014a661e74d48cf0801a7d8ece33f7201aba9322dfe7924b00305b786e9d7eab9c175cdb24bd823d14c275dc0ba1151f8c9643f
@@ -0,0 +1,42 @@
1
+ module Relay
2
+ module Node
3
+
4
+ class CompositeTypeConfiguration < GraphQL::Configuration::Base
5
+ slot :fetch_object, Proc
6
+ slot :resolve_type, Proc
7
+ end
8
+
9
+ class CompositeType < GraphQL::Configuration::Configurable
10
+ configure_with CompositeTypeConfiguration
11
+
12
+ def fetch_object
13
+ @fetch_object ||= lambda { |object, params, context|
14
+ @configuration.fetch_object.call(params[:id], context)
15
+ }
16
+ end
17
+
18
+ def resolve_type
19
+ @configuration.resolve_type
20
+ end
21
+
22
+ def field
23
+ @field ||= GraphQL::GraphQLField.new(type: interface, resolve: fetch_object) do
24
+ name 'node'
25
+ description 'An object with id.'
26
+
27
+ arg :id, !GraphQL::GraphQLID
28
+ end
29
+ end
30
+
31
+ def interface
32
+ @interface ||= GraphQL::GraphQLInterfaceType.new(resolve_type: resolve_type) do
33
+ name 'NodeInterface'
34
+ description 'A node with id.'
35
+
36
+ field :id, ! GraphQL::GraphQLID
37
+ end
38
+ end
39
+ end
40
+
41
+ end
42
+ end
data/lib/relay/node.rb CHANGED
@@ -1,42 +1,13 @@
1
- require 'graphql'
2
1
  require 'base64'
2
+
3
3
  require_relative 'node/global_id_field'
4
4
  require_relative 'node/plural_identifying_root_field'
5
+ require_relative 'node/composite'
5
6
 
6
7
  module Relay
7
8
 
8
9
  module Node
9
10
 
10
- def self.definitions(fetcher, resolver)
11
-
12
- interface = GraphQL::GraphQLInterfaceType.new do
13
- name 'Node'
14
- description 'An object with ID'
15
-
16
- field :id, ! GraphQL::GraphQLID do
17
- description 'The id of the object'
18
- end
19
-
20
- resolve_type resolver
21
- end
22
-
23
- field = GraphQL::GraphQLField.new do
24
- name 'node'
25
- description 'Fetches an object given its ID'
26
- type interface
27
-
28
- arg :id, ! GraphQL::GraphQLID do
29
- description 'The ID of an object'
30
- end
31
-
32
- resolve lambda { |root, params, info, *args|
33
- fetcher.call(params[:id], info)
34
- }
35
- end
36
-
37
- { interface: interface, field: field }
38
- end
39
-
40
11
  def self.to_global_id(type, id)
41
12
  Base64.strict_encode64([type, id].join(':'))
42
13
  end
data/lib/relay/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Relay
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/spec/node/data.rb CHANGED
@@ -35,7 +35,7 @@ module Relay
35
35
  end
36
36
  }
37
37
 
38
- definitions = Relay::Node.definitions(fetcher, resolver)
38
+ definitions = Relay::Node::CompositeType.new(fetch_object: fetcher, resolve_type: resolver)
39
39
 
40
40
  UserType = GraphQL::GraphQLObjectType.new do
41
41
  name 'User'
@@ -43,7 +43,7 @@ module Relay
43
43
  field :id, ! GraphQL::GraphQLID
44
44
  field :name, GraphQL::GraphQLString
45
45
 
46
- interface definitions[:interface]
46
+ interface definitions.interface
47
47
  end
48
48
 
49
49
  PhotoType = GraphQL::GraphQLObjectType.new do
@@ -52,13 +52,13 @@ module Relay
52
52
  field :id, ! GraphQL::GraphQLID
53
53
  field :width, GraphQL::GraphQLInt
54
54
 
55
- interface definitions[:interface]
55
+ interface definitions.interface
56
56
  end
57
57
 
58
58
  QueryType = GraphQL::GraphQLObjectType.new do
59
59
  name 'Query'
60
60
 
61
- field definitions[:field]
61
+ field definitions.field
62
62
  end
63
63
 
64
64
  Schema = GraphQL::GraphQLSchema.new do
@@ -36,7 +36,7 @@ module Relay
36
36
  end
37
37
  }
38
38
 
39
- definitions = Relay::Node.definitions(fetcher, resolver)
39
+ definitions = Relay::Node::CompositeType.new(fetch_object: fetcher, resolve_type: resolver)
40
40
 
41
41
  UserType = GraphQL::GraphQLObjectType.new do
42
42
  name 'User'
@@ -45,7 +45,7 @@ module Relay
45
45
 
46
46
  field :name, GraphQL::GraphQLString
47
47
 
48
- interface definitions[:interface]
48
+ interface definitions.interface
49
49
  end
50
50
 
51
51
  PhotoType = GraphQL::GraphQLObjectType.new do
@@ -55,15 +55,15 @@ module Relay
55
55
 
56
56
  field :width, GraphQL::GraphQLInt
57
57
 
58
- interface definitions[:interface]
58
+ interface definitions.interface
59
59
  end
60
60
 
61
61
  QueryType = GraphQL::GraphQLObjectType.new do
62
62
  name 'Query'
63
63
 
64
- field definitions[:field]
64
+ field definitions.field
65
65
 
66
- field :all, + definitions[:interface] do
66
+ field :all, + definitions.interface do
67
67
  resolve lambda { |*args|
68
68
  Users.values.concat(Photos.values)
69
69
  }
@@ -4,12 +4,17 @@ require_relative 'data'
4
4
 
5
5
  module StarWars
6
6
 
7
+ NodeComposite = Relay::Node::CompositeType.new do
7
8
 
8
- NodeInterface = GraphQL::GraphQLInterfaceType.new do
9
- name 'NodeInterface'
10
- description 'An object with id.'
11
-
12
- field :id, ! GraphQL::GraphQLID, description: 'The id of the object.'
9
+ fetch_object lambda { |global_id, context|
10
+ type, id = Relay::Node.from_global_id(global_id)
11
+ case type
12
+ when 'Faction'
13
+ Data.faction(id.to_i)
14
+ when 'Ship'
15
+ Data.ship(id.to_i)
16
+ end
17
+ }
13
18
 
14
19
  resolve_type lambda { |object|
15
20
  case object
@@ -17,33 +22,9 @@ module StarWars
17
22
  FactionType
18
23
  when Data::Ship
19
24
  ShipType
20
- else
21
- nil
22
25
  end
23
26
  }
24
- end
25
-
26
27
 
27
- NodeField = GraphQL::GraphQLField.new do
28
- name 'node'
29
- description 'Fetches an object given its global id.'
30
- type NodeInterface
31
-
32
- arg :id, ! GraphQL::GraphQLID, description: 'The global id of the object.'
33
-
34
- resolve lambda { |object, params, context|
35
- type, id = Relay::Node.from_global_id(params[:id])
36
- id = id.to_i
37
-
38
- case type
39
- when 'Faction'
40
- Data.faction(id)
41
- when 'Ship'
42
- Data.ship(id)
43
- else
44
- nil
45
- end
46
- }
47
28
  end
48
29
 
49
30
 
@@ -73,7 +54,7 @@ module StarWars
73
54
 
74
55
  field :name, GraphQL::GraphQLString, description: 'The name of the ship.'
75
56
 
76
- interface NodeInterface
57
+ interface NodeComposite.interface
77
58
  end
78
59
 
79
60
 
@@ -93,7 +74,7 @@ module StarWars
93
74
  }
94
75
  end
95
76
 
96
- interface NodeInterface
77
+ interface NodeComposite.interface
97
78
  end
98
79
 
99
80
 
@@ -104,7 +85,7 @@ module StarWars
104
85
 
105
86
  field :empire, FactionType, resolve: -> { Data.empire }
106
87
 
107
- field NodeField
88
+ field NodeComposite.field
108
89
  end
109
90
 
110
91
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relay-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Kovalev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-18 00:00:00.000000000 Z
11
+ date: 2015-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -64,6 +64,7 @@ files:
64
64
  - lib/relay/connection/array.rb
65
65
  - lib/relay/connection/connection.rb
66
66
  - lib/relay/node.rb
67
+ - lib/relay/node/composite.rb
67
68
  - lib/relay/node/global_id_field.rb
68
69
  - lib/relay/node/plural_identifying_root_field.rb
69
70
  - lib/relay/version.rb
@@ -88,9 +89,9 @@ require_paths:
88
89
  - lib
89
90
  required_ruby_version: !ruby/object:Gem::Requirement
90
91
  requirements:
91
- - - ">="
92
+ - - "~>"
92
93
  - !ruby/object:Gem::Version
93
- version: '0'
94
+ version: '2.0'
94
95
  required_rubygems_version: !ruby/object:Gem::Requirement
95
96
  requirements:
96
97
  - - ">="