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.
- checksums.yaml +4 -4
- data/.travis.yml +13 -3
- data/CONTRIBUTORS.md +1 -0
- data/Gemfile +2 -3
- data/active-fedora.gemspec +4 -3
- data/gemfiles/rails3.gemfile +1 -7
- data/gemfiles/rails4.1.gemfile +5 -0
- data/gemfiles/rails4.gemfile +1 -6
- data/lib/active_fedora.rb +6 -6
- data/lib/active_fedora/associations/association_scope.rb +1 -1
- data/lib/active_fedora/base.rb +2 -0
- data/lib/active_fedora/datastream.rb +29 -2
- data/lib/active_fedora/datastream_collections.rb +2 -2
- data/lib/active_fedora/datastream_hash.rb +1 -1
- data/lib/active_fedora/datastreams.rb +4 -23
- data/lib/active_fedora/file_configurator.rb +8 -7
- data/lib/active_fedora/om_datastream.rb +1 -1
- data/lib/active_fedora/rdf.rb +9 -0
- data/lib/active_fedora/rdf/configurable.rb +59 -0
- data/lib/active_fedora/rdf/identifiable.rb +59 -0
- data/lib/active_fedora/rdf/indexing.rb +24 -23
- data/lib/active_fedora/rdf/list.rb +154 -0
- data/lib/active_fedora/{ntriples_rdf_datastream.rb → rdf/ntriples_rdf_datastream.rb} +0 -0
- data/lib/active_fedora/rdf/object_resource.rb +20 -0
- data/lib/active_fedora/rdf/properties.rb +108 -0
- data/lib/active_fedora/rdf/rdf_datastream.rb +113 -0
- data/lib/active_fedora/{rdfxml_rdf_datastream.rb → rdf/rdfxml_rdf_datastream.rb} +0 -0
- data/lib/active_fedora/rdf/repositories.rb +36 -0
- data/lib/active_fedora/rdf/resource.rb +324 -0
- data/lib/active_fedora/rdf/term.rb +188 -0
- data/lib/active_fedora/relation.rb +1 -0
- data/lib/active_fedora/relation/finder_methods.rb +16 -17
- data/lib/active_fedora/relation/merger.rb +1 -1
- data/lib/active_fedora/relation/query_methods.rb +13 -5
- data/lib/active_fedora/reload_on_save.rb +16 -0
- data/lib/active_fedora/rubydora_connection.rb +0 -1
- data/lib/active_fedora/sharding.rb +1 -1
- data/lib/active_fedora/version.rb +1 -1
- data/script/console +10 -11
- data/spec/config_helper.rb +1 -1
- data/spec/fixtures/solr_rdf_descMetadata.nt +1 -1
- data/spec/integration/auditable_spec.rb +1 -1
- data/spec/integration/base_spec.rb +21 -3
- data/spec/integration/complex_rdf_datastream_spec.rb +32 -55
- data/spec/integration/field_to_solr_name_spec.rb +6 -8
- data/spec/integration/has_many_associations_spec.rb +10 -3
- data/spec/integration/load_from_solr_spec.rb +15 -17
- data/spec/integration/ntriples_datastream_spec.rb +19 -23
- data/spec/integration/om_datastream_spec.rb +1 -1
- data/spec/integration/rdf_nested_attributes_spec.rb +51 -70
- data/spec/integration/relation_spec.rb +24 -11
- data/spec/integration/scoped_query_spec.rb +5 -1
- data/spec/samples/hydra-mods_article_datastream.rb +4 -0
- data/spec/samples/hydra-rights_metadata_datastream.rb +5 -0
- data/spec/samples/marpa-dc_datastream.rb +6 -1
- data/spec/samples/special_thing.rb +5 -5
- data/spec/spec_helper.rb +0 -3
- data/spec/support/an_active_model.rb +5 -12
- data/spec/unit/active_fedora_spec.rb +2 -2
- data/spec/unit/attributes_spec.rb +4 -8
- data/spec/unit/base_datastream_management_spec.rb +5 -29
- data/spec/unit/base_spec.rb +4 -0
- data/spec/unit/code_configurator_spec.rb +2 -2
- data/spec/unit/config_spec.rb +2 -2
- data/spec/unit/core_spec.rb +2 -4
- data/spec/unit/datastream_spec.rb +15 -0
- data/spec/unit/datastreams_spec.rb +1 -12
- data/spec/unit/file_configurator_spec.rb +1 -1
- data/spec/unit/ntriples_datastream_spec.rb +52 -57
- data/spec/unit/om_datastream_spec.rb +3 -3
- data/spec/unit/query_spec.rb +3 -4
- data/spec/unit/rdf_configurable_spec.rb +37 -0
- data/spec/unit/rdf_datastream_spec.rb +5 -7
- data/spec/unit/rdf_list_nested_attributes_spec.rb +22 -36
- data/spec/unit/rdf_list_spec.rb +26 -38
- data/spec/unit/rdf_properties_spec.rb +70 -0
- data/spec/unit/rdf_repositories_spec.rb +28 -0
- data/spec/unit/rdf_resource_datastream_spec.rb +287 -0
- data/spec/unit/rdf_resource_spec.rb +341 -0
- data/spec/unit/rdfxml_rdf_datastream_spec.rb +10 -26
- data/spec/unit/reload_on_save_spec.rb +24 -0
- data/spec/unit/solr_service_spec.rb +3 -3
- metadata +45 -16
- data/lib/active_fedora/rdf_datastream.rb +0 -113
- data/lib/active_fedora/rdf_list.rb +0 -162
- data/lib/active_fedora/rdf_node.rb +0 -332
- data/lib/active_fedora/rdf_node/term_proxy.rb +0 -141
- data/lib/active_fedora/rdf_object.rb +0 -24
- data/lib/active_fedora/yaml_adaptor.rb +0 -12
- data/spec/unit/rdf_node_spec.rb +0 -36
@@ -4,9 +4,7 @@ describe ActiveFedora::RdfxmlRDFDatastream do
|
|
4
4
|
describe "a new instance" do
|
5
5
|
before(:each) do
|
6
6
|
class MyRdfxmlDatastream < ActiveFedora::RdfxmlRDFDatastream
|
7
|
-
|
8
|
-
map.publisher(:in => RDF::DC)
|
9
|
-
end
|
7
|
+
property :publisher, :predicate => RDF::DC.publisher
|
10
8
|
end
|
11
9
|
@subject = MyRdfxmlDatastream.new(@inner_object, 'mixed_rdf')
|
12
10
|
@subject.stub(:pid => 'test:1')
|
@@ -21,7 +19,7 @@ describe ActiveFedora::RdfxmlRDFDatastream do
|
|
21
19
|
end
|
22
20
|
|
23
21
|
describe "a complex data model" do
|
24
|
-
before do
|
22
|
+
before do
|
25
23
|
class DAMS < RDF::Vocabulary("http://library.ucsd.edu/ontology/dams#")
|
26
24
|
property :title
|
27
25
|
property :relatedTitle
|
@@ -46,16 +44,14 @@ describe ActiveFedora::RdfxmlRDFDatastream do
|
|
46
44
|
|
47
45
|
module RDF
|
48
46
|
# This enables RDF to respond_to? :value
|
49
|
-
def self.value
|
47
|
+
def self.value
|
50
48
|
self[:value]
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
54
52
|
class MyDatastream < ActiveFedora::RdfxmlRDFDatastream
|
55
|
-
|
56
|
-
|
57
|
-
map.title(:in => DAMS, :class_name => 'Description')
|
58
|
-
end
|
53
|
+
property :resource_type, :predicate => DAMS.typeOfResource
|
54
|
+
property :title, :predicate => DAMS.title, :class_name => 'Description'
|
59
55
|
|
60
56
|
rdf_subject { |ds| RDF::URI.new(ds.about) }
|
61
57
|
|
@@ -66,22 +62,10 @@ describe ActiveFedora::RdfxmlRDFDatastream do
|
|
66
62
|
super
|
67
63
|
end
|
68
64
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
def content=(content)
|
75
|
-
super
|
76
|
-
@about = graph.statements.first.subject
|
77
|
-
end
|
78
|
-
class Description
|
79
|
-
include ActiveFedora::RdfObject
|
80
|
-
map_predicates do |map|
|
81
|
-
rdf_type DAMS.Description
|
82
|
-
map.value(:in=> RDF) do |index|
|
65
|
+
class Description < ActiveFedora::Rdf::Resource
|
66
|
+
configure :type => DAMS.Description
|
67
|
+
property :value, :predicate => RDF.value do |index|
|
83
68
|
index.as :searchable
|
84
|
-
end
|
85
69
|
end
|
86
70
|
end
|
87
71
|
end
|
@@ -97,12 +81,12 @@ describe ActiveFedora::RdfxmlRDFDatastream do
|
|
97
81
|
it "should have a subject" do
|
98
82
|
subject.rdf_subject.to_s.should == "http://library.ucsd.edu/ark:/20775/"
|
99
83
|
end
|
100
|
-
|
84
|
+
|
101
85
|
end
|
102
86
|
|
103
87
|
describe "an instance with content" do
|
104
88
|
subject do
|
105
|
-
subject = MyDatastream.new(double('inner object', :pid=>'test:1', :new_record? =>true), 'descMetadata')
|
89
|
+
subject = MyDatastream.new(double('inner object', :pid=>'test:1', :new_record? =>true), 'descMetadata', about:"http://library.ucsd.edu/ark:/20775/")
|
106
90
|
subject.content = File.new('spec/fixtures/damsObjectModel.xml').read
|
107
91
|
subject
|
108
92
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::ReloadOnSave do
|
4
|
+
let(:file) { ActiveFedora::Base.new }
|
5
|
+
|
6
|
+
it 'defaults to call not reload' do
|
7
|
+
file.should_not_receive(:reload)
|
8
|
+
file.save
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'reload can be turned on' do
|
12
|
+
file.reload_on_save = true
|
13
|
+
file.should_receive(:reload)
|
14
|
+
file.save
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'allows reload to be turned off and on' do
|
18
|
+
file.reload_on_save = true
|
19
|
+
file.should_receive(:reload).once
|
20
|
+
file.save
|
21
|
+
file.reload_on_save = false
|
22
|
+
file.save
|
23
|
+
end
|
24
|
+
end
|
@@ -56,7 +56,7 @@ describe ActiveFedora::SolrService do
|
|
56
56
|
end
|
57
57
|
it "should use .load_instance_from_solr when called with :load_from_solr option" do
|
58
58
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID1_", @sample_solr_hits.first)
|
59
|
-
ActiveFedora::SolrService.
|
59
|
+
ActiveFedora::SolrService.should_not_receive(:query)
|
60
60
|
ActiveFedora::SolrService.reify_solr_result(@sample_solr_hits.first, load_from_solr: true)
|
61
61
|
end
|
62
62
|
end
|
@@ -71,7 +71,7 @@ describe ActiveFedora::SolrService do
|
|
71
71
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID1_", @sample_solr_hits[0])
|
72
72
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID2_", @sample_solr_hits[1])
|
73
73
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID3_", @sample_solr_hits[2])
|
74
|
-
ActiveFedora::SolrService.
|
74
|
+
ActiveFedora::SolrService.should_not_receive(:query)
|
75
75
|
ActiveFedora::SolrService.reify_solr_results(@sample_solr_hits, load_from_solr: true)
|
76
76
|
end
|
77
77
|
end
|
@@ -86,7 +86,7 @@ describe ActiveFedora::SolrService do
|
|
86
86
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID1_", @sample_solr_hits[0])
|
87
87
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID2_", @sample_solr_hits[1])
|
88
88
|
AudioRecord.should_receive(:load_instance_from_solr).with("my:_PID3_", @sample_solr_hits[2])
|
89
|
-
ActiveFedora::SolrService.
|
89
|
+
ActiveFedora::SolrService.should_not_receive(:query)
|
90
90
|
ActiveFedora::SolrService.lazy_reify_solr_results(@sample_solr_hits, load_from_solr: true).each {|r| r}
|
91
91
|
end
|
92
92
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.0.
|
4
|
+
version: 7.0.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-03-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
@@ -88,16 +88,16 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: 1.7.
|
91
|
+
version: 1.7.4
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 1.7.
|
98
|
+
version: 1.7.4
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
100
|
+
name: linkeddata
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
103
|
- - ">="
|
@@ -250,6 +250,20 @@ dependencies:
|
|
250
250
|
- - ">="
|
251
251
|
- !ruby/object:Gem::Version
|
252
252
|
version: '0'
|
253
|
+
- !ruby/object:Gem::Dependency
|
254
|
+
name: simplecov
|
255
|
+
requirement: !ruby/object:Gem::Requirement
|
256
|
+
requirements:
|
257
|
+
- - "~>"
|
258
|
+
- !ruby/object:Gem::Version
|
259
|
+
version: 0.7.1
|
260
|
+
type: :development
|
261
|
+
prerelease: false
|
262
|
+
version_requirements: !ruby/object:Gem::Requirement
|
263
|
+
requirements:
|
264
|
+
- - "~>"
|
265
|
+
- !ruby/object:Gem::Version
|
266
|
+
version: 0.7.1
|
253
267
|
description: ActiveFedora provides for creating and managing objects in the Fedora
|
254
268
|
Repository Architecture.
|
255
269
|
email:
|
@@ -280,6 +294,7 @@ files:
|
|
280
294
|
- config/solr_mappings_af_0.1.yml
|
281
295
|
- config/solr_mappings_bl_2.4.yml
|
282
296
|
- gemfiles/rails3.gemfile
|
297
|
+
- gemfiles/rails4.1.gemfile
|
283
298
|
- gemfiles/rails4.gemfile
|
284
299
|
- lib/active-fedora.rb
|
285
300
|
- lib/active_fedora.rb
|
@@ -324,7 +339,6 @@ files:
|
|
324
339
|
- lib/active_fedora/model.rb
|
325
340
|
- lib/active_fedora/nested_attributes.rb
|
326
341
|
- lib/active_fedora/nom_datastream.rb
|
327
|
-
- lib/active_fedora/ntriples_rdf_datastream.rb
|
328
342
|
- lib/active_fedora/null_relation.rb
|
329
343
|
- lib/active_fedora/om_datastream.rb
|
330
344
|
- lib/active_fedora/persistence.rb
|
@@ -334,16 +348,21 @@ files:
|
|
334
348
|
- lib/active_fedora/querying.rb
|
335
349
|
- lib/active_fedora/railtie.rb
|
336
350
|
- lib/active_fedora/rdf.rb
|
351
|
+
- lib/active_fedora/rdf/configurable.rb
|
352
|
+
- lib/active_fedora/rdf/identifiable.rb
|
337
353
|
- lib/active_fedora/rdf/indexing.rb
|
354
|
+
- lib/active_fedora/rdf/list.rb
|
338
355
|
- lib/active_fedora/rdf/nested_attributes.rb
|
339
356
|
- lib/active_fedora/rdf/node_config.rb
|
340
|
-
- lib/active_fedora/
|
341
|
-
- lib/active_fedora/
|
342
|
-
- lib/active_fedora/
|
343
|
-
- lib/active_fedora/
|
344
|
-
- lib/active_fedora/
|
357
|
+
- lib/active_fedora/rdf/ntriples_rdf_datastream.rb
|
358
|
+
- lib/active_fedora/rdf/object_resource.rb
|
359
|
+
- lib/active_fedora/rdf/properties.rb
|
360
|
+
- lib/active_fedora/rdf/rdf_datastream.rb
|
361
|
+
- lib/active_fedora/rdf/rdfxml_rdf_datastream.rb
|
362
|
+
- lib/active_fedora/rdf/repositories.rb
|
363
|
+
- lib/active_fedora/rdf/resource.rb
|
364
|
+
- lib/active_fedora/rdf/term.rb
|
345
365
|
- lib/active_fedora/rdf_xml_writer.rb
|
346
|
-
- lib/active_fedora/rdfxml_rdf_datastream.rb
|
347
366
|
- lib/active_fedora/reflection.rb
|
348
367
|
- lib/active_fedora/relation.rb
|
349
368
|
- lib/active_fedora/relation/calculations.rb
|
@@ -353,6 +372,7 @@ files:
|
|
353
372
|
- lib/active_fedora/relation/query_methods.rb
|
354
373
|
- lib/active_fedora/relation/spawn_methods.rb
|
355
374
|
- lib/active_fedora/relationship_graph.rb
|
375
|
+
- lib/active_fedora/reload_on_save.rb
|
356
376
|
- lib/active_fedora/rels_ext_datastream.rb
|
357
377
|
- lib/active_fedora/rspec_matchers.rb
|
358
378
|
- lib/active_fedora/rspec_matchers/belong_to_associated_active_fedora_object_matcher.rb
|
@@ -375,7 +395,6 @@ files:
|
|
375
395
|
- lib/active_fedora/unsaved_digital_object.rb
|
376
396
|
- lib/active_fedora/validations.rb
|
377
397
|
- lib/active_fedora/version.rb
|
378
|
-
- lib/active_fedora/yaml_adaptor.rb
|
379
398
|
- lib/generators/active_fedora/config/USAGE
|
380
399
|
- lib/generators/active_fedora/config/config_generator.rb
|
381
400
|
- lib/generators/active_fedora/config/fedora/fedora_generator.rb
|
@@ -496,13 +515,18 @@ files:
|
|
496
515
|
- spec/unit/property_spec.rb
|
497
516
|
- spec/unit/qualified_dublin_core_datastream_spec.rb
|
498
517
|
- spec/unit/query_spec.rb
|
518
|
+
- spec/unit/rdf_configurable_spec.rb
|
499
519
|
- spec/unit/rdf_datastream_spec.rb
|
500
520
|
- spec/unit/rdf_list_nested_attributes_spec.rb
|
501
521
|
- spec/unit/rdf_list_spec.rb
|
502
|
-
- spec/unit/
|
522
|
+
- spec/unit/rdf_properties_spec.rb
|
523
|
+
- spec/unit/rdf_repositories_spec.rb
|
524
|
+
- spec/unit/rdf_resource_datastream_spec.rb
|
525
|
+
- spec/unit/rdf_resource_spec.rb
|
503
526
|
- spec/unit/rdf_xml_writer_spec.rb
|
504
527
|
- spec/unit/rdfxml_rdf_datastream_spec.rb
|
505
528
|
- spec/unit/relationship_graph_spec.rb
|
529
|
+
- spec/unit/reload_on_save_spec.rb
|
506
530
|
- spec/unit/rels_ext_datastream_spec.rb
|
507
531
|
- spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb
|
508
532
|
- spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb
|
@@ -538,7 +562,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
538
562
|
version: 1.3.1
|
539
563
|
requirements: []
|
540
564
|
rubyforge_project:
|
541
|
-
rubygems_version: 2.2.
|
565
|
+
rubygems_version: 2.2.2
|
542
566
|
signing_key:
|
543
567
|
specification_version: 4
|
544
568
|
summary: A convenience libary for manipulating documents in the Fedora Repository.
|
@@ -640,13 +664,18 @@ test_files:
|
|
640
664
|
- spec/unit/property_spec.rb
|
641
665
|
- spec/unit/qualified_dublin_core_datastream_spec.rb
|
642
666
|
- spec/unit/query_spec.rb
|
667
|
+
- spec/unit/rdf_configurable_spec.rb
|
643
668
|
- spec/unit/rdf_datastream_spec.rb
|
644
669
|
- spec/unit/rdf_list_nested_attributes_spec.rb
|
645
670
|
- spec/unit/rdf_list_spec.rb
|
646
|
-
- spec/unit/
|
671
|
+
- spec/unit/rdf_properties_spec.rb
|
672
|
+
- spec/unit/rdf_repositories_spec.rb
|
673
|
+
- spec/unit/rdf_resource_datastream_spec.rb
|
674
|
+
- spec/unit/rdf_resource_spec.rb
|
647
675
|
- spec/unit/rdf_xml_writer_spec.rb
|
648
676
|
- spec/unit/rdfxml_rdf_datastream_spec.rb
|
649
677
|
- spec/unit/relationship_graph_spec.rb
|
678
|
+
- spec/unit/reload_on_save_spec.rb
|
650
679
|
- spec/unit/rels_ext_datastream_spec.rb
|
651
680
|
- spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb
|
652
681
|
- spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb
|
@@ -1,113 +0,0 @@
|
|
1
|
-
module ActiveFedora
|
2
|
-
class RDFDatastream < Datastream
|
3
|
-
|
4
|
-
before_save do
|
5
|
-
if content.blank?
|
6
|
-
logger.warn "Cowardly refusing to save a datastream with empty content: #{self.inspect}"
|
7
|
-
false
|
8
|
-
end
|
9
|
-
end
|
10
|
-
include RdfNode
|
11
|
-
include Rdf::Indexing
|
12
|
-
|
13
|
-
class << self
|
14
|
-
##
|
15
|
-
# Register a ruby block that evaluates to the subject of the graph
|
16
|
-
# By default, the block returns the current object's pid
|
17
|
-
# @yield [ds] 'ds' is the datastream instance
|
18
|
-
# This should override the method in RdfObject, which just creates a b-node by default
|
19
|
-
def rdf_subject &block
|
20
|
-
if block_given?
|
21
|
-
return @subject_block = block
|
22
|
-
end
|
23
|
-
|
24
|
-
@subject_block ||= lambda { |ds| RDF::URI.new("info:fedora/#{ds.pid}") }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def freeze
|
29
|
-
@graph.freeze
|
30
|
-
end
|
31
|
-
|
32
|
-
def metadata?
|
33
|
-
true
|
34
|
-
end
|
35
|
-
|
36
|
-
# Overriding so that one can call ds.content on an unsaved datastream and they will see the serialized format
|
37
|
-
def content
|
38
|
-
serialize
|
39
|
-
end
|
40
|
-
|
41
|
-
def content=(content)
|
42
|
-
reset_child_cache!
|
43
|
-
@graph = deserialize(content)
|
44
|
-
end
|
45
|
-
|
46
|
-
def content_changed?
|
47
|
-
# we haven't touched the graph, so it isn't changed (avoid a force load)
|
48
|
-
return false unless instance_variable_defined? :@graph
|
49
|
-
@content = serialize
|
50
|
-
super
|
51
|
-
end
|
52
|
-
# Populate a RDFDatastream object based on the "datastream" content
|
53
|
-
# Assumes that the datastream contains RDF content
|
54
|
-
# @param [String] data the "rdf" node
|
55
|
-
def deserialize(data = nil)
|
56
|
-
repository = RDF::Repository.new
|
57
|
-
return repository if new? and data.nil?
|
58
|
-
|
59
|
-
data ||= datastream_content
|
60
|
-
data.force_encoding('utf-8')
|
61
|
-
RDF::Reader.for(serialization_format).new(data) do |reader|
|
62
|
-
reader.each_statement do |statement|
|
63
|
-
repository << statement
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
repository
|
68
|
-
end
|
69
|
-
|
70
|
-
def graph
|
71
|
-
@graph ||= begin
|
72
|
-
deserialize
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def serialization_format
|
77
|
-
raise "you must override the `serialization_format' method in a subclass"
|
78
|
-
end
|
79
|
-
|
80
|
-
# Creates a RDF datastream for insertion into a Fedora Object
|
81
|
-
# Note: This method is implemented on SemanticNode instead of RelsExtDatastream because SemanticNode contains the relationships array
|
82
|
-
def serialize
|
83
|
-
update_subjects_to_use_a_real_pid!
|
84
|
-
|
85
|
-
RDF::Writer.for(serialization_format).dump(graph)
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
def update_subjects_to_use_a_real_pid!
|
92
|
-
return unless new?
|
93
|
-
|
94
|
-
bad_subject = rdf_subject
|
95
|
-
reset_rdf_subject!
|
96
|
-
reset_child_cache!
|
97
|
-
new_subject = rdf_subject
|
98
|
-
|
99
|
-
new_repository = RDF::Repository.new
|
100
|
-
|
101
|
-
graph.each_statement do |statement|
|
102
|
-
subject = statement.subject
|
103
|
-
|
104
|
-
subject &&= new_subject if subject == bad_subject
|
105
|
-
new_repository << [subject, statement.predicate, statement.object]
|
106
|
-
end
|
107
|
-
|
108
|
-
@graph = new_repository
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
@@ -1,162 +0,0 @@
|
|
1
|
-
module ActiveFedora
|
2
|
-
module RdfList
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
include ActiveFedora::RdfNode
|
5
|
-
|
6
|
-
attr_reader :graph, :subject
|
7
|
-
|
8
|
-
# RdfList is a node of a linked list structure.
|
9
|
-
# The RDF.first predicate points to the contained object
|
10
|
-
# The RDF.rest predicate points to the next node in the list or
|
11
|
-
# RDF.nil if this is the final node.
|
12
|
-
# @see http://www.w3.org/TR/rdf-schema/#ch_list
|
13
|
-
def initialize(graph, subject)
|
14
|
-
@graph = graph
|
15
|
-
@subject = subject
|
16
|
-
first = graph.query([subject, RDF.first, nil]).first
|
17
|
-
last = graph.query([subject, RDF.rest, nil]).first
|
18
|
-
graph.insert([subject, RDF.first, RDF.nil]) unless first
|
19
|
-
graph.insert([subject, RDF.rest, RDF.nil]) unless last
|
20
|
-
end
|
21
|
-
|
22
|
-
UNASSIGNABLE_KEYS = %w(_destroy )
|
23
|
-
|
24
|
-
# Override assign_nested_attributes
|
25
|
-
def assign_nested_attributes_for_collection_association(association_name, attributes_collection)
|
26
|
-
options = self.nested_attributes_options[association_name]
|
27
|
-
|
28
|
-
# TODO
|
29
|
-
#check_record_limit!(options[:limit], attributes_collection)
|
30
|
-
|
31
|
-
if attributes_collection.is_a?(Hash)
|
32
|
-
attributes_collection = attributes_collection.values
|
33
|
-
end
|
34
|
-
|
35
|
-
association = self.send(association_name)
|
36
|
-
|
37
|
-
original_length_of_list = self.size
|
38
|
-
attributes_collection.each_with_index do |attributes, index|
|
39
|
-
attributes = attributes.with_indifferent_access
|
40
|
-
minted_node = association.mint_node(attributes.except(*UNASSIGNABLE_KEYS))
|
41
|
-
self[original_length_of_list+index] = minted_node
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
# Override the method from RdfNode, enabling us to insert into the list.
|
47
|
-
def insert_child(predicate, node)
|
48
|
-
self[size] = node
|
49
|
-
end
|
50
|
-
|
51
|
-
def rdf_subject
|
52
|
-
subject
|
53
|
-
end
|
54
|
-
|
55
|
-
def first
|
56
|
-
self[0]
|
57
|
-
end
|
58
|
-
|
59
|
-
def [](idx)
|
60
|
-
idx == 0 ? head.value : tail[idx-1]
|
61
|
-
end
|
62
|
-
|
63
|
-
def []=(idx, value)
|
64
|
-
idx == 0 ? head.value=value : tail_or_create(idx-1).value=value
|
65
|
-
end
|
66
|
-
|
67
|
-
def clear(first_element=true)
|
68
|
-
# Remove the pointed at element
|
69
|
-
v = graph.query([subject, RDF.first, nil]).first
|
70
|
-
# TODO - Recursive delete
|
71
|
-
graph.delete([v.object, nil, nil])
|
72
|
-
|
73
|
-
# Remove the tail
|
74
|
-
tail.clear(false) if tail
|
75
|
-
# clear the cache
|
76
|
-
@tail = nil
|
77
|
-
graph.delete([subject, nil, nil])
|
78
|
-
if first_element
|
79
|
-
# Re-add first/rest predicates if its the first node
|
80
|
-
graph.insert([subject, RDF.first, RDF.nil])
|
81
|
-
graph.insert([subject, RDF.rest, RDF.nil])
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def each &block
|
86
|
-
yield(head.value)
|
87
|
-
tail.each(&block) if tail
|
88
|
-
end
|
89
|
-
|
90
|
-
def to_ary
|
91
|
-
if empty?
|
92
|
-
[]
|
93
|
-
elsif tail
|
94
|
-
[head.value] + tail.to_ary
|
95
|
-
else
|
96
|
-
[head.value]
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def empty?
|
101
|
-
!tail && graph.query([subject, RDF.first, RDF.nil]).first
|
102
|
-
end
|
103
|
-
|
104
|
-
def size
|
105
|
-
if empty?
|
106
|
-
0
|
107
|
-
elsif tail
|
108
|
-
tail.size + 1
|
109
|
-
else
|
110
|
-
1
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def inspect
|
115
|
-
"[ #{value ? value.inspect : 'nil'}, #{tail.inspect}]"
|
116
|
-
end
|
117
|
-
|
118
|
-
def value
|
119
|
-
v = graph.query([subject, RDF.first, nil]).first
|
120
|
-
if v.object.uri?
|
121
|
-
return v.object == RDF.nil ? nil : v.object
|
122
|
-
end
|
123
|
-
if v.object.resource?
|
124
|
-
type = graph.query([v.object, RDF.type, nil]).first
|
125
|
-
return ActiveFedora::RdfNode.rdf_registry[type.object].new(graph, v.object)
|
126
|
-
end
|
127
|
-
v
|
128
|
-
end
|
129
|
-
|
130
|
-
def value=(obj)
|
131
|
-
graph.delete([subject, RDF.first, RDF.nil])
|
132
|
-
if obj.respond_to? :rdf_subject
|
133
|
-
graph.insert([subject, RDF.first, obj.rdf_subject]) # an ActiveFedora::RdfObject
|
134
|
-
else
|
135
|
-
graph.insert([subject, RDF.first, obj])
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def head
|
140
|
-
@head ||= self.class.new(graph, subject)
|
141
|
-
end
|
142
|
-
|
143
|
-
def tail
|
144
|
-
return @tail if @tail
|
145
|
-
rest = graph.query([subject, RDF.rest, nil]).first
|
146
|
-
return if rest.object == RDF.nil
|
147
|
-
@tail = self.class.new(graph, rest.object)
|
148
|
-
end
|
149
|
-
|
150
|
-
def tail_or_create(idx)
|
151
|
-
unless tail
|
152
|
-
#add a tail
|
153
|
-
graph.delete([subject, RDF.rest, RDF.nil])
|
154
|
-
tail_node = RDF::Node.new
|
155
|
-
graph.insert([subject, RDF.rest, tail_node])
|
156
|
-
@tail = self.class.new(graph, tail_node)
|
157
|
-
end
|
158
|
-
|
159
|
-
idx == 0 ? @tail : @tail.tail_or_create(idx-1)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|