publish_my_data 0.0.29 → 0.0.30

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 (82) hide show
  1. data/app/controllers/concerns/publish_my_data/data_download.rb +22 -0
  2. data/app/controllers/concerns/publish_my_data/resource_rendering.rb +40 -0
  3. data/app/controllers/concerns/publish_my_data/sparql_processing.rb +81 -0
  4. data/app/controllers/publish_my_data/datasets_controller.rb +5 -23
  5. data/app/controllers/publish_my_data/information_resources_controller.rb +26 -4
  6. data/app/controllers/publish_my_data/queries_controller.rb +1 -1
  7. data/app/controllers/publish_my_data/resources_controller.rb +5 -9
  8. data/app/controllers/publish_my_data/sparql_controller.rb +1 -1
  9. data/app/controllers/publish_my_data/vocabularies_controller.rb +18 -0
  10. data/app/models/concerns/publish_my_data/all_features.rb +79 -0
  11. data/app/models/concerns/publish_my_data/basic_features.rb +21 -0
  12. data/app/models/concerns/publish_my_data/dataset_powers.rb +130 -0
  13. data/{lib → app/models/concerns}/publish_my_data/defined_by_ontology.rb +5 -0
  14. data/app/models/publish_my_data/concept.rb +2 -2
  15. data/app/models/publish_my_data/concept_scheme.rb +31 -3
  16. data/app/models/publish_my_data/dataset.rb +2 -128
  17. data/app/models/publish_my_data/example_resource.rb +21 -0
  18. data/app/models/publish_my_data/ontology.rb +35 -6
  19. data/app/models/publish_my_data/ontology_class.rb +3 -5
  20. data/app/models/publish_my_data/property.rb +3 -5
  21. data/app/models/publish_my_data/rdf_type.rb +1 -2
  22. data/app/models/publish_my_data/resource.rb +25 -96
  23. data/app/models/publish_my_data/theme.rb +1 -3
  24. data/app/models/publish_my_data/third_party/concept_scheme.rb +30 -0
  25. data/app/models/publish_my_data/third_party/ontology.rb +30 -0
  26. data/app/models/publish_my_data/vocabulary.rb +22 -0
  27. data/app/views/publish_my_data/classes/show.html.erb +3 -0
  28. data/app/views/publish_my_data/concept_schemes/_concepts.html.erb +18 -3
  29. data/app/views/publish_my_data/concept_schemes/show.html.erb +3 -1
  30. data/app/views/publish_my_data/concepts/show.html.erb +3 -3
  31. data/app/views/publish_my_data/datasets/show.html.erb +2 -2
  32. data/app/views/publish_my_data/ontologies/show.html.erb +6 -6
  33. data/app/views/publish_my_data/properties/show.html.erb +3 -3
  34. data/app/views/publish_my_data/resources/_summaries.html.erb +18 -0
  35. data/app/views/publish_my_data/resources/show.html.erb +3 -3
  36. data/config/routes.rb +8 -4
  37. data/lib/publish_my_data.rb +14 -5
  38. data/lib/publish_my_data/engine.rb +3 -0
  39. data/lib/publish_my_data/version.rb +1 -1
  40. data/spec/controllers/publish_my_data/datasets_controller_spec.rb +3 -3
  41. data/spec/controllers/publish_my_data/information_resources_controller_spec.rb +158 -104
  42. data/spec/controllers/publish_my_data/resources_controller_spec.rb +0 -71
  43. data/spec/controllers/publish_my_data/vocabularies_controller_spec.rb +14 -0
  44. data/spec/dummy/config/environments/development.rb +1 -1
  45. data/spec/dummy/config/environments/test.rb +1 -1
  46. data/spec/dummy/log/test.log +208075 -0
  47. data/spec/factories/concept_scheme_factories.rb +17 -13
  48. data/spec/factories/dataset_factories.rb +2 -0
  49. data/spec/factories/example_resource_factories.rb +9 -0
  50. data/spec/factories/ontology_factories.rb +17 -12
  51. data/spec/factories/property_factories.rb +1 -1
  52. data/spec/factories/resource_factories.rb +10 -0
  53. data/spec/features/running_a_sparql_query_spec.rb +2 -2
  54. data/spec/features/viewing_resources_spec.rb +96 -0
  55. data/spec/{renderers → lib}/publish_my_data/renderers_spec.rb +0 -0
  56. data/spec/models/publish_my_data/concept_scheme_spec.rb +20 -0
  57. data/spec/models/publish_my_data/dataset_spec.rb +113 -11
  58. data/spec/models/publish_my_data/example_resource_spec.rb +18 -0
  59. data/spec/models/publish_my_data/ontology_spec.rb +20 -0
  60. data/spec/models/publish_my_data/resource_spec.rb +63 -0
  61. data/spec/models/publish_my_data/third_party_concept_scheme_spec.rb +16 -0
  62. data/spec/models/publish_my_data/third_party_ontology_spec.rb +16 -0
  63. data/spec/spec_helper.rb +2 -1
  64. data/spec/support/all_features.rb +26 -0
  65. data/spec/support/data_download.rb +60 -0
  66. data/spec/support/vocabularies.rb +150 -0
  67. metadata +53 -33
  68. data/app/views/publish_my_data/ontologies/_classes.html.erb +0 -3
  69. data/app/views/publish_my_data/ontologies/_properties.html.erb +0 -3
  70. data/config/initializers/zz_factories.rb +0 -7
  71. data/lib/publish_my_data/concerns.rb +0 -4
  72. data/lib/publish_my_data/concerns/controllers/resource.rb +0 -23
  73. data/lib/publish_my_data/concerns/controllers/sparql.rb +0 -86
  74. data/lib/publish_my_data/concerns/models/resource.rb +0 -14
  75. data/lib/publish_my_data/render_params.rb +0 -7
  76. data/lib/publish_my_data/render_params/concept_render_params.rb +0 -18
  77. data/lib/publish_my_data/render_params/concept_scheme_render_params.rb +0 -31
  78. data/lib/publish_my_data/render_params/dataset_render_params.rb +0 -32
  79. data/lib/publish_my_data/render_params/ontology_class_render_params.rb +0 -18
  80. data/lib/publish_my_data/render_params/ontology_render_params.rb +0 -41
  81. data/lib/publish_my_data/render_params/property_render_params.rb +0 -18
  82. data/lib/publish_my_data/render_params/resource_render_params.rb +0 -17
