mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
ActiveRecord::Base and ActionController::Base"
The whole idea of having a lazy hook is that it can be executed
in the context of different targets. The moment you hardcode the class,
the hooks can no longer run in the proper context.
This reverts commit 506e2ac9ad.
88 lines
2.3 KiB
Ruby
88 lines
2.3 KiB
Ruby
require "active_support"
|
|
require "active_support/core_ext/string/inflections"
|
|
require "active_support/notifications"
|
|
require "active_model"
|
|
require "active_model/ordered_set"
|
|
require "active_model/array_serializer"
|
|
require "active_model/serializer"
|
|
require "set"
|
|
|
|
if defined?(Rails)
|
|
module ActiveModel
|
|
class Railtie < Rails::Railtie
|
|
generators do |app|
|
|
app ||= Rails.application # Rails 3.0.x does not yield `app`
|
|
|
|
Rails::Generators.configure!(app.config.generators)
|
|
Rails::Generators.hidden_namespaces.uniq!
|
|
require "generators/resource_override"
|
|
end
|
|
|
|
initializer "include_routes.active_model_serializer" do |app|
|
|
ActiveSupport.on_load(:active_model_serializers) do
|
|
include app.routes.url_helpers
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
module ActiveModel::SerializerSupport
|
|
extend ActiveSupport::Concern
|
|
|
|
module ClassMethods #:nodoc:
|
|
if "".respond_to?(:safe_constantize)
|
|
def active_model_serializer
|
|
@active_model_serializer ||= "#{self.name}Serializer".safe_constantize
|
|
end
|
|
else
|
|
def active_model_serializer
|
|
return @active_model_serializer if defined?(@active_model_serializer)
|
|
|
|
begin
|
|
@active_model_serializer = "#{self.name}Serializer".constantize
|
|
rescue NameError => e
|
|
raise unless e.message =~ /uninitialized constant/
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# Returns a model serializer for this object considering its namespace.
|
|
def active_model_serializer
|
|
self.class.active_model_serializer
|
|
end
|
|
|
|
alias :read_attribute_for_serialization :send
|
|
end
|
|
|
|
ActiveSupport.on_load(:active_record) do
|
|
include ActiveModel::SerializerSupport
|
|
end
|
|
|
|
module ActiveModel::ArraySerializerSupport
|
|
def active_model_serializer
|
|
ActiveModel::ArraySerializer
|
|
end
|
|
end
|
|
|
|
Array.send(:include, ActiveModel::ArraySerializerSupport)
|
|
Set.send(:include, ActiveModel::ArraySerializerSupport)
|
|
|
|
ActiveSupport.on_load(:active_record) do
|
|
ActiveRecord::Relation.send(:include, ActiveModel::ArraySerializerSupport)
|
|
end
|
|
|
|
begin
|
|
require 'action_controller'
|
|
require 'action_controller/serialization'
|
|
|
|
ActiveSupport.on_load(:action_controller) do
|
|
include ::ActionController::Serialization
|
|
end
|
|
rescue LoadError => ex
|
|
# rails on installed, continuing
|
|
end
|
|
|
|
ActiveSupport.run_load_hooks(:active_model_serializers, ActiveModel::Serializer)
|