active-fedora 3.0.7 → 3.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.rvmrc +1 -1
  2. data/Gemfile.lock +39 -10
  3. data/History.txt +0 -4
  4. data/active-fedora.gemspec +4 -3
  5. data/lib/active_fedora.rb +9 -9
  6. data/lib/active_fedora/base.rb +92 -163
  7. data/lib/active_fedora/datastream.rb +59 -60
  8. data/lib/active_fedora/datastream_hash.rb +18 -0
  9. data/lib/active_fedora/metadata_datastream.rb +3 -2
  10. data/lib/active_fedora/metadata_datastream_helper.rb +3 -15
  11. data/lib/active_fedora/model.rb +3 -3
  12. data/lib/active_fedora/nokogiri_datastream.rb +305 -302
  13. data/lib/active_fedora/qualified_dublin_core_datastream.rb +24 -19
  14. data/lib/active_fedora/rels_ext_datastream.rb +39 -37
  15. data/lib/active_fedora/rubydora_connection.rb +40 -0
  16. data/lib/active_fedora/semantic_node.rb +1 -1
  17. data/lib/active_fedora/solr_service.rb +1 -1
  18. data/lib/active_fedora/version.rb +1 -1
  19. data/lib/ruby-fedora.rb +0 -8
  20. data/lib/tasks/active_fedora.rake +14 -9
  21. data/lib/tasks/active_fedora_dev.rake +23 -40
  22. data/spec/integration/base_loader_spec.rb +4 -21
  23. data/spec/integration/base_spec.rb +300 -310
  24. data/spec/integration/bug_spec.rb +9 -10
  25. data/spec/integration/datastream_spec.rb +12 -12
  26. data/spec/integration/metadata_datastream_helper_spec.rb +7 -10
  27. data/spec/integration/model_spec.rb +3 -2
  28. data/spec/integration/rels_ext_datastream_spec.rb +9 -15
  29. data/spec/spec_helper.rb +2 -29
  30. data/spec/unit/active_fedora_spec.rb +5 -5
  31. data/spec/unit/base_cma_spec.rb +0 -7
  32. data/spec/unit/base_datastream_management_spec.rb +8 -67
  33. data/spec/unit/base_delegate_spec.rb +26 -9
  34. data/spec/unit/base_extra_spec.rb +5 -3
  35. data/spec/unit/base_file_management_spec.rb +10 -17
  36. data/spec/unit/base_named_datastream_spec.rb +76 -199
  37. data/spec/unit/base_spec.rb +152 -69
  38. data/spec/unit/content_model_spec.rb +1 -1
  39. data/spec/unit/datastream_concurrency_spec.rb +5 -4
  40. data/spec/unit/datastream_spec.rb +28 -48
  41. data/spec/unit/has_many_collection_spec.rb +2 -0
  42. data/spec/unit/inheritance_spec.rb +6 -6
  43. data/spec/unit/metadata_datastream_spec.rb +12 -28
  44. data/spec/unit/model_spec.rb +10 -10
  45. data/spec/unit/nokogiri_datastream_spec.rb +31 -33
  46. data/spec/unit/qualified_dublin_core_datastream_spec.rb +15 -15
  47. data/spec/unit/rels_ext_datastream_spec.rb +35 -29
  48. data/spec/unit/rubydora_connection_spec.rb +26 -0
  49. data/spec/unit/semantic_node_spec.rb +12 -17
  50. data/spec/unit/solr_config_options_spec.rb +13 -14
  51. data/spec/unit/solr_service_spec.rb +14 -17
  52. metadata +59 -55
  53. data/lib/fedora/base.rb +0 -38
  54. data/lib/fedora/connection.rb +0 -218
  55. data/lib/fedora/datastream.rb +0 -67
  56. data/lib/fedora/fedora_object.rb +0 -161
  57. data/lib/fedora/formats.rb +0 -30
  58. data/lib/fedora/generic_search.rb +0 -71
  59. data/lib/fedora/repository.rb +0 -298
  60. data/spec/integration/datastreams_crud_spec.rb +0 -208
  61. data/spec/integration/fedora_object_spec.rb +0 -77
  62. data/spec/integration/repository_spec.rb +0 -301
  63. data/spec/integration/rf_fedora_object_spec.rb +0 -95
  64. data/spec/unit/connection_spec.rb +0 -25
  65. data/spec/unit/fedora_object_spec.rb +0 -74
  66. data/spec/unit/repository_spec.rb +0 -143
  67. data/spec/unit/rf_datastream_spec.rb +0 -63