@@ -1,20 +1,22 @@
1
1
  FactoryGirl.define do
2
2
  factory :concept_scheme, class: PublishMyData::ConceptScheme do
3
3
  initialize_with { new(uri,graph_uri) }
4
- label 'My Concept Scheme'
4
+ label 'My Awesome Concept Scheme'
5
+ modified DateTime.parse('2010-07-01 12:00')
6
+ data_graph_uri "http://#{PublishMyData.local_domain}/graph/my-topic"
5
7
  ignore do
6
- uri { "http://#{PublishMyData.local_domain}/def/my-topic/concept-scheme/my-concept-scheme"}
7
- graph_uri { "http://#{PublishMyData.local_domain}/def/my-topic/concept-scheme/graph" }
8
+ uri { PublishMyData::ConceptScheme.uri_from_slug("my-topic") }
9
+ graph_uri { "http://#{PublishMyData.local_domain}/graph/my-topic/metadata" }
8
10
  end
9
11
  after(:create) do |cs, evaluator|
10
12
  # set up some concepts
11
- c = PublishMyData::Concept.new("http://#{PublishMyData.local_domain}/def/my-topic/concept/my-concept", evaluator.graph_uri )
12
- c.label = "my concept"
13
+ c = PublishMyData::Concept.new("http://#{PublishMyData.local_domain}/def/my-topic/concept/my-concept", evaluator.data_graph_uri )
14
+ c.label = "A concept"
13
15
  c.in_scheme = cs.uri
14
16
  c.save!
15
17
 
16
- c2 = PublishMyData::Concept.new("http://#{PublishMyData.local_domain}/def/my-topic/concept/my-concept-2", evaluator.graph_uri )
17
- c2.label = "my other concept"
18
+ c2 = PublishMyData::Concept.new("http://#{PublishMyData.local_domain}/def/my-topic/concept/my-concept-2", evaluator.data_graph_uri )
19
+ c2.label = "Another concept"
18
20
  c2.in_scheme = cs.uri
19
21
  c2.save!
20
22
 
@@ -22,22 +24,24 @@ FactoryGirl.define do
22
24
  end
23
25
  end
24
26
 
25
- factory :external_concept_scheme, class: PublishMyData::ConceptScheme do
27
+ factory :external_concept_scheme, class: PublishMyData::ThirdParty::ConceptScheme do
26
28
  initialize_with { new(uri,graph_uri) }
27
29
  label 'My External Concept Scheme'
30
+ tags ['foo', 'bar', 'baz']
31
+ data_graph_uri "http://#{PublishMyData.local_domain}/123456abcdef123456"
28
32
  ignore do
29
33
  uri { "http://example.com/def/my-topic/concept-scheme/my-concept-scheme"}
30
- graph_uri { "http://#{PublishMyData.local_domain}/def/example-com-my-topic/concept-scheme/graph" }
34
+ graph_uri { "http://#{PublishMyData.local_domain}/123456abcdef123456/metadata" }
31
35
  end
32
36
  after(:create) do |cs, evaluator|
33
37
  # set up some concepts
34
- c = PublishMyData::Concept.new("http://example.com/def/my-topic/concept/my-concept", evaluator.graph_uri )
35
- c.label = "my concept"
38
+ c = PublishMyData::Concept.new("http://example.com/def/my-topic/concept/my-concept", evaluator.data_graph_uri )
39
+ c.label = "A concept"
36
40
  c.in_scheme = cs.uri
37
41
  c.save!
38
42
 
39
- c2 = PublishMyData::Concept.new("http://example.com/def/my-topic/concept/my-concept-2", evaluator.graph_uri )
40
- c2.label = "my other concept"
43
+ c2 = PublishMyData::Concept.new("http://example.com/def/my-topic/concept/my-concept-2", evaluator.data_graph_uri )
44
+ c2.label = "Another concept"
41
45
  c2.in_scheme = cs.uri
42
46
  c2.save!
43
47
 
@@ -4,6 +4,7 @@ FactoryGirl.define do
4
4
  title 'My Dataset'
5
5
  description 'A test dataset'
6
6
  modified DateTime.parse('2010-07-01 12:00')
7
+ data_graph_uri PublishMyData::Dataset.data_graph_uri("my/dataset")
7
8
  ignore do
8
9
  uri { PublishMyData::Dataset.uri_from_slug("my/dataset") }
9
10
  graph_uri { PublishMyData::Dataset.metadata_graph_uri("my/dataset") }
@@ -15,6 +16,7 @@ FactoryGirl.define do
15
16
  title 'My Other Dataset'
16
17
  description 'Another test dataset'
17
18
  modified DateTime.parse('2010-07-01 12:00')
19
+ data_graph_uri PublishMyData::Dataset.data_graph_uri("my/other-dataset")
18
20
  ignore do
19
21
  uri { PublishMyData::Dataset.uri_from_slug("my/other-dataset") }
20
22
  graph_uri { PublishMyData::Dataset.metadata_graph_uri("my/other-dataset") }
@@ -0,0 +1,9 @@
1
+ FactoryGirl.define do
2
+ factory :example_resource, class: PublishMyData::ExampleResource do
3
+ initialize_with { new(uri, graph_uri) }
4
+ ignore do
5
+ uri { "http://#{PublishMyData.local_domain}/data/trousers/measurement1" }
6
+ graph_uri { "http://#{PublishMyData.local_domain}/graph/trousers" }
7
+ end
8
+ end
9
+ end
@@ -3,49 +3,54 @@ FactoryGirl.define do
3
3
  factory :ontology, class: PublishMyData::Ontology do
