publish_my_data 0.0.28 → 0.0.29
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.
- data/app/controllers/publish_my_data/datasets_controller.rb +1 -2
- data/app/controllers/publish_my_data/resources_controller.rb +1 -0
- data/app/controllers/publish_my_data/themes_controller.rb +1 -1
- data/app/models/publish_my_data/dataset.rb +27 -0
- data/app/models/publish_my_data/theme.rb +32 -4
- data/app/views/publish_my_data/themes/index.html.erb +1 -1
- data/lib/publish_my_data/paginator.rb +39 -22
- data/lib/publish_my_data/render_params.rb +0 -1
- data/lib/publish_my_data/sparql_query.rb +0 -1
- data/lib/publish_my_data/version.rb +1 -1
- data/spec/controllers/publish_my_data/datasets_controller_spec.rb +22 -12
- data/spec/controllers/publish_my_data/resources_controller_spec.rb +2 -4
- data/spec/controllers/publish_my_data/themes_controller_spec.rb +1 -1
- data/spec/dummy/log/test.log +146226 -0
- metadata +16 -17
- data/lib/publish_my_data/render_params/theme_render_params.rb +0 -23
@@ -36,9 +36,8 @@ module PublishMyData
|
|
36
36
|
|
37
37
|
# /data?page=2&per_page=10
|
38
38
|
def index
|
39
|
-
dataset_criteria = Dataset.ordered_datasets_criteria
|
40
39
|
@pagination_params = ResourcePaginationParams.from_request(request)
|
41
|
-
@datasets = Paginator.new(
|
40
|
+
@datasets = Paginator.new(Dataset.deprecation_last_query_str, @pagination_params, resource_class: PublishMyData::Dataset).paginate
|
42
41
|
respond_with(@datasets)
|
43
42
|
end
|
44
43
|
|
@@ -16,7 +16,7 @@ module PublishMyData
|
|
16
16
|
|
17
17
|
if @theme
|
18
18
|
@pagination_params = ResourcePaginationParams.from_request(request)
|
19
|
-
@datasets = Paginator.new(@theme.
|
19
|
+
@datasets = Paginator.new(@theme.datasets_query_str, @pagination_params, resource_class: PublishMyData::Dataset).paginate
|
20
20
|
respond_with(@datasets)
|
21
21
|
else
|
22
22
|
raise Tripod::Errors::ResourceNotFound
|
@@ -103,6 +103,33 @@ module PublishMyData
|
|
103
103
|
def ordered_datasets_criteria
|
104
104
|
Dataset.all.where("?uri <#{RDF::DC.title}> ?title").order("?title")
|
105
105
|
end
|
106
|
+
|
107
|
+
def deprecation_last_query_str
|
108
|
+
"
|
109
|
+
SELECT ?uri where {
|
110
|
+
# this bit is all the non-deprecated ones
|
111
|
+
{
|
112
|
+
SELECT * WHERE {
|
113
|
+
?uri a <http://publishmydata.com/def/dataset#Dataset> .
|
114
|
+
?uri <#{RDF::DC.title}> ?title . # select title so we can order
|
115
|
+
MINUS {
|
116
|
+
?uri a <http://publishmydata.com/def/dataset#DeprecatedDataset>
|
117
|
+
}
|
118
|
+
}
|
119
|
+
ORDER BY ?title
|
120
|
+
}
|
121
|
+
UNION
|
122
|
+
# this bit is all the deprecated ones
|
123
|
+
{
|
124
|
+
SELECT * WHERE {
|
125
|
+
?uri a <http://publishmydata.com/def/dataset#DeprecatedDataset> .
|
126
|
+
?uri <#{RDF::DC.title}> ?title . # select title so we can order
|
127
|
+
}
|
128
|
+
ORDER BY ?title
|
129
|
+
}
|
130
|
+
}
|
131
|
+
"
|
132
|
+
end
|
106
133
|
end
|
107
134
|
end
|
108
135
|
end
|
@@ -22,10 +22,38 @@ module PublishMyData
|
|
22
22
|
field :slug, RDF::SKOS.notation
|
23
23
|
field :comment, RDF::RDFS.comment
|
24
24
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
def datasets_count
|
26
|
+
PublishMyData::SparqlQuery.new(datasets_query_str).count
|
27
|
+
end
|
28
|
+
|
29
|
+
def datasets_query_str
|
30
|
+
# this is similar to the deprecation_last_query_str, but with a theme restriction
|
31
|
+
"
|
32
|
+
SELECT ?uri where {
|
33
|
+
# this bit is all the non-deprecated ones
|
34
|
+
{
|
35
|
+
SELECT * WHERE {
|
36
|
+
?uri a <http://publishmydata.com/def/dataset#Dataset> .
|
37
|
+
?uri <#{RDF::DCAT.theme}> <#{self.uri.to_s}> . # limit to this theme
|
38
|
+
?uri <#{RDF::DC.title}> ?title . # select title so we can order
|
39
|
+
MINUS {
|
40
|
+
?uri a <http://publishmydata.com/def/dataset#DeprecatedDataset>
|
41
|
+
}
|
42
|
+
}
|
43
|
+
ORDER BY ?title
|
44
|
+
}
|
45
|
+
UNION
|
46
|
+
# this bit is all the deprecated ones
|
47
|
+
{
|
48
|
+
SELECT * WHERE {
|
49
|
+
?uri a <http://publishmydata.com/def/dataset#DeprecatedDataset> .
|
50
|
+
?uri <#{RDF::DCAT.theme}> <#{self.uri.to_s}> . # limit to this theme
|
51
|
+
?uri <#{RDF::DC.title}> ?title . # select title so we can order
|
52
|
+
}
|
53
|
+
ORDER BY ?title
|
54
|
+
}
|
55
|
+
}
|
56
|
+
"
|
29
57
|
end
|
30
58
|
|
31
59
|
def to_param
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<h1>Themes</h1>
|
2
2
|
|
3
3
|
<% @themes.each do |t| %>
|
4
|
-
<%= link_to (t.label || t.uri), theme_path(t) %> (<%= pluralize( t.
|
4
|
+
<%= link_to (t.label || t.uri), theme_path(t) %> (<%= pluralize( t.datasets_count, "dataset" )%>)
|
5
5
|
<%= t.comment %>
|
6
6
|
<% end %>
|
7
7
|
|
@@ -49,38 +49,55 @@ module PublishMyData
|
|
49
49
|
class Paginator
|
50
50
|
|
51
51
|
attr_accessor :pagination_params
|
52
|
-
attr_accessor :
|
52
|
+
attr_accessor :resource_class
|
53
|
+
attr_accessor :sparql_query # PublishMyData::SparqlQuery
|
54
|
+
|
55
|
+
# criteria can be a Tripod::Criteria or a sparql string.
|
56
|
+
# pagination_params should be an instance pagination params.
|
57
|
+
# if criteria is a sparql string, optionally pass options[:resource_class] to dictate what type of objects to return (else it will return Resources)
|
58
|
+
def initialize(criteria, pagination_params, opts={})
|
59
|
+
|
60
|
+
if criteria.class == String
|
61
|
+
self.sparql_query = PublishMyData::SparqlQuery.new(criteria)
|
62
|
+
self.resource_class = opts[:resource_class] || PublishMyData::Resource
|
63
|
+
elsif criteria.class == Tripod::Criteria
|
64
|
+
# Note that this uses the :return_graph => false option for criteria execution to avoid duplicate graphs in the results
|
65
|
+
self.sparql_query = PublishMyData::SparqlQuery.new(criteria.as_query(:return_graph => false))
|
66
|
+
self.resource_class = criteria.resource_class
|
67
|
+
end
|
53
68
|
|
54
|
-
def initialize(criteria, pagination_params)
|
55
|
-
self.criteria = criteria
|
56
69
|
self.pagination_params = pagination_params
|
57
70
|
end
|
58
71
|
|
59
|
-
# returns a Kaminari paginatable array, or a plain old array
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
72
|
+
# returns a Kaminari paginatable array (for html), or a plain old array (for data formats)
|
73
|
+
def paginate(force_total_count=nil)
|
74
|
+
|
75
|
+
page = self.pagination_params.page
|
76
|
+
per_page = self.pagination_params.per_page
|
77
|
+
pagination_query_str = self.sparql_query.as_pagination_query(page, per_page).query
|
78
|
+
|
79
|
+
if self.pagination_params.format == :html
|
80
|
+
total_count = force_total_count || self.sparql_query.count
|
81
|
+
page_of_results = resource_class.find_by_sparql(pagination_query_str)
|
82
|
+
Kaminari.paginate_array(page_of_results, total_count: total_count).page(page).per(per_page)
|
68
83
|
else
|
69
|
-
|
70
|
-
|
84
|
+
page_of_results = resource_class.find_by_sparql(pagination_query_str)
|
85
|
+
|
86
|
+
Tripod::ResourceCollection.new(
|
87
|
+
page_of_results,
|
88
|
+
:return_graph => false,
|
89
|
+
:sparql_query_str => pagination_query_str,
|
90
|
+
:resource_class => self.resource_class
|
91
|
+
)
|
92
|
+
|
71
93
|
end
|
94
|
+
|
72
95
|
end
|
73
96
|
|
74
97
|
def ==(other)
|
75
98
|
self.pagination_params == other.pagination_params &&
|
76
|
-
self.
|
77
|
-
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
def add_limit_and_offset_criteria(criteria)
|
82
|
-
criteria.limit(self.pagination_params.per_page) if self.pagination_params.per_page
|
83
|
-
criteria.offset(self.pagination_params.offset) if self.pagination_params.offset
|
99
|
+
self.sparql_query == other.sparql_query &&
|
100
|
+
self.resource_class == self.resource_class
|
84
101
|
end
|
85
102
|
|
86
103
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "publish_my_data/render_params/dataset_render_params"
|
2
2
|
require "publish_my_data/render_params/resource_render_params"
|
3
3
|
require "publish_my_data/render_params/ontology_render_params"
|
4
|
-
require "publish_my_data/render_params/theme_render_params"
|
5
4
|
require "publish_my_data/render_params/property_render_params"
|
6
5
|
require "publish_my_data/render_params/ontology_class_render_params"
|
7
6
|
require "publish_my_data/render_params/concept_scheme_render_params"
|
@@ -20,7 +20,18 @@ module PublishMyData
|
|
20
20
|
shared_examples_for "a dataset collection in non-html" do
|
21
21
|
it "should render the collection in the right format" do
|
22
22
|
get :index, :page => page, :per_page => per_page, :format => format, use_route: :publish_my_data
|
23
|
-
|
23
|
+
|
24
|
+
q = SparqlQuery.new(Dataset.deprecation_last_query_str).as_pagination_query(page, per_page).query
|
25
|
+
datasets_array = Dataset.find_by_sparql(q).to_a
|
26
|
+
|
27
|
+
collection = Tripod::ResourceCollection.new(
|
28
|
+
datasets_array,
|
29
|
+
:return_graph => false,
|
30
|
+
:sparql_query_str => q,
|
31
|
+
:resource_class => Dataset
|
32
|
+
)
|
33
|
+
|
34
|
+
response.body.should == collection.send("to_#{format}")
|
24
35
|
end
|
25
36
|
|
26
37
|
it "shouldn't call Kaminari" do
|
@@ -36,21 +47,26 @@ module PublishMyData
|
|
36
47
|
|
37
48
|
shared_examples_for "dataset kaminari pagination" do
|
38
49
|
it "should call kaminari to paginate the results" do
|
39
|
-
|
50
|
+
q = SparqlQuery.new(Dataset.deprecation_last_query_str).as_pagination_query(page, per_page).query
|
51
|
+
datasets_array = Dataset.find_by_sparql(q).to_a
|
40
52
|
count = Dataset.count
|
41
53
|
|
42
54
|
kam = Kaminari.paginate_array(datasets_array, total_count: count)
|
43
|
-
|
44
55
|
Kaminari.should_receive(:paginate_array).with(datasets_array, total_count: count).and_return(kam)
|
45
56
|
kam.should_receive(:page).with(page).and_return(kam)
|
46
57
|
kam.should_receive(:per).with(per_page).and_return(kam)
|
58
|
+
|
47
59
|
get :index, page: page, per_page: per_page, use_route: :publish_my_data
|
48
60
|
end
|
49
61
|
|
50
62
|
it "should set @datasets with the right page of datasets" do
|
51
63
|
get :index, page: page, per_page: per_page, use_route: :publish_my_data
|
64
|
+
|
65
|
+
datasets = Dataset.find_by_sparql(Dataset.deprecation_last_query_str)
|
66
|
+
|
52
67
|
assigns['datasets'].map{ |d| d.uri.to_s }.should ==
|
53
|
-
|
68
|
+
datasets[offset...offset+per_page].map{ |d| d.uri.to_s }
|
69
|
+
|
54
70
|
assigns['datasets'].length.should == per_page
|
55
71
|
end
|
56
72
|
|
@@ -62,10 +78,7 @@ module PublishMyData
|
|
62
78
|
let(:offset) { (page-1)*per_page }
|
63
79
|
|
64
80
|
it "should retreive the first page of results" do
|
65
|
-
|
66
|
-
Dataset.should_receive(:ordered_datasets_criteria).at_least(:once).and_return(crit)
|
67
|
-
crit.should_receive(:limit).with(per_page).and_call_original
|
68
|
-
crit.should_receive(:offset).with(offset).and_call_original
|
81
|
+
PublishMyData::SparqlQuery.any_instance.should_receive(:as_pagination_query).with(page, per_page)
|
69
82
|
get :index, use_route: :publish_my_data
|
70
83
|
end
|
71
84
|
|
@@ -85,10 +98,7 @@ module PublishMyData
|
|
85
98
|
let(:offset) { (page-1)*per_page }
|
86
99
|
|
87
100
|
it "should retreive the right page of results" do
|
88
|
-
|
89
|
-
Dataset.should_receive(:ordered_datasets_criteria).at_least(:once).and_return(crit)
|
90
|
-
crit.should_receive(:limit).with(per_page).and_call_original
|
91
|
-
crit.should_receive(:offset).with(offset).and_call_original
|
101
|
+
PublishMyData::SparqlQuery.any_instance.should_receive(:as_pagination_query).with(page, per_page)
|
92
102
|
get :index, page: page, per_page: per_page, use_route: :publish_my_data
|
93
103
|
end
|
94
104
|
|
@@ -286,6 +286,7 @@ module PublishMyData
|
|
286
286
|
shared_examples_for "a resource collection in non-html" do
|
287
287
|
it "should render the collection in the right format" do
|
288
288
|
get :index, :page => page, :per_page => per_page, :format => format, use_route: :publish_my_data
|
289
|
+
puts format
|
289
290
|
response.body.should == Resource.all.limit(per_page).offset(offset).resources.send("to_#{format}")
|
290
291
|
end
|
291
292
|
|
@@ -350,10 +351,7 @@ module PublishMyData
|
|
350
351
|
let(:offset) { (page-1)*per_page }
|
351
352
|
|
352
353
|
it "should retreive the right page of results" do
|
353
|
-
|
354
|
-
Resource.should_receive(:all).at_least(:once).and_return(crit)
|
355
|
-
crit.should_receive(:limit).with(per_page).and_call_original
|
356
|
-
crit.should_receive(:offset).with(offset).and_call_original
|
354
|
+
PublishMyData::SparqlQuery.any_instance.should_receive(:as_pagination_query).with(page, per_page)
|
357
355
|
get :index, page: page, per_page: per_page, use_route: :publish_my_data
|
358
356
|
end
|
359
357
|
|
@@ -53,7 +53,7 @@ module PublishMyData
|
|
53
53
|
it "should respond with the paginated collection of datasets in that theme" do
|
54
54
|
get :show, :id => theme.slug, :use_route => :publish_my_data, :format => 'ttl', :per_page => 5
|
55
55
|
pagination_params = ResourcePaginationParams.from_request(@request)
|
56
|
-
paginator = Paginator.new(theme.
|
56
|
+
paginator = Paginator.new(theme.datasets_query_str, ResourcePaginationParams.from_request(@request), resource_class: PublishMyData::Dataset)
|
57
57
|
paginator.paginate.length.should == 5 #just the page's worth
|
58
58
|
response.body.should == paginator.paginate.to_ttl
|
59
59
|
end
|