From 49f7fe24ae0f28e034c64841fe75d9c389df24d6 Mon Sep 17 00:00:00 2001 From: ccocchi Date: Tue, 3 Jul 2012 17:45:23 +0200 Subject: [PATCH 1/2] 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 From 5c1490c24600f302c8c7d9e3c2ac76711cdc9d75 Mon Sep 17 00:00:00 2001 From: ccocchi Date: Tue, 11 Sep 2012 11:49:07 +0200 Subject: [PATCH 2/2] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e43728..c443a3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # CHANGELOG +## 0.1.3 (unreleased) + * Add custom Responder + ## 0.1.2 * Add RablRails#render method (see README or source code) * Fix fail when JSON engine is not found. Now fallback to MultiJson.default_adapter