graphiform 0.1.3 → 0.1.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
  SHA256:
3
- metadata.gz: d6bde49d1fc203265aee73785f6ff23308b5d2098259dd7bbc762dc0a8c16322
4
- data.tar.gz: 061af2e25afdf9dad9fdedab5847212e3b7005c36290dfcbccdc73b085dd1588
3
+ metadata.gz: 5ad540c4e174f075ab85b85f40e4dd63ebb4568ff0617b3c5dd6785410f55c63
4
+ data.tar.gz: a6b5a49c31a806ff942a87fef6ef4d1554f2cb9fc9867ad442f99501fc736025
5
5
  SHA512:
6
- metadata.gz: 0df7c307f8fbaa68fa1a33ee60d9c364603dbd911cb3726fc20073cf1bb9decaf1809387f5048fa080cd4abb6908f51fd744c769cbbb5f8c1e88db7fe631a7a7
7
- data.tar.gz: df1bc69c8e412ae66be318d65c5574fef2cf1d5d2371a98ddd1293a6ceea9e7b4ac6e3bcd794b1660e8c7a6e7fbe26aa97737b723e5f4d3d5b22ad256e42e8ee
6
+ metadata.gz: 2bb21cd22cdcecb06d9ff58c32ba0697cecf604bc8a0eb162fe846d0cd37dec604c082bd3d39bc744f8f418372629b7883d71da2e8cf5fc35bfe68e8a26b2639
7
+ data.tar.gz: d2abcff1ee1e4dd8e2b7703b5d73864082ce554895e0b6d34fc118afb2b11d942789de11af26410b6c82230dcfd71a1a96d22f7503dd3f3d7b46dc5a209bd324
@@ -76,8 +76,38 @@ module Graphiform
76
76
  unless defined? @base_resolver
77
77
  @base_resolver = Helpers.get_const_or_create(demodulized_name, ::Resolvers) do
78
78
  Class.new(::Resolvers::BaseResolver) do
79
- # Default resolver just returns the object to prevent exceptions
80
- define_method :resolve do |**_args|
79
+ attr_reader :value
80
+
81
+ class << self
82
+ attr_accessor :addon_resolve_blocks
83
+ end
84
+
85
+ def self.addon_resolve(&block)
86
+ @addon_resolve_blocks ||= []
87
+ @addon_resolve_blocks << block
88
+ end
89
+
90
+ def resolve(**args)
91
+ @value = base_resolve(**args)
92
+
93
+ if self.class.addon_resolve_blocks.present? && !self.class.addon_resolve_blocks.empty?
94
+ self.class.addon_resolve_blocks.each do |addon_resolve_block|
95
+ @value = instance_exec(**args, &addon_resolve_block)
96
+ end
97
+ end
98
+
99
+ @value
100
+ end
101
+
102
+ def apply_built_ins(where: nil, sort: nil, **)
103
+ @value = @value.apply_filters(where.to_h) if where.present? && @value.respond_to?(:apply_filters)
104
+ @value = @value.apply_sorts(sort.to_h) if sort.present? && @value.respond_to?(:apply_sorts)
105
+
106
+ @value
107
+ end
108
+
109
+ # Default resolver - meant to be overridden
110
+ def base_resolve(**)
81
111
  object
82
112
  end
83
113
  end
@@ -86,7 +116,14 @@ module Graphiform
86
116
  local_graphql_filter = graphql_filter
87
117
  local_graphql_sort = graphql_sort
88
118
 
119
+ model = self
89
120
  @base_resolver.class_eval do
121
+ unless respond_to?(:model)
122
+ define_method :model do
123
+ model
124
+ end
125
+ end
126
+
90
127
  argument :where, local_graphql_filter, required: false
91
128
  argument :sort, local_graphql_sort, required: false unless local_graphql_sort.arguments.empty?
92
129
  end
@@ -97,16 +134,14 @@ module Graphiform
97
134
 
98
135
  def graphql_query
99
136
  Helpers.get_const_or_create(demodulized_name, ::Resolvers::Queries) do
100
- model = self
101
137
  local_graphql_type = graphql_type
102
138
  Class.new(graphql_base_resolver) do
103
139
  type local_graphql_type, null: false
104
140
 
105
- define_method :resolve do |where: nil|
106
- val = model.all
107
- val = val.apply_filters(where.to_h) if where.present? && val.respond_to?(:apply_filters)
108
-
109
- val.first
141
+ def base_resolve(**args)
142
+ @value = model.all
143
+ apply_built_ins(**args)
144
+ @value.first
110
145
  end
111
146
  end
112
147
  end
@@ -114,37 +149,29 @@ module Graphiform
114
149
 
115
150
  def graphql_connection_query
116
151
  Helpers.get_const_or_create(demodulized_name, ::Resolvers::ConnectionQueries) do
117
- model = self
118
152
  connection_type = graphql_connection
119
153
  Class.new(graphql_base_resolver) do
120
154
  type connection_type, null: false
121
155
 
122
- define_method :resolve do |where: nil, sort: nil|
123
- val = model.all
124
- val = val.apply_filters(where.to_h) if where.present? && val.respond_to?(:apply_filters)
125
- val = val.apply_sorts(sort.to_h) if sort.present? && val.respond_to?(:apply_sorts)
126
-
127
- val
156
+ def base_resolve(**args)
157
+ @value = model.all
158
+ apply_built_ins(**args)
128
159
  end
129
160
  end
130
161
  end
131
162
  end
132
163
 
133
- def graphql_create_resolver(method_name, resolver_type = graphql_type, read_prepare: nil, **_options)
164
+ def graphql_create_resolver(method_name, resolver_type = graphql_type, read_prepare: nil, **)
134
165
  Class.new(graphql_base_resolver) do
135
166
  type resolver_type, null: false
136
167
 
137
- define_method :resolve do |where: nil, **args|
138
- where_hash = where.to_h
139
-
140
- val = super(**args)
141
-
142
- val = val.public_send(method_name) if val.respond_to? method_name
143
- val = instance_exec(val, context, &read_prepare) if read_prepare
168
+ define_method :base_resolve do |**args|
169
+ @value = object
144
170
 
145
- return val.apply_filters(where_hash) if val.respond_to? :apply_filters
171
+ @value = @value.public_send(method_name) if @value.respond_to?(method_name)
172
+ @value = instance_exec(@value, context, &read_prepare) if read_prepare
146
173
 
147
- val
174
+ apply_built_ins(**args)
148
175
  end
149
176
  end
150
177
  end
@@ -261,7 +261,7 @@ module Graphiform
261
261
  graphql_add_field_to_type(field_name, type, null, read_prepare: read_prepare, **options)
262
262
  end
263
263
 
264
- def graphql_add_method_field(field_name, type:, null: true, **options)
264
+ def graphql_add_method_field(field_name, type: nil, null: true, **options)
265
265
  return Helpers.logger.warn "Graphiform: Missing `type` for field `#{field_name}` in model `#{name}`" if type.nil?
266
266
 
267
267
  graphql_add_field_to_type(field_name, type, null, **options)
@@ -1,3 +1,3 @@
1
1
  module Graphiform
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - jayce.pulsipher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-19 00:00:00.000000000 Z
11
+ date: 2020-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord