active-fedora 7.0.0.rc2 → 7.0.0.rc3

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +13 -3
  3. data/CONTRIBUTORS.md +1 -0
  4. data/Gemfile +2 -3
  5. data/active-fedora.gemspec +4 -3
  6. data/gemfiles/rails3.gemfile +1 -7
  7. data/gemfiles/rails4.1.gemfile +5 -0
  8. data/gemfiles/rails4.gemfile +1 -6
  9. data/lib/active_fedora.rb +6 -6
  10. data/lib/active_fedora/associations/association_scope.rb +1 -1
  11. data/lib/active_fedora/base.rb +2 -0
  12. data/lib/active_fedora/datastream.rb +29 -2
  13. data/lib/active_fedora/datastream_collections.rb +2 -2
  14. data/lib/active_fedora/datastream_hash.rb +1 -1
  15. data/lib/active_fedora/datastreams.rb +4 -23
  16. data/lib/active_fedora/file_configurator.rb +8 -7
  17. data/lib/active_fedora/om_datastream.rb +1 -1
  18. data/lib/active_fedora/rdf.rb +9 -0
  19. data/lib/active_fedora/rdf/configurable.rb +59 -0
  20. data/lib/active_fedora/rdf/identifiable.rb +59 -0
  21. data/lib/active_fedora/rdf/indexing.rb +24 -23
  22. data/lib/active_fedora/rdf/list.rb +154 -0
  23. data/lib/active_fedora/{ntriples_rdf_datastream.rb → rdf/ntriples_rdf_datastream.rb} +0 -0
  24. data/lib/active_fedora/rdf/object_resource.rb +20 -0
  25. data/lib/active_fedora/rdf/properties.rb +108 -0
  26. data/lib/active_fedora/rdf/rdf_datastream.rb +113 -0
  27. data/lib/active_fedora/{rdfxml_rdf_datastream.rb → rdf/rdfxml_rdf_datastream.rb} +0 -0
  28. data/lib/active_fedora/rdf/repositories.rb +36 -0
  29. data/lib/active_fedora/rdf/resource.rb +324 -0
  30. data/lib/active_fedora/rdf/term.rb +188 -0
  31. data/lib/active_fedora/relation.rb +1 -0
  32. data/lib/active_fedora/relation/finder_methods.rb +16 -17
  33. data/lib/active_fedora/relation/merger.rb +1 -1
  34. data/lib/active_fedora/relation/query_methods.rb +13 -5
  35. data/lib/active_fedora/reload_on_save.rb +16 -0
  36. data/lib/active_fedora/rubydora_connection.rb +0 -1
  37. data/lib/active_fedora/sharding.rb +1 -1
  38. data/lib/active_fedora/version.rb +1 -1
  39. data/script/console +10 -11
  40. data/spec/config_helper.rb +1 -1
  41. data/spec/fixtures/solr_rdf_descMetadata.nt +1 -1
  42. data/spec/integration/auditable_spec.rb +1 -1
  43. data/spec/integration/base_spec.rb +21 -3
  44. data/spec/integration/complex_rdf_datastream_spec.rb +32 -55
  45. data/spec/integration/field_to_solr_name_spec.rb +6 -8
  46. data/spec/integration/has_many_associations_spec.rb +10 -3
  47. data/spec/integration/load_from_solr_spec.rb +15 -17
  48. data/spec/integration/ntriples_datastream_spec.rb +19 -23
  49. data/spec/integration/om_datastream_spec.rb +1 -1
  50. data/spec/integration/rdf_nested_attributes_spec.rb +51 -70
  51. data/spec/integration/relation_spec.rb +24 -11
  52. data/spec/integration/scoped_query_spec.rb +5 -1
  53. data/spec/samples/hydra-mods_article_datastream.rb +4 -0
  54. data/spec/samples/hydra-rights_metadata_datastream.rb +5 -0
  55. data/spec/samples/marpa-dc_datastream.rb +6 -1
  56. data/spec/samples/special_thing.rb +5 -5
  57. data/spec/spec_helper.rb +0 -3
  58. data/spec/support/an_active_model.rb +5 -12
  59. data/spec/unit/active_fedora_spec.rb +2 -2
  60. data/spec/unit/attributes_spec.rb +4 -8
  61. data/spec/unit/base_datastream_management_spec.rb +5 -29
  62. data/spec/unit/base_spec.rb +4 -0
  63. data/spec/unit/code_configurator_spec.rb +2 -2
  64. data/spec/unit/config_spec.rb +2 -2
  65. data/spec/unit/core_spec.rb +2 -4
  66. data/spec/unit/datastream_spec.rb +15 -0
  67. data/spec/unit/datastreams_spec.rb +1 -12
  68. data/spec/unit/file_configurator_spec.rb +1 -1
  69. data/spec/unit/ntriples_datastream_spec.rb +52 -57
  70. data/spec/unit/om_datastream_spec.rb +3 -3
  71. data/spec/unit/query_spec.rb +3 -4
  72. data/spec/unit/rdf_configurable_spec.rb +37 -0
  73. data/spec/unit/rdf_datastream_spec.rb +5 -7
  74. data/spec/unit/rdf_list_nested_attributes_spec.rb +22 -36
  75. data/spec/unit/rdf_list_spec.rb +26 -38
  76. data/spec/unit/rdf_properties_spec.rb +70 -0
  77. data/spec/unit/rdf_repositories_spec.rb +28 -0
  78. data/spec/unit/rdf_resource_datastream_spec.rb +287 -0
  79. data/spec/unit/rdf_resource_spec.rb +341 -0
  80. data/spec/unit/rdfxml_rdf_datastream_spec.rb +10 -26
  81. data/spec/unit/reload_on_save_spec.rb +24 -0
  82. data/spec/unit/solr_service_spec.rb +3 -3
  83. metadata +45 -16
  84. data/lib/active_fedora/rdf_datastream.rb +0 -113
  85. data/lib/active_fedora/rdf_list.rb +0 -162
  86. data/lib/active_fedora/rdf_node.rb +0 -332
  87. data/lib/active_fedora/rdf_node/term_proxy.rb +0 -141
  88. data/lib/active_fedora/rdf_object.rb +0 -24
  89. data/lib/active_fedora/yaml_adaptor.rb +0 -12
  90. data/spec/unit/rdf_node_spec.rb +0 -36
