gql 0.0.3 → 0.0.4

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: c2a09930fd0d6998f3652bd99bacce706c64fb0e
4
- data.tar.gz: 0d8a5d883919be233726b729ed4a7bec89c5958f
3
+ metadata.gz: fe2deb60572972e21f7f7371dd4437cd87532043
4
+ data.tar.gz: 502022ff7d90578776e50bcb84b9d19deddbbd8f
5
5
  SHA512:
6
- metadata.gz: bf6337d65cc3a325006f1c0f87c932ae3344b035776e9a3d698deffc00421c88714d13009b8659ab2dee75e524d089966edede001ed68b49c0c17e968ece9a8d
7
- data.tar.gz: 926bdde87803db064e8f4f9cb6834e4d2181a0bf1cea895a8f2d244140313140e63b3b479ce46a6f424a44cac34bad7548d2e13ded7245acbf3957bcc00b0e74
6
+ metadata.gz: b865d13e6b65926e4dad2e418d8cc49882a168e809eeaa372987123714aa6ad761e84f73abef746835fc9964e3683ef6de8f1ea4a91ed8c6b3ce0a0484eeac73
7
+ data.tar.gz: d1e7b56cd2d314de5a175c19a7f4bde686d0a907c144a6650d2a271876bde255a1e8b1b9ee6b5d8a8ebd7962d9eb81321fed1b9f4b38edbc16800ed87b5f7e10
data/README.md CHANGED
@@ -86,7 +86,7 @@ This should result in the following JSON (after prettyfication):
86
86
  "year": 2010,
87
87
  "month": 3
88
88
  },
