Commit 7bed0f9568b2f84919fd46a2d7099cb429add489

Authored by Joao M. M. da Silva + Alessandro Palmeira
Committed by Paulo Meireles
1 parent 9462c19e

[Mezuro] Reading group content.

plugins/mezuro/lib/mezuro_plugin.rb
... ... @@ -18,7 +18,8 @@ class MezuroPlugin < Noosfero::Plugin
18 18 if context.profile.is_a?(Community)
19 19 MezuroPlugin::ProjectContent
20 20 else
21   - MezuroPlugin::ConfigurationContent
  21 + [MezuroPlugin::ConfigurationContent,
  22 + MezuroPlugin::ReadingGroupContent]
22 23 end
23 24 end
24 25  
... ... @@ -26,7 +27,8 @@ class MezuroPlugin < Noosfero::Plugin
26 27 if context.profile.is_a?(Community)
27 28 {:title => _('Mezuro project'), :url => {:controller => 'cms', :action => 'new', :profile => context.profile.identifier, :type => 'MezuroPlugin::ProjectContent'}, :icon => 'mezuro' }
28 29 else
29   - {:title => _('Mezuro configuration'), :url => {:controller => 'cms', :action => 'new', :profile => context.profile.identifier, :type => 'MezuroPlugin::ConfigurationContent'}, :icon => 'mezuro' }
  30 + [{:title => _('Mezuro configuration'), :url => {:controller => 'cms', :action => 'new', :profile => context.profile.identifier, :type => 'MezuroPlugin::ConfigurationContent'}, :icon => 'mezuro' },
  31 + {:title => _('Mezuro Reading Group'), :url => {:controller => 'cms', :action => 'new', :profile => context.profile.identifier, :type => 'MezuroPlugin::ReadingGroupContent'}, :icon => 'mezuro' }]
30 32 end
31 33 end
32 34  
... ...
plugins/mezuro/lib/mezuro_plugin/reading_group_content.rb 0 → 100644
... ... @@ -0,0 +1,83 @@
  1 +class MezuroPlugin::ReadingGroupContent < Article
  2 + include ActionView::Helpers::TagHelper
  3 +
  4 + settings_items :reading_group_id
  5 +
  6 + def self.short_description
  7 + 'Mezuro reading group'
  8 + end
  9 +
  10 + def self.description
  11 + 'Set of thresholds to interpret metric results'
  12 + end
  13 +
  14 + def to_html(options = {})
  15 + lambda do
  16 + render :file => 'content_viewer/show_reading_group.rhtml'
  17 + end
  18 + end
  19 +
  20 + def reading_group
  21 + begin
  22 + @reading_group ||= Kalibro::ReadingGroup.find(reading_group_id)
  23 + rescue Exception => error
  24 + errors.add_to_base(error.message)
  25 + end
  26 + @reading_group
  27 + end
  28 +
  29 + def readings
  30 + begin
  31 + @readings ||= Kalibro::Reading.readings_of(reading_group_id)
  32 + rescue Exception => error
  33 + errors.add_to_base(error.message)
  34 + @readings = []
  35 + end
  36 + @readings
  37 + end
  38 +
  39 + def description=(value)
  40 + @description=value
  41 + end
  42 +
  43 + def description
  44 + begin
  45 + @description ||= reading_group.description
  46 + rescue
  47 + @description = ""
  48 + end
  49 + @description
  50 + end
  51 +
  52 + def readings=(value)
  53 + @readings = value.kind_of?(Array) ? value : [value]
  54 + @readings = @readings.map { |element| to_reading(element) }
  55 + end
  56 +
  57 + before_save :send_reading_group_to_service
  58 + after_destroy :destroy_reading_group_from_service
  59 +
  60 + private
  61 +
  62 + def self.to_reading value
  63 + value.kind_of?(Hash) ? Kalibro::Reading.new(value) : value
  64 + end
  65 +
  66 + def send_reading_group_to_service
  67 + created_reading_group = create_kalibro_reading_group
  68 + self.reading_group_id = created_reading_group.id
  69 + end
  70 +
  71 + def create_kalibro_reading_group
  72 + Kalibro::ReadingGroup.create(
  73 + :name => name,
  74 + :description => description,
  75 + :id => self.reading_group_id
  76 + )
  77 + end
  78 +
  79 + def destroy_reading_group_from_service
  80 + reading_group.destroy unless reading_group.nil?
  81 + end
  82 +
  83 +end
... ...
plugins/mezuro/test/fixtures/reading_group_content_fixtures.rb 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +class ReadingGroupContentFixtures
  2 +
  3 + def self.reading_group_content
  4 + content = MezuroPlugin::ReadingGroupContent.new
  5 + content.reading_group_id = 42
  6 + content
  7 + end
  8 +
  9 +end
