Commit 8ae986e8935acb068a78767ed8db109d54a26389

Authored by Victor Costa
1 parent e174607d

virtuoso: handle errors when rendering templates

plugins/virtuoso/lib/virtuoso_plugin.rb
... ... @@ -20,4 +20,8 @@ class VirtuosoPlugin < Noosfero::Plugin
20 20 @virtuoso_client ||= RDF::Virtuoso::Repository.new("#{settings.virtuoso_uri}/sparql", :update_uri => "#{settings.virtuoso_uri}/sparql-auth", :username => settings.virtuoso_username, :password => settings.virtuoso_password, :auth_method => 'digest', :timeout => 30)
21 21 end
22 22  
  23 + def stylesheet?
  24 + true
  25 + end
  26 +
23 27 end
... ...
plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb
... ... @@ -25,9 +25,14 @@ class VirtuosoPlugin::TriplesTemplate < Article
25 25 end
26 26  
27 27 def template_content
28   - results = plugin.virtuoso_client.query(query)
29   - liquid_template = Liquid::Template.parse("{% for row in results %}#{template}{% endfor %}")
30   - liquid_template.render('results' => results)
  28 + begin
  29 + results = plugin.virtuoso_client.query(query)
  30 + liquid_template = Liquid::Template.parse("{% for row in results %}#{template}{% endfor %}")
  31 + liquid_template.render('results' => results)
  32 + rescue => ex
  33 + logger.info ex.to_s
  34 + "Failed to process the template"
  35 + end
31 36 end
32 37  
33 38 end
... ...
plugins/virtuoso/test/unit/triples_template_test.rb 0 → 100644
... ... @@ -0,0 +1,29 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class TriplesTemplateTest < ActiveSupport::TestCase
  4 +
  5 + def setup
  6 + @article = VirtuosoPlugin::TriplesTemplate.new
  7 + end
  8 +
  9 + attr_reader :article
  10 +
  11 + should 'evaluate template using query results' do
  12 + article.stubs(:plugin).returns(mock)
  13 + article.plugin.expects(:virtuoso_client).at_least_once.returns(mock)
  14 + article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}])
  15 + article.template = "{{row.var}}"
  16 +
  17 + assert_equal 'Hello World', article.template_content
  18 + end
  19 +
  20 + should 'display error message when failed to execute the query' do
  21 + article.stubs(:plugin).returns(mock)
  22 + article.plugin.expects(:virtuoso_client).at_least_once.returns(mock)
  23 + article.plugin.virtuoso_client.expects(:query).raises(RuntimeError.new)
  24 + article.template = "{{row.var}}"
  25 +
  26 + assert_equal "Failed to process the template", article.template_content
  27 + end
  28 +
  29 +end
... ...