jat 0.0.5 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jat/attribute.rb +5 -16
- data/lib/jat/config.rb +4 -7
- data/lib/jat/plugins/activerecord/activerecord.rb +23 -0
- data/lib/jat/plugins/{_activerecord_preloads/_activerecord_preloads.rb → base/base_activerecord_preloads/base_activerecord_preloads.rb} +7 -2
- data/lib/jat/plugins/{_activerecord_preloads → base/base_activerecord_preloads}/lib/preloader.rb +16 -4
- data/lib/jat/plugins/{_lower_camel_case/_lower_camel_case.rb → base/base_lower_camel_case/base_lower_camel_case.rb} +6 -2
- data/lib/jat/plugins/{_preloads/_preloads.rb → base/base_preloads/base_preloads.rb} +6 -2
- data/lib/jat/plugins/{_preloads → base/base_preloads}/lib/format_user_preloads.rb +1 -1
- data/lib/jat/plugins/{_preloads → base/base_preloads}/lib/preloads_with_path.rb +1 -1
- data/lib/jat/plugins/cache/cache.rb +5 -1
- data/lib/jat/plugins/json_api/json_api.rb +7 -3
- data/lib/jat/plugins/json_api/lib/map.rb +4 -5
- data/lib/jat/plugins/json_api/lib/response.rb +1 -5
- data/lib/jat/plugins/json_api/lib/response_piece.rb +19 -10
- data/lib/jat/plugins/json_api/plugins/json_api_activerecord/json_api_activerecord.rb +23 -0
- data/lib/jat/plugins/{json_api_lower_camel_case → json_api/plugins/json_api_lower_camel_case}/json_api_lower_camel_case.rb +6 -2
- data/lib/jat/plugins/{json_api_maps_cache → json_api/plugins/json_api_maps_cache}/json_api_maps_cache.rb +5 -1
- data/lib/jat/plugins/json_api/plugins/json_api_preloads/json_api_preloads.rb +38 -0
- data/lib/jat/plugins/{json_api_activerecord → json_api/plugins/json_api_preloads}/lib/preloads.rb +1 -1
- data/lib/jat/plugins/{json_api_validate_params → json_api/plugins/json_api_validate_params}/json_api_validate_params.rb +5 -1
- data/lib/jat/plugins/{json_api_validate_params → json_api/plugins/json_api_validate_params}/lib/params_error.rb +0 -0
- data/lib/jat/plugins/{json_api_validate_params → json_api/plugins/json_api_validate_params}/lib/validate_fields_param.rb +0 -0
- data/lib/jat/plugins/{json_api_validate_params → json_api/plugins/json_api_validate_params}/lib/validate_include_param.rb +1 -3
- data/lib/jat/plugins/lower_camel_case/lower_camel_case.rb +23 -0
- data/lib/jat/plugins/maps_cache/maps_cache.rb +23 -0
- data/lib/jat/plugins/preloads/preloads.rb +23 -0
- data/lib/jat/plugins/simple_api/lib/fields_param_parser.rb +20 -36
- data/lib/jat/plugins/simple_api/lib/map.rb +4 -5
- data/lib/jat/plugins/simple_api/lib/response.rb +1 -5
- data/lib/jat/plugins/simple_api/lib/response_piece.rb +1 -5
- data/lib/jat/plugins/simple_api/plugins/simple_api_activerecord/simple_api_activerecord.rb +23 -0
- data/lib/jat/plugins/{simple_api_lower_camel_case → simple_api/plugins/simple_api_lower_camel_case}/simple_api_lower_camel_case.rb +6 -2
- data/lib/jat/plugins/{simple_api_maps_cache → simple_api/plugins/simple_api_maps_cache}/simple_api_maps_cache.rb +6 -4
- data/lib/jat/plugins/{simple_api_activerecord → simple_api/plugins/simple_api_preloads}/lib/preloads.rb +1 -1
- data/lib/jat/plugins/simple_api/plugins/simple_api_preloads/simple_api_preloads.rb +38 -0
- data/lib/jat/plugins/{simple_api_validate_params → simple_api/plugins/simple_api_validate_params}/lib/fields_error.rb +0 -0
- data/lib/jat/plugins/{simple_api_validate_params → simple_api/plugins/simple_api_validate_params}/lib/validate_fields_param.rb +0 -0
- data/lib/jat/plugins/{simple_api_validate_params → simple_api/plugins/simple_api_validate_params}/simple_api_validate_params.rb +6 -2
- data/lib/jat/plugins/simple_api/simple_api.rb +8 -7
- data/lib/jat/plugins/to_str/to_str.rb +5 -1
- data/lib/jat/plugins/types/types.rb +55 -0
- data/lib/jat/plugins/validate_params/validate_params.rb +23 -0
- data/lib/jat/plugins.rb +41 -15
- data/lib/jat.rb +24 -17
- data/test/lib/jat/attribute_test.rb +8 -0
- data/test/lib/jat/plugins/activerecord/activerecord_test.rb +27 -0
- data/test/lib/jat/plugins/{_activerecord_preloads/_activerecord_preloads_test.rb → base_activerecord_preloads/base_activerecord_preloads_test.rb} +3 -3
- data/test/lib/jat/plugins/{_activerecord_preloads → base_activerecord_preloads}/lib/preloader_test.rb +2 -2
- data/test/lib/jat/plugins/{_camel_lower/_camel_lower_test.rb → base_lower_camel_case/base_lower_camel_case_test.rb} +2 -2
- data/test/lib/jat/plugins/{_preloads/_preloads_test.rb → base_preloads/base_preloads_test.rb} +2 -2
- data/test/lib/jat/plugins/{_preloads → base_preloads}/lib/format_user_preloads_test.rb +3 -3
- data/test/lib/jat/plugins/{_preloads → base_preloads}/lib/preloads_with_path_test.rb +2 -2
- data/test/lib/jat/plugins/json_api/json_api_test.rb +1 -9
- data/test/lib/jat/plugins/json_api/lib/fields_param_parser_test.rb +20 -12
- data/test/lib/jat/plugins/json_api/lib/include_param_parser_test.rb +25 -11
- data/test/lib/jat/plugins/json_api/lib/map_test.rb +132 -124
- data/test/lib/jat/plugins/json_api/lib/response_piece_test.rb +13 -0
- data/test/lib/jat/plugins/json_api/lib/response_test.rb +6 -1
- data/test/lib/jat/plugins/json_api_activerecord/json_api_activerecord_test.rb +4 -18
- data/test/lib/jat/plugins/{json_api_camel_lower/json_api_camel_lower_test.rb → json_api_lower_camel_case/json_api_lower_camel_case_test.rb} +6 -0
- data/test/lib/jat/plugins/json_api_preloads/json_api_preloads_test.rb +51 -0
- data/test/lib/jat/plugins/{json_api_activerecord → json_api_preloads}/lib/preloads_test.rb +8 -6
- data/test/lib/jat/plugins/json_api_validate_params/json_api_validate_params_test.rb +30 -6
- data/test/lib/jat/plugins/lower_camel_case/lower_camel_case_test.rb +27 -0
- data/test/lib/jat/plugins/maps_cache/maps_cache_test.rb +27 -0
- data/test/lib/jat/plugins/preloads/preloads_test.rb +27 -0
- data/test/lib/jat/plugins/simple_api/lib/fields_param_parser_test.rb +57 -43
- data/test/lib/jat/plugins/simple_api/lib/map_test.rb +90 -82
- data/test/lib/jat/plugins/simple_api/lib/response_piece_test.rb +13 -0
- data/test/lib/jat/plugins/simple_api/lib/response_test.rb +18 -12
- data/test/lib/jat/plugins/simple_api/simple_api_test.rb +33 -6
- data/test/lib/jat/plugins/simple_api_activerecord/simple_api_activerecord_test.rb +4 -18
- data/test/lib/jat/plugins/{simple_api_camel_lower/simple_api_camel_lower_test.rb → simple_api_lower_camel_case/simple_api_lower_camel_case_test.rb} +7 -1
- data/test/lib/jat/plugins/{simple_api_activerecord → simple_api_preloads}/lib/preloads_test.rb +8 -8
- data/test/lib/jat/plugins/simple_api_preloads/simple_api_preloads_test.rb +51 -0
- data/test/lib/jat/plugins/simple_api_validate_params/simple_api_validate_params_test.rb +12 -0
- data/test/lib/jat/plugins/types/types_test.rb +83 -0
- data/test/lib/jat/plugins/validate_params/validate_params_test.rb +27 -0
- data/test/lib/jat/plugins_test.rb +88 -0
- data/test/test_helper.rb +8 -4
- metadata +98 -82
- data/lib/jat/plugins/json_api_activerecord/json_api_activerecord.rb +0 -31
- data/lib/jat/plugins/simple_api_activerecord/simple_api_activerecord.rb +0 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0b59dbef3044d5b23c7b8178e23f931458b3acb5ced78b3750c5f1d7bb8ea01e
|
|
4
|
+
data.tar.gz: 7ebf0b1ec19a10872b8e659bd3ab9cd45a5859ace34f87c65070a83af713a2fd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e7e4b943c4b6452937d2c025f47bc1e3e4484151748139682ad03724fa3bc5138f02c23400426ceb3fb6c948112dd91015c1beddfd4da2ee3a1cd3187e0a5d5c
|
|
7
|
+
data.tar.gz: de404f4d77ca9b68a50834b4e435f303f1ace3f66bb976ffa154e4159b01888fa27301795192c967a7cc3b2577c35a10012135521f7e91e9037833d7098f7816
|
data/lib/jat/attribute.rb
CHANGED
|
@@ -9,6 +9,8 @@ class Jat
|
|
|
9
9
|
attr_reader :params, :opts
|
|
10
10
|
|
|
11
11
|
def initialize(name:, opts: {}, block: nil)
|
|
12
|
+
check_block_valid(block)
|
|
13
|
+
|
|
12
14
|
@opts = EnumDeepDup.call(opts)
|
|
13
15
|
@params = EnumDeepFreeze.call(name: name, opts: @opts, block: block)
|
|
14
16
|
end
|
|
@@ -61,10 +63,10 @@ class Jat
|
|
|
61
63
|
def block
|
|
62
64
|
return @block if instance_variable_defined?(:@block)
|
|
63
65
|
|
|
64
|
-
current_block = params.fetch(:block)
|
|
66
|
+
current_block = params.fetch(:block)
|
|
65
67
|
current_block ||= keyword_block
|
|
66
68
|
|
|
67
|
-
@block =
|
|
69
|
+
@block = current_block
|
|
68
70
|
end
|
|
69
71
|
|
|
70
72
|
def value(object, context)
|
|
@@ -78,24 +80,11 @@ class Jat
|
|
|
78
80
|
proc { |object| object.public_send(key_method_name) }
|
|
79
81
|
end
|
|
80
82
|
|
|
81
|
-
def anonymized_block(block)
|
|
82
|
-
Class.new do
|
|
83
|
-
private
|
|
84
|
-
|
|
85
|
-
define_method(:_doe) do |object, context|
|
|
86
|
-
block.call(object, context)
|
|
87
|
-
end
|
|
88
|
-
end.new.method(:_doe)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
83
|
def check_block_valid(block)
|
|
92
|
-
|
|
84
|
+
return unless block
|
|
93
85
|
|
|
94
86
|
params = block.parameters
|
|
95
87
|
raise Error, "Block can have 0-2 parameters" if params.count > 2
|
|
96
|
-
|
|
97
|
-
valid_params_types = params.all? { |param| param[0] == :opt }
|
|
98
|
-
raise Error, "Block parameters must be optional and no keyword parameters" unless valid_params_types
|
|
99
88
|
end
|
|
100
89
|
end
|
|
101
90
|
|
data/lib/jat/config.rb
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "forwardable"
|
|
3
4
|
require_relative "utils/enum_deep_dup"
|
|
4
5
|
|
|
5
6
|
class Jat
|
|
6
7
|
class Config
|
|
7
8
|
module InstanceMethods
|
|
9
|
+
extend Forwardable
|
|
10
|
+
|
|
8
11
|
attr_reader :opts
|
|
9
12
|
|
|
10
13
|
def initialize(opts = {})
|
|
11
14
|
@opts = EnumDeepDup.call(opts)
|
|
12
15
|
end
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
opts[key] = value
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def [](key)
|
|
19
|
-
opts[key]
|
|
20
|
-
end
|
|
17
|
+
def_delegators :@opts, :[], :[]=, :fetch
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
module ClassMethods
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Jat
|
|
4
|
+
module Plugins
|
|
5
|
+
module Activerecord
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:activerecord
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.load(jat_class, **opts)
|
|
11
|
+
if jat_class.plugin_used?(:json_api)
|
|
12
|
+
jat_class.plugin :json_api_activerecord, **opts
|
|
13
|
+
elsif jat_class.plugin_used?(:simple_api)
|
|
14
|
+
jat_class.plugin :simple_api_activerecord, **opts
|
|
15
|
+
else
|
|
16
|
+
raise Error, "Please load :json_api or :simple_api plugin first"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_plugin(Activerecord.plugin_name, Activerecord)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -4,7 +4,11 @@ require_relative "./lib/preloader"
|
|
|
4
4
|
|
|
5
5
|
class Jat
|
|
6
6
|
module Plugins
|
|
7
|
-
module
|
|
7
|
+
module BaseActiverecordPreloads
|
|
8
|
+
def self.plugin_name
|
|
9
|
+
:base_activerecord_preloads
|
|
10
|
+
end
|
|
11
|
+
|
|
8
12
|
def self.load(jat_class, **_opts)
|
|
9
13
|
jat_class.include(InstanceMethods)
|
|
10
14
|
end
|
|
@@ -20,6 +24,7 @@ class Jat
|
|
|
20
24
|
def add_preloads(obj)
|
|
21
25
|
return obj if obj.nil? || (obj.is_a?(Array) && obj.empty?)
|
|
22
26
|
|
|
27
|
+
# preloads() method comes from simple_api_activerecord or json_api_activerecord plugin
|
|
23
28
|
preloads = preloads()
|
|
24
29
|
return obj if preloads.empty?
|
|
25
30
|
|
|
@@ -28,6 +33,6 @@ class Jat
|
|
|
28
33
|
end
|
|
29
34
|
end
|
|
30
35
|
|
|
31
|
-
register_plugin(
|
|
36
|
+
register_plugin(BaseActiverecordPreloads.plugin_name, BaseActiverecordPreloads)
|
|
32
37
|
end
|
|
33
38
|
end
|
data/lib/jat/plugins/{_activerecord_preloads → base/base_activerecord_preloads}/lib/preloader.rb
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
class Jat
|
|
4
4
|
module Plugins
|
|
5
|
-
module
|
|
5
|
+
module BaseActiverecordPreloads
|
|
6
6
|
class Preloader
|
|
7
7
|
module ClassMethods
|
|
8
8
|
def preload(object, preloads)
|
|
@@ -20,6 +20,18 @@ class Jat
|
|
|
20
20
|
extend ClassMethods
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
class Loader
|
|
24
|
+
# :nocov: We can check only one version of activerecord
|
|
25
|
+
def self.call(records, associations)
|
|
26
|
+
if ActiveRecord::VERSION::MAJOR >= 7
|
|
27
|
+
ActiveRecord::Associations::Preloader.new(records: records, associations: associations).call
|
|
28
|
+
else
|
|
29
|
+
ActiveRecord::Associations::Preloader.new.preload(records, associations)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
# :nocov:
|
|
33
|
+
end
|
|
34
|
+
|
|
23
35
|
class ActiverecordObject
|
|
24
36
|
module ClassMethods
|
|
25
37
|
def fit?(object)
|
|
@@ -27,7 +39,7 @@ class Jat
|
|
|
27
39
|
end
|
|
28
40
|
|
|
29
41
|
def preload(object, preloads)
|
|
30
|
-
|
|
42
|
+
Loader.call([object], preloads)
|
|
31
43
|
object
|
|
32
44
|
end
|
|
33
45
|
end
|
|
@@ -44,7 +56,7 @@ class Jat
|
|
|
44
56
|
def preload(objects, preloads)
|
|
45
57
|
if objects.loaded?
|
|
46
58
|
array_objects = objects.to_a
|
|
47
|
-
|
|
59
|
+
Loader.call(array_objects, preloads)
|
|
48
60
|
objects
|
|
49
61
|
else
|
|
50
62
|
objects.preload(preloads).load
|
|
@@ -64,7 +76,7 @@ class Jat
|
|
|
64
76
|
end
|
|
65
77
|
|
|
66
78
|
def preload(objects, preloads)
|
|
67
|
-
|
|
79
|
+
Loader.call(objects, preloads)
|
|
68
80
|
objects
|
|
69
81
|
end
|
|
70
82
|
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
class Jat
|
|
4
4
|
module Plugins
|
|
5
|
-
module
|
|
5
|
+
module BaseLowerCamelCase
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:base_lower_camel_case
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
def self.load(jat_class, **_opts)
|
|
7
11
|
jat_class::Attribute.include(AttributeInstanceMethods)
|
|
8
12
|
end
|
|
@@ -14,7 +18,7 @@ class Jat
|
|
|
14
18
|
end
|
|
15
19
|
end
|
|
16
20
|
|
|
17
|
-
register_plugin(
|
|
21
|
+
register_plugin(BaseLowerCamelCase.plugin_name, BaseLowerCamelCase)
|
|
18
22
|
end
|
|
19
23
|
|
|
20
24
|
class LowerCamelCaseTransformation
|
|
@@ -6,7 +6,11 @@ require_relative "./lib/preloads_with_path"
|
|
|
6
6
|
# This plugin adds attribute methods #preloads, #preloads_path
|
|
7
7
|
class Jat
|
|
8
8
|
module Plugins
|
|
9
|
-
module
|
|
9
|
+
module BasePreloads
|
|
10
|
+
def self.plugin_name
|
|
11
|
+
:base_preloads
|
|
12
|
+
end
|
|
13
|
+
|
|
10
14
|
def self.load(jat_class, **_opts)
|
|
11
15
|
jat_class::Attribute.include(AttributeMethods)
|
|
12
16
|
end
|
|
@@ -54,6 +58,6 @@ class Jat
|
|
|
54
58
|
end
|
|
55
59
|
end
|
|
56
60
|
|
|
57
|
-
register_plugin(
|
|
61
|
+
register_plugin(BasePreloads.plugin_name, BasePreloads)
|
|
58
62
|
end
|
|
59
63
|
end
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
class Jat
|
|
4
4
|
module Plugins
|
|
5
5
|
module Cache
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:cache
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
def self.before_load(jat_class, **opts)
|
|
7
11
|
jat_class.plugin :to_str, **opts
|
|
8
12
|
end
|
|
@@ -38,6 +42,6 @@ class Jat
|
|
|
38
42
|
end
|
|
39
43
|
end
|
|
40
44
|
|
|
41
|
-
register_plugin(
|
|
45
|
+
register_plugin(Cache.plugin_name, Cache)
|
|
42
46
|
end
|
|
43
47
|
end
|
|
@@ -10,6 +10,10 @@ require_relative "./lib/response_piece"
|
|
|
10
10
|
class Jat
|
|
11
11
|
module Plugins
|
|
12
12
|
module JsonApi
|
|
13
|
+
def self.plugin_name
|
|
14
|
+
:json_api
|
|
15
|
+
end
|
|
16
|
+
|
|
13
17
|
def self.before_load(jat_class, **_opts)
|
|
14
18
|
response_plugin = jat_class.config[:response_plugin_loaded]
|
|
15
19
|
return unless response_plugin
|
|
@@ -23,6 +27,8 @@ class Jat
|
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def self.after_load(jat_class, **opts)
|
|
30
|
+
jat_class.config[:response_plugin_loaded] = plugin_name
|
|
31
|
+
|
|
26
32
|
fields_parser_class = Class.new(FieldsParamParser)
|
|
27
33
|
fields_parser_class.jat_class = jat_class
|
|
28
34
|
jat_class.const_set(:FieldsParamParser, fields_parser_class)
|
|
@@ -43,8 +49,6 @@ class Jat
|
|
|
43
49
|
response_piece_class.jat_class = jat_class
|
|
44
50
|
jat_class.const_set(:ResponsePiece, response_piece_class)
|
|
45
51
|
|
|
46
|
-
jat_class.config[:response_plugin_loaded] = :json_api
|
|
47
|
-
jat_class.plugin(:json_api_activerecord, **opts) if opts[:activerecord]
|
|
48
52
|
jat_class.id
|
|
49
53
|
end
|
|
50
54
|
|
|
@@ -242,6 +246,6 @@ class Jat
|
|
|
242
246
|
end
|
|
243
247
|
end
|
|
244
248
|
|
|
245
|
-
register_plugin(
|
|
249
|
+
register_plugin(JsonApi.plugin_name, JsonApi)
|
|
246
250
|
end
|
|
247
251
|
end
|
|
@@ -103,11 +103,10 @@ class Jat
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
def attribute_exposed?(attribute)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
end
|
|
106
|
+
return true if exposed == :all
|
|
107
|
+
return false if exposed == :none
|
|
108
|
+
|
|
109
|
+
attribute.exposed?
|
|
111
110
|
end
|
|
112
111
|
end
|
|
113
112
|
|
|
@@ -87,7 +87,7 @@ class Jat
|
|
|
87
87
|
attributes.each do |name, attribute|
|
|
88
88
|
next if data.key?(name)
|
|
89
89
|
|
|
90
|
-
value =
|
|
90
|
+
value = attribute.value(object, context)
|
|
91
91
|
|
|
92
92
|
unless value.nil?
|
|
93
93
|
data = data.dup if data.equal?(FROZEN_EMPTY_HASH)
|
|
@@ -98,10 +98,6 @@ class Jat
|
|
|
98
98
|
data
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
-
def attribute_value(attribute)
|
|
102
|
-
attribute.block.call(object, context)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
101
|
def context_jsonapi
|
|
106
102
|
context_attr_transform(:jsonapi)
|
|
107
103
|
end
|
|
@@ -49,7 +49,7 @@ class Jat
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def uid
|
|
52
|
-
{type:
|
|
52
|
+
{type: type, id: id}
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
private
|
|
@@ -60,7 +60,7 @@ class Jat
|
|
|
60
60
|
|
|
61
61
|
attributes_names.each_with_object({}) do |name, attrs|
|
|
62
62
|
attribute = jat_class.attributes[name]
|
|
63
|
-
attrs[name] = attribute.
|
|
63
|
+
attrs[name] = attribute.value(object, context)
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
@@ -70,7 +70,7 @@ class Jat
|
|
|
70
70
|
|
|
71
71
|
relationships_names.each_with_object({}) do |name, rels|
|
|
72
72
|
rel_attribute = jat_class.attributes[name]
|
|
73
|
-
rel_object = rel_attribute.
|
|
73
|
+
rel_object = rel_attribute.value(object, context)
|
|
74
74
|
|
|
75
75
|
rel_serializer = rel_attribute.serializer.call
|
|
76
76
|
rel_links = get_relationship_links(rel_serializer, rel_object)
|
|
@@ -105,7 +105,8 @@ class Jat
|
|
|
105
105
|
def add_relationship_data(rel_serializer, rel_object)
|
|
106
106
|
rel_response_data = rel_serializer::ResponsePiece.new(rel_object, context, map, includes)
|
|
107
107
|
rel_uid = rel_response_data.uid
|
|
108
|
-
|
|
108
|
+
simple_uid = "#{rel_uid[:id]}-#{rel_uid[:type]}"
|
|
109
|
+
includes[simple_uid] ||= rel_response_data.to_h
|
|
109
110
|
rel_uid
|
|
110
111
|
end
|
|
111
112
|
|
|
@@ -122,40 +123,48 @@ class Jat
|
|
|
122
123
|
def get_links
|
|
123
124
|
jat_class
|
|
124
125
|
.object_links
|
|
125
|
-
.transform_values { |attr| attr.
|
|
126
|
+
.transform_values { |attr| attr.value(object, context) }
|
|
126
127
|
.tap(&:compact!)
|
|
127
128
|
end
|
|
128
129
|
|
|
129
130
|
def get_meta
|
|
130
131
|
jat_class
|
|
131
132
|
.added_object_meta
|
|
132
|
-
.transform_values { |attr| attr.
|
|
133
|
+
.transform_values { |attr| attr.value(object, context) }
|
|
133
134
|
.tap(&:compact!)
|
|
134
135
|
end
|
|
135
136
|
|
|
136
137
|
def get_relationship_links(rel_serializer, rel_object)
|
|
137
138
|
links = rel_serializer.relationship_links
|
|
138
|
-
return FROZEN_EMPTY_HASH
|
|
139
|
+
return FROZEN_EMPTY_HASH if links.empty?
|
|
139
140
|
|
|
140
141
|
context[:parent_object] = object
|
|
141
142
|
|
|
142
143
|
links
|
|
143
|
-
.transform_values { |attr| attr.
|
|
144
|
+
.transform_values { |attr| attr.value(rel_object, context) }
|
|
144
145
|
.tap(&:compact!)
|
|
145
146
|
.tap { context.delete(:parent_object) }
|
|
146
147
|
end
|
|
147
148
|
|
|
148
149
|
def get_relationship_meta(rel_serializer, rel_object)
|
|
149
150
|
meta = rel_serializer.added_relationship_meta
|
|
150
|
-
return FROZEN_EMPTY_HASH
|
|
151
|
+
return FROZEN_EMPTY_HASH if meta.empty?
|
|
151
152
|
|
|
152
153
|
context[:parent_object] = object
|
|
153
154
|
|
|
154
155
|
meta
|
|
155
|
-
.transform_values { |attr| attr.
|
|
156
|
+
.transform_values { |attr| attr.value(rel_object, context) }
|
|
156
157
|
.tap(&:compact!)
|
|
157
158
|
.tap { context.delete(:parent_object) }
|
|
158
159
|
end
|
|
160
|
+
|
|
161
|
+
def type
|
|
162
|
+
@type ||= jat_class.get_type
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def id
|
|
166
|
+
@id ||= jat_class.get_id.value(object, context)
|
|
167
|
+
end
|
|
159
168
|
end
|
|
160
169
|
|
|
161
170
|
extend ClassMethods
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Jat
|
|
4
|
+
module Plugins
|
|
5
|
+
module JsonApiActiverecord
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:json_api_activerecord
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.before_load(jat_class, **_opts)
|
|
11
|
+
return if jat_class.plugin_used?(:json_api)
|
|
12
|
+
raise Error, "Please load :json_api plugin first"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.load(jat_class, **opts)
|
|
16
|
+
jat_class.plugin :json_api_preloads, **opts
|
|
17
|
+
jat_class.plugin :base_activerecord_preloads, **opts
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_plugin(JsonApiActiverecord.plugin_name, JsonApiActiverecord)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
class Jat
|
|
4
4
|
module Plugins
|
|
5
5
|
module JsonApiLowerCamelCase
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:json_api_lower_camel_case
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
def self.before_load(jat_class, **_opts)
|
|
7
11
|
raise Error, "Please load :json_api plugin first" unless jat_class.plugin_used?(:json_api)
|
|
8
12
|
|
|
9
|
-
jat_class.plugin :
|
|
13
|
+
jat_class.plugin :base_lower_camel_case
|
|
10
14
|
end
|
|
11
15
|
|
|
12
16
|
def self.load(jat_class, **_opts)
|
|
@@ -25,6 +29,6 @@ class Jat
|
|
|
25
29
|
end
|
|
26
30
|
end
|
|
27
31
|
|
|
28
|
-
register_plugin(
|
|
32
|
+
register_plugin(JsonApiLowerCamelCase.plugin_name, JsonApiLowerCamelCase)
|
|
29
33
|
end
|
|
30
34
|
end
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
class Jat
|
|
4
4
|
module Plugins
|
|
5
5
|
module JsonApiMapsCache
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:json_api_maps_cache
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
def self.before_load(jat_class, **opts)
|
|
7
11
|
return if jat_class.plugin_used?(:json_api)
|
|
8
12
|
raise Error, "Please load :json_api plugin first"
|
|
@@ -49,6 +53,6 @@ class Jat
|
|
|
49
53
|
end
|
|
50
54
|
end
|
|
51
55
|
|
|
52
|
-
register_plugin(
|
|
56
|
+
register_plugin(JsonApiMapsCache.plugin_name, JsonApiMapsCache)
|
|
53
57
|
end
|
|
54
58
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "./lib/preloads"
|
|
4
|
+
|
|
5
|
+
class Jat
|
|
6
|
+
module Plugins
|
|
7
|
+
module JsonApiPreloads
|
|
8
|
+
def self.plugin_name
|
|
9
|
+
:json_api_preloads
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.before_load(jat_class, **opts)
|
|
13
|
+
raise Error, "Please load :json_api plugin first" unless jat_class.plugin_used?(:json_api)
|
|
14
|
+
|
|
15
|
+
jat_class.plugin :base_preloads, **opts
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.load(jat_class, **_opts)
|
|
19
|
+
jat_class.extend(ClassMethods)
|
|
20
|
+
jat_class.include(InstanceMethods)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module ClassMethods
|
|
24
|
+
def preloads(context = {})
|
|
25
|
+
new(context).preloads
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module InstanceMethods
|
|
30
|
+
def preloads
|
|
31
|
+
@preloads ||= Preloads.call(self)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
register_plugin(JsonApiPreloads.plugin_name, JsonApiPreloads)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -7,6 +7,10 @@ require_relative "./lib/validate_include_param"
|
|
|
7
7
|
class Jat
|
|
8
8
|
module Plugins
|
|
9
9
|
module JsonApiValidateParams
|
|
10
|
+
def self.plugin_name
|
|
11
|
+
:json_api_validate_params
|
|
12
|
+
end
|
|
13
|
+
|
|
10
14
|
def self.before_load(jat_class, **_opts)
|
|
11
15
|
return if jat_class.plugin_used?(:json_api)
|
|
12
16
|
raise Error, "Please load :json_api plugin first"
|
|
@@ -52,6 +56,6 @@ class Jat
|
|
|
52
56
|
end
|
|
53
57
|
end
|
|
54
58
|
|
|
55
|
-
register_plugin(
|
|
59
|
+
register_plugin(JsonApiValidateParams.plugin_name, JsonApiValidateParams)
|
|
56
60
|
end
|
|
57
61
|
end
|
|
File without changes
|
|
File without changes
|
|
@@ -22,9 +22,7 @@ class Jat
|
|
|
22
22
|
allowed_relationships = jat_class.attributes.each_value.select(&:relation?).map!(&:name)
|
|
23
23
|
allowed_relationships = "'#{allowed_relationships.join("', '")}'"
|
|
24
24
|
|
|
25
|
-
raise JsonApiParamsError,
|
|
26
|
-
"Type '#{type}' has no included '#{name}' relationship. " \
|
|
27
|
-
"Existing relationships are: #{allowed_relationships}"
|
|
25
|
+
raise JsonApiParamsError, "Type '#{type}' has no included '#{name}' relationship. Existing relationships are: #{allowed_relationships}"
|
|
28
26
|
end
|
|
29
27
|
end
|
|
30
28
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Jat
|
|
4
|
+
module Plugins
|
|
5
|
+
module LowerCamelCase
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:lower_camel_case
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.load(jat_class, **opts)
|
|
11
|
+
if jat_class.plugin_used?(:json_api)
|
|
12
|
+
jat_class.plugin :json_api_lower_camel_case, **opts
|
|
13
|
+
elsif jat_class.plugin_used?(:simple_api)
|
|
14
|
+
jat_class.plugin :simple_api_lower_camel_case, **opts
|
|
15
|
+
else
|
|
16
|
+
raise Error, "Please load :json_api or :simple_api plugin first"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_plugin(LowerCamelCase.plugin_name, LowerCamelCase)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Jat
|
|
4
|
+
module Plugins
|
|
5
|
+
module MapsCache
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:maps_cache
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.load(jat_class, **opts)
|
|
11
|
+
if jat_class.plugin_used?(:json_api)
|
|
12
|
+
jat_class.plugin :json_api_maps_cache, **opts
|
|
13
|
+
elsif jat_class.plugin_used?(:simple_api)
|
|
14
|
+
jat_class.plugin :simple_api_maps_cache, **opts
|
|
15
|
+
else
|
|
16
|
+
raise Error, "Please load :json_api or :simple_api plugin first"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_plugin(MapsCache.plugin_name, MapsCache)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Jat
|
|
4
|
+
module Plugins
|
|
5
|
+
module Preloads
|
|
6
|
+
def self.plugin_name
|
|
7
|
+
:preloads
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.load(jat_class, **opts)
|
|
11
|
+
if jat_class.plugin_used?(:json_api)
|
|
12
|
+
jat_class.plugin :json_api_preloads, **opts
|
|
13
|
+
elsif jat_class.plugin_used?(:simple_api)
|
|
14
|
+
jat_class.plugin :simple_api_preloads, **opts
|
|
15
|
+
else
|
|
16
|
+
raise Error, "Please load :json_api or :simple_api plugin first"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
register_plugin(Preloads.plugin_name, Preloads)
|
|
22
|
+
end
|
|
23
|
+
end
|