@@ -119,7 +119,6 @@ describe ActiveFedora::Base do
119
119
  }.and_return('response'=>{'docs'=>mock_docs})
120
120
  SpecModel::Basic.find({:foo=>'bar', :baz=>['quix','quack']}, :sort=>'title_t desc').should == ["Fake Object1", "Fake Object2"]
121
121
  end
122
-
123
122
  end
124
123
  end
125
124
 
@@ -203,7 +202,7 @@ describe ActiveFedora::Base do
203
202
 
204
203
  it "should count without a class specified" do
205
204
  mock_result = {'response'=>{'numFound'=>7}}
206
- ActiveFedora::SolrService.should_receive(:query).with("foo:bar", :rows=>0, :raw=>true).and_return(mock_result)
205
+ ActiveFedora::SolrService.should_receive(:query).with("(foo:bar)", :rows=>0, :raw=>true).and_return(mock_result)
207
206
  ActiveFedora::Base.count(:conditions=>'foo:bar').should == 7
208
207
  end
209
208
  end
@@ -283,9 +282,9 @@ describe ActiveFedora::Base do
283
282
  ActiveFedora::SolrService.should_receive(:query).with('baz:quack', {:sort => [@sort_query]}).and_return(mock_result)
284
283
  ActiveFedora::Base.find_with_conditions(:baz=>'quack').should == mock_result
285
284
  end
286
- it "should use the query string if it's provided" do
285
+ it "should use the query string if it's provided and wrap it in parentheses" do
287
286
  mock_result = double('Result')
