graphiti 1.0.rc.21 → 1.0.rc.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.standard.yml +14 -0
- data/.travis.yml +31 -2
- data/Appraisals +16 -10
- data/Gemfile +5 -5
- data/Guardfile +2 -2
- data/README.md +1 -1
- data/Rakefile +4 -4
- data/exe/graphiti +1 -1
- data/gemfiles/rails_4.gemfile +0 -1
- data/gemfiles/rails_5.gemfile +0 -1
- data/gemfiles/rails_6.gemfile +19 -0
- data/graphiti.gemspec +15 -14
- data/lib/generators/graphiti/api_test_generator.rb +16 -16
- data/lib/generators/graphiti/generator_mixin.rb +7 -7
- data/lib/generators/graphiti/install_generator.rb +19 -19
- data/lib/generators/graphiti/resource_generator.rb +19 -19
- data/lib/generators/graphiti/resource_test_generator.rb +10 -10
- data/lib/graphiti.rb +24 -26
- data/lib/graphiti/adapters/abstract.rb +25 -39
- data/lib/graphiti/adapters/active_record.rb +43 -49
- data/lib/graphiti/adapters/active_record/many_to_many_sideload.rb +33 -11
- data/lib/graphiti/adapters/graphiti_api.rb +16 -16
- data/lib/graphiti/adapters/null.rb +0 -12
- data/lib/graphiti/cli.rb +7 -7
- data/lib/graphiti/configuration.rb +14 -15
- data/lib/graphiti/context.rb +1 -1
- data/lib/graphiti/debugger.rb +22 -26
- data/lib/graphiti/delegates/pagination.rb +9 -9
- data/lib/graphiti/deserializer.rb +7 -9
- data/lib/graphiti/errors.rb +119 -119
- data/lib/graphiti/extensions/boolean_attribute.rb +1 -1
- data/lib/graphiti/extensions/extra_attribute.rb +1 -1
- data/lib/graphiti/extensions/temp_id.rb +1 -1
- data/lib/graphiti/filter_operators.rb +6 -0
- data/lib/graphiti/hash_renderer.rb +15 -15
- data/lib/graphiti/jsonapi_serializable_ext.rb +1 -1
- data/lib/graphiti/query.rb +35 -35
- data/lib/graphiti/railtie.rb +14 -10
- data/lib/graphiti/renderer.rb +2 -2
- data/lib/graphiti/resource.rb +4 -6
- data/lib/graphiti/resource/configuration.rb +9 -13
- data/lib/graphiti/resource/documentation.rb +4 -2
- data/lib/graphiti/resource/dsl.rb +21 -25
- data/lib/graphiti/resource/interface.rb +3 -3
- data/lib/graphiti/resource/links.rb +14 -14
- data/lib/graphiti/resource/persistence.rb +9 -9
- data/lib/graphiti/resource/polymorphism.rb +3 -3
- data/lib/graphiti/resource/remote.rb +3 -3
- data/lib/graphiti/resource/sideloading.rb +5 -5
- data/lib/graphiti/resource_proxy.rb +12 -12
- data/lib/graphiti/schema.rb +27 -26
- data/lib/graphiti/schema_diff.rb +10 -10
- data/lib/graphiti/scope.rb +12 -16
- data/lib/graphiti/scoping/base.rb +5 -5
- data/lib/graphiti/scoping/default_filter.rb +1 -1
- data/lib/graphiti/scoping/filter.rb +15 -24
- data/lib/graphiti/scoping/filterable.rb +5 -5
- data/lib/graphiti/scoping/paginate.rb +1 -1
- data/lib/graphiti/scoping/sort.rb +7 -7
- data/lib/graphiti/serializer.rb +8 -4
- data/lib/graphiti/sideload.rb +23 -39
- data/lib/graphiti/sideload/belongs_to.rb +2 -2
- data/lib/graphiti/sideload/has_many.rb +1 -1
- data/lib/graphiti/sideload/many_to_many.rb +18 -2
- data/lib/graphiti/sideload/polymorphic_belongs_to.rb +14 -8
- data/lib/graphiti/stats/dsl.rb +7 -1
- data/lib/graphiti/tasks.rb +10 -10
- data/lib/graphiti/types.rb +98 -98
- data/lib/graphiti/util/attribute_check.rb +1 -1
- data/lib/graphiti/util/class.rb +3 -3
- data/lib/graphiti/util/field_params.rb +1 -1
- data/lib/graphiti/util/hash.rb +19 -1
- data/lib/graphiti/util/link.rb +15 -19
- data/lib/graphiti/util/persistence.rb +17 -22
- data/lib/graphiti/util/relationship_payload.rb +2 -2
- data/lib/graphiti/util/remote_params.rb +12 -12
- data/lib/graphiti/util/remote_serializer.rb +2 -2
- data/lib/graphiti/util/serializer_attributes.rb +20 -25
- data/lib/graphiti/util/serializer_relationships.rb +17 -18
- data/lib/graphiti/util/sideload.rb +1 -1
- data/lib/graphiti/util/transaction_hooks_recorder.rb +3 -2
- data/lib/graphiti/version.rb +1 -1
- metadata +22 -6
@@ -1,23 +1,23 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
|
-
require
|
2
|
+
require "generator_mixin"
|
3
3
|
|
4
4
|
module Graphiti
|
5
5
|
class ResourceGenerator < ::Rails::Generators::NamedBase
|
6
6
|
include GeneratorMixin
|
7
7
|
|
8
|
-
source_root File.expand_path(
|
8
|
+
source_root File.expand_path("../templates", __FILE__)
|
9
9
|
|
10
10
|
argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
|
11
11
|
|
12
12
|
class_option :'omit-comments',
|
13
13
|
type: :boolean,
|
14
14
|
default: false,
|
15
|
-
aliases: [
|
16
|
-
desc:
|
17
|
-
class_option :
|
15
|
+
aliases: ["--omit-comments", "-c"],
|
16
|
+
desc: "Generate without documentation comments"
|
17
|
+
class_option :actions,
|
18
18
|
type: :array,
|
19
19
|
default: nil,
|
20
|
-
aliases: [
|
20
|
+
aliases: ["--actions", "-a"],
|
21
21
|
desc: 'Array of controller actions to support, e.g. "index show destroy"'
|
22
22
|
|
23
23
|
desc "This generator creates a resource file at app/resources, as well as corresponding controller/specs/route/etc"
|
@@ -55,7 +55,7 @@ module Graphiti
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def omit_comments?
|
58
|
-
@options[
|
58
|
+
@options["omit-comments"]
|
59
59
|
end
|
60
60
|
|
61
61
|
def responders?
|
@@ -63,28 +63,28 @@ module Graphiti
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def generate_controller
|
66
|
-
to = File.join(
|
67
|
-
template(
|
66
|
+
to = File.join("app/controllers", class_path, "#{file_name.pluralize}_controller.rb")
|
67
|
+
template("controller.rb.erb", to)
|
68
68
|
end
|
69
69
|
|
70
70
|
def generate_application_resource
|
71
|
-
to = File.join(
|
72
|
-
template(
|
71
|
+
to = File.join("app/resources", class_path, "application_resource.rb")
|
72
|
+
template("application_resource.rb.erb", to)
|
73
73
|
require "#{::Rails.root}/#{to}"
|
74
74
|
end
|
75
75
|
|
76
76
|
def application_resource_defined?
|
77
|
-
|
77
|
+
"ApplicationResource".safe_constantize.present?
|
78
78
|
end
|
79
79
|
|
80
80
|
def generate_route
|
81
81
|
# Rails 5.2 adds `plural_route_name`, fallback to `plural_table_name`
|
82
|
-
plural_name =
|
82
|
+
plural_name = try(:plural_route_name) || plural_table_name
|
83
83
|
|
84
84
|
code = "resources :#{plural_name}"
|
85
|
-
code << %
|
85
|
+
code << %(, only: [#{actions.map { |a| ":#{a}" }.join(", ")}]) if actions.length < 5
|
86
86
|
code << "\n"
|
87
|
-
inject_into_file
|
87
|
+
inject_into_file "config/routes.rb", after: /ApplicationResource.*$\n/ do
|
88
88
|
indent(code, 4)
|
89
89
|
end
|
90
90
|
end
|
@@ -92,18 +92,18 @@ module Graphiti
|
|
92
92
|
def generate_resource_specs
|
93
93
|
opts = {}
|
94
94
|
opts[:actions] = @options[:actions] if @options[:actions]
|
95
|
-
invoke
|
95
|
+
invoke "graphiti:resource_test", [resource_klass], opts
|
96
96
|
end
|
97
97
|
|
98
98
|
def generate_api_specs
|
99
99
|
opts = {}
|
100
100
|
opts[:actions] = @options[:actions] if @options[:actions]
|
101
|
-
invoke
|
101
|
+
invoke "graphiti:api_test", [resource_klass], opts
|
102
102
|
end
|
103
103
|
|
104
104
|
def generate_resource
|
105
|
-
to = File.join(
|
106
|
-
template(
|
105
|
+
to = File.join("app/resources", class_path, "#{file_name}_resource.rb")
|
106
|
+
template("resource.rb.erb", to)
|
107
107
|
require "#{::Rails.root}/#{to}" if create?
|
108
108
|
end
|
109
109
|
|
@@ -1,21 +1,21 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
|
-
require
|
2
|
+
require "generator_mixin"
|
3
3
|
|
4
4
|
module Graphiti
|
5
5
|
class ResourceTestGenerator < ::Rails::Generators::Base
|
6
6
|
include GeneratorMixin
|
7
7
|
|
8
|
-
source_root File.expand_path(
|
8
|
+
source_root File.expand_path("../templates", __FILE__)
|
9
9
|
|
10
10
|
argument :resource, type: :string
|
11
11
|
argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
|
12
|
-
class_option :
|
12
|
+
class_option :actions,
|
13
13
|
type: :array,
|
14
14
|
default: nil,
|
15
|
-
aliases: [
|
15
|
+
aliases: ["--actions", "-a"],
|
16
16
|
desc: 'Array of controller actions, e.g. "index show destroy"'
|
17
17
|
|
18
|
-
desc
|
18
|
+
desc "Generates rspec request specs at spec/api"
|
19
19
|
def generate
|
20
20
|
generate_resource_specs
|
21
21
|
end
|
@@ -27,18 +27,18 @@ module Graphiti
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def dir
|
30
|
-
@resource.gsub(
|
30
|
+
@resource.gsub("Resource", "").underscore.pluralize
|
31
31
|
end
|
32
32
|
|
33
33
|
def generate_resource_specs
|
34
|
-
if actions?(
|
34
|
+
if actions?("create", "update", "destroy")
|
35
35
|
to = "spec/resources/#{var}/writes_spec.rb"
|
36
|
-
template(
|
36
|
+
template("resource_writes_spec.rb.erb", to)
|
37
37
|
end
|
38
38
|
|
39
|
-
if actions?(
|
39
|
+
if actions?("index", "show")
|
40
40
|
to = "spec/resources/#{var}/reads_spec.rb"
|
41
|
-
template(
|
41
|
+
template("resource_reads_spec.rb.erb", to)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
data/lib/graphiti.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
1
|
+
require "json"
|
2
|
+
require "forwardable"
|
3
|
+
require "active_support/core_ext/string"
|
4
|
+
require "active_support/core_ext/enumerable"
|
5
|
+
require "active_support/core_ext/class/attribute"
|
6
|
+
require "active_support/core_ext/hash/conversions" # to_xml
|
7
|
+
require "active_support/concern"
|
8
|
+
require "active_support/time"
|
9
9
|
|
10
|
-
require
|
11
|
-
require
|
10
|
+
require "dry-types"
|
11
|
+
require "graphiti_errors"
|
12
12
|
|
13
|
-
require
|
13
|
+
require "jsonapi/serializable"
|
14
14
|
|
15
15
|
require "graphiti/version"
|
16
16
|
require "graphiti/jsonapi_serializable_ext"
|
@@ -69,8 +69,8 @@ require "graphiti/util/class"
|
|
69
69
|
require "graphiti/util/link"
|
70
70
|
require "graphiti/util/remote_serializer"
|
71
71
|
require "graphiti/util/remote_params"
|
72
|
-
require
|
73
|
-
require
|
72
|
+
require "graphiti/adapters/null"
|
73
|
+
require "graphiti/adapters/graphiti_api"
|
74
74
|
require "graphiti/extensions/extra_attribute"
|
75
75
|
require "graphiti/extensions/boolean_attribute"
|
76
76
|
require "graphiti/extensions/temp_id"
|
@@ -78,17 +78,17 @@ require "graphiti/serializer"
|
|
78
78
|
require "graphiti/debugger"
|
79
79
|
|
80
80
|
if defined?(ActiveRecord)
|
81
|
-
require
|
81
|
+
require "graphiti/adapters/active_record"
|
82
82
|
end
|
83
83
|
|
84
84
|
if defined?(Rails)
|
85
|
-
require
|
86
|
-
require
|
87
|
-
require
|
85
|
+
require "graphiti/railtie"
|
86
|
+
require "graphiti/rails"
|
87
|
+
require "graphiti/responders"
|
88
88
|
end
|
89
89
|
|
90
90
|
module Graphiti
|
91
|
-
autoload :Base,
|
91
|
+
autoload :Base, "graphiti/base"
|
92
92
|
|
93
93
|
def self.included(klass)
|
94
94
|
klass.instance_eval do
|
@@ -108,13 +108,11 @@ module Graphiti
|
|
108
108
|
|
109
109
|
# @api private
|
110
110
|
def self.with_context(obj, namespace = nil)
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
self.context = prior
|
117
|
-
end
|
111
|
+
prior = context
|
112
|
+
self.context = {object: obj, namespace: namespace}
|
113
|
+
yield
|
114
|
+
ensure
|
115
|
+
self.context = prior
|
118
116
|
end
|
119
117
|
|
120
118
|
def self.config
|
@@ -192,7 +190,7 @@ module InstanceVariableOverride
|
|
192
190
|
values = super
|
193
191
|
if @__graphiti_serializer
|
194
192
|
values.reject! do |v|
|
195
|
-
[
|
193
|
+
["__graphiti_serializer", "__graphiti_resource"].include?(v)
|
196
194
|
end
|
197
195
|
end
|
198
196
|
values
|
@@ -17,7 +17,7 @@ module Graphiti
|
|
17
17
|
belongs_to: ::Graphiti::Sideload::BelongsTo,
|
18
18
|
has_one: ::Graphiti::Sideload::HasOne,
|
19
19
|
many_to_many: ::Graphiti::Sideload::ManyToMany,
|
20
|
-
polymorphic_belongs_to: ::Graphiti::Sideload::PolymorphicBelongsTo
|
20
|
+
polymorphic_belongs_to: ::Graphiti::Sideload::PolymorphicBelongsTo,
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
@@ -33,7 +33,7 @@ module Graphiti
|
|
33
33
|
:suffix,
|
34
34
|
:not_suffix,
|
35
35
|
:match,
|
36
|
-
:not_match
|
36
|
+
:not_match,
|
37
37
|
],
|
38
38
|
uuid: [:eq, :not_eq],
|
39
39
|
integer_id: numerical_operators,
|
@@ -44,7 +44,7 @@ module Graphiti
|
|
44
44
|
date: numerical_operators,
|
45
45
|
datetime: numerical_operators,
|
46
46
|
hash: [:eq],
|
47
|
-
array: [:eq]
|
47
|
+
array: [:eq],
|
48
48
|
}
|
49
49
|
end
|
50
50
|
|
@@ -120,18 +120,6 @@ module Graphiti
|
|
120
120
|
raise Errors::AdapterNotImplemented.new(self, attribute, :filter_integer_lte)
|
121
121
|
end
|
122
122
|
|
123
|
-
def filter_datetime_eq(scope, attribute, value)
|
124
|
-
raise Errors::AdapterNotImplemented.new(self, attribute, :filter_datetime_eq)
|
125
|
-
end
|
126
|
-
|
127
|
-
def filter_datetime_not_eq(scope, attribute, value)
|
128
|
-
raise Errors::AdapterNotImplemented.new(self, attribute, :filter_datetime_not_eq)
|
129
|
-
end
|
130
|
-
|
131
|
-
def filter_datetime_lte(scope, attribute, value)
|
132
|
-
raise Errors::AdapterNotImplemented.new(self, attribute, :filter_datetime_lte)
|
133
|
-
end
|
134
|
-
|
135
123
|
def filter_float_eq(scope, attribute, value)
|
136
124
|
raise Errors::AdapterNotImplemented.new(self, attribute, :filter_float_eq)
|
137
125
|
end
|
@@ -233,7 +221,7 @@ module Graphiti
|
|
233
221
|
end
|
234
222
|
|
235
223
|
def base_scope(model)
|
236
|
-
raise
|
224
|
+
raise "you must override #base_scope in an adapter subclass"
|
237
225
|
end
|
238
226
|
|
239
227
|
# @param scope The scope object we are chaining
|
@@ -246,7 +234,7 @@ module Graphiti
|
|
246
234
|
# scope.order(attribute => direction)
|
247
235
|
# end
|
248
236
|
def order(scope, attribute, direction)
|
249
|
-
raise
|
237
|
+
raise "you must override #order in an adapter subclass"
|
250
238
|
end
|
251
239
|
|
252
240
|
# @param scope The scope object we are chaining
|
@@ -260,7 +248,7 @@ module Graphiti
|
|
260
248
|
# scope.page(current_page).per(per_page)
|
261
249
|
# end
|
262
250
|
def paginate(scope, current_page, per_page)
|
263
|
-
raise
|
251
|
+
raise "you must override #paginate in an adapter subclass"
|
264
252
|
end
|
265
253
|
|
266
254
|
# @param scope the scope object we are chaining
|
@@ -272,7 +260,7 @@ module Graphiti
|
|
272
260
|
# scope.uniq.count(column)
|
273
261
|
# end
|
274
262
|
def count(scope, attr)
|
275
|
-
raise
|
263
|
+
raise "you must override #count in an adapter subclass"
|
276
264
|
end
|
277
265
|
|
278
266
|
# @param scope the scope object we are chaining
|
@@ -283,7 +271,7 @@ module Graphiti
|
|
283
271
|
# scope.average(attr).to_f
|
284
272
|
# end
|
285
273
|
def average(scope, attr)
|
286
|
-
raise
|
274
|
+
raise "you must override #average in an adapter subclass"
|
287
275
|
end
|
288
276
|
|
289
277
|
# @param scope the scope object we are chaining
|
@@ -294,7 +282,7 @@ module Graphiti
|
|
294
282
|
# scope.sum(attr)
|
295
283
|
# end
|
296
284
|
def sum(scope, attr)
|
297
|
-
raise
|
285
|
+
raise "you must override #sum in an adapter subclass"
|
298
286
|
end
|
299
287
|
|
300
288
|
# @param scope the scope object we are chaining
|
@@ -305,7 +293,7 @@ module Graphiti
|
|
305
293
|
# scope.maximum(attr)
|
306
294
|
# end
|
307
295
|
def maximum(scope, attr)
|
308
|
-
raise
|
296
|
+
raise "you must override #maximum in an adapter subclass"
|
309
297
|
end
|
310
298
|
|
311
299
|
# @param scope the scope object we are chaining
|
@@ -316,7 +304,7 @@ module Graphiti
|
|
316
304
|
# scope.maximum(attr)
|
317
305
|
# end
|
318
306
|
def minimum(scope, attr)
|
319
|
-
raise
|
307
|
+
raise "you must override #maximum in an adapter subclass"
|
320
308
|
end
|
321
309
|
|
322
310
|
# This method must +yield+ the code to run within the transaction.
|
@@ -332,7 +320,7 @@ module Graphiti
|
|
332
320
|
#
|
333
321
|
# @see Resource.model
|
334
322
|
def transaction(model_class)
|
335
|
-
raise
|
323
|
+
raise "you must override #transaction in an adapter subclass, it must yield"
|
336
324
|
end
|
337
325
|
|
338
326
|
# Resolve the scope. This is where you'd actually fire SQL,
|
@@ -359,7 +347,7 @@ module Graphiti
|
|
359
347
|
end
|
360
348
|
|
361
349
|
def belongs_to_many_filter(sideload, scope, value)
|
362
|
-
raise
|
350
|
+
raise "You must implement #belongs_to_many_filter in an adapter subclass"
|
363
351
|
end
|
364
352
|
|
365
353
|
def associate_all(parent, children, association_name, association_type)
|
@@ -377,21 +365,19 @@ module Graphiti
|
|
377
365
|
if activerecord_associate?(parent, child, association_name)
|
378
366
|
activerecord_adapter.associate \
|
379
367
|
parent, child, association_name, association_type
|
380
|
-
|
381
|
-
if
|
382
|
-
|
383
|
-
parent.send(:"#{association_name}=", [child])
|
384
|
-
else
|
385
|
-
parent.send(:"#{association_name}") << child
|
386
|
-
end
|
368
|
+
elsif [:has_many, :many_to_many].include?(association_type)
|
369
|
+
if parent.send(:"#{association_name}").nil?
|
370
|
+
parent.send(:"#{association_name}=", [child])
|
387
371
|
else
|
388
|
-
parent.send(:"#{association_name}
|
372
|
+
parent.send(:"#{association_name}") << child
|
389
373
|
end
|
374
|
+
else
|
375
|
+
parent.send(:"#{association_name}=", child)
|
390
376
|
end
|
391
377
|
end
|
392
378
|
|
393
379
|
def disassociate(parent, child, association_name, association_type)
|
394
|
-
raise
|
380
|
+
raise "you must override #disassociate in an adapter subclass"
|
395
381
|
end
|
396
382
|
|
397
383
|
def build(model_class)
|
@@ -406,19 +392,19 @@ module Graphiti
|
|
406
392
|
end
|
407
393
|
|
408
394
|
def save(model_instance)
|
409
|
-
raise
|
395
|
+
raise "you must override #save in an adapter subclass"
|
410
396
|
end
|
411
397
|
|
412
398
|
def destroy(model_instance)
|
413
|
-
raise
|
399
|
+
raise "you must override #destroy in an adapter subclass"
|
414
400
|
end
|
415
401
|
|
416
|
-
private
|
417
|
-
|
418
402
|
def self.numerical_operators
|
419
|
-
[:eq, :not_eq, :gt, :gte, :lt, :lte]
|
403
|
+
[:eq, :not_eq, :gt, :gte, :lt, :lte].freeze
|
420
404
|
end
|
421
405
|
|
406
|
+
private
|
407
|
+
|
422
408
|
def activerecord_adapter
|
423
409
|
@activerecord_adapter ||=
|
424
410
|
::Graphiti::Adapters::ActiveRecord.new(resource)
|
@@ -1,40 +1,40 @@
|
|
1
1
|
module Graphiti
|
2
2
|
module Adapters
|
3
3
|
class ActiveRecord < ::Graphiti::Adapters::Abstract
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
4
|
+
require "graphiti/adapters/active_record/inferrence"
|
5
|
+
require "graphiti/adapters/active_record/has_many_sideload"
|
6
|
+
require "graphiti/adapters/active_record/belongs_to_sideload"
|
7
|
+
require "graphiti/adapters/active_record/has_one_sideload"
|
8
|
+
require "graphiti/adapters/active_record/many_to_many_sideload"
|
9
9
|
|
10
10
|
def self.sideloading_classes
|
11
11
|
{
|
12
12
|
has_many: Graphiti::Adapters::ActiveRecord::HasManySideload,
|
13
13
|
has_one: Graphiti::Adapters::ActiveRecord::HasOneSideload,
|
14
14
|
belongs_to: Graphiti::Adapters::ActiveRecord::BelongsToSideload,
|
15
|
-
many_to_many: Graphiti::Adapters::ActiveRecord::ManyToManySideload
|
15
|
+
many_to_many: Graphiti::Adapters::ActiveRecord::ManyToManySideload,
|
16
16
|
}
|
17
17
|
end
|
18
18
|
|
19
19
|
def filter_eq(scope, attribute, value)
|
20
20
|
scope.where(attribute => value)
|
21
21
|
end
|
22
|
-
alias
|
23
|
-
alias
|
24
|
-
alias
|
25
|
-
alias
|
26
|
-
alias
|
27
|
-
alias
|
22
|
+
alias filter_integer_eq filter_eq
|
23
|
+
alias filter_float_eq filter_eq
|
24
|
+
alias filter_big_decimal_eq filter_eq
|
25
|
+
alias filter_date_eq filter_eq
|
26
|
+
alias filter_boolean_eq filter_eq
|
27
|
+
alias filter_uuid_eq filter_eq
|
28
28
|
|
29
29
|
def filter_not_eq(scope, attribute, value)
|
30
30
|
scope.where.not(attribute => value)
|
31
31
|
end
|
32
|
-
alias
|
33
|
-
alias
|
34
|
-
alias
|
35
|
-
alias
|
36
|
-
alias
|
37
|
-
alias
|
32
|
+
alias filter_integer_not_eq filter_not_eq
|
33
|
+
alias filter_float_not_eq filter_not_eq
|
34
|
+
alias filter_big_decimal_not_eq filter_not_eq
|
35
|
+
alias filter_date_not_eq filter_not_eq
|
36
|
+
alias filter_boolean_not_eq filter_not_eq
|
37
|
+
alias filter_uuid_not_eq filter_not_eq
|
38
38
|
|
39
39
|
def filter_string_eq(scope, attribute, value, is_not: false)
|
40
40
|
column = column_for(scope, attribute)
|
@@ -43,7 +43,7 @@ module Graphiti
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def filter_string_eql(scope, attribute, value, is_not: false)
|
46
|
-
clause = {
|
46
|
+
clause = {attribute => value}
|
47
47
|
is_not ? scope.where.not(clause) : scope.where(clause)
|
48
48
|
end
|
49
49
|
|
@@ -92,45 +92,45 @@ module Graphiti
|
|
92
92
|
column = column_for(scope, attribute)
|
93
93
|
scope.where(column.gt_any(value))
|
94
94
|
end
|
95
|
-
alias
|
96
|
-
alias
|
97
|
-
alias
|
98
|
-
alias
|
99
|
-
alias
|
95
|
+
alias filter_integer_gt filter_gt
|
96
|
+
alias filter_float_gt filter_gt
|
97
|
+
alias filter_big_decimal_gt filter_gt
|
98
|
+
alias filter_datetime_gt filter_gt
|
99
|
+
alias filter_date_gt filter_gt
|
100
100
|
|
101
101
|
def filter_gte(scope, attribute, value)
|
102
102
|
column = column_for(scope, attribute)
|
103
103
|
scope.where(column.gteq_any(value))
|
104
104
|
end
|
105
|
-
alias
|
106
|
-
alias
|
107
|
-
alias
|
108
|
-
alias
|
109
|
-
alias
|
105
|
+
alias filter_integer_gte filter_gte
|
106
|
+
alias filter_float_gte filter_gte
|
107
|
+
alias filter_big_decimal_gte filter_gte
|
108
|
+
alias filter_datetime_gte filter_gte
|
109
|
+
alias filter_date_gte filter_gte
|
110
110
|
|
111
111
|
def filter_lt(scope, attribute, value)
|
112
112
|
column = column_for(scope, attribute)
|
113
113
|
scope.where(column.lt_any(value))
|
114
114
|
end
|
115
|
-
alias
|
116
|
-
alias
|
117
|
-
alias
|
118
|
-
alias
|
119
|
-
alias
|
115
|
+
alias filter_integer_lt filter_lt
|
116
|
+
alias filter_float_lt filter_lt
|
117
|
+
alias filter_big_decimal_lt filter_lt
|
118
|
+
alias filter_datetime_lt filter_lt
|
119
|
+
alias filter_date_lt filter_lt
|
120
120
|
|
121
121
|
def filter_lte(scope, attribute, value)
|
122
122
|
column = column_for(scope, attribute)
|
123
123
|
scope.where(column.lteq_any(value))
|
124
124
|
end
|
125
|
-
alias
|
126
|
-
alias
|
127
|
-
alias
|
128
|
-
alias
|
125
|
+
alias filter_integer_lte filter_lte
|
126
|
+
alias filter_float_lte filter_lte
|
127
|
+
alias filter_big_decimal_lte filter_lte
|
128
|
+
alias filter_date_lte filter_lte
|
129
129
|
|
130
130
|
# Ensure fractional seconds don't matter
|
131
131
|
def filter_datetime_eq(scope, attribute, value, is_not: false)
|
132
|
-
ranges = value.map { |v| (v..v+1.second-0.00000001) }
|
133
|
-
clause = {
|
132
|
+
ranges = value.map { |v| (v..v + 1.second - 0.00000001) }
|
133
|
+
clause = {attribute => ranges}
|
134
134
|
is_not ? scope.where.not(clause) : scope.where(clause)
|
135
135
|
end
|
136
136
|
|
@@ -139,7 +139,7 @@ module Graphiti
|
|
139
139
|
end
|
140
140
|
|
141
141
|
def filter_datetime_lte(scope, attribute, value)
|
142
|
-
value = value.map { |v| v + 1.second-0.00000001 }
|
142
|
+
value = value.map { |v| v + 1.second - 0.00000001 }
|
143
143
|
column = scope.klass.arel_table[attribute]
|
144
144
|
scope.where(column.lteq_any(value))
|
145
145
|
end
|
@@ -239,9 +239,8 @@ module Graphiti
|
|
239
239
|
def disassociate(parent, child, association_name, association_type)
|
240
240
|
if association_type == :many_to_many
|
241
241
|
parent.send(association_name).delete(child)
|
242
|
-
else
|
243
|
-
# Nothing to do here, happened when we merged foreign key
|
244
242
|
end
|
243
|
+
# Nothing to do in the else case, happened when we merged foreign key
|
245
244
|
end
|
246
245
|
|
247
246
|
# (see Adapters::Abstract#create)
|
@@ -258,11 +257,6 @@ module Graphiti
|
|
258
257
|
instance
|
259
258
|
end
|
260
259
|
|
261
|
-
def destroy(model)
|
262
|
-
model.destroy
|
263
|
-
model
|
264
|
-
end
|
265
|
-
|
266
260
|
def save(model_instance)
|
267
261
|
model_instance.save
|
268
262
|
model_instance
|
@@ -277,7 +271,7 @@ module Graphiti
|
|
277
271
|
|
278
272
|
def column_for(scope, name)
|
279
273
|
table = scope.klass.arel_table
|
280
|
-
if other = scope.attribute_alias(name)
|
274
|
+
if (other = scope.attribute_alias(name))
|
281
275
|
table[other]
|
282
276
|
else
|
283
277
|
table[name]
|