4
4
  initialize_with { new(uri,graph_uri) }
5
5
  label 'My Ontology'
6
+ data_graph_uri "http://#{PublishMyData.local_domain}/graph/my-topic"
7
+ modified DateTime.parse('2010-07-01 12:00')
6
8
  ignore do
7
- uri { "http://#{PublishMyData.local_domain}/def/my-topic/ontology"}
8
- graph_uri { "http://#{PublishMyData.local_domain}/def/my-topic/ontology/graph" }
9
+ uri { PublishMyData::Ontology.uri_from_slug("my-topic") }
10
+ graph_uri { "http://#{PublishMyData.local_domain}/graph/my-topic/metadata" }
9
11
  end
10
12
  after(:create) do |o, evaluator|
11
13
  # set up some classes and props
12
- c = PublishMyData::OntologyClass.new("http://#{PublishMyData.local_domain}/def/my-topic/my-class", evaluator.graph_uri )
14
+ c = PublishMyData::OntologyClass.new("http://#{PublishMyData.local_domain}/def/my-topic/my-class", evaluator.data_graph_uri )
13
15
  c.defined_by = o.uri
14
16
  c.write_predicate(RDF.type, RDF::OWL.Class)
15
17
  c.save!
16
18
 
17
- c2 = PublishMyData::OntologyClass.new("http://#{PublishMyData.local_domain}/def/my-topic/my-class-2", evaluator.graph_uri )
19
+ c2 = PublishMyData::OntologyClass.new("http://#{PublishMyData.local_domain}/def/my-topic/my-class-2", evaluator.data_graph_uri )
18
20
  c2.defined_by = o.uri
19
21
  c2.write_predicate(RDF.type, RDF::OWL.Class)
20
22
  c2.save!
21
23
 
22
- p = PublishMyData::Property.new("http://#{PublishMyData.local_domain}/def/my-topic/my-property", evaluator.graph_uri)
24
+ p = PublishMyData::Property.new("http://#{PublishMyData.local_domain}/def/my-topic/my-property", evaluator.data_graph_uri)
23
25
  p.defined_by = o.uri
24
26
  p.write_predicate(RDF.type, RDF.Property)
25
27
  p.save!
26
28
 
27
- p2 = PublishMyData::Property.new("http://#{PublishMyData.local_domain}/def/my-topic/my-property-2", evaluator.graph_uri )
29
+ p2 = PublishMyData::Property.new("http://#{PublishMyData.local_domain}/def/my-topic/my-property-2", evaluator.data_graph_uri )
28
30
  p2.defined_by = o.uri
29
31
  p2.write_predicate(RDF.type, RDF.Property)
30
32
  p2.save!
31
33
  end
32
34
  end
33
35
 
34
- factory :external_ontology, class: PublishMyData::Ontology do
36
+ factory :external_ontology, class: PublishMyData::ThirdParty::Ontology do
35
37
  initialize_with { new(uri,graph_uri) }
36
- label 'My Ontology'
38
+ label 'My External Ontology'
39
+ tags ['test', 'example']
40
+ modified DateTime.parse('2010-07-01 12:00')
41
+ data_graph_uri "http://#{PublishMyData.local_domain}/123456abcdef123456"
37
42
  ignore do
38
- uri { "http://example.com/def/my-topic/ontology"}
39
- graph_uri { "http://#{PublishMyData.local_domain}/def/example-com-my-topic/ontology/graph" }
43
+ uri { "http://example.com/def/ontology/my-topic/"}
44
+ graph_uri { "http://#{PublishMyData.local_domain}/123456abcdef123456/metadata" }
40
45
  end
41
46
  after(:create) do |o, evaluator|
42
47
  # set up some classes and props
