diff --git a/lib/locomotive/liquid/drops/current_user.rb b/lib/locomotive/liquid/drops/current_user.rb new file mode 100644 index 00000000..31b4d00f --- /dev/null +++ b/lib/locomotive/liquid/drops/current_user.rb @@ -0,0 +1,21 @@ +module Locomotive + module Liquid + module Drops + class CurrentUser < Base + + def logged_in? + _source.present? + end + + def name + _source.name if logged_in? + end + + def email + _source.email if logged_in? + end + + end + end + end +end diff --git a/lib/locomotive/render.rb b/lib/locomotive/render.rb index 3e23d3bc..821abaaa 100644 --- a/lib/locomotive/render.rb +++ b/lib/locomotive/render.rb @@ -55,7 +55,8 @@ module Locomotive 'today' => Date.today, 'locale' => I18n.locale, 'default_locale' => current_site.default_locale.to_s, - 'locales' => current_site.locales + 'locales' => current_site.locales, + 'current_user' => Locomotive::Liquid::Drops::CurrentUser.new(current_locomotive_account) } assigns.merge!(Locomotive.config.context_assign_extensions) @@ -105,4 +106,4 @@ module Locomotive end end -end \ No newline at end of file +end diff --git a/spec/lib/locomotive/liquid/drops/current_user.rb b/spec/lib/locomotive/liquid/drops/current_user.rb new file mode 100644 index 00000000..45980a04 --- /dev/null +++ b/spec/lib/locomotive/liquid/drops/current_user.rb @@ -0,0 +1,63 @@ +require 'spec_helper' + +describe Locomotive::Liquid::Drops::CurrentUser do + + before(:each) do + @page = FactoryGirl.build(:sub_page) + + @site = @page.site + @site.pages.expects(:any_in).returns([@page]) + + @controller = Locomotive::TestController.new + @controller.stubs(:flash).returns(ActionDispatch::Flash::FlashHash.new()) + @controller.stubs(:params).returns(:url => '/subpage') + @controller.stubs(:request).returns(OpenStruct.new(:url => '/subpage', :fullpath => '/subpage')) + @controller.current_site = @site + + @admin = FactoryGirl.build(:admin).account + end + + def expect_render(template, text) + @page.raw_template = template + @page.send(:serialize_template) + @controller.expects(:render).with(:text => text, :layout => false, :status => :ok).returns(true) + @controller.send(:render_locomotive_page) + end + + context '#logged_in?' do + it 'returns false when no user is logged in' do + expect_render('{{ current_user.logged_in? }}', 'false') + end + it 'returns true when there is a user logged in' do + @controller.expects(:current_admin).twice.returns(true) + expect_render('{{ current_user.logged_in? }}', 'true') + end + end + + context '#name' do + it 'returns nothing when no user is logged in' do + expect_render('{{ current_user.name }}', '') + end + it 'returns the username when the user is logged in' do + @controller.expects(:current_admin).twice.returns(@admin) + expect_render('{{ current_user.name }}', 'Admin') + end + end + + context '#email' do + it 'returns nothing when no user is logged in' do + expect_render('{{ current_user.email }}', '') + end + it 'returns the username when the user is logged in' do + @controller.expects(:current_admin).twice.returns(@admin) + expect_render('{{ current_user.email }}', 'admin@locomotiveapp.org') + end + end + + context '#logout_path' do + it 'returns the logout url' do + expect_render('{{ current_user.logout_path }}', '/admin/sign_out') + end + end + +end