288
- ActiveFedora::SolrService.should_receive(:query).with('chunky:monkey', {:sort => [@sort_query]}).and_return(mock_result)
287
+ ActiveFedora::SolrService.should_receive(:query).with('(chunky:monkey)', {:sort => [@sort_query]}).and_return(mock_result)
289
288
  ActiveFedora::Base.find_with_conditions('chunky:monkey').should == mock_result
290
289
  end
291
290
  end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+ describe ActiveFedora::Rdf::Configurable do
3
+ before do
4
+ class DummyConfigurable
5
+ extend ActiveFedora::Rdf::Configurable
6
+ end
7
+ end
8
+ after do
9
+ Object.send(:remove_const, "DummyConfigurable")
10
+ end
11
+
12
+ describe '#configure' do
13
+ before do
14
+ DummyConfigurable.configure :base_uri => "http://example.org/base", :type => RDF.Class, :rdf_label => RDF::DC.title
15
+ end
16
+
17
+ it 'should set a base uri' do
18
+ expect(DummyConfigurable.base_uri).to eq "http://example.org/base"
19
+ end
20
+
21
+ it 'should set an rdf_label' do
22
+ expect(DummyConfigurable.rdf_label).to eq RDF::DC.title
23
+ end
24
+
25
+ it 'should set a type' do
26
+ expect(DummyConfigurable.type).to eq RDF.Class
27
+ end
28
+ end
29
+
30
+ describe '#rdf_type' do
31
+ it "should set the type the old way" do
32
+ DummyConfigurable.should_receive(:configure).with(:type => RDF.Class).and_call_original
33
+ DummyConfigurable.rdf_type(RDF.Class)
34
+ expect(DummyConfigurable.type).to eq RDF.Class
35
+ end
36
+ end
37
+ end
@@ -7,12 +7,10 @@ describe ActiveFedora::RDFDatastream do
7
7
  its(:content_changed?) { should be_false}
8
8
  end
9
9
  describe "an instance that exists in the datastore, but hasn't been loaded" do
10
- before do
10
+ before do
11
11
  class MyDatastream < ActiveFedora::NtriplesRDFDatastream
12
- map_predicates do |map|
13
- map.title(in: RDF::DC)
14
- map.description(in: RDF::DC, multivalue: false)
15
- end
12
+ property :title, :predicate => RDF::DC.title
13
+ property :description, :predicate => RDF::DC.description, :multivalue => false
16
14
  end
17
15
  class MyObj < ActiveFedora::Base
18
16
  has_metadata 'descMetadata', type: MyDatastream
@@ -26,7 +24,7 @@ describe ActiveFedora::RDFDatastream do
26
24
  Object.send(:remove_const, :MyDatastream)
27
25
  Object.send(:remove_const, :MyObj)
28
26
  end
29
- subject { @obj.reload.descMetadata }
27
+ subject { @obj.reload.descMetadata }
30
28
  it "should not load the descMetadata datastream when calling content_changed?" do
31
29
  @obj.inner_object.repository.should_not_receive(:datastream_dissemination).with(hash_including(:dsid=>'descMetadata'))
32
30
  subject.should_not be_content_changed
@@ -60,7 +58,7 @@ describe ActiveFedora::RDFDatastream do
60
58
  # see https://github.com/ruby-rdf/rdf/issues/142
61
59
  ds = ActiveFedora::NtriplesRDFDatastream.new
62
60
  data = "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n\xE2\x80\x99 \" .\n".force_encoding('ASCII-8BIT')
63
-
61
+
64
62
  result = ds.deserialize(data)
65
63
  result.dump(:ntriples).should == "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
66
64
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ActiveFedora::RdfList do
3
+ describe ActiveFedora::Rdf::List do
4
4
  before :each do
5
5
  class MADS < RDF::Vocabulary("http://www.loc.gov/mads/rdf/v1#")
6
6
  property :MADSScheme
@@ -14,39 +14,27 @@ describe ActiveFedora::RdfList do
14
14
  property :hasExactExternalAuthority
15
15
  end
16
16
 
