diff --git a/plugins/virtuoso/lib/virtuoso_plugin.rb b/plugins/virtuoso/lib/virtuoso_plugin.rb index 7522eb6..ebf6ac6 100644 --- a/plugins/virtuoso/lib/virtuoso_plugin.rb +++ b/plugins/virtuoso/lib/virtuoso_plugin.rb @@ -17,15 +17,25 @@ class VirtuosoPlugin < Noosfero::Plugin end def virtuoso_client - @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) + @virtuoso_client ||= virtuoso_client_builder(settings.virtuoso_uri, settings.virtuoso_username, settings.virtuoso_password) end - + + def virtuoso_readonly_client + @virtuoso_readonly_client ||= virtuoso_client_builder(settings.virtuoso_uri, settings.virtuoso_readonly_username, settings.virtuoso_readonly_password) + end + def js_files ['edit-server-list'] - end + end def stylesheet? true end + protected + + def virtuoso_client_builder(uri, username, password) + RDF::Virtuoso::Repository.new("#{uri}/sparql", :update_uri => "#{uri}/sparql-auth", :username => username, :password => password, :auth_method => 'digest', :timeout => 30) + end + end diff --git a/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb b/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb index e541f57..c4025da 100644 --- a/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb +++ b/plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb @@ -37,7 +37,7 @@ class VirtuosoPlugin::TriplesTemplate < Article def template_content begin - results = plugin.virtuoso_client.query(query) + results = plugin.virtuoso_readonly_client.query(query) liquid_template = Liquid::Template.parse(template) page = liquid_template.render('results' => results) transform_html(page) diff --git a/plugins/virtuoso/test/unit/triples_template_test.rb b/plugins/virtuoso/test/unit/triples_template_test.rb index ed20532..eb18e1e 100644 --- a/plugins/virtuoso/test/unit/triples_template_test.rb +++ b/plugins/virtuoso/test/unit/triples_template_test.rb @@ -10,8 +10,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase should 'evaluate template using query results' do article.stubs(:plugin).returns(mock) - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) - article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) article.template = "{% for row in results %}{{row.var}}{% endfor %}" assert_match /Hello World/, article.template_content @@ -19,8 +19,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase should 'display error message when failed to execute the query' do article.stubs(:plugin).returns(mock) - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) - article.plugin.virtuoso_client.expects(:query).raises(RuntimeError.new) + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) + article.plugin.virtuoso_readonly_client.expects(:query).raises(RuntimeError.new) article.template = "{% for row in results %}{{row.var}}{% endfor %}" assert_equal "Failed to process the template", article.template_content @@ -28,8 +28,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase should 'transform css into inline stylesheet' do article.stubs(:plugin).returns(mock) - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) - article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) article.template = "{% for row in results %}

{{row.var}}

{% endfor %}" article.stylesheet = "p {color: red}" @@ -40,8 +40,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase should 'do not allow js injection' do article.stubs(:plugin).returns(mock) - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) - article.plugin.virtuoso_client.expects(:query).returns([{'var' => RDF::Literal.new('')}]) + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => RDF::Literal.new('')}]) article.template = "{% for row in results %}{{row.var}}{% endfor %}" assert_no_match /