Implement basic rendering

Woo actioncontroller
This commit is contained in:
Steve Klabnik
2014-07-09 17:52:31 -04:00
parent 45803f1aa1
commit 970b542549
6 changed files with 102 additions and 2 deletions

View File

@@ -0,0 +1,24 @@
require 'active_support/core_ext/class/attribute'
module ActionController
module Serialization
extend ActiveSupport::Concern
include ActionController::Renderers
def _render_option_json(resource, options)
serializer = ActiveModel::Serializer.serializer_for(resource)
if serializer
# omg hax
object = serializer.new(resource)
adapter = ActiveModel::Serializer::Adapter::NullAdapter.new(object)
super(adapter, options)
else
super
end
end
end
end

View File

@@ -19,6 +19,28 @@ module ActiveModel
end
end
if RUBY_VERSION >= '2.0'
def self.serializer_for(resource)
if resource.respond_to?(:to_ary)
ArraySerializer
else
begin
Object.const_get "#{resource.class.name}Serializer"
rescue NameError
nil
end
end
end
else
def self.serializer_for(resource)
if resource.respond_to?(:to_ary)
ArraySerializer
else
"#{resource.class.name}Serializer".safe_constantize
end
end
end
attr_accessor :object
def initialize(object)

View File

@@ -6,10 +6,10 @@ module ActiveModel
@serializer = serializer
end
def to_json
def to_json(options={})
@serializer.attributes.each_with_object({}) do |(attr, value), h|
h[attr] = value
end.to_json
end.to_json # FIXME: why does passing options here cause {}?
end
end
end

View File

@@ -4,3 +4,14 @@ require "active_model/serializer/version"
require "active_model/serializer"
require "active_model/serializer/adapter/null_adapter"
begin
require 'action_controller'
require 'action_controller/serialization'
ActiveSupport.on_load(:action_controller) do
include ::ActionController::Serialization
end
rescue LoadError
# rails not installed, continuing
end