From a13915d99bc334a2e92c21d5913120d664741b14 Mon Sep 17 00:00:00 2001 From: Caio SBA Date: Thu, 4 Aug 2011 17:25:09 -0300 Subject: [PATCH] Creating hotspot to the user_data --- app/controllers/public/account_controller.rb | 2 ++ lib/noosfero/plugin.rb | 6 ++++++ public/javascripts/application.js | 2 ++ test/functional/account_controller_test.rb | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+), 0 deletions(-) diff --git a/app/controllers/public/account_controller.rb b/app/controllers/public/account_controller.rb index 75607c4..256442a 100644 --- a/app/controllers/public/account_controller.rb +++ b/app/controllers/public/account_controller.rb @@ -224,6 +224,8 @@ class AccountController < ApplicationController session[:notice] = nil # consume the notice end + @plugins.enabled_plugins.each { |plugin| user_data.merge!(plugin.user_data_extras) } + render :text => user_data.to_json, :layout => false, :content_type => "application/javascript" end diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb index ddf1a76..00a8ce5 100644 --- a/lib/noosfero/plugin.rb +++ b/lib/noosfero/plugin.rb @@ -121,4 +121,10 @@ class Noosfero::Plugin [] end + # -> Adds stuff in user data hash + # returns = { :some_data => some_value, :another_data => another_value } + def user_data_extras + {} + end + end diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 438eb39..77656eb 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -475,6 +475,8 @@ jQuery(function($) { if (data.notice) { display_notice(data.notice); } + // Bind this event to do more actions with the user data (for example, inside plugins) + $(window).trigger("userDataLoaded", data); }); function loggedInDataCallBack(data) { diff --git a/test/functional/account_controller_test.rb b/test/functional/account_controller_test.rb index a7134d6..f62e024 100644 --- a/test/functional/account_controller_test.rb +++ b/test/functional/account_controller_test.rb @@ -670,6 +670,25 @@ class AccountControllerTest < Test::Unit::TestCase assert_equal 'unavailable', assigns(:status_class) end + should 'merge user data with extra stuff from plugins' do + plugin1 = mock() + plugin1.stubs(:user_data_extras).returns({ :foo => 'bar' }) + + plugin2 = mock() + plugin2.stubs(:user_data_extras).returns({ :test => 5 }) + + enabled_plugins = [plugin1, plugin2] + + plugins = mock() + plugins.stubs(:enabled_plugins).returns(enabled_plugins) + Noosfero::Plugin::Manager.stubs(:new).returns(plugins) + + login_as 'ze' + + xhr :get, :user_data + assert_equal User.find_by_login('ze').data_hash.merge({ 'foo' => 'bar', 'test' => 5 }), ActiveSupport::JSON.decode(@response.body) + end + protected def new_user(options = {}, extra_options ={}) data = {:profile_data => person_data} -- libgit2 0.21.2