publish_my_data 0.0.28 → 0.0.29
Sign up to get free protection for your applications and to get access to all the features.
- 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
|