publish_my_data 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. data/README.md +2 -3
  2. data/app/controllers/publish_my_data/application_controller.rb +21 -32
  3. data/app/controllers/publish_my_data/datasets_controller.rb +7 -19
  4. data/app/controllers/publish_my_data/resources_controller.rb +18 -24
  5. data/app/controllers/publish_my_data/sparql_controller.rb +6 -3
  6. data/app/controllers/publish_my_data/themes_controller.rb +28 -0
  7. data/app/helpers/publish_my_data/resources_helper.rb +2 -2
  8. data/app/models/publish_my_data/concept.rb +14 -0
  9. data/app/models/publish_my_data/concept_scheme.rb +16 -0
  10. data/app/models/publish_my_data/dataset.rb +48 -13
  11. data/app/models/publish_my_data/ontology.rb +35 -0
  12. data/app/models/publish_my_data/ontology_class.rb +11 -0
  13. data/app/models/publish_my_data/property.rb +11 -0
  14. data/app/models/publish_my_data/rdf_type.rb +1 -0
  15. data/app/models/publish_my_data/resource.rb +80 -6
  16. data/app/models/publish_my_data/theme.rb +34 -0
  17. data/app/views/layouts/publish_my_data/application.html.erb +0 -1
  18. data/app/views/layouts/publish_my_data/error.html.erb +12 -2
  19. data/app/views/publish_my_data/concept_schemes/_concepts.html.erb +3 -0
  20. data/app/views/publish_my_data/concept_schemes/show.html.erb +9 -0
  21. data/app/views/publish_my_data/concepts/show.html.erb +3 -0
  22. data/app/views/publish_my_data/datasets/index.html.erb +4 -4
  23. data/app/views/publish_my_data/datasets/show.html.erb +1 -1
  24. data/app/views/publish_my_data/errors/bad_request.html.erb +1 -0
  25. data/app/views/publish_my_data/errors/not_found.html.erb +1 -1
  26. data/app/views/publish_my_data/errors/timeout.html.erb +1 -0
  27. data/app/views/publish_my_data/errors/uncaught.html.erb +6 -0
  28. data/app/views/publish_my_data/ontologies/_classes.html.erb +3 -0
  29. data/app/views/publish_my_data/ontologies/_properties.html.erb +3 -0
  30. data/app/views/publish_my_data/ontologies/show.html.erb +17 -0
  31. data/app/views/publish_my_data/properties/show.html.erb +3 -0
  32. data/app/views/publish_my_data/resources/_predicates_table.html.erb +12 -4
  33. data/app/views/publish_my_data/resources/_resource_formats.html.erb +5 -5
  34. data/app/views/publish_my_data/resources/_uri_and_label.html.erb +2 -2
  35. data/app/views/publish_my_data/resources/index.html.erb +4 -4
  36. data/app/views/publish_my_data/resources/show.html.erb +3 -3
  37. data/app/views/publish_my_data/sparql/_pagination.html.erb +2 -2
  38. data/app/views/publish_my_data/themes/index.html.erb +12 -0
  39. data/app/views/publish_my_data/themes/show.html.erb +15 -0
  40. data/config/initializers/{tripod.rb → 00_tripod.rb} +0 -0
  41. data/config/initializers/10_vocabularies.rb +6 -0
  42. data/config/initializers/zz_factories.rb +7 -0
  43. data/config/routes.rb +4 -5
  44. data/lib/publish_my_data/defined_by_ontology.rb +10 -0
  45. data/lib/publish_my_data/paginator.rb +63 -0
  46. data/lib/publish_my_data/render_params/concept_render_params.rb +14 -0
  47. data/lib/publish_my_data/render_params/concept_scheme_render_params.rb +14 -0
  48. data/lib/publish_my_data/render_params/ontology_class_render_params.rb +14 -0
  49. data/lib/publish_my_data/render_params/ontology_render_params.rb +14 -0
  50. data/lib/publish_my_data/render_params/property_render_params.rb +14 -0
  51. data/lib/publish_my_data/render_params/resource_render_params.rb +13 -0
  52. data/lib/publish_my_data/render_params/theme_render_params.rb +23 -0
  53. data/lib/publish_my_data/render_params.rb +7 -0
  54. data/lib/publish_my_data/resource_module.rb +8 -0
  55. data/lib/publish_my_data/version.rb +1 -1
  56. data/lib/publish_my_data.rb +6 -1
  57. data/spec/controllers/publish_my_data/datasets_controller_spec.rb +0 -10
  58. data/spec/controllers/publish_my_data/resources_controller_spec.rb +78 -38
  59. data/spec/controllers/publish_my_data/sparql_controller_spec.rb +4 -4
  60. data/spec/controllers/publish_my_data/themes_controller_spec.rb +110 -0
  61. data/spec/dummy/log/test.log +80255 -0
  62. data/spec/factories/00_theme_factories.rb +11 -0
  63. data/spec/factories/concept_scheme_factories.rb +48 -0
  64. data/spec/factories/dataset_factories.rb +10 -1
  65. data/spec/factories/ontology_factories.rb +55 -0
  66. data/spec/factories/property_factories.rb +2 -2
  67. data/spec/factories/resource_factories.rb +5 -5
  68. metadata +61 -16
  69. data/app/assets/javascripts/publish_my_data/resources.js +0 -2
  70. data/app/assets/stylesheets/publish_my_data/resources.css +0 -4
  71. data/app/views/publish_my_data/datasets/themes.html.erb +0 -3
  72. data/config/initializers/vocabularies.rb +0 -1
