Commit 2f7c368f7df1c3a0f99d9f87fe9265fc479cfb08
1 parent
f61d401e
Exists in
temp_ratings
Add ajax route to rate community
Signed-off-by: DylanGuedes <djmgguedes@gmail.com> Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Filipe Ribeiro <firibeiro77@live.com>
Showing
2 changed files
with
81 additions
and
0 deletions
Show diff stats
plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb
0 → 100644
| ... | ... | @@ -0,0 +1,47 @@ |
| 1 | +class CommunitiesRatingsPluginProfileController < ProfileController | |
| 2 | + | |
| 3 | + # Inside a community, receive a ajax from the current logged person with its | |
| 4 | + # rate for the community. If the user already rated this commnity, update its | |
| 5 | + # rate value or else, create a new one | |
| 6 | + def rate | |
| 7 | + # If its not a ajax request or the profile isn't a community | |
| 8 | + if (not request.xhr?) or (profile.type != "Community") | |
| 9 | + # Redirect to the profile home page | |
| 10 | + return redirect_to :controller => 'profile', :action => :index | |
| 11 | + end | |
| 12 | + | |
| 13 | + community_rating = get_community_rating(user, profile) | |
| 14 | + community_rating.value = params[:value].to_i | |
| 15 | + | |
| 16 | + if community_rating.save | |
| 17 | + render :json => { | |
| 18 | + success: true, | |
| 19 | + message: "Successfully rated community #{community_rating.community.name}" | |
| 20 | + } | |
| 21 | + else | |
| 22 | + render :json => { | |
| 23 | + success: false, | |
| 24 | + message: "Could not rate community #{community_rating.community.name}", | |
| 25 | + errors: community_rating.errors.full_messages | |
| 26 | + } | |
| 27 | + end | |
| 28 | + end | |
| 29 | + | |
| 30 | + private | |
| 31 | + | |
| 32 | + # If there is already a rate by the current logged user to this community | |
| 33 | + # return it or else, prepare a new one | |
| 34 | + def get_community_rating person, community | |
| 35 | + already_rated = CommunityRating.where( | |
| 36 | + :community_id=>community.id, | |
| 37 | + :person_id=>person.id | |
| 38 | + ) | |
| 39 | + | |
| 40 | + if already_rated.count != 0 | |
| 41 | + already_rated.first | |
| 42 | + else | |
| 43 | + CommunityRating.new :person => person, | |
| 44 | + :community => community | |
| 45 | + end | |
| 46 | + end | |
| 47 | +end | ... | ... |
plugins/communities_ratings/test/functional/communities_ratings_plugin_profile_controller_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,34 @@ |
| 1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | |
| 2 | +require( | |
| 3 | + File.dirname(__FILE__) + | |
| 4 | + '/../../controllers/communities_ratings_plugin_profile_controller' | |
| 5 | +) | |
| 6 | + | |
| 7 | +# Re-raise errors caught by the controller. | |
| 8 | +class CommunitiesRatingsPluginProfileController; def rescue_action(e) raise e end; end | |
| 9 | + | |
| 10 | +class CommunitiesRatingsPluginProfileControllerTest < ActionController::TestCase | |
| 11 | + | |
| 12 | + def setup | |
| 13 | + @controller = CommunitiesRatingsPluginProfileController.new | |
| 14 | + @request = ActionController::TestRequest.new | |
| 15 | + @response = ActionController::TestResponse.new | |
| 16 | + | |
| 17 | + @person = create_user('testuser').person | |
| 18 | + @community = create_user('testcommunity').person | |
| 19 | + | |
| 20 | + login_as(@person.identifier) | |
| 21 | + @controller.stubs(:logged_in?).returns(true) | |
| 22 | + @controller.stubs(:current_user).returns(@person.user) | |
| 23 | + end | |
| 24 | + | |
| 25 | + | |
| 26 | + test "should logged person rate a community" do | |
| 27 | + #xhr :post , :rate, :profile => @community, :value => 4 | |
| 28 | + xhr :post , url_for(:action=>:rate), :profile => @community, :value => 4 | |
| 29 | + | |
| 30 | + puts "="*80, @response.body, "="*80 | |
| 31 | + assert_equal true, true | |
| 32 | + end | |
| 33 | + | |
| 34 | +end | ... | ... |