gql 0.0.9 → 0.0.10

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: cb700c03e6fe7d133fe2bc42736b5908e66174ac
4
- data.tar.gz: da41c9aefb85d60137e6fad700993632f66a5b06
3
+ metadata.gz: a62133987b6e3870e58eae49d16b0e9b7c71520d
4
+ data.tar.gz: d13a2cf25e549aa1ae11e5e0d4f0b5de924698f6
5
5
  SHA512:
6
- metadata.gz: cf3fcd9f66515866b529288aacf23f31980c2e2acb6d49c0b558f9908de0b6912ebbccbfc24099b93cfd8566c0076b011bae32c10045acc889d03e89934fc924
7
- data.tar.gz: fdfa1d2cb54671fb57c340beff95d43c3644874c46b35ff90d825362a8bb6616f6c5afe3981ca1dcb81affa20f9ffcb5c344a47ac16b6e42b69f4714e4c5840e
6
+ metadata.gz: d099ea7a0be26f2df9f0006224c9f92f3e958abcfd80104b1a4f332763cee38b5fd39549f125b68d5a3331f33a81e6975db3d0bcf1b3f546341d44b72eb124a5
7
+ data.tar.gz: 40936dedec0db03b6da4a80f80bd8329d66187a43c04628cd6a7f02591c456c1ac8e2de656d7651f897c2258e00402b2547be210efefffb095c5c8b58027f95a
data/lib/gql.rb CHANGED
@@ -1,39 +1,48 @@
1
+ require 'active_support/dependencies/autoload'
2
+ require 'gql/version'
3
+
1
4
  module GQL
2
- autoload :Array, 'gql/array'
3
- autoload :Boolean, 'gql/boolean'
4
- autoload :Call, 'gql/call'
5
- autoload :Config, 'gql/config'
6
- autoload :Connection, 'gql/connection'
7
- autoload :Error, 'gql/errors'
8
- autoload :Executor, 'gql/executor'
9
- autoload :List, 'gql/list'
10
- autoload :Node, 'gql/node'
11
- autoload :Number, 'gql/number'
12
- autoload :Object, 'gql/object'
13
- autoload :Parser, 'gql/parser'
14
- autoload :Raw, 'gql/raw'
15
- autoload :String, 'gql/string'
16
- autoload :TestCase, 'gql/test_case'
17
- autoload :VERSION, 'gql/version'
5
+ extend ActiveSupport::Autoload
6
+
7
+ autoload :Array
8
+ autoload :Boolean
9
+ autoload :Call
10
+ autoload :Config
11
+ autoload :Connection
12
+ autoload :Error, 'gql/errors'
13
+ autoload :Executor
14
+ autoload :Node
15
+ autoload :Number
16
+ autoload :Object
17
+ autoload :Parser
18
+ autoload :Raw
19
+ autoload :String
20
+ autoload :TestCase
18
21
 
19
22
  module Errors
20
- autoload :InvalidNodeClass, 'gql/errors'
21
- autoload :ScanError, 'gql/errors'
22
- autoload :SyntaxError, 'gql/errors'
23
- autoload :UndefinedCall, 'gql/errors'
24
- autoload :UndefinedField, 'gql/errors'
25
- autoload :UndefinedNodeClass, 'gql/errors'
26
- autoload :UndefinedRoot, 'gql/errors'
27
- autoload :UndefinedFieldType, 'gql/errors'
23
+ extend ActiveSupport::Autoload
24
+
25
+ autoload_at 'gql/errors' do
26
+ autoload :InvalidNodeClass
27
+ autoload :ScanError
28
+ autoload :SyntaxError
29
+ autoload :UndefinedCall
30
+ autoload :UndefinedField
31
+ autoload :UndefinedNodeClass
32
+ autoload :UndefinedRoot
33
+ autoload :UndefinedFieldType
34
+ end
28
35
  end
29
36
 
30
37
  module Schema
31
- autoload :Call, 'gql/schema/call'
32
- autoload :Field, 'gql/schema/field'
33
- autoload :List, 'gql/schema/list'
34
- autoload :Parameter, 'gql/schema/parameter'
35
- autoload :Placeholder, 'gql/schema/placeholder'
36
- autoload :Root, 'gql/schema/root'
38
+ extend ActiveSupport::Autoload
39
+
40
+ autoload :Call
41
+ autoload :Field
42
+ autoload :List
43
+ autoload :Parameter
44
+ autoload :Placeholder
45
+ autoload :Root
37
46
  end
38
47
 
39
48
  extend(Module.new {
@@ -75,13 +84,4 @@ module GQL
75
84
  end
76
85
  end
77
86
  })
78
-
79
- self.field_types.update(
80
- array: Array,
81
- boolean: Boolean,
82
- connection: Connection,
83
- number: Number,
84
- object: Object,
85
- string: String
86
- )
87
87
  end
data/lib/gql/array.rb CHANGED
@@ -6,9 +6,16 @@ module GQL
6
6
 
7
7
  class << self
8
8
  def build_class(id, proc, options = {})
9
- item_class = options[:item_class] || self.item_class
9
+ item_class = options.delete(:item_class) || self.item_class
10
10
 
11
- Node.validate_is_subclass! item_class, 'item'
11
+ if item_class.is_a?(Hash)
12
+ item_class.values.each do |klass|
13
+ Node.validate_is_subclass! klass, 'item'
14
+ end
15
+ else
16
+ Node.validate_is_subclass! item_class, 'item'
17
+ item_class = Hash.new(item_class)
18
+ end
12
19
 