@@ -0,0 +1,11 @@
1
+ module PublishMyData
2
+ class Property
3
+ include Tripod::Resource
4
+ include PublishMyData::ResourceModule
5
+ include PublishMyData::DefinedByOntology
6
+
7
+ field :label, RDF::RDFS.label
8
+ field :defined_by, RDF::RDFS.isDefinedBy
9
+
10
+ end
11
+ end
@@ -2,5 +2,6 @@ module PublishMyData
2
2
  class RdfType
3
3
  include Tripod::Resource
4
4
  field :label, RDF::RDFS.label
5
+ field :comment, RDF::RDFS.comment
5
6
  end
6
7
  end
@@ -2,18 +2,92 @@ module PublishMyData
2
2
  class Resource
3
3
 
4
4
  include Tripod::Resource
5
+ include PublishMyData::ResourceModule #some common methods for resources.
5
6
 
6
7
  field :label, RDF::RDFS.label
8
+ field :rdf_type, RDF.type, :multivalued => true
7
9
 
8
- # Is this resource in the host domain?
9
- def local?
10
- uri.starts_with?("http://" + PublishMyData.local_domain)
10
+ def self.uri_from_host_and_doc_path(host, doc_path, format="")
11
+ 'http://' + host + '/id/' + doc_path.split('?')[0].sub(/\.#{format}$/,'')
11
12
  end
12
13
 
13
- class << self
14
+ def theme
15
+ dataset.theme_obj if dataset
16
+ end
17
+
18
+ def dataset
19
+ slug = Dataset.slug_from_data_graph_uri(self.graph_uri)
20
+ Dataset.find_by_slug(slug) rescue nil
21
+ end
22
+
23
+ # this calls render_params on the right type of RenderParams object.
24
+ # (strategy pattern-ish).
25
+ def render_params(request)
26
+ render_params_class.new(self).render_params(pagination_params: PaginationParams.from_request(request))
27
+ end
28
+
29
+ # Don't worry that these as_xxx methods look like they'll do an extra lookup.
30
+ # In production, it'll be cached from a moment ago anyway!
31
+
32
+ def as_ontology
33
+ Ontology.find(self.uri)
34
+ end
35
+
36
+ def as_concept_scheme
37
+ ConceptScheme.find(self.uri)
38
+ end
39
+
40
+ def as_concept
41
+ Concept.find(self.uri)
42
+ end
43
+
44
+ def as_property
45
+ Property.find(self.uri)
46
+ end
47
+
48
+ def as_ontology_class
49
+ OntologyClass.find(self.uri)
50
+ end
51
+
52
+ def is_ontology?
53
+ read_type_predicate.include?(RDF::OWL.Ontology)
54
+ end
55
+
56
+ def is_class?
57
+ read_type_predicate.include?(RDF::OWL.Class) || read_type_predicate.include?(RDF::RDFS.Class)
58
+ end
59
+
60
+ def is_property?
61
+ read_type_predicate.include?(RDF.Property)
62
+ end
63
+
64
+ def is_concept_scheme?
65
+ read_type_predicate.include?(RDF::SKOS.ConceptScheme)
66
+ end
67
+
68
+ def is_concept?
69
+ read_type_predicate.include?(RDF::SKOS.Concept)
70
+ end
71
+
72
+ private
73
+
74
+ def read_type_predicate
75
+ read_predicate(RDF.type)
76
+ end
14
77
 
15
- def uri_from_host_and_doc_path(host, doc_path, format="")
16
- 'http://' + host + '/id/' + doc_path.split('?')[0].sub(/\.#{format}$/,'')
78
+ def render_params_class
79
+ if self.is_ontology?
80
+ OntologyRenderParams
81
+ elsif self.is_class?
82
+ OntologyClassRenderParams
83
+ elsif self.is_property?
84
+ PropertyRenderParams
85
+ elsif self.is_concept_scheme?
86
+ ConceptSchemeRenderParams
87
+ elsif self.is_concept?
88
+ ConceptRenderParams
89
+ else
90
+ ResourceRenderParams
17
91
  end
18
92
  end
19
93
  end
@@ -0,0 +1,34 @@
1
+ module PublishMyData
2
+ # A theme for datasets
3
+ class Theme
4
+
5
+ include Tripod::Resource
6
+ include PublishMyData::ResourceModule #some common methods for resources.
7
+
8
+ class << self
9
+ def theme_graph
10
+ RDF::URI.new("http://#{PublishMyData.local_domain}/def/concept-scheme/themes")
11
+ end
12
+
13
+ def by_slug(slug)
14
+ Theme.where("?uri <#{RDF::SKOS.notation}> '#{slug}'").first
15
+ end
16
+ end
17
+
18
+ rdf_type RDF::SITE.Theme
19
+ graph_uri Theme.theme_graph
20
+
21
+ field :label, RDF::RDFS.label
22
+ field :slug, RDF::SKOS.notation
23
+ field :description, RDF::RDFS.description
24
+
25
+ def datasets_criteria
26
+ Dataset.where("?uri <#{RDF::DCAT.theme}> <#{self.uri.to_s}>")
27
+ end
28
+
29
+ def to_param
30
+ self.slug
31
+ end
32
+
33
+ end
34
+ end
@@ -4,7 +4,6 @@
4
4
  <title>PublishMyData</title>
5
5
  <%= stylesheet_link_tag "publish_my_data/application", :media => "all" %>
6
6
  <%= javascript_include_tag "publish_my_data/application" %>
7
- <%= csrf_meta_tags %>
8
7
  </head>
9
8
  <body>
10
9
 
@@ -1,3 +1,13 @@
1
- error layout
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>PublishMyData - Error</title>
5
+ <%= stylesheet_link_tag "publish_my_data/application", :media => "all" %>
6
+ <%= javascript_include_tag "publish_my_data/application" %>
7
+ </head>
8
+ <body>
2
9
 
3
- <%= yield %>
10
+ <%= yield %>
11
+
12
+ </body>
13
+ </html>
@@ -0,0 +1,3 @@
1
+ <% concept_scheme.concepts.each do |c| %>
2
+ <%= render 'publish_my_data/resources/predicates_table', :resource => c, :show_title => true %>
3
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <h1>Concept Scheme: <%= concept_scheme.label || concept_scheme.uri %></h1>
2
+
3
+ <h2>Overview</h2>
4
+ <%= render 'publish_my_data/resources/predicates_table', resource: concept_scheme %>
5
+
6
+ <h2>Concepts</h2>
7
+ <%= render 'publish_my_data/concept_schemes/concepts', concept_scheme: concept_scheme %>
8
+
9
+ <%= render 'publish_my_data/resources/resource_formats', :resource => concept_scheme, :resource_descriptor => 'concept scheme' %>
@@ -0,0 +1,3 @@
1
+ <%= render 'uri_and_label', resource: concept %>
2
+ <%= render 'predicates_table', resource: concept %>
3
+ <%= render 'resource_formats', resource: concept %>
@@ -14,7 +14,7 @@
14
14
  <br/>
15
15
 
16
16
  Get this list as:
17
- <%= link_to 'N-triples', :format => 'nt', :page => @page, :per_page => @per_page %>
18
- <%= link_to 'Turtle', :format => 'ttl', :page => @page, :per_page => @per_page %>
19
- <%= link_to 'RDF/XML', :format => 'rdf',:page => @page, :per_page => @per_page %>
20
- <%= link_to 'JSON', :format => 'json', :page => @page, :per_page => @per_page %>
17
+ <%= link_to 'N-triples', :format => 'nt', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
18
+ <%= link_to 'Turtle', :format => 'ttl', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
19
+ <%= link_to 'RDF/XML', :format => 'rdf',:page => @pagination_params.page, :per_page => @pagination_params.per_page %>
20
+ <%= link_to 'JSON', :format => 'json', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
@@ -1,4 +1,4 @@
1
- <h1><%= @dataset.title %></h1>
1
+ <h1>Dataset: <%= @dataset.title %></h1>
2
2
 
3
3
  <%= @dataset.description %>
4
4
 
@@ -0,0 +1 @@
1
+ <h1>Bad request</h1>
@@ -1 +1 @@
1
- Not found.
1
+ <h1>Not found</h1>
@@ -0,0 +1 @@
1
+ <h1>Timeout</h1>
@@ -0,0 +1,6 @@
1
+ <h1>Uncaught Error</h1>
2
+
3
+ <% if Rails.env.development? %>
4
+ <p><strong><%= @e.class.name %>: <%= @e.message %></strong></p>
5
+ <p><%= @e.backtrace.join("<br/>").html_safe %></p>
6
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% ontology.ontology_classes.each do |c| %>
2
+ <%= render 'publish_my_data/resources/predicates_table', :resource => c, :show_title => true %>
3
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% ontology.ontology_properties.each do |p| %>
2
+ <%= render 'publish_my_data/resources/predicates_table', :resource => p, :show_title => true %>
3
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <h1>Ontology <%= ontology.label || ontology.uri %></h1>
2
+
3
+ <h2>Overview</h2>
4
+ <%= render 'publish_my_data/resources/predicates_table', resource: ontology %>
5
+
6
+ <h2>Classes</h2>
7
+ <%= render 'publish_my_data/ontologies/classes', :ontology => ontology %>
8
+
9
+ <br/>
10
+
11
+ <h2>Properties</h2>
12
+ <%= render 'publish_my_data/ontologies/properties', :ontology => ontology %>
13
+
14
+ <br/><br/>
15
+
16
+ Get this ontology as:
17
+ <%= render 'publish_my_data/resources/resource_formats', :resource => ontology, :resource_descriptor => "ontology" %>
@@ -0,0 +1,3 @@
1
+ <%= render 'uri_and_label', resource: property %>
2
+ <%= render 'predicates_table', resource: property %>
3
+ <%= render 'resource_formats', resource: property %>
@@ -1,19 +1,27 @@
1
1
  <table>
2
2
  <thead>
3
+ <% if defined?(show_title) && show_title %>
4
+ <tr>
5
+ <td colspan="2">
6
+ <%= resource.label %><br/>
7
+ <%= resource.uri %>
8
+ </td>
9
+ </tr>
10
+ <% end %>
3
11
  <tr>
4
12
  <th>Predicate</th>
5
13
  <th>Object</th>
6
14
  </tr>
7
15
  </thead>
8
16
  <tbody>
9
- <% @resource.predicates.each do |pred| %>
17
+ <% resource.predicates.each do |pred| %>
10
18
  <tr>
11
19
  <td>
12
- <%= resource_uri_or_label(pred) %>
20
+ <%= resource_uri_or_label(resource, pred) %>
13
21
  </td>
14
22
  <td>
15
- <% @resource.read_predicate(pred).each do |obj| %>
16
- <%= resource_uri_or_label(obj) %>
23
+ <% resource.read_predicate(pred).each do |obj| %>
24
+ <%= resource_uri_or_label(resource, obj) %>
17
25
  <% end %>
18
26
  </td>
19
27
  </tr>
@@ -1,11 +1,11 @@
1
- <% if @resource.local? %>
1
+ <% if resource.local? %>
2
2
  <%= link_to "JSON", :format => 'json' %>
3
3
  <%= link_to "RDF/XML", :format => 'rdf' %>
4
4
  <%= link_to "Turtle", :format => 'ttl' %>
5
5
  <%= link_to "N-triples", :format => 'nt' %>
6
6
  <% else %>
7
- <%= link_to "JSON", show_resource_path(:uri => @resource.uri, :format => 'json') %>
8
- <%= link_to "RDF/XML", show_resource_path(:uri => @resource.uri, :format => 'rdf') %>
9
- <%= link_to "Turtle", show_resource_path(:uri => @resource.uri, :format => 'ttl') %>
10
- <%= link_to "N-triples", show_resource_path(:uri => @resource.uri, :format => 'nt') %>
7
+ <%= link_to "JSON", show_resource_path(:uri => resource.uri, :format => 'json') %>
8
+ <%= link_to "RDF/XML", show_resource_path(:uri => resource.uri, :format => 'rdf') %>
9
+ <%= link_to "Turtle", show_resource_path(:uri => resource.uri, :format => 'ttl') %>
10
+ <%= link_to "N-triples", show_resource_path(:uri => resource.uri, :format => 'nt') %>
11
11
  <% end %>
@@ -1,3 +1,3 @@
1
- URI: <%= @resource.uri %>
1
+ URI: <%= resource.uri %>
2
2
  <br/>
3
- Label: <%= @resource.label.present? ? @resource.label : "No Label Set" %>
3
+ Label: <%= resource.label.present? ? resource.label : "No Label Set" %>
@@ -33,7 +33,7 @@
33
33
  <br/>
34
34
 
35
35
  Get this list as:
36
- <%= link_to 'N-triples', :format => 'nt', :page => @page, :per_page => @per_page %>
37
- <%= link_to 'Turtle', :format => 'ttl', :page => @page, :per_page => @per_page %>
38
- <%= link_to 'RDF/XML', :format => 'rdf',:page => @page, :per_page => @per_page %>
39
- <%= link_to 'JSON', :format => 'json', :page => @page, :per_page => @per_page %>
36
+ <%= link_to 'N-triples', :format => 'nt', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
37
+ <%= link_to 'Turtle', :format => 'ttl', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
38
+ <%= link_to 'RDF/XML', :format => 'rdf',:page => @pagination_params.page, :per_page => @pagination_params.per_page %>
39
+ <%= link_to 'JSON', :format => 'json', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
@@ -1,3 +1,3 @@
1
- <%= render 'uri_and_label' %>
2
- <%= render 'predicates_table' %>
3
- <%= render 'resource_formats' %>
1
+ <%= render 'uri_and_label', resource: resource %>
2
+ <%= render 'predicates_table', resource: resource %>
3
+ <%= render 'resource_formats', resource: resource %>
@@ -1,6 +1,6 @@
1
1
  <nav class="pagination clearfix">
2
2
  <% #only show prev link if there's a previous page %>
3
- <%= link_to("Previous #{@per_page} results".html_safe, params.merge({:page => (@page-1)})) if @page > 1 %>
3
+ <%= link_to("Previous #{@pagination_params.per_page} results".html_safe, params.merge({:page => (@pagination_params.page-1)})) if @pagination_params.page > 1 %>
4
4
  <% #only show the next page if the results for this page is bigger than the page size %>
5
- <%= link_to("Next #{@per_page} results".html_safe, params.merge({:page => (@page+1)}), :style => 'float:right' ) if @more_pages%>
5
+ <%= link_to("Next #{@pagination_params.per_page} results".html_safe, params.merge({:page => (@pagination_params.page+1)}), :style => 'float:right' ) if @more_pages%>
6
6
  </nav>
@@ -0,0 +1,12 @@
1
+ <h1>Themes</h1>
2
+
3
+ <% @themes.each do |t| %>
4
+ <%= link_to (t.label || t.uri), theme_path(t) %> (<%= pluralize( t.datasets_criteria.count, "datasets" )%>)
5
+ <% end %>
6
+
7
+ <br/><br/>
8
+ Get this list as:
9
+ <%= link_to 'N-triples', :format => 'nt' %>
10
+ <%= link_to 'Turtle', :format => 'ttl' %>
11
+ <%= link_to 'RDF/XML', :format => 'rdf' %>
12
+ <%= link_to 'JSON', :format => 'json' %>
@@ -0,0 +1,15 @@
1
+ <h1>Theme: <%= @theme.label %></h1>
2
+
3
+ <p><%= @theme.description %></p>
4
+
5
+ Datasets in this theme: <br/>
6
+ <% @datasets.each do |d| %>
7
+ <%= link_to d.title, d %> <br/>
8
+ <% end %>
9
+ <br/>
10
+ <%= paginate @datasets %>
11
+ Get this list of datasets as:
12
+ <%= link_to 'N-triples', :format => 'nt', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
13
+ <%= link_to 'Turtle', :format => 'ttl', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
14
+ <%= link_to 'RDF/XML', :format => 'rdf',:page => @pagination_params.page, :per_page => @pagination_params.per_page %>
15
+ <%= link_to 'JSON', :format => 'json', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
File without changes
@@ -0,0 +1,6 @@
1
+ module RDF
2
+ SITE = RDF::Vocabulary.new("http://#{PublishMyData.local_domain}/def/")
3
+ PMD_DS = RDF::Vocabulary.new("http://#{PublishMyData.local_domain}/def/dataset#")
4
+ DCAT = RDF::Vocabulary.new("http://www.w3.org/ns/dcat#")
5
+ VOID = RDF::Vocabulary.new("http://rdfs.org/ns/void#")
6
+ end
@@ -0,0 +1,7 @@
1
+ # This loads all the factories, so they can be used by the rails console in target apps.
2
+ if Rails.env.development?
3
+ path = File.expand_path("../../../spec/factories/*.rb", __FILE__)
4
+ Dir[path].each do |factory|
5
+ require factory
6
+ end
7
+ end
data/config/routes.rb CHANGED
@@ -10,11 +10,10 @@ PublishMyData::Engine.routes.draw do
10
10
  match "/resources(.:format)" => "resources#index", :as => 'list_resources' # +filters on thh query string
11
11
 
12
12
  # datasets
13
- resources :datasets, :only => [:show, :index] do
14
- collection do
15
- get 'themes'
16
- end
17
- end
13
+ resources :datasets, :only => [:show, :index]
14
+
15
+ # themes
16
+ resources :themes, :only => [:index, :show]
18
17
 
19
18
  # URI dereferencing
20
19
  match "/id/*path" => "resources#id"
@@ -0,0 +1,10 @@
1
+ module PublishMyData
2
+ module DefinedByOntology
3
+
4
+ def defined_by_ontology
5
+ ontology_uri = read_predicate(RDF::RDFS.isDefinedBy).first
6
+ Ontology.find(ontology_uri) rescue nil if ontology_uri
7
+ end
8
+
9
+ end
10
+ end