require 'spec_helper'
describe Gon::Global do
before(:each) do
Gon::Global.clear
Gon::Request.instance_variable_set(:@request_env, nil)
end
describe '#all_variables' do
it 'returns all variables in hash' do
Gon.global.a = 1
Gon.global.b = 2
Gon.global.c = Gon.global.a + Gon.global.b
Gon.global.c.should == 3
Gon.global.all_variables.should == {'a' => 1, 'b' => 2, 'c' => 3}
end
it 'supports all data types' do
Gon.global.clear
Gon.global.int = 1
Gon.global.float = 1.1
Gon.global.string = 'string'
Gon.global.array = [ 1, 'string' ]
Gon.global.hash_var = { :a => 1, :b => '2'}
Gon.global.hash_w_array = { :a => [ 2, 3 ] }
Gon.global.klass = Hash
end
end
describe '#include_gon' do
before(:each) do
Gon.clear
Gon.global.clear
ActionView::Base.
instance_methods.
map(&:to_s).
include?('include_gon').should == true
@base = ActionView::Base.new
@base.request = request
end
it 'outputs correct js with an integer' do
Gon.global.int = 1
@base.include_gon.should == ""
end
it 'outputs correct js with an integer and integer in Gon' do
Gon::Request.
instance_variable_set(:@request_id, request.object_id)
Gon::Request.env = {}
Gon.int = 1
Gon.global.int = 1
@base.include_gon.should == ""
end
it 'outputs correct js with a string' do
Gon.global.str = %q(a'b"c)
@base.include_gon.should == ""
end
it 'outputs correct js with a script string' do
Gon.global.str = %q()
@base.include_gon.should == "\"};" +
"\n//]]>\n" +
""
end
it 'outputs correct js with a unicode line separator' do
Gon.global.str = "\u2028"
@base.include_gon.should == ""
end
end
it 'returns exception if try to set public method as variable' do
Gon.global.clear
lambda { Gon.global.all_variables = 123 }.should raise_error
lambda { Gon.global.rabl = 123 }.should raise_error
end
context 'with jbuilder and rabl' do
before :each do
Gon.global.clear
controller.instance_variable_set('@objects', objects)
end
let(:controller) { ActionController::Base.new }
let(:objects) { [1,2] }
it 'works fine with rabl' do
Gon.global.rabl :template =>'spec/test_data/sample.rabl', :controller => controller
Gon.global.objects.length.should == 2
end
it 'works fine with jbuilder' do
Gon.global.jbuilder :template =>'spec/test_data/sample.json.jbuilder', :controller => controller
Gon.global.objects.length.should == 2
end
it 'should throw exception, if use rabl or jbuilder without :template' do
lambda { Gon.global.rabl }.should raise_error
lambda { Gon.global.jbuilder }.should raise_error
end
end
after(:all) do
Gon.global.clear
end
def request
@request ||= double 'request', :env => {}
end
end