From 49f7fe24ae0f28e034c64841fe75d9c389df24d6 Mon Sep 17 00:00:00 2001 From: ccocchi Date: Tue, 3 Jul 2012 17:45:23 +0200 Subject: [PATCH] Add custom Rabl reponder --- lib/rabl-rails.rb | 16 +++++++++++----- lib/rabl-rails/responder.rb | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 lib/rabl-rails/responder.rb diff --git a/lib/rabl-rails.rb b/lib/rabl-rails.rb index 77c6c4c..89b56aa 100644 --- a/lib/rabl-rails.rb +++ b/lib/rabl-rails.rb @@ -14,19 +14,25 @@ require 'rabl-rails/library' require 'rabl-rails/handler' require 'rabl-rails/railtie' - - module RablRails - extend self + autoload :Responder, 'rabl-rails/responder' mattr_accessor :cache_templates @@cache_templates = true - def configure + mattr_accessor :use_custom_responder + @@use_custom_responder = false + + mattr_accessor :responder_default_template + @@responder_default_template = 'show' + + def self.configure yield self + + ActionController::Base.responder = Responder if self.use_custom_responder end - def cache_templates? + def self.cache_templates? ActionController::Base.perform_caching && @@cache_templates end end diff --git a/lib/rabl-rails/responder.rb b/lib/rabl-rails/responder.rb new file mode 100644 index 0000000..fb094bc --- /dev/null +++ b/lib/rabl-rails/responder.rb @@ -0,0 +1,22 @@ +module RablRails + # + # Override default responder's api behavior to not + # user to_format methods on a resource as a default + # representation but instead use a rabl template + # + class Responder < ActionController::Responder + protected + + def api_behavior(error) + rabl_options = options.merge(template: RablRails.responder_default_template) + + if get? + controller.default_render rabl_options + elsif post? + controller.default_render rabl_options.merge!(status: :created, location: api_location) + else + head :no_content + end + end + end +end \ No newline at end of file