From 3c1d3d845f90bac4956f1ee0334b37c35a5b7bf2 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Tue, 31 Mar 2015 15:14:29 -0300 Subject: [PATCH] Manage badges --- controllers/admin/gamification_plugin_badges_controller.rb | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ controllers/gamification_plugin_admin_controller.rb | 12 ++++++++++++ lib/gamification_plugin.rb | 14 ++++++++------ lib/gamification_plugin/badge.rb | 4 ++++ test/functional/gamification_plugin_badges_controller_test.rb | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ views/gamification_plugin_admin/index.html.erb | 2 ++ views/gamification_plugin_badges/_form.html.erb | 35 +++++++++++++++++++++++++++++++++++ views/gamification_plugin_badges/edit.html.erb | 6 ++++++ views/gamification_plugin_badges/index.html.erb | 29 +++++++++++++++++++++++++++++ views/gamification_plugin_badges/new.html.erb | 5 +++++ views/gamification_plugin_badges/show.html.erb | 27 +++++++++++++++++++++++++++ 11 files changed, 224 insertions(+), 6 deletions(-) create mode 100644 controllers/admin/gamification_plugin_badges_controller.rb create mode 100644 test/functional/gamification_plugin_badges_controller_test.rb create mode 100644 views/gamification_plugin_badges/_form.html.erb create mode 100644 views/gamification_plugin_badges/edit.html.erb create mode 100644 views/gamification_plugin_badges/index.html.erb create mode 100644 views/gamification_plugin_badges/new.html.erb create mode 100644 views/gamification_plugin_badges/show.html.erb diff --git a/controllers/admin/gamification_plugin_badges_controller.rb b/controllers/admin/gamification_plugin_badges_controller.rb new file mode 100644 index 0000000..4267481 --- /dev/null +++ b/controllers/admin/gamification_plugin_badges_controller.rb @@ -0,0 +1,48 @@ +class GamificationPluginBadgesController < PluginAdminController + + def index + @gamification_plugin_badges = environment.gamification_plugin_badges + end + + def show + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + end + + def new + @gamification_plugin_badge = GamificationPlugin::Badge.new + end + + def edit + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + end + + def create + @gamification_plugin_badge = GamificationPlugin::Badge.new(params[:gamification_plugin_badge]) + @gamification_plugin_badge.owner = environment + + if @gamification_plugin_badge.save + session[:notice] = _('Badge was successfully created.') + redirect_to :action => :index + else + render action: "new" + end + end + + def update + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + + if @gamification_plugin_badge.update_attributes(params[:gamification_plugin_badge]) + session[:notice] = _('Badge was successfully updated.') + redirect_to :action => :index + else + render action: "edit" + end + end + + def destroy + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + @gamification_plugin_badge.destroy + + redirect_to :action => :index + end +end diff --git a/controllers/gamification_plugin_admin_controller.rb b/controllers/gamification_plugin_admin_controller.rb index 4acd339..e3a725a 100644 --- a/controllers/gamification_plugin_admin_controller.rb +++ b/controllers/gamification_plugin_admin_controller.rb @@ -13,4 +13,16 @@ class GamificationPluginAdminController < PluginAdminController end end + def new_badge + if request.post? + badge = GamificationPlugin::Badge.new(params[:badge]) + badge.owner = environment + badge.save! + session[:notice] = 'Settings succefully saved.' + redirect_to :action => 'index' + else + render :file => 'gamification_plugin_admin/new_badge' + end + end + end diff --git a/lib/gamification_plugin.rb b/lib/gamification_plugin.rb index 6f9329f..f187f42 100644 --- a/lib/gamification_plugin.rb +++ b/lib/gamification_plugin.rb @@ -29,12 +29,14 @@ class GamificationPlugin < Noosfero::Plugin }] end - Merit.setup do |config| - config.checks_on_each_request = false - config.user_model_name = 'Profile' - config.current_user_method = 'current_person' - end + ActionDispatch::Reloader.to_prepare do + Merit.setup do |config| + config.checks_on_each_request = false + config.user_model_name = 'Profile' + config.current_user_method = 'current_person' + end - require 'merit_ext' + require_dependency 'merit_ext' + end end diff --git a/lib/gamification_plugin/badge.rb b/lib/gamification_plugin/badge.rb index d80fa5e..3da5113 100644 --- a/lib/gamification_plugin/badge.rb +++ b/lib/gamification_plugin/badge.rb @@ -6,4 +6,8 @@ class GamificationPlugin::Badge < Noosfero::Plugin::ActiveRecord serialize :custom_fields + def threshold + (custom_fields || {}).fetch(:threshold, '') + end + end diff --git a/test/functional/gamification_plugin_badges_controller_test.rb b/test/functional/gamification_plugin_badges_controller_test.rb new file mode 100644 index 0000000..719f48d --- /dev/null +++ b/test/functional/gamification_plugin_badges_controller_test.rb @@ -0,0 +1,48 @@ +require 'test_helper' + +class GamificationPluginBadgesControllerTest < ActionController::TestCase + + setup do + @environment = Environment.default + @gamification_plugin_badge = GamificationPlugin::Badge.create!(:name => 'sample_badge', :owner => @environment) + login_as(create_admin_user(@environment)) + end + + should "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:gamification_plugin_badges) + end + + should "should get new" do + get :new + assert_response :success + end + + should "should create gamification_plugin_badge" do + assert_difference('GamificationPlugin::Badge.count') do + post :create, gamification_plugin_badge: { description: @gamification_plugin_badge.description, level: @gamification_plugin_badge.level, name: @gamification_plugin_badge.name, custom_fields: {threshold: @gamification_plugin_badge.threshold} } + end + end + + should "should show gamification_plugin_badge" do + get :show, id: @gamification_plugin_badge + assert_response :success + end + + should "should get edit" do + get :edit, id: @gamification_plugin_badge + assert_response :success + end + + should "should update gamification_plugin_badge" do + put :update, id: @gamification_plugin_badge, gamification_plugin_badge: { description: @gamification_plugin_badge.description, level: @gamification_plugin_badge.level, name: @gamification_plugin_badge.name, custom_fields: {threshold: @gamification_plugin_badge.threshold} } + assert assigns(:gamification_plugin_badge) + end + + should "should destroy gamification_plugin_badge" do + assert_difference('GamificationPlugin::Badge.count', -1) do + delete :destroy, id: @gamification_plugin_badge + end + end +end diff --git a/views/gamification_plugin_admin/index.html.erb b/views/gamification_plugin_admin/index.html.erb index 51de870..130f4ce 100644 --- a/views/gamification_plugin_admin/index.html.erb +++ b/views/gamification_plugin_admin/index.html.erb @@ -15,3 +15,5 @@ <% end %> <% end %> + +<%= link_to _('Badges'), :controller => 'gamification_plugin_badges' %> diff --git a/views/gamification_plugin_badges/_form.html.erb b/views/gamification_plugin_badges/_form.html.erb new file mode 100644 index 0000000..c74dd37 --- /dev/null +++ b/views/gamification_plugin_badges/_form.html.erb @@ -0,0 +1,35 @@ +<%= form_for(@gamification_plugin_badge, :url => {:action => @gamification_plugin_badge.new_record? ? :create : :update}) do |f| %> + <% if @gamification_plugin_badge.errors.any? %> +
+

