diff --git a/lib/active_model/serializer/reflection.rb b/lib/active_model/serializer/reflection.rb index d7378e60..701b1b92 100644 --- a/lib/active_model/serializer/reflection.rb +++ b/lib/active_model/serializer/reflection.rb @@ -38,6 +38,7 @@ module ActiveModel super @_links = {} @_include_data = true + @_meta = nil end def link(name, value = nil, &block) diff --git a/lib/active_model_serializers/adapter/json_api/link.rb b/lib/active_model_serializers/adapter/json_api/link.rb index e6f5c76b..19eb2cd7 100644 --- a/lib/active_model_serializers/adapter/json_api/link.rb +++ b/lib/active_model_serializers/adapter/json_api/link.rb @@ -1,5 +1,3 @@ -require 'active_support/core_ext/module/delegation' - module ActiveModelSerializers module Adapter class JsonApi @@ -41,8 +39,7 @@ module ActiveModelSerializers # meta: meta, # }.reject! {|_,v| v.nil? } class Link - include SerializationContext.url_helpers - delegate :default_url_options, to: SerializationContext + include SerializationContext::UrlHelpers def initialize(serializer, value) @object = serializer.object @@ -70,8 +67,8 @@ module ActiveModelSerializers return @value if @value hash = {} - hash[:href] = @href if @href - hash[:meta] = @meta if @meta + hash[:href] = @href if defined?(@href) + hash[:meta] = @meta if defined?(@meta) hash end diff --git a/lib/active_model_serializers/serialization_context.rb b/lib/active_model_serializers/serialization_context.rb index 3c521f51..498eaa68 100644 --- a/lib/active_model_serializers/serialization_context.rb +++ b/lib/active_model_serializers/serialization_context.rb @@ -2,6 +2,22 @@ module ActiveModelSerializers class SerializationContext class << self attr_writer :url_helpers, :default_url_options + def url_helpers + @url_helpers ||= Module.new + end + + def default_url_options + @default_url_options ||= {} + end + end + module UrlHelpers + def self.included(base) + base.send(:include, SerializationContext.url_helpers) + end + + def default_url_options + SerializationContext.default_url_options + end end attr_reader :request_url, :query_parameters, :key_transform @@ -13,13 +29,5 @@ module ActiveModelSerializers @default_url_options = options.delete(:default_url_options) || self.class.default_url_options @key_transform = options.delete(:key_transform) end - - def self.url_helpers - @url_helpers ||= Module.new - end - - def self.default_url_options - @default_url_options ||= {} - end end end diff --git a/test/adapter/json_api/resource_identifier_test.rb b/test/adapter/json_api/resource_identifier_test.rb index 0fc6d33b..513b6aff 100644 --- a/test/adapter/json_api/resource_identifier_test.rb +++ b/test/adapter/json_api/resource_identifier_test.rb @@ -42,7 +42,7 @@ module ActiveModelSerializers end def test_id_defined_on_fragmented - FragmentedSerializer.fragmented(WithDefinedIdSerializer.new(@author)) + FragmentedSerializer.fragmented(WithDefinedIdSerializer.new(@model)) test_id(FragmentedSerializer, 'special_id') end diff --git a/test/fixtures/active_record.rb b/test/fixtures/active_record.rb index 26b7d390..3f0b2dc0 100644 --- a/test/fixtures/active_record.rb +++ b/test/fixtures/active_record.rb @@ -2,6 +2,7 @@ require 'active_record' ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') ActiveRecord::Schema.define do + self.verbose = false create_table :posts, force: true do |t| t.string :title t.text :body