relay-rb 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a49741538c409a6e3ee34d698b4f2622dad3ce1
4
- data.tar.gz: d0d793be807f2827b2d269bd91159e912cfa1d05
3
+ metadata.gz: ec87b91c9635a192ce21a0721fb344b408762a05
4
+ data.tar.gz: f4e272b8c28c13c7893f9a545e387d159a0c33d1
5
5
  SHA512:
6
- metadata.gz: dd78e0f67fb94f95b719fb629061969e8ee4fa0601d2176d4e54c5501cd16afc7ce973ea48c0a69d9c04823b074b3f53c6eaf365b594f014fc190b14c079155d
7
- data.tar.gz: a5bad862afe77abb1584245ac014a661e74d48cf0801a7d8ece33f7201aba9322dfe7924b00305b786e9d7eab9c175cdb24bd823d14c275dc0ba1151f8c9643f
6
+ metadata.gz: 9eacea395189fa90297b5f25a5d8ad6a16dd65d73529cc0fb964db918ba313e96c39ef68110e5b4bef6ca06e453d5fb859a53506ff996a2b8915d51cc2aea9dd
7
+ data.tar.gz: 2df31c8fb5d99dcec342670de712c0bc18ec66e6cbdb53f8a5451bc1d05406efa289af876c81784ba8d858a9ca06af0bde5f42cef610f5c22d97459376b2da02
@@ -10,48 +10,6 @@ module Relay
10
10
  GraphQL::GraphQLArgument.new(:last, GraphQL::GraphQLInt)
11
11
  ]
12
12
 
13
- class ConnectionConfiguration < GraphQL::Configuration::Base
14
- slot :name, String
15
- slot :node_type, GraphQL::GraphQLObjectType
16
- slot :edge_fields, [GraphQL::GraphQLField], singular: :edge_field
17
- slot :connection_fields, [GraphQL::GraphQLField], singular: :connection_field
18
- end
19
-
20
- def self.connection_definitions(configuration)
21
- name, node_type = configuration.name, configuration.node_type
22
-
23
- edge_type = GraphQL::GraphQLObjectType.new do
24
- name name + 'Edge'
25
- description 'An edge in a connection'
26
-
27
- field :node, node_type do
28
- description 'The item at the end of the edge'
29
- end
30
-
31
- field :cursor, ! GraphQL::GraphQLString do
32
- description 'A cursor for use in pagination'
33
- end
34
-
35
- fields configuration.edge_fields
36
- end
37
-
38
- connection_type = GraphQL::GraphQLObjectType.new do
39
- name name + 'Connection'
40
- description 'A connection to a list of items.'
41
-
42
- field :pageInfo, !PageInfoType do
43
- description 'Information to aid in pagination.'
44
- end
45
-
46
- field :edges, +edge_type do
47
- description 'Information to aid in pagination.'
48
- end
49
-
50
- fields configuration.connection_fields
51
- end
52
-
53
- return edge_type, connection_type
54
- end
55
13
 
56
14
  PageInfoType = GraphQL::GraphQLObjectType.new do
57
15
  name 'PageInfo'
@@ -74,5 +32,51 @@ module Relay
74
32
  end
75
33
  end
76
34
 
35
+
36
+ class CompositeTypeConfiguration < GraphQL::Configuration::Base
37
+ slot :name, String
38
+ slot :node_type, GraphQL::GraphQLObjectType
39
+ slot :edge_fields, [GraphQL::GraphQLField], singular: :edge_field
40
+ slot :connection_fields, [GraphQL::GraphQLField], singular: :connection_field
41
+ end
42
+
43
+
44
+ class CompositeType < GraphQL::Configuration::Configurable
45
+ configure_with CompositeTypeConfiguration
46
+
47
+ def connection
48
+ @connection ||= GraphQL::GraphQLObjectType.new(connection_arguments)
49
+ end
50
+
51
+ def edge_type
52
+ @edge_type ||= GraphQL::GraphQLObjectType.new(edge_type_arguments)
53
+ end
54
+
55
+ private
56
+
57
+ def connection_arguments
58
+ {
59
+ name: name + 'Connection',
60
+ description: 'A connection to a list of items.',
61
+ fields: @configuration.connection_fields.concat([
62
+ { name: 'pageInfo', type: !PageInfoType, description: 'Information to aid in pagination.' },
63
+ { name: 'edges', type: +edge_type, description: 'Information to aid in pagination.' }
64
+ ])
65
+ }
66
+ end
67
+
68
+ def edge_type_arguments
69
+ {
70
+ name: name + 'Edge',
71
+ description: 'An edge in a connection.',
72
+ fields: @configuration.edge_fields.concat([
73
+ { name: :node, type: @configuration.node_type, description: 'The item at the end of the edge.' },
74
+ { name: :cursor, type: !GraphQL::GraphQLString, description: 'A cursor for use in pagination.' }
75
+ ])
76
+ }
77
+ end
78
+ end
79
+
80
+
77
81
  end
78
82
  end
data/lib/relay/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Relay
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -12,20 +12,18 @@ RSpec.describe 'Relay Connection' do
12
12
  User.new('Tim')
13
13
  ]
14
14
 
15
- friend_edge, friend_connection = Relay::Connection.connection_definitions(
16
- Relay::Connection::ConnectionConfiguration.new do
17
- name 'Friend'
18
- node_type -> { ConnectionUserType }
19
-
20
- edge_field :friendship_time, GraphQL::GraphQLString do
21
- resolve -> { 'Yesterday' }
22
- end
23
-
24
- connection_field :total_count, GraphQL::GraphQLInt do
25
- resolve -> { Users.size }
26
- end
15
+ FriendConnection = Relay::Connection::CompositeType.new do
16
+ name 'Friend'
17
+ node_type -> { ConnectionUserType }
18
+
19
+ edge_field :friendship_time, GraphQL::GraphQLString do
20
+ resolve -> { 'Yesterday' }
21
+ end
22
+
23
+ connection_field :total_count, GraphQL::GraphQLInt do
24
+ resolve -> { Users.size }
27
25
  end
28
- )
26
+ end
29
27
 
30
28
  ConnectionUserType = GraphQL::GraphQLObjectType.new do
31
29
  name 'User'
@@ -33,7 +31,7 @@ RSpec.describe 'Relay Connection' do
33
31
  field :name, GraphQL::GraphQLString
34
32
 
35
33
  field :friends do
36
- type friend_connection
34
+ type FriendConnection.connection
37
35
  args Relay::Connection::ConnectionArguments
38
36
  resolve lambda { |user, params|
39
37
  Relay::Connection.connection_from_array(Users, params)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relay-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Kovalev