89
- "created": "March 04, 2010 14:04",
89
+ "created": "March 05, 2010 20:14",
90
90
  "account": {
91
91
  "bank_name": "Foo Bank",
92
92
  "iban": "987654321",
@@ -100,7 +100,7 @@ This should result in the following JSON (after prettyfication):
100
100
  "count": 2,
101
101
  "edges": [
102
102
  {
103
- "cursor": "1",
103
+ "cursor": 1,
104
104
  "node": {
105
105
  "artist": "Metallica",
106
106
  "title": "Black Album",
@@ -119,7 +119,7 @@ This should result in the following JSON (after prettyfication):
119
119
  }
120
120
  }
121
121
  }, {
122
- "cursor": "2",
122
+ "cursor": 2,
123
123
  "node": {
124
124
  "artist": "Nirvana",
125
125
  "title": "Nevermind",
data/lib/gql.rb CHANGED
@@ -20,6 +20,7 @@ module GQL
20
20
  end
21
21
 
22
22
  module Fields
23
+ autoload :Array, 'gql/fields/array'
23
24
  autoload :Boolean, 'gql/fields/boolean'
24
25
  autoload :Connection, 'gql/fields/connection'
25
26
  autoload :Float, 'gql/fields/float'
@@ -75,6 +76,7 @@ module GQL
75
76
  })
76
77
 
77
78
  self.field_types.update(
79
+ array: Fields::Array,
78
80
  boolean: Fields::Boolean,
79
81
  connection: Fields::Connection,
80
82
  float: Fields::Float,
@@ -26,7 +26,8 @@ module GQL
26
26
  raise Errors::InvalidNodeClass.new(field_type_class, Fields::Connection)
27
27
  end
28
28
 
29
- result_class = field_type_class.build_class(nil, connection_class, node_class)
29
+ options = { connection_class: connection_class, node_class: node_class }
30
+ result_class = field_type_class.build_class(nil, options)
30
31
  elsif result_class && !(result_class <= Node)
31
32
  raise Errors::InvalidNodeClass.new(result_class, Node)
32
33
  end
@@ -8,28 +8,11 @@ module GQL
8
8
  def build_class(node_class)
9
9
  node_class ||= self.node_class
10
10
 
11
- if node_class.nil?
12
- raise Errors::UndefinedNodeClass.new(self, 'node')
13
- end
14
-
15
- unless node_class <= GQL::Node
16
- raise Errors::InvalidNodeClass.new(node_class, GQL::Node)
17
- end
18
-
19
11
  Class.new(self).tap do |connection_class|
20
- connection_class.node_class = node_class
21
- end
22
- end
23
- end
24
-
25
- def value_of_field(ast_field)
26
- if ast_field.name == :edges
27
- target.map do |item|
28
- node = self.class.node_class.new(ast_field, item, variables, context)
29
- node.value
12
+ connection_class.array :edges, node_class: node_class do
13
+ target
14
+ end
30
15
  end
31
- else
32
- super
33
16
  end
34
17
  end
35
18
  end
@@ -14,7 +14,7 @@ module GQL
14
14
 
15
15
  class UndefinedNodeClass < Error
16
16
  def initialize(node_class, name)
17
- super("#{node_class} must define a #{name} class. Set it with `self.#{name}_class = My#{method.camelize}Class`.")
17
+ super("#{node_class} must define a #{name} class. Set it with `self.#{name}_class = My#{name.camelize}Class`.")
18
18
  end
19
19
  end
20
20
 
@@ -17,7 +17,7 @@ module GQL
17
17
  class_attribute :method, instance_accessor: false, instance_predicate: false
18
18
 
19
19
  class << self
20
- def build_class(method, connection_class, node_class)
20
+ def build_class(method, options = {})
21
21
  Class.new(self).tap do |field_class|
22
22
  field_class.method = method
23
23
  end
@@ -0,0 +1,39 @@
1
+ require 'active_support/core_ext/class/attribute'
2
+
3
+ module GQL
4
+ module Fields
5
+ class Array < Field
6
+ class_attribute :node_class, instance_accessor: false, instance_predicate: false
7
+
8
+ class << self
9
+ def build_class(method, options = {})
10
+ node_class = options[:node_class] || self.node_class
11
+
12
+ if node_class.nil?
13
+ raise Errors::UndefinedNodeClass.new(self, 'node')
14
+ end
15
+
16
+ unless node_class <= GQL::Node
17
+ raise Errors::InvalidNodeClass.new(node_class, GQL::Node)
18
+ end
19
+
20
+ Class.new(self).tap do |field_class|
21
+ field_class.method = method
22
+ field_class.node_class = node_class
23
+ end
24
+ end
25
+ end
26
+
27
+ def value
28
+ target.map do |item|
29
+ node = self.class.node_class.new(ast_node, item, variables, context)
30
+ node.value
31
+ end
32
+ end
33
+
34
+ def raw_value
35
+ nil
36
+ end
37
+ end
38
+ end
39
+ end
@@ -4,10 +4,11 @@ module GQL
4
4
  module Fields
5
5
  class Connection < Field
6
6
  class_attribute :connection_class, instance_accessor: false, instance_predicate: false
7
+ self.connection_class = GQL::Connection
7
8
 
8
9
  class << self
9
- def build_class(method, connection_class, node_class)
10
- connection_class ||= self.connection_class
10
+ def build_class(method, options = {})
11
+ connection_class = options[:connection_class] || self.connection_class
11
12
 
12
13
  if connection_class.nil?
13
14
  raise Errors::UndefinedNodeClass.new(self, 'connection')
@@ -19,7 +20,7 @@ module GQL
19
20
 
20
21
  Class.new(self).tap do |field_class|
21
22
  field_class.method = method
22
- field_class.connection_class = connection_class.build_class(node_class)
23
+ field_class.connection_class = connection_class.build_class(options[:node_class])
23
24
  end
24
25
  end
25
26
  end
@@ -6,8 +6,8 @@ module GQL
6
6
  class_attribute :node_class, instance_accessor: false, instance_predicate: false
7
7
 
8
8
  class << self
9
- def build_class(method, connection_class, node_class)
10
- node_class ||= self.node_class
9
+ def build_class(method, options = {})
10
+ node_class = options[:node_class] || self.node_class
11
11
 
12
12
  if node_class.nil?
13
13
  raise Errors::UndefinedNodeClass.new(self, 'node')
@@ -24,7 +24,7 @@ module GQL
24
24
  end
25
25
  end
26
26
 
27
- def value_of_fields(*)
27
+ def value
28
28
  node = self.class.node_class.new(ast_node, target, variables, context)
29
29
  node.value
30
30
  end
@@ -1,5 +1,6 @@
1
1
  require 'active_support/core_ext/class/attribute'
2
2
  require 'active_support/core_ext/string/inflections'
3
+ require 'active_support/core_ext/array/extract_options'
3
4
 
4
5
  module GQL
5
6
  class Node
@@ -9,12 +10,6 @@ module GQL
9
10
  self.field_classes = {}
10
11
 
11
12
  class << self
12
- def cursor(method_name)
13
- define_method :cursor do
14
- target.send(method_name).to_s
15
- end
16
- end
17
-
18
13
  def call(*names, &block)
19
14
  names_with_result_class = names.extract_options!
20
15
 
@@ -31,22 +26,32 @@ module GQL
31
26
  end
32
27
  end
33
28
 
34
- def field(*names, field_type_class: nil, connection_class: nil, node_class: nil, &block)
29
+ def field(*names, &block)
30
+ options = names.extract_options!
31
+
35
32
  names.each do |name|
36
33
  method = block || lambda { target.public_send(name) }
37
- field_type_class ||= Field
34
+ field_type_class = options.delete(:field_type_class) || Field
38
35
 
39
36
  unless field_type_class <= Field
40
37
  raise Errors::InvalidNodeClass.new(field_type_class, Field)
41
38
  end
42
39
 
43
- field_class = field_type_class.build_class(method, connection_class, node_class)
40
+ field_class = field_type_class.build_class(method, options)
44
41
 
45
42
  self.const_set "#{name.to_s.camelize}Field", field_class
46
43
  self.field_classes = field_classes.merge(name => field_class)
47
44
  end
48
45
  end
49
46
 
47
+ def cursor(name = nil, &block)
48
+ if name
49
+ field :cursor, &-> { target.public_send(name) }
50
+ elsif block_given?
51
+ field :cursor, &block
52
+ end
53
+ end
54
+
50
55
  def method_missing(method, *names, &block)
51
56
  if field_type_class = GQL.field_types[method]
52
57
  options = names.extract_options!
@@ -101,14 +106,12 @@ module GQL
101
106
  when :node
102
107
  field = self.class.new(ast_field, target, variables, context)
103
108
  field.value
104
- when :cursor
105
- cursor
106
109
  else
107
110
  method = Field::Method.new(target, context)
108
111
  field_class = self.class.field_classes[ast_field.name]
109
112
 
110
113
  if field_class.nil?
111
- raise Errors::UndefinedField.new(ast_field.name, self.class)
114
+ raise Errors::UndefinedField.new(ast_field.name, self.class.superclass)
112
115
  end
113
116
 
114
117
  next_target = method.execute(field_class.method)
@@ -1,3 +1,3 @@
1
1
  module GQL
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Andert
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-03-04 00:00:00.000000000 Z
11
+ date: 2015-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -116,6 +116,7 @@ files:
116
116
  - lib/gql/errors.rb
117
117
  - lib/gql/executor.rb
118
118
  - lib/gql/field.rb
119
+ - lib/gql/fields/array.rb
119
120
  - lib/gql/fields/boolean.rb
120
121
  - lib/gql/fields/connection.rb
121
122
  - lib/gql/fields/float.rb