43
- c = PublishMyData::OntologyClass.new("http://example.com/def/my-topic/my-class", evaluator.graph_uri )
48
+ c = PublishMyData::OntologyClass.new("http://example.com/def/my-topic/my-class", evaluator.data_graph_uri )
44
49
  c.defined_by = o.uri
45
50
  c.write_predicate(RDF.type, RDF::OWL.Class)
46
51
  c.save!
47
52
 
48
- p = PublishMyData::Property.new("http://example.com/def/my-topic/my-property", evaluator.graph_uri)
53
+ p = PublishMyData::Property.new("http://example.com/def/my-topic/my-property", evaluator.data_graph_uri)
49
54
  p.defined_by = o.uri
50
55
  p.write_predicate(RDF.type, RDF.Property)
51
56
  p.save!
@@ -1,5 +1,5 @@
1
1
  FactoryGirl.define do
2
- factory :mean_result, class: PublishMyData::Resource do
2
+ factory :mean_result, class: PublishMyData::Property do
3
3
  initialize_with { new(uri, graph_uri) }
4
4
  ignore do
5
5
  uri { "http://#{PublishMyData.local_domain}/def/statistics/meanResult" }
@@ -45,4 +45,14 @@ FactoryGirl.define do
45
45
  end
46
46
  end
47
47
 
48
+ factory :rdf_type, class: PublishMyData::Resource do
49
+ initialize_with { new(uri, graph_uri) }
50
+ ignore do
51
+ uri { "http://#{PublishMyData.local_domain}/id/types/observation" }
52
+ graph_uri { "http://#{PublishMyData.local_domain}/graph/types" }
53
+ end
54
+ after(:build) do |res|
55
+ res.write_predicate(RDF::RDFS.label, 'Observation')
56
+ end
57
+ end
48
58
  end
@@ -182,8 +182,8 @@ describe 'visiting the sparql endpoint' do
182
182
 
183
183
  # make some stuff (more results than the page size.
184
184
  (1..30).each do |t|
185
- uri = "http://resource#{t.to_s}"
186
- r = PublishMyData::Resource.new(uri, "http://graph")
185
+ uri = "http://example.com/resource#{t.to_s}"
186
+ r = PublishMyData::Resource.new(uri, "http://example.com/graph")
187
187
  r.label = t.to_s
188
188
  r.save
189
189
  end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Viewing resources' do
