active_model_serializers 0.10.7 → 0.10.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/.travis.yml +14 -3
- data/CHANGELOG.md +29 -1
- data/Gemfile +5 -3
- data/README.md +2 -2
- data/Rakefile +2 -0
- data/active_model_serializers.gemspec +2 -1
- data/docs/general/serializers.md +16 -4
- data/lib/action_controller/serialization.rb +2 -0
- data/lib/active_model/serializable_resource.rb +2 -0
- data/lib/active_model/serializer/adapter/attributes.rb +2 -0
- data/lib/active_model/serializer/adapter/base.rb +2 -0
- data/lib/active_model/serializer/adapter/json.rb +2 -0
- data/lib/active_model/serializer/adapter/json_api.rb +2 -0
- data/lib/active_model/serializer/adapter/null.rb +2 -0
- data/lib/active_model/serializer/adapter.rb +2 -0
- data/lib/active_model/serializer/array_serializer.rb +2 -0
- data/lib/active_model/serializer/association.rb +2 -0
- data/lib/active_model/serializer/attribute.rb +2 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
- data/lib/active_model/serializer/collection_serializer.rb +6 -6
- data/lib/active_model/serializer/concerns/caching.rb +5 -1
- data/lib/active_model/serializer/error_serializer.rb +2 -0
- data/lib/active_model/serializer/errors_serializer.rb +2 -0
- data/lib/active_model/serializer/field.rb +2 -0
- data/lib/active_model/serializer/fieldset.rb +2 -0
- data/lib/active_model/serializer/has_many_reflection.rb +2 -0
- data/lib/active_model/serializer/has_one_reflection.rb +2 -0
- data/lib/active_model/serializer/lazy_association.rb +6 -2
- data/lib/active_model/serializer/link.rb +23 -0
- data/lib/active_model/serializer/lint.rb +2 -0
- data/lib/active_model/serializer/null.rb +2 -0
- data/lib/active_model/serializer/reflection.rb +5 -0
- data/lib/active_model/serializer/version.rb +3 -1
- data/lib/active_model/serializer.rb +22 -14
- data/lib/active_model_serializers/adapter/attributes.rb +2 -0
- data/lib/active_model_serializers/adapter/base.rb +2 -0
- data/lib/active_model_serializers/adapter/json.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api.rb +14 -9
- data/lib/active_model_serializers/adapter/null.rb +2 -0
- data/lib/active_model_serializers/adapter.rb +3 -1
- data/lib/active_model_serializers/callbacks.rb +2 -0
- data/lib/active_model_serializers/deprecate.rb +2 -0
- data/lib/active_model_serializers/deserialization.rb +2 -0
- data/lib/active_model_serializers/json_pointer.rb +2 -0
- data/lib/active_model_serializers/logging.rb +2 -0
- data/lib/active_model_serializers/lookup_chain.rb +2 -0
- data/lib/active_model_serializers/model.rb +2 -0
- data/lib/active_model_serializers/railtie.rb +4 -0
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
- data/lib/active_model_serializers/serializable_resource.rb +4 -2
- data/lib/active_model_serializers/serialization_context.rb +2 -0
- data/lib/active_model_serializers/test/schema.rb +2 -0
- data/lib/active_model_serializers/test/serializer.rb +2 -0
- data/lib/active_model_serializers/test.rb +2 -0
- data/lib/active_model_serializers.rb +20 -10
- data/lib/generators/rails/resource_override.rb +2 -0
- data/lib/generators/rails/serializer_generator.rb +2 -0
- data/lib/grape/active_model_serializers.rb +2 -0
- data/lib/grape/formatters/active_model_serializers.rb +2 -0
- data/lib/grape/helpers/active_model_serializers.rb +2 -0
- data/lib/tasks/rubocop.rake +2 -0
- data/test/action_controller/adapter_selector_test.rb +2 -0
- data/test/action_controller/explicit_serializer_test.rb +2 -0
- data/test/action_controller/json/include_test.rb +2 -0
- data/test/action_controller/json_api/deserialization_test.rb +2 -0
- data/test/action_controller/json_api/errors_test.rb +2 -0
- data/test/action_controller/json_api/fields_test.rb +2 -0
- data/test/action_controller/json_api/linked_test.rb +2 -0
- data/test/action_controller/json_api/pagination_test.rb +2 -0
- data/test/action_controller/json_api/transform_test.rb +2 -0
- data/test/action_controller/lookup_proc_test.rb +2 -0
- data/test/action_controller/namespace_lookup_test.rb +2 -0
- data/test/action_controller/serialization_scope_name_test.rb +2 -0
- data/test/action_controller/serialization_test.rb +11 -3
- data/test/active_model_serializers/adapter_for_test.rb +2 -0
- data/test/active_model_serializers/json_pointer_test.rb +2 -0
- data/test/active_model_serializers/logging_test.rb +2 -0
- data/test/active_model_serializers/model_test.rb +2 -0
- data/test/active_model_serializers/railtie_test_isolated.rb +2 -0
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +2 -0
- data/test/active_model_serializers/serialization_context_test_isolated.rb +2 -0
- data/test/active_model_serializers/test/schema_test.rb +2 -0
- data/test/active_model_serializers/test/serializer_test.rb +2 -0
- data/test/active_record_test.rb +2 -0
- data/test/adapter/attributes_test.rb +2 -0
- data/test/adapter/deprecation_test.rb +2 -0
- data/test/adapter/json/belongs_to_test.rb +2 -0
- data/test/adapter/json/collection_test.rb +2 -0
- data/test/adapter/json/has_many_test.rb +2 -0
- data/test/adapter/json/transform_test.rb +2 -0
- data/test/adapter/json_api/belongs_to_test.rb +2 -0
- data/test/adapter/json_api/collection_test.rb +2 -0
- data/test/adapter/json_api/errors_test.rb +2 -0
- data/test/adapter/json_api/fields_test.rb +2 -0
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +2 -0
- data/test/adapter/json_api/has_many_test.rb +2 -0
- data/test/adapter/json_api/has_one_test.rb +2 -0
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +2 -0
- data/test/adapter/json_api/json_api_test.rb +2 -0
- data/test/adapter/json_api/linked_test.rb +2 -0
- data/test/adapter/json_api/links_test.rb +18 -1
- data/test/adapter/json_api/pagination_links_test.rb +2 -0
- data/test/adapter/json_api/parse_test.rb +2 -0
- data/test/adapter/json_api/relationship_test.rb +2 -0
- data/test/adapter/json_api/resource_meta_test.rb +2 -0
- data/test/adapter/json_api/toplevel_jsonapi_test.rb +2 -0
- data/test/adapter/json_api/transform_test.rb +2 -0
- data/test/adapter/json_api/type_test.rb +2 -0
- data/test/adapter/json_test.rb +2 -0
- data/test/adapter/null_test.rb +2 -0
- data/test/adapter/polymorphic_test.rb +2 -0
- data/test/adapter_test.rb +2 -0
- data/test/array_serializer_test.rb +2 -0
- data/test/benchmark/app.rb +2 -0
- data/test/benchmark/benchmarking_support.rb +2 -0
- data/test/benchmark/bm_active_record.rb +2 -0
- data/test/benchmark/bm_adapter.rb +2 -0
- data/test/benchmark/bm_caching.rb +2 -0
- data/test/benchmark/bm_lookup_chain.rb +2 -0
- data/test/benchmark/bm_transform.rb +2 -0
- data/test/benchmark/controllers.rb +2 -0
- data/test/benchmark/fixtures.rb +2 -0
- data/test/cache_test.rb +69 -3
- data/test/collection_serializer_test.rb +2 -0
- data/test/fixtures/active_record.rb +2 -0
- data/test/fixtures/poro.rb +2 -0
- data/test/generators/scaffold_controller_generator_test.rb +2 -0
- data/test/generators/serializer_generator_test.rb +2 -0
- data/test/grape_test.rb +2 -0
- data/test/lint_test.rb +2 -0
- data/test/logger_test.rb +2 -0
- data/test/poro_test.rb +2 -0
- data/test/serializable_resource_test.rb +2 -0
- data/test/serializers/association_macros_test.rb +2 -0
- data/test/serializers/associations_test.rb +52 -0
- data/test/serializers/attribute_test.rb +2 -0
- data/test/serializers/attributes_test.rb +2 -0
- data/test/serializers/caching_configuration_test_isolated.rb +2 -0
- data/test/serializers/configuration_test.rb +2 -0
- data/test/serializers/fieldset_test.rb +2 -0
- data/test/serializers/meta_test.rb +2 -0
- data/test/serializers/options_test.rb +2 -0
- data/test/serializers/read_attribute_for_serialization_test.rb +2 -0
- data/test/serializers/reflection_test.rb +54 -0
- data/test/serializers/root_test.rb +2 -0
- data/test/serializers/serialization_test.rb +2 -0
- data/test/serializers/serializer_for_test.rb +2 -0
- data/test/serializers/serializer_for_with_namespace_test.rb +2 -0
- data/test/support/isolated_unit.rb +2 -0
- data/test/support/rails5_shims.rb +2 -0
- data/test/support/rails_app.rb +2 -0
- data/test/support/serialization_testing.rb +2 -0
- data/test/test_helper.rb +2 -0
- metadata +56 -35
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# {http://jsonapi.org/format/ JSON API specification}
|
2
4
|
# rubocop:disable Style/AsciiComments
|
3
5
|
# TODO: implement!
|
@@ -22,14 +24,16 @@ module ActiveModelSerializers
|
|
22
24
|
module Adapter
|
23
25
|
class JsonApi < Base
|
24
26
|
extend ActiveSupport::Autoload
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
eager_autoload do
|
28
|
+
autoload :Jsonapi
|
29
|
+
autoload :ResourceIdentifier
|
30
|
+
autoload :Link
|
31
|
+
autoload :PaginationLinks
|
32
|
+
autoload :Meta
|
33
|
+
autoload :Error
|
34
|
+
autoload :Deserialization
|
35
|
+
autoload :Relationship
|
36
|
+
end
|
33
37
|
|
34
38
|
def self.default_key_transform
|
35
39
|
:dash
|
@@ -480,7 +484,8 @@ module ActiveModelSerializers
|
|
480
484
|
# }.reject! {|_,v| v.nil? }
|
481
485
|
def links_for(serializer)
|
482
486
|
serializer._links.each_with_object({}) do |(name, value), hash|
|
483
|
-
|
487
|
+
next if value.excluded?(serializer)
|
488
|
+
result = Link.new(serializer, value.block).as_json
|
484
489
|
hash[name] = result if result
|
485
490
|
end
|
486
491
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActiveModelSerializers
|
2
4
|
module Adapter
|
3
5
|
UnknownAdapterError = Class.new(ArgumentError)
|
@@ -35,7 +37,7 @@ module ActiveModelSerializers
|
|
35
37
|
|
36
38
|
# @return [Array<Symbol>] list of adapter names
|
37
39
|
def adapters
|
38
|
-
adapter_map.keys.sort
|
40
|
+
adapter_map.keys.sort!
|
39
41
|
end
|
40
42
|
|
41
43
|
# Adds an adapter 'klass' with 'name' to the 'adapter_map'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/railtie'
|
2
4
|
require 'action_controller'
|
3
5
|
require 'action_controller/railtie'
|
@@ -5,6 +7,8 @@ require 'action_controller/serialization'
|
|
5
7
|
|
6
8
|
module ActiveModelSerializers
|
7
9
|
class Railtie < Rails::Railtie
|
10
|
+
config.eager_load_namespaces << ActiveModelSerializers
|
11
|
+
|
8
12
|
config.to_prepare do
|
9
13
|
ActiveModel::Serializer.serializers_cache.clear
|
10
14
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'set'
|
2
4
|
|
3
5
|
module ActiveModelSerializers
|
@@ -14,8 +16,8 @@ module ActiveModelSerializers
|
|
14
16
|
# @return the serializable_resource, ready for #as_json/#to_json/#serializable_hash.
|
15
17
|
def initialize(resource, options = {})
|
16
18
|
@resource = resource
|
17
|
-
@adapter_opts,
|
18
|
-
|
19
|
+
@adapter_opts = options.select { |k, _| ADAPTER_OPTION_KEYS.include? k }
|
20
|
+
@serializer_opts = options.reject { |k, _| ADAPTER_OPTION_KEYS.include? k }
|
19
21
|
end
|
20
22
|
|
21
23
|
def serialization_scope=(scope)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_model'
|
2
4
|
require 'active_support'
|
3
5
|
require 'active_support/core_ext/object/with_options'
|
@@ -5,16 +7,19 @@ require 'active_support/core_ext/string/inflections'
|
|
5
7
|
require 'active_support/json'
|
6
8
|
module ActiveModelSerializers
|
7
9
|
extend ActiveSupport::Autoload
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
eager_autoload do
|
11
|
+
autoload :Model
|
12
|
+
autoload :Callbacks
|
13
|
+
autoload :SerializableResource
|
14
|
+
autoload :SerializationContext
|
15
|
+
autoload :Logging
|
16
|
+
autoload :Test
|
17
|
+
autoload :Adapter
|
18
|
+
autoload :JsonPointer
|
19
|
+
autoload :Deprecate
|
20
|
+
autoload :LookupChain
|
21
|
+
autoload :Deserialization
|
22
|
+
end
|
18
23
|
|
19
24
|
class << self; attr_accessor :logger; end
|
20
25
|
self.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
|
@@ -46,6 +51,11 @@ module ActiveModelSerializers
|
|
46
51
|
$VERBOSE = original_verbose
|
47
52
|
end
|
48
53
|
|
54
|
+
def self.eager_load!
|
55
|
+
super
|
56
|
+
ActiveModel::Serializer.eager_load!
|
57
|
+
end
|
58
|
+
|
49
59
|
require 'active_model/serializer/version'
|
50
60
|
require 'active_model/serializer'
|
51
61
|
require 'active_model/serializable_resource'
|
data/lib/tasks/rubocop.rake
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
module ActionController
|
@@ -457,13 +459,19 @@ module ActionController
|
|
457
459
|
end
|
458
460
|
|
459
461
|
def test_render_event_is_emitted
|
460
|
-
subscriber = ::ActiveSupport::Notifications.subscribe('render.active_model_serializers') do |
|
461
|
-
@
|
462
|
+
subscriber = ::ActiveSupport::Notifications.subscribe('render.active_model_serializers') do |subscribed_event|
|
463
|
+
@subscribed_event = subscribed_event
|
462
464
|
end
|
463
465
|
|
464
466
|
get :render_using_implicit_serializer
|
465
467
|
|
466
|
-
|
468
|
+
subscribed_event_name =
|
469
|
+
if @subscribed_event.is_a?(String)
|
470
|
+
@subscribed_event
|
471
|
+
else
|
472
|
+
@subscribed_event.name # is a ActiveSupport::Notifications::Event
|
473
|
+
end
|
474
|
+
assert_equal 'render.active_model_serializers', subscribed_event_name
|
467
475
|
ensure
|
468
476
|
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
|
469
477
|
end
|
data/test/active_record_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
module ActiveModelSerializers
|
@@ -17,7 +19,21 @@ module ActiveModelSerializers
|
|
17
19
|
link :yet_another do
|
18
20
|
"http://example.com/resource/#{object.id}"
|
19
21
|
end
|
22
|
+
link :conditional1, if: -> { instance_truth } do
|
23
|
+
"http://example.com/conditional1/#{object.id}"
|
24
|
+
end
|
25
|
+
link :conditional2, if: :instance_falsey do
|
26
|
+
"http://example.com/conditional2/#{object.id}"
|
27
|
+
end
|
20
28
|
link(:nil) { nil }
|
29
|
+
|
30
|
+
def instance_truth
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def instance_falsey
|
35
|
+
false
|
36
|
+
end
|
21
37
|
end
|
22
38
|
|
23
39
|
def setup
|
@@ -85,7 +101,8 @@ module ActiveModelSerializers
|
|
85
101
|
:"link-authors" => 'http://example.com/link_authors',
|
86
102
|
resource: 'http://example.com/resource',
|
87
103
|
posts: 'http://example.com/link_authors/1337/posts',
|
88
|
-
:"yet-another" => 'http://example.com/resource/1337'
|
104
|
+
:"yet-another" => 'http://example.com/resource/1337',
|
105
|
+
conditional1: 'http://example.com/conditional1/1337'
|
89
106
|
}
|
90
107
|
assert_equal(expected, hash[:data][:links])
|
91
108
|
end
|