<%= pluralize(@gamification_plugin_badge.errors.count, "error") %> prohibited this gamification_plugin_badge from being saved:

+ + +
+ <% end %> + +
+ <%= f.label :name %>
+ <%= f.text_field :name %> +
+
+ <%= f.label :description %>
+ <%= f.text_field :description %> +
+
+ <%= f.label :level %>
+ <%= f.text_field :level %> +
+ <%= f.fields_for :custom_fields do |c| %> +
+ <%= c.label :threshold %>
+ <%= c.text_field :threshold %> +
+ <% end %> +
+ <%= f.submit %> +
+<% end %> diff --git a/views/gamification_plugin_badges/edit.html.erb b/views/gamification_plugin_badges/edit.html.erb new file mode 100644 index 0000000..8f14c82 --- /dev/null +++ b/views/gamification_plugin_badges/edit.html.erb @@ -0,0 +1,6 @@ +

<%= _('Gamification Plugin: Editing Badge') %>

+ +<%= render 'form' %> + +<%= link_to 'Show', :action => :show, :id => @gamification_plugin_badge.id %> | +<%= link_to 'Back', :action => :index %> diff --git a/views/gamification_plugin_badges/index.html.erb b/views/gamification_plugin_badges/index.html.erb new file mode 100644 index 0000000..c02a040 --- /dev/null +++ b/views/gamification_plugin_badges/index.html.erb @@ -0,0 +1,29 @@ +

<%= _('Gamification Plugin: Listing Badges') %>

+ + + + + + + + + + + + +<% @gamification_plugin_badges.each do |gamification_plugin_badge| %> + + + + + + + + + +<% end %> +
NameDescriptionLevelThreshold
<%= gamification_plugin_badge.name %><%= gamification_plugin_badge.description %><%= gamification_plugin_badge.level %><%= gamification_plugin_badge.threshold %><%= link_to 'Show', :action => :show, :id => gamification_plugin_badge.id %><%= link_to 'Edit', :action => :edit, :id => gamification_plugin_badge.id %><%= link_to 'Destroy', :action => :destroy, :id => gamification_plugin_badge.id, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Badge', :action => :new %> diff --git a/views/gamification_plugin_badges/new.html.erb b/views/gamification_plugin_badges/new.html.erb new file mode 100644 index 0000000..4351db8 --- /dev/null +++ b/views/gamification_plugin_badges/new.html.erb @@ -0,0 +1,5 @@ +

<%= _('Gamification Plugin: New Badge') %>

+ +<%= render 'form' %> + +<%= link_to 'Back', :action => :index %> diff --git a/views/gamification_plugin_badges/show.html.erb b/views/gamification_plugin_badges/show.html.erb new file mode 100644 index 0000000..65c84a6 --- /dev/null +++ b/views/gamification_plugin_badges/show.html.erb @@ -0,0 +1,27 @@ +

<%= _('Gamification Plugin: Show Badge') %>

+ +

<%= notice %>

+ +

+ Name: + <%= @gamification_plugin_badge.name %> +

+ +

+ Description: + <%= @gamification_plugin_badge.description %> +

+ +

+ Level: + <%= @gamification_plugin_badge.level %> +

+ +

+ Threshold: + <%= @gamification_plugin_badge.threshold %> +

+ + +<%= link_to 'Edit', :action => :edit, :id => @gamification_plugin_badge.id %> | +<%= link_to 'Back', :action => :index %> -- libgit2 0.21.2