gql 0.0.20 → 0.0.21

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: 84b1f6dbe8ad680fd457f4f14dbd0183b4b18d46
4
- data.tar.gz: 192058fde95f568491e87c6edd719b9a4c85b1c1
3
+ metadata.gz: 6ab57728a3f404a0dc03938f49211795ec0919f9
4
+ data.tar.gz: b56f90154a8ee4253c76f66404861c53b18254b0
5
5
  SHA512:
6
- metadata.gz: dee4291ac7f769adf121c145b8f2a2a93bd0a3417aba29e218120cc2106045f2e4f19cbcd2491b778aff4531f6c04d88acb39500bae1d24763be054131cfe29a
7
- data.tar.gz: ae67282c3aa9cf8b48155429c7f6714f16562ba3ff77fdf9f4a9edcfabc8fae59d02b7472490599f3959b36a2af82971ad8ff36754be8f3b8b61cf71d757ff64
6
+ metadata.gz: 22ee10af77dc8cd90b0692b1ca4c91ff36a0bb71e3bd11f0412fc2a9622c784475f38985e6c055e8339a6cc22b7b794ef9309373fbf8c8b7940d67aa18d718c8
7
+ data.tar.gz: f4c135e4a7325589051a06004a166ab3cd198ce41077da5cfce3673dc76150968faa5f2db98057ad744e78575ab1ee2c247cd69b509f3f185a6bc7f9d3e0b8e3
@@ -78,7 +78,7 @@ module GQL
78
78
 
79
79
  private
80
80
  def switch_debug_on
81
- Field.object :__type__, -> { field_class }, class: Schema::Field
81
+ Field.object :__type__, -> { field_class }, object_class: Schema::Field
82
82
  Field.send :remove_const, :ExecutionContext if Field.const_defined?(:ExecutionContext)
83
83
  Field.const_set :ExecutionContext, Field::ExecutionContextDebug
84
84
  end
@@ -2,7 +2,7 @@ require 'active_support/core_ext/array/conversions'
2
2
  require 'active_support/core_ext/string/inflections'
3
3
 
4
4
  module GQL
5
- class Error < StandardError
5
+ class Error < RuntimeError
6
6
  attr_reader :code, :handle
7
7
 
8
8
  def initialize(msg, code = 100, handle = nil)
@@ -70,16 +70,7 @@ module GQL
70
70
  end
71
71
  end
72
72
 
73
- class FieldClassNotSet < Error
74
- def initialize(node_class, name)
75
- msg = "#{node_class} must have a #{name.humanize(capitalize: false)} set. "
76
- msg << "Set it with `self.#{name} = My#{name.camelize}Class'."
77
-
78
- super(msg, 122)
79
- end
80
- end
81
-
82
- class InvalidFieldClass < Error
73
+ class InvalidClass < Error
83
74
  def initialize(node_class, super_class)
84
75
  msg = "#{node_class} must be a (subclass of) #{super_class}."
85
76
 
@@ -87,16 +78,10 @@ module GQL
87
78
  end
88
79
  end
89
80
 
90
- class NoMethodError < Error
91
- attr_reader :cause
92
-
93
- def initialize(field_class, id, cause)
94
- @cause = cause
95
-
96
- msg = "Undefined method `#{id}' for #{field_class}. "
97
- msg << "Did you try to add a field of type `#{id}'? "
98
- msg << "If so, you have to register your field type first "
99
- msg << "like this: `GQL.field_types[:#{id}] = My#{id.to_s.camelize}'. "
81
+ class UnknownFieldType < Error
82
+ def initialize(type, using_class)
83
+ msg = "The field type `#{type}' used in #{using_class} is not known."
84
+ msg << "Register your field type with: `GQL.field_types[:#{type}] = My#{type.to_s.camelize}'. "
100
85
  msg << "The following field types are currently registered: "
101
86
  msg << GQL.field_types.keys.sort.map { |key| "`#{key}'" }.to_sentence
102
87
 
@@ -7,22 +7,30 @@ module GQL
7
7
  class << self
8
8
  def build_class(id, proc, options)
9
9
  Class.new(self).tap do |field_class|
10
- field_class.owner = options.delete(:owner)
11
- field_class.type = options.delete(:type)
12
- field_class.id = id
13
- field_class.proc = proc
10
+ field_class.owner = options.delete(:owner)
11
+ field_class.type = options.delete(:type)
12
+ field_class.id = id
13
+ field_class.proc = proc
14
14
  field_class.options = options
15
15
  end
16
16
  end
17
17
 
18
- def resolve
19
- owner.remove_field id
18
+ def spur
19
+ return spur_unknown_field_type if type.is_a? ::Symbol
20
+
20
21
  owner.add_field id, proc, options.merge(type: Registry.fetch(type))
21
22
  end
