relay-rb 0.0.1

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.
@@ -0,0 +1,115 @@
1
+ require 'graphql'
2
+ require 'relay'
3
+ require_relative 'data'
4
+
5
+ module StarWars
6
+
7
+
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.'
13
+
14
+ resolve_type lambda { |object|
15
+ case object
16
+ when Data::Faction
17
+ FactionType
18
+ when Data::Ship
19
+ ShipType
20
+ else
21
+ nil
22
+ end
23
+ }
24
+ end
25
+
26
+
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
+ end
48
+
49
+
50
+ ShipEdge = GraphQL::GraphQLObjectType.new do
51
+ name 'ShipEdge'
52
+ description 'Ship edge for ships connection.'
53
+
54
+ field :node, -> { ShipType }
55
+ field :cursor, ! GraphQL::GraphQLString
56
+ end
57
+
58
+
59
+ ShipsConnection = GraphQL::GraphQLObjectType.new do
60
+ name 'ShipsConnection'
61
+ description 'A connection to a list of ships.'
62
+
63
+ field :pageInfo, ! Relay::Connection::PageInfoType
64
+ field :edges, + ShipEdge
65
+ end
66
+
67
+
68
+ ShipType = GraphQL::GraphQLObjectType.new do
69
+ name 'Ship'
70
+ description 'A ship in the Star Wars saga.'
71
+
72
+ global_id_field :id, type_name: 'Ship'
73
+
74
+ field :name, GraphQL::GraphQLString, description: 'The name of the ship.'
75
+
76
+ interface NodeInterface
77
+ end
78
+
79
+
80
+ FactionType = GraphQL::GraphQLObjectType.new do
81
+ name 'Faction'
82
+ description 'A faction in the Star Wars saga.'
83
+
84
+ global_id_field :id, type_name: 'Faction'
85
+
86
+ field :name, GraphQL::GraphQLString, description: 'The name of the faction.'
87
+
88
+ field :ships, ShipsConnection do
89
+ args Relay::Connection::ConnectionArguments
90
+ resolve lambda { |faction, params|
91
+ ships = faction.ships.map { |id| Data.ship(id) }
92
+ Relay::Connection.connection_from_array(ships, params)
93
+ }
94
+ end
95
+
96
+ interface NodeInterface
97
+ end
98
+
99
+
100
+ QueryType = GraphQL::GraphQLObjectType.new do
101
+ name 'Query'
102
+
103
+ field :rebels, FactionType, resolve: -> { Data.rebels }
104
+
105
+ field :empire, FactionType, resolve: -> { Data.empire }
106
+
107
+ field NodeField
108
+ end
109
+
110
+
111
+ Schema = GraphQL::GraphQLSchema.new do
112
+ query QueryType
113
+ end
114
+
115
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: relay-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eugene Kovalev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: graphql-rb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Description of Relay Ruby.
56
+ email:
57
+ - seanchas@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Rakefile
63
+ - lib/relay.rb
64
+ - lib/relay/connection/array.rb
65
+ - lib/relay/connection/connection.rb
66
+ - lib/relay/node.rb
67
+ - lib/relay/node/global_id_field.rb
68
+ - lib/relay/node/plural_identifying_root_field.rb
69
+ - lib/relay/version.rb
70
+ - spec/connection/connection_spec.rb
71
+ - spec/node/data.rb
72
+ - spec/node/data_global.rb
73
+ - spec/node/node_global_spec.rb
74
+ - spec/node/node_plural_spec.rb
75
+ - spec/node/node_spec.rb
76
+ - spec/spec_helper.rb
77
+ - spec/star_wars/connection_spec.rb
78
+ - spec/star_wars/data.rb
79
+ - spec/star_wars/object_identification_spec.rb
80
+ - spec/star_wars/schema.rb
81
+ homepage: https://github.com/seanchas/relay-rb
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.4.5
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Summary of Relay Ruby.
105
+ test_files:
106
+ - spec/connection/connection_spec.rb
107
+ - spec/node/data.rb
108
+ - spec/node/data_global.rb
109
+ - spec/node/node_global_spec.rb
110
+ - spec/node/node_plural_spec.rb
111
+ - spec/node/node_spec.rb
112
+ - spec/spec_helper.rb
113
+ - spec/star_wars/connection_spec.rb
114
+ - spec/star_wars/data.rb
115
+ - spec/star_wars/object_identification_spec.rb
116
+ - spec/star_wars/schema.rb