13
20
  Class.new(self).tap do |field_class|
14
21
  field_class.id = id.to_s
@@ -20,7 +27,7 @@ module GQL
20
27
 
21
28
  def value
22
29
  target.map do |item|
23
- node = self.class.item_class.new(ast_node, item, variables, context)
30
+ node = self.class.item_class[item.class].new(ast_node, item, variables, context)
24
31
  node.value
25
32
  end
26
33
  end
data/lib/gql/call.rb CHANGED
@@ -5,8 +5,17 @@ module GQL
5
5
  class_attribute :id, :result_class, :proc, instance_accessor: false, instance_predicate: false
6
6
 
7
7
  class << self
8
- def returns(result_class)
9
- self.result_class = result_class
8
+ def returns(result_class = nil, &block)
9
+ if result_class
10
+ self.result_class = result_class
11
+ elsif block_given?
12
+ Class.new(Node).tap do |result_class|
13
+ result_class.default_proc = -> id { -> { target[id] } }
14
+ result_class.class_eval(&block)
15
+
16
+ returns result_class
17
+ end
18
+ end
10
19
  end
11
20
 
12
21
  def execute(caller_class, ast_node, target, variables, context)
data/lib/gql/config.rb CHANGED
@@ -17,7 +17,14 @@ module GQL
17
17
  end
18
18
 
19
19
  def field_types
20
- @@field_types ||= {}
20
+ @@field_types ||= {
21
+ array: Array,
22
+ boolean: Boolean,
23
+ connection: Connection,
24
+ number: Number,
25
+ object: Object,
26
+ string: String
27
+ }
21
28
  end
22
29
 
23
30
  def field_types=(value)
@@ -25,7 +32,7 @@ module GQL
25
32
  end
26
33
 
27
34
  def default_list_class
28
- @@default_list_class ||= Connection
35
+ @@default_list_class ||= Node
29
36
  end
30
37
 
31
38
  def default_list_class=(value)
@@ -2,21 +2,14 @@ require 'active_support/core_ext/class/attribute'
2
2
 
3
3
  module GQL
4
4
  class Connection < Node
5
- class_attribute :list_class, instance_accessor: false, instance_predicate: false
6
- class_attribute :item_class, instance_accessor: false, instance_predicate: false
7
-
8
5
  class << self
9
6
  def build_class(id, proc, options = {})
10
- list_class = options[:list_class] || self.list_class || GQL.default_list_class
11
- item_class = options[:item_class] || self.item_class
12
-
13
- Connection.validate_is_subclass! list_class, 'list'
14
- Node.validate_is_subclass! item_class, 'item'
7
+ list_class = options.delete(:list_class) || GQL.default_list_class
8
+ item_class = options.delete(:item_class)
15
9
 
16
- Class.new(list_class).tap do |field_class|
17
- field_class.id = id.to_s
18
- field_class.proc = proc
10
+ Node.validate_is_subclass! list_class, 'list'
19
11
 
12
+ list_class.build_class(id, proc, options).tap do |field_class|
20
13
  field_class.array :edges, -> { target }, item_class: item_class
21
14
  end
22
15
  end
data/lib/gql/node.rb CHANGED
@@ -17,10 +17,11 @@ module GQL
17
17
  end
18
18
  end
19
19
 
20
- class_attribute :id, :proc, :calls, :fields, instance_accessor: false, instance_predicate: false
20
+ class_attribute :id, :proc, :calls, :fields, :default_proc, instance_accessor: false, instance_predicate: false
21
21
 
22
22
  self.calls = {}
23
23
  self.fields = {}
24
+ self.default_proc = -> id { -> { target.public_send(id) } }
24
25
 
25
26
  class << self
26
27
  def build_class(id, proc, options = {})
@@ -82,7 +83,7 @@ module GQL
82
83
 
83
84
  def field(id, *args)
84
85
  options = args.extract_options!
85
- proc = args.shift || -> { target.public_send(id) }
86
+ proc = args.shift || instance_exec(id, &default_proc)
86
87
  type = options.delete(:type) || Node
87
88
 
88
89
  Node.validate_is_subclass! type, 'type'
data/lib/gql/object.rb CHANGED
@@ -2,25 +2,14 @@ require 'active_support/core_ext/class/attribute'
2
2
 
3
3
  module GQL
4
4
  class Object < Node
5
- class_attribute :node_class, instance_accessor: false, instance_predicate: false
6
-
7
5
  class << self
8
6
  def build_class(id, proc, options = {})
9
- node_class = options[:node_class] || self.node_class
7
+ node_class = options.delete(:node_class)
10
8
 
11
9
  Node.validate_is_subclass! node_class, 'node'
12
10
 
13
- Class.new(self).tap do |field_class|
14
- field_class.id = id.to_s
15
- field_class.proc = proc
16
- field_class.node_class = node_class
17
- end
11
+ node_class.build_class id, proc, options
18
12
  end
19
13
  end
20
-
21
- def value
22
- node = self.class.node_class.new(ast_node, target, variables, context)
23
- node.value
24
- end
25
14
  end
26
15
  end
data/lib/gql/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module GQL
2
- VERSION = '0.0.9'
2
+ VERSION = '0.0.10'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Andert