17
- class TopicElement
18
- include ActiveFedora::RdfObject
19
- rdf_type MADS.TopicElement
20
- map_predicates do |map|
21
- map.elementValue(:in=> MADS)
22
- end
17
+ class TopicElement < ActiveFedora::Rdf::Resource
18
+ configure :type => MADS.TopicElement
19
+ property :elementValue, :predicate => MADS.elementValue
23
20
  end
24
- class TemporalElement
25
- include ActiveFedora::RdfObject
26
- rdf_type MADS.TemporalElement
27
- map_predicates do |map|
28
- map.elementValue(:in=> MADS)
29
- end
21
+ class TemporalElement < ActiveFedora::Rdf::Resource
22
+ configure :type => MADS.TemporalElement
23
+ property :elementValue, :predicate => MADS.elementValue
30
24
  end
31
- class ElementList
32
- include ActiveFedora::RdfList
33
-
34
- map_predicates do |map|
35
- map.topicElement(:in=> MADS, :to =>"TopicElement", :class_name => "TopicElement")
36
- map.temporalElement(:in=> MADS, :to =>"TemporalElement", :class_name => "TemporalElement")
37
- end
25
+ class ElementList < ActiveFedora::Rdf::List
26
+ property :topicElement, :predicate => MADS.TopicElement, :class_name => 'TopicElement'
27
+ property :temporalElement, :predicate => MADS.TemporalElement, :class_name => 'TemporalElement'
38
28
  accepts_nested_attributes_for :topicElement, :temporalElement
39
29
  end
40
30
 
41
- class Topic
42
- include ActiveFedora::RdfObject
43
- rdf_type MADS.Topic
44
- rdf_subject { |ds| RDF::URI.new(Rails.configuration.id_namespace + ds.pid)}
45
- map_predicates do |map|
46
- map.name(:in => MADS, :to => 'authoritativeLabel')
47
- map.elementList(:in => MADS, :class_name=>'ElementList')
48
- map.externalAuthority(:in => MADS, :to => 'hasExactExternalAuthority')
49
- end
31
+ class Topic < ActiveFedora::Rdf::Resource
32
+ configure :type => MADS.Topic
33
+ configure :base_uri => "http://example.org/id_namespace#"
34
+ property :name, :predicate => MADS.authoritativeLabel
35
+ property :elementList, :predicate => MADS.elementList, :class_name => 'ElementList'
36
+ property :externalAuthority, :predicate => MADS.hasExactExternalAuthority
37
+
50
38
  accepts_nested_attributes_for :elementList
51
39
  end
52
40
  end
@@ -57,7 +45,7 @@ describe ActiveFedora::RdfList do
57
45
  Object.send(:remove_const, :TemporalElement)
58
46
  Object.send(:remove_const, :MADS)
59
47
  end
60
-
48
+
61
49
  describe "nested_attributes" do
62
50
  it "should insert new nodes into RdfLists (rather than calling .build)" do
63
51
  params = {
@@ -70,9 +58,8 @@ describe ActiveFedora::RdfList do
70
58
  }
71
59
  }
72
60
 
73
- topic = Topic.new(RDF::Graph.new)
61
+ topic = Topic.new
74
62
  topic.attributes = params[:topic]
75
- # puts topic.graph.dump(:ntriples)
76
63
  topic.elementList.first.size.should == 2
77
64
  topic.elementList.first[0].should be_kind_of(TopicElement)
78
65
  topic.elementList.first[0].elementValue.should == ["Baseball"]
@@ -80,10 +67,10 @@ describe ActiveFedora::RdfList do
80
67
  topic.elementList.first[1].elementValue.should == ["Football"]
81
68
 
82
69
  # only one rdf:rest rdf:nil
83
- topic.graph.query([nil, RDF.rest, RDF.nil]).size.should == 1
70
+ topic.query([nil, RDF.rest, RDF.nil]).size.should == 1
84
71
  end
85
72
  it "should insert new nodes of varying types into RdfLists (rather than calling .build)" do
