jat 0.0.3 → 0.0.5
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 +36 -4
- data/lib/jat/plugins/_activerecord_preloads/_activerecord_preloads.rb +7 -3
- data/lib/jat/plugins/_activerecord_preloads/lib/preloader.rb +7 -13
- data/lib/jat/plugins/_lower_camel_case/_lower_camel_case.rb +32 -0
- data/lib/jat/plugins/_preloads/_preloads.rb +8 -2
- data/lib/jat/plugins/cache/cache.rb +9 -5
- data/lib/jat/plugins/json_api/json_api.rb +145 -105
- data/lib/jat/plugins/json_api/lib/fields_param_parser.rb +40 -0
- data/lib/jat/plugins/json_api/lib/include_param_parser.rb +84 -0
- data/lib/jat/plugins/json_api/lib/map.rb +92 -27
- data/lib/jat/plugins/json_api/lib/params/fields/validate.rb +8 -5
- data/lib/jat/plugins/json_api/lib/response.rb +84 -196
- data/lib/jat/plugins/json_api/lib/response_piece.rb +166 -0
- data/lib/jat/plugins/json_api_activerecord/json_api_activerecord.rb +31 -0
- data/lib/jat/plugins/{_json_api_activerecord → json_api_activerecord}/lib/preloads.rb +16 -24
- data/lib/jat/plugins/json_api_lower_camel_case/json_api_lower_camel_case.rb +30 -0
- data/lib/jat/plugins/json_api_maps_cache/json_api_maps_cache.rb +54 -0
- data/lib/jat/plugins/json_api_validate_params/json_api_validate_params.rb +57 -0
- data/lib/jat/plugins/json_api_validate_params/lib/params_error.rb +6 -0
- data/lib/jat/plugins/json_api_validate_params/lib/validate_fields_param.rb +59 -0
- data/lib/jat/plugins/json_api_validate_params/lib/validate_include_param.rb +33 -0
- data/lib/jat/plugins/simple_api/lib/fields_param_parser.rb +97 -0
- data/lib/jat/plugins/simple_api/lib/map.rb +80 -10
- data/lib/jat/plugins/simple_api/lib/response.rb +78 -89
- data/lib/jat/plugins/simple_api/lib/response_piece.rb +84 -0
- data/lib/jat/plugins/simple_api/simple_api.rb +83 -24
- data/lib/jat/plugins/simple_api_activerecord/lib/preloads.rb +55 -0
- data/lib/jat/plugins/simple_api_activerecord/simple_api_activerecord.rb +31 -0
- data/lib/jat/plugins/simple_api_lower_camel_case/simple_api_lower_camel_case.rb +30 -0
- data/lib/jat/plugins/simple_api_maps_cache/simple_api_maps_cache.rb +48 -0
- data/lib/jat/plugins/simple_api_validate_params/lib/fields_error.rb +6 -0
- data/lib/jat/plugins/simple_api_validate_params/lib/validate_fields_param.rb +45 -0
- data/lib/jat/plugins/simple_api_validate_params/simple_api_validate_params.rb +45 -0
- data/lib/jat/plugins/to_str/to_str.rb +10 -4
- data/lib/jat/plugins.rb +3 -16
- data/lib/jat.rb +28 -30
- data/test/lib/jat/attribute_test.rb +15 -5
- data/test/lib/jat/plugins/_activerecord_preloads/_activerecord_preloads_test.rb +34 -15
- data/test/lib/jat/plugins/_activerecord_preloads/lib/preloader_test.rb +10 -24
- data/test/lib/jat/plugins/_camel_lower/_camel_lower_test.rb +26 -0
- data/test/lib/jat/plugins/_preloads/lib/format_user_preloads_test.rb +1 -1
- data/test/lib/jat/plugins/_preloads/lib/preloads_with_path_test.rb +1 -1
- data/test/lib/jat/plugins/cache/cache_test.rb +11 -11
- data/test/lib/jat/plugins/json_api/json_api_test.rb +63 -47
- data/test/lib/jat/plugins/json_api/lib/{params/fields_test.rb → fields_param_parser_test.rb} +7 -6
- data/test/lib/jat/plugins/json_api/lib/{params/include_test.rb → include_param_parser_test.rb} +4 -4
- data/test/lib/jat/plugins/json_api/lib/map_test.rb +150 -79
- data/test/lib/jat/plugins/json_api/lib/response_test.rb +32 -32
- data/test/lib/jat/plugins/{_json_api_activerecord/_json_api_activerecord_test.rb → json_api_activerecord/json_api_activerecord_test.rb} +14 -5
- data/test/lib/jat/plugins/{_json_api_activerecord → json_api_activerecord}/lib/preloads_test.rb +11 -10
- data/test/lib/jat/plugins/json_api_camel_lower/json_api_camel_lower_test.rb +79 -0
- data/test/lib/jat/plugins/json_api_maps_cache/json_api_maps_cache_test.rb +107 -0
- data/test/lib/jat/plugins/json_api_validate_params/json_api_validate_params_test.rb +84 -0
- data/test/lib/jat/plugins/simple_api/lib/{params/parse_test.rb → fields_param_parser_test.rb} +10 -4
- data/test/lib/jat/plugins/simple_api/lib/map_test.rb +111 -34
- data/test/lib/jat/plugins/simple_api/lib/response_test.rb +80 -74
- data/test/lib/jat/plugins/simple_api/simple_api_test.rb +91 -25
- data/test/lib/jat/plugins/simple_api_activerecord/lib/preloads_test.rb +135 -0
- data/test/lib/jat/plugins/simple_api_activerecord/simple_api_activerecord_test.rb +38 -0
- data/test/lib/jat/plugins/simple_api_camel_lower/simple_api_camel_lower_test.rb +48 -0
- data/test/lib/jat/plugins/simple_api_maps_cache/simple_api_maps_cache_test.rb +95 -0
- data/test/lib/jat/plugins/simple_api_validate_params/simple_api_validate_params_test.rb +89 -0
- data/test/lib/jat/plugins/to_str/to_str_test.rb +3 -3
- data/test/lib/jat_test.rb +47 -24
- data/test/lib/plugin_test.rb +3 -3
- data/test/test_helper.rb +0 -3
- data/test/test_plugin.rb +9 -12
- metadata +60 -71
- data/CHANGELOG.md +0 -7
- data/README.md +0 -21
- data/jat.gemspec +0 -37
- data/lib/jat/plugins/_json_api_activerecord/_json_api_activerecord.rb +0 -22
- data/lib/jat/plugins/camel_lower/camel_lower.rb +0 -18
- data/lib/jat/plugins/json_api/lib/construct_traversal_map.rb +0 -91
- data/lib/jat/plugins/json_api/lib/presenters/document_links_presenter.rb +0 -48
- data/lib/jat/plugins/json_api/lib/presenters/document_meta_presenter.rb +0 -48
- data/lib/jat/plugins/json_api/lib/presenters/jsonapi_presenter.rb +0 -48
- data/lib/jat/plugins/json_api/lib/presenters/links_presenter.rb +0 -48
- data/lib/jat/plugins/json_api/lib/presenters/meta_presenter.rb +0 -48
- data/lib/jat/plugins/json_api/lib/presenters/relationship_links_presenter.rb +0 -53
- data/lib/jat/plugins/json_api/lib/presenters/relationship_meta_presenter.rb +0 -53
- data/lib/jat/plugins/json_api/lib/traversal_map.rb +0 -34
- data/lib/jat/plugins/simple_api/lib/construct_traversal_map.rb +0 -45
- data/lib/jat/plugins/simple_api/lib/params/parse.rb +0 -68
- data/lib/jat/presenter.rb +0 -51
- data/test/lib/jat/plugins/camel_lower/camel_lower_test.rb +0 -78
- data/test/lib/jat/plugins/json_api/lib/construct_traversal_map_test.rb +0 -119
- data/test/lib/jat/plugins/json_api/lib/params/fields/parse_test.rb +0 -24
- data/test/lib/jat/plugins/json_api/lib/params/fields/validate_test.rb +0 -47
- data/test/lib/jat/plugins/json_api/lib/params/include/parse_test.rb +0 -46
- data/test/lib/jat/plugins/json_api/lib/params/include/validate_test.rb +0 -51
- data/test/lib/jat/plugins/json_api/lib/presenters/document_links_presenter_test.rb +0 -69
- data/test/lib/jat/plugins/json_api/lib/presenters/document_meta_presenter_test.rb +0 -69
- data/test/lib/jat/plugins/json_api/lib/presenters/jsonapi_presenter_test.rb +0 -69
- data/test/lib/jat/plugins/json_api/lib/presenters/links_presenter_test.rb +0 -69
- data/test/lib/jat/plugins/json_api/lib/presenters/meta_presenter_test.rb +0 -69
- data/test/lib/jat/plugins/json_api/lib/presenters/relationship_links_presenter_test.rb +0 -75
- data/test/lib/jat/plugins/json_api/lib/presenters/relationship_meta_presenter_test.rb +0 -75
- data/test/lib/jat/plugins/json_api/lib/traversal_map_test.rb +0 -58
- data/test/lib/jat/plugins/simple_api/lib/construct_traversal_map_test.rb +0 -100
- data/test/lib/jat/presenter_test.rb +0 -61
@@ -7,77 +7,93 @@ describe "Jat::Plugins::JsonApi" do
|
|
7
7
|
new_class = Class.new(Jat)
|
8
8
|
new_class.plugin(plugin)
|
9
9
|
new_class.type :jat
|
10
|
-
new_class.
|
10
|
+
new_class.id key: :itself
|
11
11
|
new_class
|
12
12
|
end
|
13
13
|
|
14
|
-
let(:plugin) { Jat::Plugins.
|
14
|
+
let(:plugin) { Jat::Plugins.find_plugin(:json_api) }
|
15
|
+
|
16
|
+
describe ".before_load" do
|
17
|
+
it "checks some response plugin was already loaded" do
|
18
|
+
jat_class = Class.new(Jat)
|
19
|
+
jat_class.config[:response_plugin_loaded] = :simple_api
|
20
|
+
error = assert_raises(Jat::Error) { jat_class.plugin(:json_api) }
|
21
|
+
assert_equal "Response plugin `simple_api` was already loaded before", error.message
|
22
|
+
end
|
23
|
+
end
|
15
24
|
|
16
25
|
describe ".after_load" do
|
17
|
-
it "loads
|
26
|
+
it "loads json_api_activerecord plugin if activerecord option provided" do
|
18
27
|
jat_class = Class.new(Jat)
|
19
|
-
jat_class.expects(:plugin).with(:
|
28
|
+
jat_class.expects(:plugin).with(:json_api_activerecord, activerecord: true)
|
20
29
|
|
21
|
-
|
30
|
+
plugin.load(jat_class)
|
31
|
+
plugin.after_load(jat_class, activerecord: true)
|
22
32
|
end
|
23
33
|
|
24
|
-
it "
|
34
|
+
it "adds config variable with name of response plugin that was loaded" do
|
25
35
|
jat_class = Class.new(Jat)
|
26
|
-
|
27
|
-
|
28
|
-
assert_equal jat_class
|
29
|
-
assert_equal jat_class::LinksPresenter.jat_class, jat_class
|
30
|
-
assert_equal jat_class::DocumentLinksPresenter.jat_class, jat_class
|
31
|
-
assert_equal jat_class::RelationshipLinksPresenter.jat_class, jat_class
|
32
|
-
assert_equal jat_class::MetaPresenter.jat_class, jat_class
|
33
|
-
assert_equal jat_class::DocumentMetaPresenter.jat_class, jat_class
|
34
|
-
assert_equal jat_class::RelationshipMetaPresenter.jat_class, jat_class
|
36
|
+
jat_class.plugin(:json_api)
|
37
|
+
|
38
|
+
assert_equal(:json_api, jat_class.config[:response_plugin_loaded])
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
38
42
|
describe "InstanceMethods" do
|
39
43
|
let(:jat) do
|
40
|
-
jat_class.new
|
44
|
+
jat_class.new
|
41
45
|
end
|
42
46
|
|
43
47
|
describe "#to_h" do
|
44
48
|
it "returns response in json-api format" do
|
45
49
|
expected_result = {data: {type: :jat, id: "JAT"}}
|
46
|
-
assert_equal expected_result, jat.to_h
|
50
|
+
assert_equal expected_result, jat.to_h("JAT")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#map" do
|
55
|
+
it "returns map for provided context" do
|
56
|
+
jat_class::Map.expects(:call).with("CONTEXT").returns "MAP"
|
57
|
+
assert_equal "MAP", jat_class.map("CONTEXT")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#map_full" do
|
62
|
+
it "returns memorized map with all fields exposed" do
|
63
|
+
jat_class::Map.expects(:call).with(exposed: :all).returns "MAP"
|
64
|
+
assert_equal "MAP", jat_class.map_full
|
65
|
+
assert_same jat_class.map_full, jat_class.map_full
|
47
66
|
end
|
48
67
|
end
|
49
68
|
|
50
|
-
describe "#
|
51
|
-
it "returns memorized
|
52
|
-
|
53
|
-
|
69
|
+
describe "#map_exposed" do
|
70
|
+
it "returns memorized map with exposed by default fields" do
|
71
|
+
jat_class::Map.expects(:call).with(exposed: :default).returns "MAP"
|
72
|
+
assert_equal "MAP", jat_class.map_exposed
|
73
|
+
assert_same jat_class.map_exposed, jat_class.map_exposed
|
54
74
|
end
|
55
75
|
end
|
56
76
|
end
|
57
77
|
|
58
78
|
describe "ClassMethods" do
|
59
|
-
describe ".
|
60
|
-
it "adds new
|
61
|
-
jat_class.
|
62
|
-
|
63
|
-
atribute = jat_class.attributes[:foo]
|
64
|
-
assert_equal jat_class, atribute.serializer
|
65
|
-
assert_equal true, atribute.exposed?
|
66
|
-
assert_equal "block", jat_class::Presenter.new(nil, nil).foo
|
79
|
+
describe ".id" do
|
80
|
+
it "adds new `:id`" do
|
81
|
+
jat_class.id(key: :uuid)
|
82
|
+
assert_equal jat_class.get_id.params, {name: :id, opts: {key: :uuid}, block: nil}
|
67
83
|
end
|
68
84
|
end
|
69
85
|
|
70
86
|
describe ".inherited" do
|
71
87
|
it "inherits type" do
|
72
88
|
child = Class.new(jat_class)
|
73
|
-
assert_equal :jat, child.
|
89
|
+
assert_equal :jat, child.get_type
|
74
90
|
end
|
75
91
|
|
76
92
|
it "inherits `jsonapi` data" do
|
77
93
|
jat_class.jsonapi(:version) { "1.0" }
|
78
94
|
|
79
95
|
child = Class.new(jat_class)
|
80
|
-
assert_equal("1.0", child.jsonapi_data[:version].
|
96
|
+
assert_equal("1.0", child.jsonapi_data[:version].value(nil, nil))
|
81
97
|
end
|
82
98
|
|
83
99
|
it "inherits `object_links`, `relationship_links`, `document_links`" do
|
@@ -86,9 +102,9 @@ describe "Jat::Plugins::JsonApi" do
|
|
86
102
|
jat_class.document_link(:last) { "/articles/3" }
|
87
103
|
child = Class.new(jat_class)
|
88
104
|
|
89
|
-
assert_equal("/articles/1", child.object_links[:self].
|
90
|
-
assert_equal("/articles/2", child.relationship_links[:related].
|
91
|
-
assert_equal("/articles/3", child.document_links[:last].
|
105
|
+
assert_equal("/articles/1", child.object_links[:self].value(nil, nil))
|
106
|
+
assert_equal("/articles/2", child.relationship_links[:related].value(nil, nil))
|
107
|
+
assert_equal("/articles/3", child.document_links[:last].value(nil, nil))
|
92
108
|
end
|
93
109
|
|
94
110
|
it "does not change parents links when children links are changed" do
|
@@ -101,9 +117,9 @@ describe "Jat::Plugins::JsonApi" do
|
|
101
117
|
child.relationship_links.delete(:related)
|
102
118
|
child.document_links.delete(:last)
|
103
119
|
|
104
|
-
assert_equal("/articles/1", jat_class.object_links[:self].
|
105
|
-
assert_equal("/articles/2", jat_class.relationship_links[:related].
|
106
|
-
assert_equal("/articles/3", jat_class.document_links[:last].
|
120
|
+
assert_equal("/articles/1", jat_class.object_links[:self].value(nil, nil))
|
121
|
+
assert_equal("/articles/2", jat_class.relationship_links[:related].value(nil, nil))
|
122
|
+
assert_equal("/articles/3", jat_class.document_links[:last].value(nil, nil))
|
107
123
|
end
|
108
124
|
|
109
125
|
it "inherits `object_meta`, `relationship_meta`, `document_meta`" do
|
@@ -112,9 +128,9 @@ describe "Jat::Plugins::JsonApi" do
|
|
112
128
|
jat_class.document_meta(:last) { "foo/3" }
|
113
129
|
child = Class.new(jat_class)
|
114
130
|
|
115
|
-
assert_equal("foo/1", child.added_object_meta[:self].
|
116
|
-
assert_equal("foo/2", child.added_relationship_meta[:related].
|
117
|
-
assert_equal("foo/3", child.added_document_meta[:last].
|
131
|
+
assert_equal("foo/1", child.added_object_meta[:self].value(nil, nil))
|
132
|
+
assert_equal("foo/2", child.added_relationship_meta[:related].value(nil, nil))
|
133
|
+
assert_equal("foo/3", child.added_document_meta[:last].value(nil, nil))
|
118
134
|
end
|
119
135
|
|
120
136
|
it "does not change parents meta when children meta changed" do
|
@@ -127,27 +143,27 @@ describe "Jat::Plugins::JsonApi" do
|
|
127
143
|
child.added_relationship_meta.delete(:related)
|
128
144
|
child.added_document_meta.delete(:last)
|
129
145
|
|
130
|
-
assert_equal("foo/1", jat_class.added_object_meta[:self].
|
131
|
-
assert_equal("foo/2", jat_class.added_relationship_meta[:related].
|
132
|
-
assert_equal("foo/3", jat_class.added_document_meta[:last].
|
146
|
+
assert_equal("foo/1", jat_class.added_object_meta[:self].value(nil, nil))
|
147
|
+
assert_equal("foo/2", jat_class.added_relationship_meta[:related].value(nil, nil))
|
148
|
+
assert_equal("foo/3", jat_class.added_document_meta[:last].value(nil, nil))
|
133
149
|
end
|
134
150
|
end
|
135
151
|
|
136
|
-
describe ".type" do
|
152
|
+
describe ".type, .get_type" do
|
137
153
|
it "does not allows to ask for type before type is defined" do
|
138
154
|
new_class = Class.new(Jat) { plugin(:json_api) }
|
139
155
|
|
140
|
-
error = assert_raises(Jat::Error) { new_class.
|
156
|
+
error = assert_raises(Jat::Error) { new_class.get_type }
|
141
157
|
assert_equal "#{new_class} has no defined type", error.message
|
142
158
|
end
|
143
159
|
|
144
160
|
it "saves and returns current type" do
|
145
|
-
assert_equal :jat, jat_class.
|
161
|
+
assert_equal :jat, jat_class.get_type
|
146
162
|
end
|
147
163
|
|
148
164
|
it "symbolizes type" do
|
149
165
|
jat_class.type "users"
|
150
|
-
assert_equal :users, jat_class.
|
166
|
+
assert_equal :users, jat_class.get_type
|
151
167
|
end
|
152
168
|
end
|
153
169
|
end
|
data/test/lib/jat/plugins/json_api/lib/{params/fields_test.rb → fields_param_parser_test.rb}
RENAMED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
|
5
|
-
describe "Jat::Plugins::JsonApi::
|
6
|
-
before { Jat::Plugins.
|
5
|
+
describe "Jat::Plugins::JsonApi::FieldsParamParser" do
|
6
|
+
before { Jat::Plugins.find_plugin(:json_api) }
|
7
7
|
|
8
8
|
let(:jat_class) do
|
9
9
|
Class.new(Jat) do
|
@@ -16,22 +16,23 @@ describe "Jat::Plugins::JsonApi::Params::Fields" do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
let(:described_class) {
|
19
|
+
let(:described_class) { jat_class::FieldsParamParser }
|
20
20
|
|
21
21
|
it "returns empty hash when parameters not provided" do
|
22
|
-
result = described_class.
|
22
|
+
result = described_class.parse(nil)
|
23
23
|
|
24
24
|
assert_equal({}, result)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "returns parsed attributes" do
|
28
|
-
result = described_class.
|
28
|
+
result = described_class.parse(a: "a1,a2")
|
29
29
|
|
30
30
|
assert_equal({a: %i[a1 a2]}, result)
|
31
31
|
end
|
32
32
|
|
33
33
|
it "validates provided attributes" do
|
34
|
-
|
34
|
+
jat_class.plugin :json_api_validate_params
|
35
|
+
error = assert_raises(Jat::Error) { described_class.parse(a: "a1,a2,a3,a4") }
|
35
36
|
assert_match(/a4/, error.message)
|
36
37
|
end
|
37
38
|
end
|
data/test/lib/jat/plugins/json_api/lib/{params/include_test.rb → include_param_parser_test.rb}
RENAMED
@@ -3,7 +3,7 @@
|
|
3
3
|
require "test_helper"
|
4
4
|
|
5
5
|
describe "Jat::Plugins::JsonApi::Params::Include" do
|
6
|
-
before { Jat::Plugins.
|
6
|
+
before { Jat::Plugins.find_plugin(:json_api) }
|
7
7
|
|
8
8
|
let(:base_class) { Class.new(Jat) { plugin :json_api } }
|
9
9
|
let(:a_serializer) { Class.new(base_class) }
|
@@ -27,15 +27,15 @@ describe "Jat::Plugins::JsonApi::Params::Include" do
|
|
27
27
|
ser.relationship :b4, serializer: a_serializer
|
28
28
|
end
|
29
29
|
|
30
|
-
let(:described_class) {
|
30
|
+
let(:described_class) { a_serializer::IncludeParamParser }
|
31
31
|
|
32
32
|
it "returns empty hash when param not provided" do
|
33
|
-
result = described_class.
|
33
|
+
result = described_class.parse(nil)
|
34
34
|
assert_equal({}, result)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "returns typed keys" do
|
38
|
-
result = described_class.
|
38
|
+
result = described_class.parse("a2.b2,a2.b3,a3.b2.a5,a4")
|
39
39
|
assert_equal({a: %i[a2 a3 a5 a4], b: %i[b2 b3]}, result)
|
40
40
|
end
|
41
41
|
end
|
@@ -3,115 +3,186 @@
|
|
3
3
|
require "test_helper"
|
4
4
|
|
5
5
|
describe "Jat::Plugins::JsonApi::Map" do
|
6
|
-
|
6
|
+
before { Jat::Plugins.find_plugin(:json_api) }
|
7
7
|
|
8
|
-
let(:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
let(:jat) { jat_class.new(nil, params: {fields: param_fields, include: param_includes}) }
|
8
|
+
let(:described_class) { a::Map }
|
9
|
+
let(:base_class) { Class.new(Jat) { plugin :json_api } }
|
10
|
+
|
11
|
+
let(:a) do
|
12
|
+
ser = Class.new(base_class)
|
13
|
+
ser.type :a
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
ser.attribute :a1
|
16
|
+
ser.attribute :a2
|
17
|
+
ser.attribute :a3, exposed: false
|
19
18
|
|
20
|
-
|
21
|
-
|
19
|
+
ser.relationship :b, serializer: b, exposed: true
|
20
|
+
ser.relationship :c, serializer: c
|
21
|
+
ser.relationship :d, serializer: d
|
22
|
+
ser
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
let(:b) do
|
26
|
+
ser = Class.new(base_class)
|
27
|
+
ser.type :b
|
28
|
+
ser.attribute :b1
|
29
|
+
ser.attribute :b2
|
30
|
+
ser.attribute :b3, exposed: false
|
27
31
|
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
ser.relationship :c, serializer: c
|
33
|
+
ser.relationship :d, serializer: d
|
34
|
+
ser
|
31
35
|
end
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
let(:c) do
|
38
|
+
ser = Class.new(base_class)
|
39
|
+
ser.type :c
|
40
|
+
ser.attribute :c1
|
41
|
+
ser.attribute :c2
|
42
|
+
ser.attribute :c3, exposed: false
|
43
|
+
ser
|
44
|
+
end
|
36
45
|
|
37
|
-
|
38
|
-
|
39
|
-
|
46
|
+
let(:d) do
|
47
|
+
ser = Class.new(base_class)
|
48
|
+
ser.type :d
|
49
|
+
ser.attribute :d1
|
50
|
+
ser.attribute :d2
|
51
|
+
ser.attribute :d3, exposed: false
|
52
|
+
ser
|
53
|
+
end
|
40
54
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
55
|
+
describe "with default :exposed option" do
|
56
|
+
it "returns exposed by default attributes" do
|
57
|
+
result = described_class.call(exposed: :default)
|
58
|
+
expected_result = {
|
59
|
+
a: {serializer: a, attributes: %i[a1 a2], relationships: %i[b]},
|
60
|
+
b: {serializer: b, attributes: %i[b1 b2], relationships: %i[]}
|
61
|
+
}
|
45
62
|
|
46
|
-
|
47
|
-
.expects(:new)
|
48
|
-
.with(jat_class, :manual, manually_exposed: "PARSED_FIELDS")
|
49
|
-
.returns(constructor)
|
63
|
+
assert_equal expected_result, result
|
50
64
|
end
|
51
65
|
|
52
|
-
it "
|
53
|
-
|
54
|
-
|
55
|
-
|
66
|
+
it "returns exposed by default attributes when no :exposed param provided" do
|
67
|
+
result = described_class.call({})
|
68
|
+
expected_result = {
|
69
|
+
a: {serializer: a, attributes: %i[a1 a2], relationships: %i[b]},
|
70
|
+
b: {serializer: b, attributes: %i[b1 b2], relationships: %i[]}
|
71
|
+
}
|
56
72
|
|
57
|
-
|
58
|
-
|
59
|
-
let(:param_fields) { nil }
|
73
|
+
assert_equal expected_result, result
|
74
|
+
end
|
60
75
|
|
61
|
-
|
62
|
-
|
63
|
-
|
76
|
+
it "returns additionally included fields specified in :includes option" do
|
77
|
+
includes = "c,b.d"
|
78
|
+
result = described_class.call(include: includes)
|
79
|
+
expected_result = {
|
80
|
+
a: {serializer: a, attributes: %i[a1 a2], relationships: %i[b c]},
|
81
|
+
b: {serializer: b, attributes: %i[b1 b2], relationships: %i[d]},
|
82
|
+
c: {serializer: c, attributes: %i[c1 c2], relationships: %i[]},
|
83
|
+
d: {serializer: d, attributes: %i[d1 d2], relationships: %i[]}
|
84
|
+
}
|
85
|
+
|
86
|
+
assert_equal expected_result, result
|
87
|
+
end
|
64
88
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
89
|
+
it "returns fields specified in :fields option (only specified fields for specified type)" do
|
90
|
+
fields = {b: "b1,d"}
|
91
|
+
result = described_class.call(fields: fields)
|
92
|
+
expected_result = {
|
93
|
+
a: {serializer: a, attributes: %i[a1 a2], relationships: %i[b]},
|
94
|
+
b: {serializer: b, attributes: %i[b1], relationships: %i[d]},
|
95
|
+
d: {serializer: d, attributes: %i[d1 d2], relationships: %i[]}
|
96
|
+
}
|
69
97
|
|
70
|
-
|
71
|
-
.expects(:new)
|
72
|
-
.with(jat_class, :exposed, manually_exposed: "PARSED_INCLUDES")
|
73
|
-
.returns(constructor)
|
98
|
+
assert_equal expected_result, result
|
74
99
|
end
|
75
100
|
|
76
|
-
it "
|
77
|
-
|
101
|
+
it "returns fields specified in :includes and :fields options" do
|
102
|
+
includes = "c"
|
103
|
+
fields = {c: "c1"}
|
104
|
+
result = described_class.call(include: includes, fields: fields)
|
105
|
+
expected_result = {
|
106
|
+
a: {serializer: a, attributes: %i[a1 a2], relationships: %i[b c]},
|
107
|
+
b: {serializer: b, attributes: %i[b1 b2], relationships: %i[]},
|
108
|
+
c: {serializer: c, attributes: %i[c1], relationships: %i[]}
|
109
|
+
}
|
110
|
+
|
111
|
+
assert_equal expected_result, result
|
78
112
|
end
|
79
113
|
end
|
80
114
|
|
81
|
-
describe "
|
82
|
-
|
83
|
-
|
115
|
+
describe "with exposed: :none option" do
|
116
|
+
it "returns no attributes" do
|
117
|
+
result = described_class.call(exposed: :none)
|
118
|
+
expected_result = {
|
119
|
+
a: {serializer: a, attributes: %i[], relationships: %i[]}
|
120
|
+
}
|
121
|
+
|
122
|
+
assert_equal expected_result, result
|
123
|
+
end
|
124
|
+
|
125
|
+
it "returns additionally included fields specified in :includes option" do
|
126
|
+
includes = "b.c"
|
127
|
+
result = described_class.call(exposed: :none, include: includes)
|
128
|
+
expected_result = {
|
129
|
+
a: {serializer: a, attributes: %i[], relationships: %i[b]},
|
130
|
+
b: {serializer: b, attributes: %i[], relationships: %i[c]},
|
131
|
+
c: {serializer: c, attributes: %i[], relationships: %i[]}
|
132
|
+
}
|
84
133
|
|
85
|
-
|
86
|
-
|
87
|
-
constructor1.expects(:to_h).returns(fields_map)
|
134
|
+
assert_equal expected_result, result
|
135
|
+
end
|
88
136
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
137
|
+
it "returns fields specified in :fields option (only specified fields for specified type)" do
|
138
|
+
fields = {a: "a1,b", b: "b1,d"}
|
139
|
+
result = described_class.call(exposed: :none, fields: fields)
|
140
|
+
expected_result = {
|
141
|
+
a: {serializer: a, attributes: %i[a1], relationships: %i[b]},
|
142
|
+
b: {serializer: b, attributes: %i[b1], relationships: %i[d]},
|
143
|
+
d: {serializer: d, attributes: %i[], relationships: %i[]}
|
144
|
+
}
|
93
145
|
|
94
|
-
|
95
|
-
|
96
|
-
.with(jat_class, :manual, manually_exposed: "PARSED_FIELDS")
|
97
|
-
.returns(constructor1)
|
146
|
+
assert_equal expected_result, result
|
147
|
+
end
|
98
148
|
|
99
|
-
|
100
|
-
|
149
|
+
it "returns fields specified in :includes and :fields options" do
|
150
|
+
includes = "c"
|
151
|
+
fields = {c: "c1"}
|
152
|
+
result = described_class.call(exposed: :none, include: includes, fields: fields)
|
153
|
+
expected_result = {
|
154
|
+
a: {serializer: a, attributes: %i[], relationships: %i[c]},
|
155
|
+
c: {serializer: c, attributes: %i[c1], relationships: %i[]}
|
156
|
+
}
|
101
157
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
.returns("PARSED_INCLUDES")
|
158
|
+
assert_equal expected_result, result
|
159
|
+
end
|
160
|
+
end
|
106
161
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
162
|
+
describe "with exposed: :all option" do
|
163
|
+
it "returns all attributes" do
|
164
|
+
result = described_class.call(exposed: :all)
|
165
|
+
expected_result = {
|
166
|
+
a: {serializer: a, attributes: %i[a1 a2 a3], relationships: %i[b c d]},
|
167
|
+
b: {serializer: b, attributes: %i[b1 b2 b3], relationships: %i[c d]},
|
168
|
+
c: {serializer: c, attributes: %i[c1 c2 c3], relationships: %i[]},
|
169
|
+
d: {serializer: d, attributes: %i[d1 d2 d3], relationships: %i[]}
|
170
|
+
}
|
171
|
+
|
172
|
+
assert_equal expected_result, result
|
111
173
|
end
|
112
174
|
|
113
|
-
it "
|
114
|
-
|
175
|
+
it "returns only specified fields for specified fields types" do
|
176
|
+
fields = {b: "b1", c: "c2"}
|
177
|
+
result = described_class.call(exposed: :all, fields: fields)
|
178
|
+
expected_result = {
|
179
|
+
a: {serializer: a, attributes: %i[a1 a2 a3], relationships: %i[b c d]},
|
180
|
+
b: {serializer: b, attributes: %i[b1], relationships: %i[]},
|
181
|
+
c: {serializer: c, attributes: %i[c2], relationships: %i[]},
|
182
|
+
d: {serializer: d, attributes: %i[d1 d2 d3], relationships: %i[]}
|
183
|
+
}
|
184
|
+
|
185
|
+
assert_equal expected_result, result
|
115
186
|
end
|
116
187
|
end
|
117
188
|
end
|