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
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
describe "Jat::Plugins::SimpleApiActiverecord" do
|
6
|
+
before do
|
7
|
+
@plugin = Jat::Plugins.find_plugin(:simple_api_activerecord)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "checks simple_api plugin loaded before" do
|
11
|
+
jat_class = Class.new(Jat)
|
12
|
+
error = assert_raises(Jat::Error) { jat_class.plugin @plugin }
|
13
|
+
assert_match(/simple_api/, error.message)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "loads other plugins in after_load" do
|
17
|
+
jat_class = Class.new(Jat)
|
18
|
+
jat_class.plugin :simple_api
|
19
|
+
|
20
|
+
jat_class.expects(:plugin).with(:_preloads, foo: :bar)
|
21
|
+
jat_class.expects(:plugin).with(:_activerecord_preloads, foo: :bar)
|
22
|
+
|
23
|
+
@plugin.after_load(jat_class, foo: :bar)
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "InstanceMethods" do
|
27
|
+
it "add .preloads method as a delegator to #{@plugin}::Preloads" do
|
28
|
+
jat_class = Class.new(Jat)
|
29
|
+
jat_class.plugin :simple_api
|
30
|
+
jat_class.plugin @plugin
|
31
|
+
jat = jat_class.allocate
|
32
|
+
|
33
|
+
@plugin::Preloads.expects(:call).with(jat).returns("RES")
|
34
|
+
|
35
|
+
assert_equal "RES", jat.preloads
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
describe "Jat::Plugins::SimpleApiLowerCamelCase" do
|
6
|
+
let(:jat_class) do
|
7
|
+
new_class = Class.new(Jat)
|
8
|
+
new_class.plugin(:simple_api)
|
9
|
+
new_class.plugin(:simple_api_lower_camel_case)
|
10
|
+
new_class
|
11
|
+
end
|
12
|
+
|
13
|
+
it "loads _lower_camel_case plugin" do
|
14
|
+
assert jat_class.plugin_used?(:_lower_camel_case)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns attributes in lowerCamelCase case" do
|
18
|
+
jat_class.attribute(:foo_bar) { 1 }
|
19
|
+
|
20
|
+
response = jat_class.to_h(true)
|
21
|
+
assert_equal({fooBar: 1}, response)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "accepts fields in lowerCamelCase format" do
|
25
|
+
jat_class.attribute(:foo_bar, exposed: false) { 1 }
|
26
|
+
|
27
|
+
response = jat_class.to_h(true, fields: "fooBar")
|
28
|
+
assert_equal({fooBar: 1}, response)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns meta keys in lowerCamelCase format" do
|
32
|
+
jat_class.meta(:user_agent) { "Firefox" }
|
33
|
+
|
34
|
+
response = jat_class.to_h(nil)
|
35
|
+
assert_equal({meta: {userAgent: "Firefox"}}, response)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns context meta keys in lowerCamelCase format" do
|
39
|
+
response = jat_class.to_h(nil, meta: {user_agent: "Firefox"})
|
40
|
+
assert_equal({meta: {userAgent: "Firefox"}}, response)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "joins meta in lowerCamelCase format" do
|
44
|
+
jat_class.meta(:userAgent) { "Firefox" }
|
45
|
+
response = jat_class.to_h(nil, meta: {user_agent: "Firefox 2.0"})
|
46
|
+
assert_equal({meta: {userAgent: "Firefox 2.0"}}, response)
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
describe "Jat::Plugins::SimpleApiMapsCache" do
|
6
|
+
before do
|
7
|
+
@plugin = Jat::Plugins.find_plugin(:simple_api_maps_cache)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "checks simple_api plugin loaded before" do
|
11
|
+
jat_class = Class.new(Jat)
|
12
|
+
error = assert_raises(Jat::Error) { jat_class.plugin @plugin }
|
13
|
+
assert_match(/simple_api/, error.message)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "adds config variable how many maps to store per serializer" do
|
17
|
+
jat_class = Class.new(Jat)
|
18
|
+
|
19
|
+
@plugin.after_load(jat_class)
|
20
|
+
assert_equal(100, jat_class.config[:cached_maps_count]) # default 100
|
21
|
+
|
22
|
+
@plugin.after_load(jat_class, cached_maps_count: 10) # change value via opts
|
23
|
+
assert_equal(10, jat_class.config[:cached_maps_count])
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "Test maps responses" do
|
27
|
+
let(:jat_class) do
|
28
|
+
Class.new(Jat) do
|
29
|
+
plugin(:simple_api)
|
30
|
+
plugin(:simple_api_maps_cache)
|
31
|
+
|
32
|
+
attribute(:attr1)
|
33
|
+
attribute(:attr2)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns same maps when requested with same params" do
|
38
|
+
full_map1 = jat_class::Map.call(exposed: :all)
|
39
|
+
full_map2 = jat_class::Map.call(exposed: :all)
|
40
|
+
|
41
|
+
exposed_map1 = jat_class::Map.call(exposed: :default)
|
42
|
+
exposed_map2 = jat_class::Map.call(exposed: :default)
|
43
|
+
|
44
|
+
current_map1 = jat_class::Map.call(fields: "attr1")
|
45
|
+
current_map2 = jat_class::Map.call(fields: "attr1")
|
46
|
+
current_map3 = jat_class::Map.call(fields: "attr2")
|
47
|
+
|
48
|
+
assert_same(full_map1, full_map2)
|
49
|
+
assert_same(exposed_map1, exposed_map2)
|
50
|
+
assert_same(current_map1, current_map2)
|
51
|
+
|
52
|
+
# should not match, fields are not same
|
53
|
+
assert !current_map1.equal?(current_map3)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "stores different maps keys" do
|
57
|
+
# key 1
|
58
|
+
jat_class::Map.call(exposed: :all)
|
59
|
+
jat_class::Map.call(exposed: :all)
|
60
|
+
|
61
|
+
# key 2
|
62
|
+
jat_class::Map.call(exposed: :default)
|
63
|
+
jat_class::Map.call(exposed: :default)
|
64
|
+
|
65
|
+
# key 3
|
66
|
+
jat_class::Map.call(fields: "attr1")
|
67
|
+
jat_class::Map.call(fields: "attr1")
|
68
|
+
|
69
|
+
# key 4
|
70
|
+
jat_class::Map.call(fields: "attr2")
|
71
|
+
|
72
|
+
# key 5
|
73
|
+
jat_class::Map.call(fields: "attr1,attr2")
|
74
|
+
|
75
|
+
assert_equal 5, jat_class::Map.maps_cache.keys.count
|
76
|
+
end
|
77
|
+
|
78
|
+
it "clears old results when there are too many cache keys" do
|
79
|
+
jat_class.config[:cached_maps_count] = 1
|
80
|
+
|
81
|
+
full_map1 = jat_class::Map.call(exposed: :all)
|
82
|
+
full_map2 = jat_class::Map.call(exposed: :all)
|
83
|
+
|
84
|
+
# ensure maps refer to same object
|
85
|
+
assert_same(full_map1, full_map2)
|
86
|
+
|
87
|
+
# replace single possible cache key with another `exposed` map
|
88
|
+
jat_class::Map.call(exposed: :default)
|
89
|
+
|
90
|
+
# calculate full map again, it should not match
|
91
|
+
full_map3 = jat_class::Map.call(exposed: :all)
|
92
|
+
assert !full_map1.equal?(full_map3)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
describe "Jat::Plugins::SimpleApiValidateParams" do
|
6
|
+
before do
|
7
|
+
@plugin = Jat::Plugins.find_plugin(:simple_api_validate_params)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "checks simple_api plugin loaded before" do
|
11
|
+
jat_class = Class.new(Jat)
|
12
|
+
error = assert_raises(Jat::Error) { jat_class.plugin @plugin }
|
13
|
+
assert_match(/simple_api/, error.message)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:base_serializer) do
|
17
|
+
jat_class = Class.new(Jat)
|
18
|
+
jat_class.plugin :simple_api
|
19
|
+
jat_class.plugin @plugin
|
20
|
+
jat_class
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:serializer) do
|
24
|
+
jat_class = Class.new(base_serializer)
|
25
|
+
jat_class.attribute :foo_bar
|
26
|
+
jat_class.relationship :foo_bazz, serializer: jat_class
|
27
|
+
jat_class
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:serializer_lower_camel_case) do
|
31
|
+
jat_class = Class.new(base_serializer)
|
32
|
+
jat_class.plugin :lower_camel_case
|
33
|
+
|
34
|
+
jat_class.attribute :foo_bar
|
35
|
+
jat_class.relationship :foo_bazz, serializer: jat_class
|
36
|
+
jat_class
|
37
|
+
end
|
38
|
+
|
39
|
+
it "validates fields" do
|
40
|
+
jat = serializer.new(fields: "foo_bar,extra")
|
41
|
+
error = assert_raises(Jat::SimpleApiFieldsError) { jat.validate }
|
42
|
+
expected_message = "Field 'extra' not exists"
|
43
|
+
assert_equal(expected_message, error.message)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "validates deeply nested fields" do
|
47
|
+
c = Class.new(base_serializer)
|
48
|
+
c.attribute :c1
|
49
|
+
c.attribute :c2
|
50
|
+
|
51
|
+
b = Class.new(base_serializer)
|
52
|
+
b.attribute :b1
|
53
|
+
b.attribute :b2
|
54
|
+
b.relationship :c, serializer: c
|
55
|
+
|
56
|
+
a = Class.new(base_serializer)
|
57
|
+
a.attribute :a1
|
58
|
+
a.attribute :a2
|
59
|
+
a.relationship :b, serializer: b
|
60
|
+
a.relationship :c, serializer: c
|
61
|
+
|
62
|
+
jat = a.new(fields: "a1,a2,c(c1,c2),b(b1,b2,c(c1,c2,c3)")
|
63
|
+
error = assert_raises(Jat::SimpleApiFieldsError) { jat.validate }
|
64
|
+
expected_message = "Field 'c3' ('b.c.c3') not exists"
|
65
|
+
assert_equal(expected_message, error.message)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "validates deeply nested fields about not existing relationship" do
|
69
|
+
c = Class.new(base_serializer)
|
70
|
+
c.attribute :c1
|
71
|
+
c.attribute :c2
|
72
|
+
|
73
|
+
b = Class.new(base_serializer)
|
74
|
+
b.attribute :b1
|
75
|
+
b.attribute :b2
|
76
|
+
b.relationship :c, serializer: c
|
77
|
+
|
78
|
+
a = Class.new(base_serializer)
|
79
|
+
a.attribute :a1
|
80
|
+
a.attribute :a2
|
81
|
+
a.relationship :b, serializer: b
|
82
|
+
a.relationship :c, serializer: c
|
83
|
+
|
84
|
+
jat = a.new(fields: "a1,a2,c(c1,c2),b(b1,b2,c(c1,c2(c3))")
|
85
|
+
error = assert_raises(Jat::SimpleApiFieldsError) { jat.validate }
|
86
|
+
expected_message = "Field 'c2' ('b.c.c2') is not a relationship to add 'c3' attribute"
|
87
|
+
assert_equal(expected_message, error.message)
|
88
|
+
end
|
89
|
+
end
|
@@ -7,7 +7,7 @@ describe "Jat::Plugins::ToStr" do
|
|
7
7
|
new_class = Class.new(Jat)
|
8
8
|
new_class.plugin(:to_str)
|
9
9
|
new_class.class_exec do
|
10
|
-
def to_h
|
10
|
+
def to_h(object)
|
11
11
|
{object => context}
|
12
12
|
end
|
13
13
|
end
|
@@ -34,7 +34,7 @@ describe "Jat::Plugins::ToStr" do
|
|
34
34
|
new_class = Class.new(Jat)
|
35
35
|
new_class.plugin(:to_str, to_str: ->(data) { data.inspect })
|
36
36
|
new_class.class_exec do
|
37
|
-
def to_h
|
37
|
+
def to_h(object)
|
38
38
|
{object => context}
|
39
39
|
end
|
40
40
|
end
|
@@ -45,7 +45,7 @@ describe "Jat::Plugins::ToStr" do
|
|
45
45
|
|
46
46
|
describe "#to_str" do
|
47
47
|
it "returns json string of to_h" do
|
48
|
-
assert_equal '{"obj":"ctx"}', jat_class.new("
|
48
|
+
assert_equal '{"obj":"ctx"}', jat_class.new("ctx").to_str("obj")
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
data/test/lib/jat_test.rb
CHANGED
@@ -6,19 +6,36 @@ describe Jat do
|
|
6
6
|
let(:jat_class) { Class.new(Jat) }
|
7
7
|
|
8
8
|
describe ".plugin" do
|
9
|
-
it "
|
10
|
-
plugin =
|
11
|
-
|
9
|
+
it "loads same plugin only once" do
|
10
|
+
plugin = Module.new
|
11
|
+
jat_class.plugin plugin
|
12
|
+
jat_class.plugin plugin
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
assert_equal [plugin], jat_class.config[:plugins]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe ".plugin_used?" do
|
19
|
+
it "tells if plugin has been already used in current serializer" do
|
20
|
+
assert_equal false, jat_class.plugin_used?(:json_api)
|
21
|
+
jat_class.plugin(:json_api)
|
22
|
+
assert_equal true, jat_class.plugin_used?(:json_api)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "accepts Module" do
|
26
|
+
plugin = Module.new
|
27
|
+
|
28
|
+
assert_equal false, jat_class.plugin_used?(plugin)
|
29
|
+
jat_class.plugin(plugin)
|
30
|
+
assert_equal true, jat_class.plugin_used?(plugin)
|
15
31
|
end
|
16
32
|
end
|
17
33
|
|
18
34
|
describe ".config" do
|
19
|
-
it "returns config object" do
|
35
|
+
it "returns config object with default values" do
|
20
36
|
config = jat_class.config
|
21
37
|
assert_equal jat_class::Config, config.class
|
38
|
+
assert_equal({plugins: []}, config.opts)
|
22
39
|
end
|
23
40
|
end
|
24
41
|
|
@@ -40,11 +57,6 @@ describe Jat do
|
|
40
57
|
assert_equal parent::Attribute, child::Attribute.superclass
|
41
58
|
assert child.attributes[:foo]
|
42
59
|
end
|
43
|
-
|
44
|
-
it "inherits presenter" do
|
45
|
-
child = Class.new(parent)
|
46
|
-
assert_equal parent::Presenter, child::Presenter.superclass
|
47
|
-
end
|
48
60
|
end
|
49
61
|
|
50
62
|
describe ".call" do
|
@@ -54,6 +66,8 @@ describe Jat do
|
|
54
66
|
end
|
55
67
|
|
56
68
|
describe ".to_h" do
|
69
|
+
let(:jat) { jat_class.allocate }
|
70
|
+
|
57
71
|
it "raises error that we should add some response generation plugin" do
|
58
72
|
error = assert_raises(Jat::Error) { jat_class.to_h(nil) }
|
59
73
|
|
@@ -61,13 +75,15 @@ describe Jat do
|
|
61
75
|
assert_equal error_message, error.message
|
62
76
|
end
|
63
77
|
|
64
|
-
it "initializes serializer instance with provided
|
65
|
-
|
78
|
+
it "initializes serializer instance with provided context" do
|
79
|
+
jat.expects(:to_h).with("obj")
|
80
|
+
jat_class.expects(:new).with("context").returns(jat)
|
66
81
|
jat_class.to_h("obj", "context")
|
67
82
|
end
|
68
83
|
|
69
84
|
it "adds empty hash context when context not provided" do
|
70
|
-
|
85
|
+
jat.expects(:to_h).with("obj")
|
86
|
+
jat_class.expects(:new).with({}).returns(jat)
|
71
87
|
jat_class.to_h("obj")
|
72
88
|
end
|
73
89
|
end
|
@@ -84,27 +100,34 @@ describe Jat do
|
|
84
100
|
attribute = jat_class.attribute :foo
|
85
101
|
assert_equal jat_class.attributes[:foo], attribute
|
86
102
|
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe ".relationship" do
|
106
|
+
it "forces using of :serializer option" do
|
107
|
+
error = assert_raises(ArgumentError) { jat_class.relationship(:foo) }
|
108
|
+
assert_match "serializer", error.message
|
109
|
+
end
|
87
110
|
|
88
|
-
it "adds
|
89
|
-
jat_class.
|
90
|
-
|
111
|
+
it "adds new attribute" do
|
112
|
+
jat_class.relationship(:foo, serializer: jat_class)
|
113
|
+
|
114
|
+
attribute = jat_class.attributes[:foo]
|
115
|
+
assert_equal jat_class, attribute.serializer
|
91
116
|
end
|
92
117
|
end
|
93
118
|
|
94
119
|
describe "#initialize" do
|
95
|
-
it "initializes
|
96
|
-
jat = jat_class.new("
|
97
|
-
|
98
|
-
assert_equal "obj", jat.object
|
120
|
+
it "initializes context" do
|
121
|
+
jat = jat_class.new("context")
|
99
122
|
assert_equal "context", jat.context
|
100
123
|
end
|
101
124
|
end
|
102
125
|
|
103
126
|
describe "#to_h" do
|
104
127
|
it "raises error" do
|
105
|
-
jat = jat_class.new
|
128
|
+
jat = jat_class.new
|
106
129
|
|
107
|
-
error = assert_raises(Jat::Error) { jat.to_h }
|
130
|
+
error = assert_raises(Jat::Error) { jat.to_h(nil) }
|
108
131
|
error_message = "Method #to_h must be implemented by plugin"
|
109
132
|
assert_equal error_message, error.message
|
110
133
|
end
|
@@ -112,7 +135,7 @@ describe Jat do
|
|
112
135
|
|
113
136
|
describe "#config" do
|
114
137
|
it "returns self class config" do
|
115
|
-
jat = jat_class.new
|
138
|
+
jat = jat_class.new
|
116
139
|
|
117
140
|
assert_same jat.config, jat_class.config
|
118
141
|
end
|
data/test/lib/plugin_test.rb
CHANGED
@@ -6,7 +6,7 @@ require "test_plugin"
|
|
6
6
|
describe "plugin system" do
|
7
7
|
describe "Jat.plugin" do
|
8
8
|
let(:jat_class) { Class.new(Jat) }
|
9
|
-
let(:components) { [jat_class, jat_class::Attribute, jat_class::Config
|
9
|
+
let(:components) { [jat_class, jat_class::Attribute, jat_class::Config] }
|
10
10
|
|
11
11
|
before do
|
12
12
|
components.each do |component|
|
@@ -36,12 +36,12 @@ describe "plugin system" do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "calls before_load before loading plugin" do
|
40
40
|
jat_class.plugin(TestPlugin)
|
41
41
|
assert_equal :foo, jat_class.config[:before_load]
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
44
|
+
it "calls after_load after loading plugin" do
|
45
45
|
jat_class.plugin(TestPlugin)
|
46
46
|
assert_equal :plugin_foo, jat_class.config[:after_load]
|
47
47
|
end
|
data/test/test_helper.rb
CHANGED
data/test/test_plugin.rb
CHANGED
@@ -5,6 +5,15 @@ module TestPlugin
|
|
5
5
|
jat_class.config[:before_load] = jat_class.foo
|
6
6
|
end
|
7
7
|
|
8
|
+
def self.load(jat_class, **_opts)
|
9
|
+
jat_class.extend(ClassMethods)
|
10
|
+
jat_class.include(InstanceMethods)
|
11
|
+
jat_class::Attribute.extend(AttributeClassMethods)
|
12
|
+
jat_class::Attribute.include(AttributeMethods)
|
13
|
+
jat_class::Config.extend(ConfigClassMethods)
|
14
|
+
jat_class::Config.include(ConfigMethods)
|
15
|
+
end
|
16
|
+
|
8
17
|
def self.after_load(jat_class, *)
|
9
18
|
jat_class.config[:after_load] = jat_class.foo
|
10
19
|
end
|
@@ -44,16 +53,4 @@ module TestPlugin
|
|
44
53
|
:plugin_foo
|
45
54
|
end
|
46
55
|
end
|
47
|
-
|
48
|
-
module PresenterClassMethods
|
49
|
-
def foo
|
50
|
-
:plugin_foo
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
module PresenterMethods
|
55
|
-
def foo
|
56
|
-
:plugin_foo
|
57
|
-
end
|
58
|
-
end
|
59
56
|
end
|