Project

General

Profile

« Previous | Next » 

Revision 9a3248b3

Added by Dominic Cleal over 10 years ago

fixes #4005 - ensure standalone Rabl.render works outside of a controller

(cherry picked from commit 858708c466398ac5f42bb1bb0fd6c1e531e31385)

View differences:

config/initializers/rabl_init.rb
class Engine
def api_version
response.headers["Foreman_api_version"]
respond_to?(:response) ? response.headers["Foreman_api_version"] : '1'
end
def default_options
......
# 2) custom - pass ?params[:root_name]=custom_name in URL
def data_name(data_token)
# custom object root
return params['root_name'] if params['root_name'].present? && !['false', false].include?(params['root_name'])
return params['root_name'] if respond_to?(:params) && params['root_name'].present? && !['false', false].include?(params['root_name'])
# no object root for v2
return nil if api_version.to_i > 1 || ['false', false].include?(params['root_name'])
return nil if !respond_to?(:params) || api_version.to_i > 1 || ['false', false].include?(params['root_name'])
# otherwise return super since v1 has object root (config.include_child_root = true)
super
end
test/unit/rabl_test.rb
require 'test_helper'
require 'ostruct'
class RablTest < ActiveSupport::TestCase
test 'render of single template' do
rendered = Rabl.render(OpenStruct.new(:name => 'foo'),
'api/v2/domains/show',
:format => :json,
:view_path => 'app/views')
loaded = JSON.load(rendered)
assert_equal Hash, loaded.class
assert_equal 'foo', loaded['name']
end
test 'render of collection template' do
rendered = Rabl.render([OpenStruct.new(:name => 'foo')],
'api/v2/domains/index',
:format => :json,
:view_path => 'app/views')
loaded = JSON.load(rendered)
assert_equal Array, loaded.class
assert_equal Hash, loaded[0].class
assert_equal 'foo', loaded[0]['name']
end
end

Also available in: Unified diff