86
- # It's Not clear what the syntax should be when an RDF list contains multiple types of sub-nodes.
73
+ # It's Not clear what the syntax should be when an RDF list contains multiple types of sub-nodes.
87
74
  # This is a guess, which currently works.
88
75
  params = {
89
76
  topic: {
@@ -96,9 +83,8 @@ describe ActiveFedora::RdfList do
96
83
  }
97
84
  }
98
85
 
99
- topic = Topic.new(RDF::Graph.new)
86
+ topic = Topic.new
100
87
  topic.attributes = params[:topic]
101
- # puts topic.graph.dump(:ntriples)
102
88
  topic.elementList.first.size.should == 4
103
89
  topic.elementList.first[0].should be_kind_of(TopicElement)
104
90
  topic.elementList.first[0].elementValue.should == ["Baseball"]
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ActiveFedora::RdfList do
3
+ describe ActiveFedora::Rdf::List do
4
4
  before :each do
5
5
  class MADS < RDF::Vocabulary("http://www.loc.gov/mads/rdf/v1#")
6
6
  property :complexSubject
@@ -11,29 +11,18 @@ describe ActiveFedora::RdfList do
11
11
  property :TemporalElement
12
12
  end
13
13
  class DemoList < ActiveFedora::RdfxmlRDFDatastream
14
- map_predicates do |map|
15
- map.elementList(:in => MADS, :to => 'elementList', :class_name=>'List')
16
- end
17
- class List
18
- include ActiveFedora::RdfList
19
- map_predicates do |map|
20
- map.topicElement(:in=> MADS, :to =>"TopicElement", :class_name => "TopicElement")
21
- map.temporalElement(:in=> MADS, :to =>"TemporalElement", :class_name => "TemporalElement")
14
+ property :elementList, :predicate => MADS.elementList, :class_name => 'DemoList::List'
15
+ class List < ActiveFedora::Rdf::List
16
+ property :topicElement, :predicate => MADS.TopicElement, :class_name => 'DemoList::List::TopicElement'
17
+ property :temporalElement, :predicate => MADS.TemporalElement, :class_name => 'DemoList::List::TemporalElement'
18
+
19
+ class TopicElement < ActiveFedora::Rdf::Resource
20
+ configure :type => MADS.TopicElement
21
+ property :elementValue, :predicate => MADS.elementValue
22
22
  end
23
-
24
- class TopicElement
25
- include ActiveFedora::RdfObject
26
- rdf_type MADS.TopicElement
27
- map_predicates do |map|
28
- map.elementValue(:in=> MADS)
29
- end
30
- end
31
- class TemporalElement
32
- include ActiveFedora::RdfObject
33
- rdf_type MADS.TemporalElement
34
- map_predicates do |map|
35
- map.elementValue(:in=> MADS)
36
- end
23
+ class TemporalElement < ActiveFedora::Rdf::Resource
24
+ configure :type => MADS.TemporalElement
25
+ property :elementValue, :predicate => MADS.elementValue
37
26
  end
38
27
  end
39
28
  end
@@ -50,24 +39,24 @@ describe ActiveFedora::RdfList do
50
39
  it "should insert at the end" do
51
40
  subject.should be_kind_of DemoList::List
52
41
  subject.size.should == 0
53
- subject[1] = DemoList::List::TopicElement.new(subject.graph)
42
+ subject[1] = DemoList::List::TopicElement.new
54
43
  subject.size.should == 2
55
44
  end
56
45
 
57
46
  it "should insert at the head" do
58
47
  subject.should be_kind_of DemoList::List
59
48
  subject.size.should == 0
60
- subject[0] = DemoList::List::TopicElement.new(subject.graph)
49
+ subject[0] = DemoList::List::TopicElement.new
61
50
  subject.size.should == 1
62
51
  end
63
52
 
64
53
  describe "that has 4 elements" do
65
54
  before do
66
- subject[3] = DemoList::List::TopicElement.new(subject.graph)
55
+ subject[3] = DemoList::List::TopicElement.new
67
56
  subject.size.should == 4
68
57
  end
69
58
  it "should insert in the middle" do