... ...
plugins/mezuro/test/unit/mezuro_plugin/reading_group_content_test.rb 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +require "test_helper"
  2 +
  3 +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/reading_group_fixtures"
  4 +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/reading_fixtures"
  5 +require "#{RAILS_ROOT}/plugins/mezuro/test/fixtures/reading_group_content_fixtures"
  6 +
  7 +class ReadingGroupContentTest < ActiveSupport::TestCase
  8 +
  9 + def setup
  10 + @reading_group_content = ReadingGroupContentFixtures.reading_group_content
  11 + @reading_group = ReadingGroupFixtures.reading_group
  12 + @reading = ReadingFixtures.reading
  13 + end
  14 +
  15 + should 'provide proper short description' do
  16 + assert_equal 'Mezuro reading group', MezuroPlugin::ReadingGroupContent.short_description
  17 + end
  18 +
  19 + should 'provide proper description' do
  20 + assert_equal 'Set of thresholds to interpret metric results', MezuroPlugin::ReadingGroupContent.description
  21 + end
  22 +
  23 + should 'have an html view' do
  24 + assert_not_nil @reading_group_content.to_html
  25 + end
  26 +
  27 + should 'get reading_group from service' do
  28 + Kalibro::ReadingGroup.expects(:find).with(@reading_group.id).returns(@reading_group)
  29 + assert_equal @reading_group, @reading_group_content.reading_group
  30 + end
  31 +
  32 + should 'add error to base when the reading_group does not exist' do
  33 + Kalibro::ReadingGroup.expects(:find).with(@reading_group.id).raises(Kalibro::Errors::RecordNotFound)
  34 + assert_nil @reading_group_content.errors[:base]
  35 + @reading_group_content.reading_group
  36 + assert_not_nil @reading_group_content.errors[:base]
  37 + end
  38 +
  39 + should 'get readings of the reading_group from service' do
  40 + Kalibro::Reading.expects(:readings_of).with(@reading_group.id).returns([@reading])
  41 + assert_equal [@reading], @reading_group_content.readings
  42 + end
  43 +
  44 + should 'add error to base when getting the readings of a reading_group that does not exist' do
  45 + Kalibro::Reading.expects(:readings_of).with(@reading_group.id).raises(Kalibro::Errors::RecordNotFound)
  46 + assert_nil @reading_group_content.errors[:base]
  47 + @reading_group_content.readings
  48 + assert_not_nil @reading_group_content.errors[:base]
  49 + end
  50 +
  51 +end
... ...
plugins/mezuro/views/cms/mezuro_plugin/_reading_group_content.html.erb 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +<h1> <%= _(MezuroPlugin::ReadingGroupContent.short_description) %> </h1>
  2 +
  3 +<%
  4 + reading_group = @article.title.nil? ? nil : @article.reading_group
  5 +%>
  6 +
  7 +<%= error_messages_for 'reading_group_content' %>
  8 +
  9 +<%= hidden_field_tag 'reading_group_content[profile_id]', profile.id %>
  10 +<%= hidden_field_tag 'id', @article.id %>
  11 +<%= hidden_field_tag 'reading_group_id', reading_group.id %>
  12 +
  13 +<%= required_fields_message %>
  14 +
  15 +<%= required f.text_field(:name) %>
  16 +
  17 +<%= f.text_field :description %><br/>
  18 +
  19 +<!-- partial rendered in app/views/cms/edit.rhtml -->
  20 +<!-- After submit, the action cms/new is called -->
... ...
plugins/mezuro/views/content_viewer/show_reading_group.rhtml 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +<% @reading_group = @page.reading_group %>
  2 +<% unless @page.errors[:base].nil? %>
  3 + <% if @page.errors[:base] == "Kalibro::Errors::RecordNotFound" %>
  4 + <h3>Warning:</h3>
  5 + <p>This reading group doesn't exist on the Web Service. Do you want to <%= link_to 'delete', :action => 'destroy', :controller => 'cms', :profile => @page.profile.identifier, :id => @page.id %> or <%= link_to 'save it again', :action => 'edit', :controller => 'cms', :profile => @page.profile.identifier, :id => @page.id %>?</p>
  6 + <% else %>
  7 + <%= @page.errors[:base] %>
  8 + <% end %>
  9 +<% else %>
  10 +
  11 + <table>
  12 + <tr>
  13 + <td><%= _('Name') %></td>
  14 + <td><%= @reading_group.name %></td>
  15 + </tr>
  16 + <tr>
  17 + <td><%= _('Description') %></td>
  18 + <td><%= @reading_group.description %></td>
  19 + </tr>
  20 + </table>
  21 + <br/>
  22 + <h5><%= _('Readings') %></h5>
  23 + <table>
  24 + <% @page.readings.each do |reading| %>
  25 + <tr>
  26 + <td><%= link_to reading.name, :controller => "mezuro_plugin_reading",
  27 + :profile => @page.profile.identifier,
  28 + :action => "show",
  29 + :id => @page.id,
  30 + :reading_id => reading.id %></td>
  31 + <td ><%= link_to _('Edit'), {:controller => "mezuro_plugin_reading",
  32 + :profile => @page.profile.identifier,
  33 + :action => "edit",
  34 + :id => @page.id,
  35 + :reading_id => reading.id}, :class=>"button with-text icon-edit" %></td>
  36 + <td ><%= link_to _('Remove'), {:controller => "mezuro_plugin_reading",
  37 + :profile => @page.profile.identifier,
  38 + :action => "destroy",
  39 + :id => @page.id,
  40 + :reading_id => reading.id}, :class=>"button with-text icon-delete" %></td>
  41 + </tr>
  42 + <% end %>
  43 + </table>
  44 +
  45 + <br/>
  46 + <%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Reading", :controller => "mezuro_plugin_reading",
  47 + :profile => @page.profile.identifier,
  48 + :action => "new",
  49 + :id => @page.id %><br/>
  50 +
  51 +<% end %>
... ...