@@ -1,25 +0,0 @@
1
- require File.join( File.dirname(__FILE__), "../spec_helper" )
2
-
3
- require 'active_resource'
4
- require 'fedora/repository'
5
-
6
- describe Fedora::Connection do
7
- it "should be creatable w/ a surrogate id" do
8
- c = Fedora::Connection.new('http://127.0.0.1/fedora', 'fubar', 'bob')
9
- c.site.to_s.should == "http://127.0.0.1/fedora"
10
- c.format.should == 'fubar'
11
- c.surrogate.should == 'bob'
12
- end
13
- it "should set a from header if surrogate defined." do
14
- c = Fedora::Connection.new('http://127.0.0.1/fedora', ActiveResource::Formats[:xml], 'bob')
15
- h = Hash.new
16
- r= c.send(:build_request_headers,h)
17
- r['From'].should == 'bob'
18
- end
19
- it "should not set a from header if surrogate undefined." do
20
- c = Fedora::Connection.new('http://127.0.0.1/fedora' )
21
- h = Hash.new
22
- r= c.send(:build_request_headers,h)
23
- r['From'].should be_nil
24
- end
25
- end
@@ -1,74 +0,0 @@
1
- require File.join( File.dirname(__FILE__), "../spec_helper" )
2
-
3
- describe Fedora::FedoraObject do
4
-
5
- before(:each) do
6
- Fedora::Repository.register(ActiveFedora.fedora_config[:url])
7
- @test_object = Fedora::FedoraObject.new
8
- end
9
-
10
- it 'should respond to #object_xml' do
11
- Fedora::FedoraObject.should respond_to(:object_xml)
12
- end
13
- it 'hash should not have to_query) on it' do
14
- Fedora::BaseObject.new
15
- {:foo=>:bar}.to_fedora_query.should == 'foo=bar'
16
- end
17
-
18
- it 'should respond to .object_xml' do
19
- @test_object.should respond_to(:object_xml)
20
- end
21
-
22
- it "should provide .url" do
23
- @test_object.should respond_to(:url)
24
- end
25
-
26
- describe ".url" do
27
- it "should return the Repository fedora_url with /objects/pid appended" do
28
- Fedora::Repository.instance.expects(:fedora_url).returns(mock("fedora url", :scheme => "_scheme_", :host => "_host_", :port => "_port_", :path => "_path_"))
29
- @test_object.expects(:pid).returns("_PID_")
30
- @test_object.url.should == "_scheme_://_host_:_port__path_/objects/_PID_"
31
- end
32
- end
33
-
34
- describe ".label" do
35
- before(:all) do
36
- @properties = [:label, :state, :modified_date, :create_date, :owner_id]
37
- @sample_attributes = {:label => "label", :state => "state", :modified_date => "modified_date", :create_date => "create_date", :owner_id => "owner_id"}
38
- end
39
- it "should give preference to pulling from attributes hash" do
40
- @test_object.expects(:attributes).times(@properties.length*2).returns(@sample_attributes)
41
- @properties.each do |p|
42
- @test_object.send(p)
43
- end
44
- end
45
-
46
- it "should rely solely on attributes hash if new_object" do
47
- @test_object.new_object = true
48
- @test_object.expects(:properties_from_fedora).never
49
- @test_object.expects(:attributes).times(@properties.length*2).returns(@sample_attributes)
50
- @properties.each do |p|
51
- @test_object.send(p)
52
- end
53
- end
54
-
55
- it "should call properties_from_fedora if not a new_object" do
56
- @test_object.new_object = false
57
- @test_object.expects(:properties_from_fedora).times(@properties.length).returns(@sample_attributes)
58
- @test_object.expects(:attributes).times(@properties.length).returns({})
59
- @properties.each do |p|
60
- @test_object.send(p)
61
- end
62
- end
63
-
64
- end
65
-
66
- describe ".owner_id=" do
67
- it "should update the attributes hash with ownerId attribute" do
68
- @test_object.owner_id.should be_nil
69
- @test_object.owner_id="fooTest"
70
- @test_object.attributes[:ownerId].should == "fooTest"
71
- end
72
- end
73
-
74
- end
@@ -1,143 +0,0 @@
1
- require File.join( File.dirname(__FILE__), "../spec_helper" )
2
-
3
- describe Fedora::Repository do
4
-
5
- after(:all) do
6
- Fedora::Repository.register(ActiveFedora.fedora_config[:url])
7
- end
8
-
9
- it "should trim extra slash on uri" do
10
- Fedora::Repository.expects(:new).with('http://bar.baz/bat', nil)
11
- Fedora::Repository.register('http://bar.baz/bat/')
12
- Fedora::Repository.expects(:new).with('http://bar.baz/bat', nil)
13
- Fedora::Repository.register(URI.parse('http://bar.baz/bat/'))
14
- end
15
-
16
- it "should accept a url to register" do
17
- Fedora::Repository.expects(:new).with('http://bar.baz', nil).returns(stub_everything)
18
- Fedora::Repository.register('http://bar.baz').should_not be_nil
19
- z = Fedora::Repository.instance
20
- z.should_not be_nil
21
- (z === Fedora::Repository.instance).should == true
22
- end
23
-
24
- it "should initialize a repo" do
25
- Fedora::Repository.expects(:new).with('http://foo.bar', nil).returns(stub_everything)
26
- Fedora::Repository.register('http://foo.bar')
27
- z = Fedora::Repository.instance
28
- y = Fedora::Repository.instance
29
- z.should_not be_nil
30
- y.should_not be_nil
31
- (z===y).should == true
32
- end
33
-
34
- it 'should be a singleton' do
35
- Fedora::Repository.expects(:new).with('http://foo.bar',nil).returns(stub_everything)
36
- Fedora::Repository.register('http://foo.bar')
37
- a = Fedora::Repository.instance
38
- b = Fedora::Repository.instance
39
- (a === b).should == true
40
- end
41
-
42
- it "should be able to reserve an id" do
43
- bodymock = mock('body')
44
- bodymock.expects(:body).returns <<-EOS
45
- <?xml version="1.0" encoding="UTF-8"?>
46
- <pidList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fedora.info/definitions/1/0/management/ http://www.fedora.info/definitions/1/0/objectHistory.xsd">
47
- <pid>changeme:5035</pid>
48
- </pidList>
49
- EOS
50
-
51
- Fedora::Repository.register('http://fedoraAdmin:fedoraAdmin@127.0.0.1:8080/fedora').should_not be_nil
52
- Fedora::Repository.instance.send(:connection).expects(:post).with('/fedora/management/getNextPID?xml=true').returns(bodymock)
53
- Fedora::Repository.instance.should_not be_nil
54
- Fedora::Repository.instance.nextid.should == 'changeme:5035'
55
- end
56
-
57
- it "should have attributes corresponding to the info in fedora/describe" do
58
- Fedora::Repository.register('http://foo.bar')
59
- #skipping oai_namespace_identifier and oai_delimiter
60
- %w[repository_name base_url fedora_version pid_namespace pid_delimiter].each do |attribute_name|
61
- Fedora::Repository.instance.should respond_to(attribute_name)
62
- Fedora::Repository.instance.should respond_to(attribute_name + "=")
63
- end
64
- end
65
-
66
- describe "export" do
67
- it "should call fetch_custom with the appropriate parameters" do
68
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:FOXML-1.1", :context=>"archive")
69
- Fedora::Repository.instance.export("test:my_pid")
70
- end
71
- it "should support :foxml, :mets, :atom, and :atom_zip" do
72
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:ATOM-1.1", :context=>"archive")
73
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:ATOMZip-1.1", :context=>"archive")
74
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:FOXML-1.1", :context=>"archive")
75
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:METSFedoraExt-1.1", :context=>"archive")
76
-
77
- Fedora::Repository.instance.export("test:my_pid", :format=>:atom)
78
- Fedora::Repository.instance.export("test:my_pid", :format=>:atom_zip)
79
- Fedora::Repository.instance.export("test:my_pid", :format=>:foxml)
80
- Fedora::Repository.instance.export("test:my_pid", :format=>:mets)
81
- end
82
- it "should allow you to pass through the format uri as a string" do
83
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:ATOMZip-1.1", :context=>"archive")
84
- Fedora::Repository.instance.export("test:my_pid", :format=>"info:fedora/fedora-system:ATOMZip-1.1")
85
- end
86
- it "should support export context" do
87
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:ATOM-1.1", :context=>"public").times(2)
88
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:ATOM-1.1", :context=>"migrate")
89
- Fedora::Repository.instance.expects(:fetch_custom).with("test:my_pid", "export", :format=>"info:fedora/fedora-system:ATOM-1.1", :context=>"archive")
90
-
91
- Fedora::Repository.instance.export("test:my_pid", :format=>:atom, :context=>:public)
92
- Fedora::Repository.instance.export("test:my_pid", :format=>:atom, :context=>"public")
93
- Fedora::Repository.instance.export("test:my_pid", :format=>:atom, :context=>:migrate)
94
- Fedora::Repository.instance.export("test:my_pid", :format=>:atom, :context=>:archive)
95
- end
96
- end
97
-
98
- describe "ingest" do
99
- it "should post the provided xml or file to fedora" do
100
- foxml = fixture("test_12.foxml.xml").read
101
- connection = Fedora::Repository.instance.send(:connection)
102
- connection.expects(:post).with("/fedora/objects/new",foxml)
103
- Fedora::Repository.instance.ingest(foxml)
104
- end
105
- it "should accept a file as its input" do
106
- foxml_file = fixture("test_12.foxml.xml")
107
- foxml = fixture("test_12.foxml.xml").read
108
- connection = Fedora::Repository.instance.send(:connection)
109
- connection.expects(:post).with("/fedora/objects/new",foxml)
110
- Fedora::Repository.instance.ingest(foxml_file)
111
- end
112
- end
113
-
114
- describe ".find_model" do
115
- it "should raise an ObjectNotFound error if there is no object" do
116
- Fedora::Repository.instance.expects(:find_objects).returns([])
117
- lambda { Fedora::Repository.instance.find_model("mypid", ActiveFedora::Base) }.should raise_error(ActiveFedora::ObjectNotFoundError)
118
- end
119
- end
120
-
121
- describe "#register" do
122
- after(:all) do
123
- Fedora::Repository.register(ActiveFedora.fedora_config[:url])
124
- end
125
- it "should initialize the attributes from fedora/describe" do
126
- sample_attrs = {"sampleSearch-URL"=>["http://127.0.0.1:8080/fedora/search"], "repositoryOAI-identifier"=>[{"OAI-sample"=>["oai:example.org:changeme:100"], "OAI-delimiter"=>[":"], "OAI-namespaceIdentifier"=>["example.org"]}], "repositoryBaseURL"=>["http://127.0.0.1:8080/fedora"], "xsi:schemaLocation"=>"http://www.fedora.info/definitions/1/0/access/ http://www.fedora.info/definitions/1/0/fedoraRepository.xsd", "xmlns:xsd"=>"http://www.w3.org/2001/XMLSchema", "repositoryPID"=>[{"PID-sample"=>["changeme:100"], "PID-namespaceIdentifier"=>["changeme"], "PID-delimiter"=>[":"], "retainPID"=>["*"]}], "adminEmail"=>["bob@example.org", "sally@example.org"], "repositoryVersion"=>["3.1"], "sampleOAI-URL"=>["http://localhost:8080/fedora/oai?verb=Identify"], "sampleAccess-URL"=>["http://localhost:8080/fedora/get/demo:5"], "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "repositoryName"=>["Fedora Repository"]}
127
- Fedora::Repository.any_instance.expects(:describe_repository).returns(sample_attrs)
128
- Fedora::Repository.register('http://foo.bar')
129
- boo = Fedora::Repository.instance
130
- boo.repository_name.should == "Fedora Repository"
131
- boo.base_url.should == "http://127.0.0.1:8080/fedora"
132
- boo.fedora_version.should == "3.1"
133
- boo.pid_namespace.should == "changeme"
134
- boo.pid_delimiter.should == ":"
135
- end
136
- end
137
-
138
-
139
- it "should provide .describe_repository" do
140
- Fedora::Repository.instance.should respond_to(:describe_repository)
141
- end
142
-
143
- end
@@ -1,63 +0,0 @@
1
- require File.join( File.dirname(__FILE__), "../spec_helper" )
2
-
3
- require 'ruby-fedora'
4
-
5
-
6
- describe Fedora::Datastream do
7
-
8
- before(:each) do
9
- Fedora::Repository.register(ActiveFedora.fedora_config[:url])
10
- @test_datastream = Fedora::Datastream.new
11
- end
12
-
13
- it "should track the controlgroup attr" do
14
- td = Fedora::Datastream.new(:controlGroup=>'M')
15
- td.control_group.should == 'M'
16
- end
17
-
18
- it "should provide .url" do
19
- @test_datastream.should respond_to(:url)
20
- @test_datastream.expects(:pid).returns("_foo_")
21
- @test_datastream.url.should == 'http://localhost:8983/fedora/objects/_foo_/datastreams/'
22
- end
23
-
24
- describe ".url" do
25
- it "should return the Repository base_url with /objects/pid appended" do
26
- Fedora::Repository.instance.expects(:base_url).returns("BASE_URL")
27
- @test_datastream.expects(:pid).returns("_PID_")
28
- @test_datastream.expects(:dsid).returns("_DSID_")
29
- @test_datastream.url.should == "BASE_URL/objects/_PID_/datastreams/_DSID_"
30
- end
31
- end
32
-
33
- describe ".label" do
34
- it "should return the dsLabel attribute" do
35
- @test_datastream.label.should == @test_datastream.attributes[:dsLabel]
36
- end
37
- end
38
-
39
- describe ".label=" do
40
- it "should set the dsLabel attribute" do
41
- @test_datastream.label.should_not == "Foo dsLabel"
42
- @test_datastream.attributes[:dsLabel].should_not == "Foo dsLabel"
43
- @test_datastream.label = "Foo dsLabel"
44
- @test_datastream.label.should == "Foo dsLabel"
45
- @test_datastream.attributes[:dsLabel].should == "Foo dsLabel"
46
- end
47
- end
48
-
49
- describe ".mime_type" do
50
- it "should return the mimeType attribute" do
51
- @test_datastream.mime_type.should == @test_datastream.attributes["mimeType"]
52
- end
53
- end
54
-
55
- describe ".mime_type=" do
56
- it "should set the mimeType attribute" do
57
- @test_datastream.mime_type.should_not == "foo/bar"
58
- @test_datastream.attributes["mimeType"].should_not == "foo/bar"
59
- @test_datastream.mime_type= "foo/bar"
60
- @test_datastream.mime_type.should == "foo/bar"
61
- end
62
- end
63
- end