4
+ context 'Given a dataset' do
5
+ given(:dataset) { FactoryGirl.create(:my_dataset) }
6
+
7
+ scenario 'Visitor dereferences the URI' do
8
+ visit dataset.uri
9
+ page.should have_content dataset.title
10
+ end
11
+ end
12
+
13
+ context 'Given an in-house ontology' do
14
+ given(:ontology) { FactoryGirl.create(:ontology) }
15
+
16
+ scenario 'Visitor dereferences the URI' do
17
+ visit ontology.uri
18
+ page.should have_content ontology.title
19
+ page.should have_content('Classes')
20
+ page.should have_content ontology.classes.first.label
21
+ page.should have_content('Properties')
22
+ page.should have_content ontology.properties.first.label
23
+ end
24
+ end
25
+
26
+ context 'Given an in-house concept scheme' do
27
+ given(:concept_scheme) { FactoryGirl.create(:concept_scheme) }
28
+
29
+ scenario 'Visitor dereferences the URI' do
30
+ visit concept_scheme.uri
31
+ page.should have_content concept_scheme.title
32
+ page.should have_content('Concepts')
33
+ page.should have_content(concept_scheme.concepts.first.label)
34
+ end
35
+ end
36
+
37
+ context 'Given a concept' do
38
+ given(:concept_scheme) { FactoryGirl.create(:concept_scheme) }
39
+ given(:concept) { concept_scheme.concepts.first }
40
+
41
+ scenario 'Visitor dereferences the URI' do
42
+ visit concept.uri
43
+ page.should have_content concept.uri
44
+ page.should have_content RDF::SKOS.inScheme
45
+ page.should have_content concept_scheme.uri
46
+ end
47
+ end
48
+
49
+ context 'Given an ontology class' do
50
+ given(:ontology) { FactoryGirl.create(:ontology) }
51
+ given(:ontology_class) { ontology.classes.first }
52
+
53
+ scenario 'Visitor dereferences the URI' do
54
+ visit ontology_class.uri
55
+ page.should have_content ontology_class.uri
56
+ page.should have_content RDF::RDFS.isDefinedBy
57
+ page.should have_content ontology.uri
58
+ end
59
+ end
60
+
61
+ context 'Given a property' do
62
+ given(:ontology) { FactoryGirl.create(:ontology) }
63
+ given(:ontology_property) { ontology.properties.first }
64
+
65
+ scenario 'Visitor dereferences the URI' do
66
+ visit ontology_property.uri
67
+ page.should have_content ontology_property.uri
68
+ page.should have_content RDF::RDFS.isDefinedBy
69
+ page.should have_content ontology.uri
70
+ end
71
+ end
72
+
73
+ context 'Given an external ontology' do
74
+ given(:ontology) { FactoryGirl.create(:external_ontology) }
75
+
76
+ scenario 'Visitor visits the resource page' do
77
+ visit "/resource?uri=#{ontology.uri}"
78
+ page.should have_content ontology.title
79
+ page.should have_content('Classes')
80
+ page.should have_content ontology.classes.first.label
81
+ page.should have_content('Properties')
82
+ page.should have_content ontology.properties.first.label
83
+ end
84
+ end
85
+
86
+ context 'Given an external concept scheme' do
87
+ given(:concept_scheme) { FactoryGirl.create(:external_concept_scheme) }
88
+
89
+ scenario 'Visitor visits the resource page' do
90
+ visit "/resource?uri=#{concept_scheme.uri}"
91
+ page.should have_content concept_scheme.title
92
+ page.should have_content('Concepts')
93
+ page.should have_content(concept_scheme.concepts.first.label)
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe PublishMyData::ConceptScheme do
4
+ let(:concept_scheme) { FactoryGirl.create(:concept_scheme) }
5
+
6
+ it_behaves_like PublishMyData::AllFeatures do
7
+ let(:resource) { concept_scheme }
8
+ end
9
+
10
+ it_behaves_like 'an in-house vocabulary' do
11
+ let(:vocabulary) { concept_scheme }
12
+ let(:vocabulary_resource) { concept_scheme.concepts.first }
13
+ end
14
+
15
+ describe '#local?' do
16
+ it 'should be true' do
17
+ concept_scheme.local?.should be_true
18
+ end
19
+ end
20
+ end
@@ -2,18 +2,121 @@ require 'spec_helper'
2
2
 
3
3
  module PublishMyData
4
4
  describe Dataset do
5
- describe '#deprecated?' do
6
- let(:dataset) { FactoryGirl.build(:my_dataset) }
7
- it 'should be false' do
8
- dataset.deprecated?.should be_false
5
+ let(:dataset) { FactoryGirl.build(:my_dataset) }
6
+
7
+ it_behaves_like PublishMyData::AllFeatures do
8
+ let(:resource) { dataset }
9
+ end
10
+
11
+ describe '#types' do
12
+ let(:type_one) { 'http://example.com/types/one' }
13
+ let(:type_two) { 'http://example.com/types/two' }
14
+ before do
15
+ r = Resource.new('http://example.com/id/foo', dataset.data_graph_uri)
16
+ r.rdf_type = type_one
17
+ r.save!
18
+ r = Resource.new('http://example.com/id/bar', dataset.data_graph_uri)
19
+ r.rdf_type = type_two
20
+ r.save!
21
+ end
22
+
23
+ it 'should return resources for the types used in the dataset' do
24
+ dataset.types.map(&:uri).should == [type_one, type_two]
9
25
  end
26
+ end
27
+
28
+ describe '#type_count' do
29
+ let(:type_uri) { 'http://example.com/types/one' }
10
30
 