23
+
24
+ private
25
+ def spur_unknown_field_type
26
+ field_type = GQL.field_types[type]
27
+ raise Errors::UnknownFieldType.new(type, owner) unless field_type
28
+ owner.send type, id, proc, options
29
+ end
22
30
  end
23
31
 
24
32
  def value
25
- field_class = self.class.resolve
33
+ field_class = self.class.spur
26
34
 
27
35
  field = field_class.new(ast_node, target, variables, context)
28
36
  field.value
@@ -53,7 +53,8 @@ module GQL
53
53
  end
54
54
 
55
55
  def call_class_from_spec(spec)
56
- return Class.new(spec) unless spec.is_a?(Proc)
56
+ return LazyCall.new(spec) if spec.is_a?(::String)
57
+ return Class.new(spec) unless spec.is_a?(::Proc)
57
58
 
58
59
  Class.new(Call).tap do |call_class|
59
60
  call_class.class_eval do
@@ -102,7 +103,7 @@ module GQL
102
103
  end
103
104
 
104
105
  def result_class_from_mapping_spec(spec)
105
- Object.build_class :result, nil, class: spec
106
+ Object.build_class :result, nil, object_class: spec
106
107
  end
107
108
  end
108
109
 
@@ -115,6 +116,21 @@ module GQL
115
116
  def call_class_for_id(id)
116
117
  self.class.calls[id] or raise Errors::CallNotFound.new(id, self.class)
117
118
  end
119
+
120
+ class LazyCall
121
+ attr_reader :call_class_name
122
+ attr_accessor :id, :result_class
123
+
124
+ def initialize(call_class_name)
125
+ @call_class_name = call_class_name
126
+ end
127
+
128
+ def execute(caller_class, ast_node, target, variables, context)
129
+ real_call_class = Registry.fetch(call_class_name, Call)
130
+ call_class = caller_class.add_call(id, real_call_class, returns: result_class)
131
+ call_class.execute caller_class, ast_node, target, variables, context
132
+ end
133
+ end
118
134
  end
119
135
  end
120
136
  end
@@ -54,15 +54,15 @@ module GQL
54
54
  define_field_method method, type
55
55
  send method, *args, &block
56
56
  else
57
- super
57
+ options = args.extract_options!.merge(type: method.to_sym)
58
+ args = args.push(options)
59
+ add_field(*args, &block)
58
60
  end
59
- rescue NoMethodError => exc
60
- raise Errors::NoMethodError.new(self, method, exc)
61
61
  end
62
62
 
63
63
  private
64
64
  def build_field_class(type, id, proc, options)
65
- if type.is_a? ::String
65
+ if type.is_a?(::String) || type.is_a?(::Symbol)
66
66
  Lazy.build_class id, proc, options.merge(owner: self, type: type)
67
67
  else
68
68
  Registry.fetch(type).build_class id, proc, options
@@ -6,7 +6,7 @@ module GQL
6
6
 
7
7
  class << self
8
8
  def build_class(id, proc, options = {})
9
- object_class = options.delete(:class) || options.delete(:as)
9
+ object_class = options.delete(:object_class) || options.delete(:as)
10
10
  object_class = ::Hash.new(object_class) unless object_class.is_a?(::Hash)
11
11
 
12
12
  Class.new(self).tap do |klass|
@@ -17,8 +17,6 @@ module GQL
17
17
 
18
18
  def fetch(key, baseclass = Field)
19
19
  cache[key] || begin
20
- raise Errors::FieldClassNotSet.new(baseclass, 'TODO') if key.nil?
21
-
22
20
  const, name =
23
21
  if key.instance_of? ::Class
24
22
  [key, key.name]
@@ -26,7 +24,7 @@ module GQL
26
24
  [key.constantize, key]
27
25
  end
28
26
 
29
- raise Errors::InvalidFieldClass.new(const, baseclass) unless const <= baseclass
27
+ raise Errors::InvalidClass.new(const, baseclass) unless const <= baseclass
30
28
 
31
29
  cache.update name => const, const => const
32
30
 
@@ -5,7 +5,7 @@ module GQL
5
5
 
6
6
  string :id
7
7
  string :name
8
- object :result_class, -> { target.result_class || CallerClass }, class: Field
8
+ object :result_class, -> { target.result_class || CallerClass }, object_class: Field
9
9
  array :parameters, -> { (target.proc || target.instance_method(:execute)).parameters }, item_class: Parameter
10
10
 
11
11
  def scalar_value
@@ -1,3 +1,3 @@
1
1
  module GQL
2
- VERSION = '0.0.20'
2
+ VERSION = '0.0.21'
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.20
4
+ version: 0.0.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Andert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-13 00:00:00.000000000 Z
11
+ date: 2015-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -67,19 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.4'
69
69
  - !ruby/object:Gem::Dependency
70
- name: minitest-perf
70
+ name: minitest-reporters
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.1'
75
+ version: '1.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.1'
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: activesupport
85
85
  requirement: !ruby/object:Gem::Requirement