70
- subject[1] = DemoList::List::TopicElement.new(subject.graph)
59
+ subject[1] = DemoList::List::TopicElement.new
71
60
  subject.size.should == 4
72
61
  end
73
62
  end
@@ -75,11 +64,12 @@ describe ActiveFedora::RdfList do
75
64
  describe "return updated xml" do
76
65
  it "should be built" do
77
66
  subject[0] = RDF::URI.new "http://library.ucsd.edu/ark:/20775/bbXXXXXXX6"
78
- subject[1] = DemoList::List::TopicElement.new(ds.graph)
67
+ subject[1] = DemoList::List::TopicElement.new
79
68
  subject[1].elementValue = "Relations with Mexican Americans"
80
69
  subject[2] = RDF::URI.new "http://library.ucsd.edu/ark:/20775/bbXXXXXXX4"
81
- subject[3] = DemoList::List::TemporalElement.new(ds.graph)
70
+ subject[3] = DemoList::List::TemporalElement.new
82
71
  subject[3].elementValue = "20th century"
72
+ ds.elementList = subject
83
73
  doc = Nokogiri::XML(ds.content)
84
74
  ns = {rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", mads: "http://www.loc.gov/mads/rdf/v1#"}
85
75
  expect(doc.xpath('/rdf:RDF/rdf:Description/@rdf:about', ns).map(&:value)).to eq ["info:fedora/foo"]
@@ -90,22 +80,20 @@ describe ActiveFedora::RdfList do
90
80
  expect(doc.xpath('//rdf:Description/mads:elementList/*[position() = 4]/mads:elementValue', ns).map(&:text)).to eq ["20th century"]
91
81
  end
92
82
  end
93
-
94
-
95
83
  end
96
84
 
97
85
  describe "an empty list" do
98
- subject { DemoList.new(double('inner object', :pid=>'foo', :new_record? =>true)).elementList.build }
86
+ subject { DemoList.new(double('inner object', :pid=>'foo', :new_record? =>true), 'descMd').elementList.build }
99
87
  it "should have to_ary" do
100
88
  subject.to_ary.should == []
101
89
  end
102
90
  end
103
91
 
104
92
  describe "a list that has a constructed element" do
105
- let(:ds) { DemoList.new(double('inner object', :pid=>'foo', :new_record? =>true)) }
93
+ let(:ds) { DemoList.new(double('inner object', :pid=>'foo', :new_record? =>true), 'descMd') }
106
94
  let(:list) { ds.elementList.build }
107
95
  let!(:topic) { list.topicElement.build }
108
-
96
+
109
97
  it "should have to_ary" do
110
98
  list.to_ary.size.should == 1
111
99
  list.to_ary.first.class.should == DemoList::List::TopicElement
@@ -127,7 +115,7 @@ describe ActiveFedora::RdfList do
127
115
  subject.content =<<END
128
116
  <rdf:RDF
129
117
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:mads="http://www.loc.gov/mads/rdf/v1#">
130
-
118
+
131
119
  <mads:ComplexSubject rdf:about="info:fedora/foo">
132
120
  <mads:elementList rdf:parseType="Collection">
133
121
  <rdf:Description rdf:about="http://library.ucsd.edu/ark:/20775/bbXXXXXXX6"/>
@@ -152,10 +140,10 @@ END
152
140
  let (:list) { subject.elementList.first }
153
141
 
154
142
  it "should have fields" do
155
- list.first.should == "http://library.ucsd.edu/ark:/20775/bbXXXXXXX6"
143
+ list.first.rdf_subject.should == "http://library.ucsd.edu/ark:/20775/bbXXXXXXX6"
156
144
  list[1].should be_kind_of DemoList::List::TopicElement
157
145
  list[1].elementValue.should == ["Relations with Mexican Americans"]
158
- list[2].should == "http://library.ucsd.edu/ark:/20775/bbXXXXXXX4"
146
+ list[2].rdf_subject.should == "http://library.ucsd.edu/ark:/20775/bbXXXXXXX4"
159
147
  list[3].should be_kind_of DemoList::List::TemporalElement
160
148
  list[3].elementValue.should == ["20th century"]
161
149
  end
@@ -163,7 +151,7 @@ END
163
151
  it "should have each" do
164
152
  foo = []
165
153
  list.each { |n| foo << n.class }
166
- foo.should == [RDF::URI, DemoList::List::TopicElement, RDF::URI, DemoList::List::TemporalElement]
154
+ foo.should == [ActiveFedora::Rdf::Resource, DemoList::List::TopicElement, ActiveFedora::Rdf::Resource, DemoList::List::TemporalElement]
167
155
  end
168
156
 
169
157
  it "should have to_ary" do
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+ describe ActiveFedora::Rdf::Properties do
3
+ before do
4
+ class DummyProperties
5
+ extend ActiveFedora::Rdf::Properties
6
+ end
7
+ end
8
+
9
+ after do
10
+ Object.send(:remove_const, "DummyProperties")
11
+ end
12
+
13
+ describe '#map_predicates' do
14
+ before do
15
+ DummyProperties.map_predicates do |map|
16
+ map.title(:in => RDF::DC, :class_name => RDF::Literal) do |index|
17
+ index.as :facetable, :searchable
18
+ end
19
+ end
20
+ end
21
+
22
+ it 'should set a property' do
23
+ expect(DummyProperties.properties).to include :title
24
+ end
25
+
26
+ it "should set index behaviors" do
27
+ expect(DummyProperties.properties[:title][:behaviors]).to eq [:facetable, :searchable]
28
+ end
29
+
30
+ it "should set a class name" do
31
+ expect(DummyProperties.properties[:title][:class_name]).to eq RDF::Literal
32
+ end
33
+ end
34
+
35
+ describe '#property' do
36
+ it 'should set a property' do
37
+ DummyProperties.property :title, :predicate => RDF::DC.title
38
+ expect(DummyProperties.properties).to include :title
39
+ end
40
+
41
+ it 'should set index behaviors' do
42
+ DummyProperties.property :title, :predicate => RDF::DC.title do |index|
43
+ index.as :facetable, :searchable
44
+ end
45
+ expect(DummyProperties.properties[:title][:behaviors]).to eq [:facetable, :searchable]
46
+ end
47
+
48
+ it 'should set class name' do
49
+ DummyProperties.property :title, :predicate => RDF::DC.title, :class_name => RDF::Literal
50
+ expect(DummyProperties.properties[:title][:class_name]).to eq RDF::Literal
51
+ end
52
+ end
53
+
54
+ context "when using a subclass" do
55
+ before do
56
+ DummyProperties.property :title, :predicate => RDF::DC.title
57
+ class DummySubClass < DummyProperties
58
+ property :source, :predicate => RDF::DC11[:source]
59
+ end
60
+ end
61
+
62
+ after do
63
+ Object.send(:remove_const, "DummySubClass")
64
+ end
65
+
66
+ it 'should carry properties from superclass' do
67
+ expect(DummySubClass.properties.keys).to eq ["title", "source"]
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+ describe ActiveFedora::Rdf::Repositories do
3
+ subject {ActiveFedora::Rdf::Repositories}
4
+
5
+ after(:each) do
6
+ subject.clear_repositories!
7
+ subject.add_repository :default, RDF::Repository.new
8
+ subject.add_repository :vocabs, RDF::Repository.new
9
+ end
10
+
11
+ describe '#add_repositories' do
12
+ it 'should accept a new repository' do
13
+ subject.add_repository :name, RDF::Repository.new
14
+ expect(subject.repositories).to include :name
15
+ end
16
+ it 'should throw an error if passed something that is not a repository' do
17
+ expect{subject.add_repository :name, :not_a_repo}.to raise_error
18
+ end
19
+ end
20
+
21
+ describe '#clear_repositories!' do
22
+ it 'should empty the repositories list' do
23
+ subject.clear_repositories!
24
+ expect(subject.repositories).to be_empty
25
+ end
26
+ end
27
+
28
+ end