11
- context 'when the dataset has been given the DeprecatedDataset type' do
12
- before { dataset.rdf_type = [dataset.rdf_type, Dataset.DEPRECATED_DATASET_TYPE] }
31
+ before do
32
+ r = Resource.new('http://example.com/id/foo', dataset.data_graph_uri)
33
+ r.rdf_type = type_uri
34
+ r.save!
35
+ r = Resource.new('http://example.com/id/bar', dataset.data_graph_uri)
36
+ r.rdf_type = type_uri
37
+ r.save!
38
+ end
13
39
 
14
- it 'should be true' do
15
- dataset.deprecated?.should be_true
16
- end
40
+ it 'should return the resource count for the given type in the dataset' do
41
+ dataset.type_count(type_uri).should == 2
42
+ end
43
+ end
44
+
45
+ describe '#resource_count' do
46
+ before do
47
+ r = Resource.new('http://example.com/id/foo', dataset.data_graph_uri)
48
+ r.rdf_type = 'http://example.com/types/one'
49
+ r.save!
50
+ r = Resource.new('http://example.com/id/bar', dataset.data_graph_uri)
51
+ r.rdf_type = 'http://example.com/types/two'
52
+ r.save!
53
+ r = Resource.new('http://example.com/id/baz', dataset.data_graph_uri)
54
+ r.rdf_type = 'http://example.com/types/three'
55
+ r.save!
56
+ end
57
+
58
+ it 'should return a count of all the resources in the dataset' do
59
+ dataset.resource_count.should == 3
60
+ end
61
+ end
62
+
63
+ describe '#example_resources' do
64
+ let!(:resource_one) do
65
+ r = Resource.new('http://example.com/id/foo', dataset.data_graph_uri)
66
+ r.rdf_type = 'http://example.com/types/one'
67
+ r.save!
68
+ r
69
+ end
70
+
71
+ let!(:resource_two) do
72
+ r = Resource.new('http://example.com/id/bar', dataset.data_graph_uri)
73
+ r.rdf_type = 'http://example.com/types/two'
74
+ r.save!
75
+ r
76
+ end
77
+
78
+ before do
79
+ r = Resource.new('http://example.com/id/baz', dataset.data_graph_uri)
80
+ r.rdf_type = 'http://example.com/types/two'
81
+ r.save!
82
+ end
83
+
84
+ it 'should only return a single resource for each type' do
85
+ dataset.example_resources.count.should == dataset.types.count
86
+ end
87
+
88
+ it 'should return an example resource for each type used in the dataset' do
89
+ dataset.example_resources.map(&:uri).should == [resource_one.uri, resource_two.uri]
90
+ end
91
+ end
92
+
93
+ describe '#ontologies' do
94
+ let(:ontology) { FactoryGirl.create(:ontology) }
95
+ let(:property) { ontology.properties.first }
96
+
97
+ before do
98
+ r = Resource.new('http://example.com/id/bar', dataset.data_graph_uri)
99
+ r.write_predicate(property.uri, 'foo')
100
+ r.save!
101
+ end
102
+
103
+ it 'should return the ontologies which we have data about that have been used in the dataset' do
104
+ dataset.ontologies.should == [ontology]
105
+ end
106
+ end
107
+
108
+ describe '#concept_schemes' do
109
+ let(:concept_scheme) { FactoryGirl.create(:concept_scheme) }
110
+ let(:concept) { concept_scheme.concepts.first }
111
+
112
+ before do
113
+ r = Resource.new('http://example.com/id/bar', dataset.data_graph_uri)
114
+ r.write_predicate('http://example.com/is-unrelated-to', concept.uri)
115
+ r.save!
116
+ end
117
+
118
+ it 'should return the concept schemes which we have data about that have been used in the dataset' do
119
+ dataset.concept_schemes.should == [concept_scheme]
17
120
  end
18
121
  end
19
122
 
@@ -39,5 +142,4 @@ module PublishMyData
39
142
  end
40
143
  end
41
144
  end
42
- end
43
-
145
+ end