active_model_serializers/lib/active_model/serializer/adapter.rb
Tema Bolshakov 6cc4fa0258 * Configure adapter using ActiveModel::Serializer.config.adapter
* Get adapter instance using ActiveModel::Serializer::Adapter.adapter_for(serializer)
2014-08-27 09:05:28 +04:00

40 lines
1.4 KiB
Ruby

module ActiveModel
class Serializer
class Adapter
extend ActiveSupport::Autoload
autoload :SimpleAdapter
autoload :NullAdapter
def initialize(serializer)
@attributes = serializer.attributes
end
def serializable_hash(options = {})
raise NotImplementedError, 'This is abstract method. Should be implemented at concrete adapter.'
end
def to_json(options = {})
raise NotImplementedError, 'This is abstract method. Should be implemented at concrete adapter.'
end
def self.adapter_for(serializer)
adapter_class = case serializer.config.adapter
when Symbol
class_name = "ActiveModel::Serializer::Adapter::#{serializer.config.adapter.to_s.classify}Adapter"
if Object.const_defined?(class_name)
Object.const_get(class_name)
end
when Class
serializer.config.adapter
end
unless adapter_class
valid_adapters = self.constants.map { |klass| ":#{klass.to_s.sub('Adapter', '').downcase}" }
raise ArgumentError, "Unknown adapter: #{serializer.config.adapter}. Valid adapters are: #{valid_adapters}"
end
adapter_class.new(serializer)
end
end
end
end