gql 0.0.9 → 0.0.10

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