om 3.0.6 → 3.0.7
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/.rspec +1 -0
- data/lib/om/version.rb +1 -1
- data/lib/om/xml/dynamic_node.rb +5 -1
- data/spec/integration/proxies_and_ref_spec.rb +43 -35
- data/spec/integration/rights_metadata_integration_example_spec.rb +1 -1
- data/spec/integration/xpathy_stuff_spec.rb +2 -2
- data/spec/unit/document_spec.rb +3 -3
- data/spec/unit/term_spec.rb +3 -3
- data/spec/unit/term_value_operators_spec.rb +4 -4
- data/spec/unit/term_xpath_generator_spec.rb +1 -1
- data/spec/unit/terminology_builder_spec.rb +2 -2
- data/spec/unit/terminology_spec.rb +5 -5
- data/spec/unit/validation_spec.rb +3 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a06b8c699f06fb0cb851e7b4e66110738a00cf7
|
4
|
+
data.tar.gz: 36671447b086cdb74d25ac39cf50d35573a94c72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d159dd3d980dc79f7aed168c4f621941819ce89efca387b50ca34781a119da2490d07fd210e69dadd5e700cc5c8ec66cb0fa8ada329f490330dcf72137d4d0eb
|
7
|
+
data.tar.gz: c388b9688995e643be94e472e804daf31e227d69746fd65c10cfd09ab824fdf1fd4426912eba5beaaca4137066f1faae097268c8ce239553bfc661bcb22dad47
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/lib/om/version.rb
CHANGED
data/lib/om/xml/dynamic_node.rb
CHANGED
@@ -84,7 +84,11 @@ module OM
|
|
84
84
|
new_values.each_with_index do |z, y|
|
85
85
|
## If we pass something that already has an index on it, we should be able to add it.
|
86
86
|
if existing_nodes[y.to_i].nil?
|
87
|
-
parent_pointer =
|
87
|
+
parent_pointer = if parent
|
88
|
+
parent.to_pointer
|
89
|
+
elsif term.is_a? NamedTermProxy
|
90
|
+
term.proxy_pointer[0..-2]
|
91
|
+
end
|
88
92
|
@document.term_values_append(:parent_select=> parent_pointer,:parent_index=>0,:template=>to_pointer,:values=>z)
|
89
93
|
else
|
90
94
|
@document.term_value_update(xpath, y.to_i, z)
|
@@ -33,49 +33,57 @@ describe "an example with :proxy and :ref" do
|
|
33
33
|
t.image_size(:proxy=>[:image, :file, :size])
|
34
34
|
t.image_md5(:proxy=>[:image, :file, :md5])
|
35
35
|
t.image_sha1(:proxy=>[:image, :file, :sha1])
|
36
|
-
|
36
|
+
end
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
ExampleProxyAndRefTerminology.from_xml
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
</file>
|
48
|
-
</resource>
|
49
|
-
<resource type="image" id="image" objectId="hypatia:coll_img_file_asset_fixture">
|
50
|
-
<file id="my_image.jpg" format="JPG" mimetype="image/jpeg" size="302080">
|
51
|
-
<checksum type="md5">789</checksum>
|
52
|
-
<checksum type="sha1">666</checksum>
|
53
|
-
</file>
|
54
|
-
</resource>
|
55
|
-
</outer>
|
40
|
+
context 'with empty content' do
|
41
|
+
subject { ExampleProxyAndRefTerminology.from_xml "<outer/>" }
|
42
|
+
it "should build the parent nodes when setting a proxy term" do
|
43
|
+
subject.image_sha1 = '123'
|
44
|
+
expect(subject.ng_xml).to be_equivalent_to "<outer><resource type=\"image\"><file><checksum type=\"sha1\">123</checksum></file></resource></outer>"
|
45
|
+
end
|
46
|
+
end
|
56
47
|
|
57
|
-
|
58
|
-
|
48
|
+
context "with existing content" do
|
49
|
+
subject do
|
50
|
+
ExampleProxyAndRefTerminology.from_xml <<-EOF
|
51
|
+
<outer outerId="hypatia:outer" type="outer type">
|
52
|
+
<resource type="ead" id="coll.ead" objectId="hypatia:ead_file_asset_fixture">
|
53
|
+
<file id="my_ead.xml" format="XML" mimetype="text/xml" size="47570">
|
54
|
+
<checksum type="md5">123</checksum>
|
55
|
+
<checksum type="sha1">456</checksum>
|
56
|
+
</file>
|
57
|
+
</resource>
|
58
|
+
<resource type="image" id="image" objectId="hypatia:coll_img_file_asset_fixture">
|
59
|
+
<file id="my_image.jpg" format="JPG" mimetype="image/jpeg" size="302080">
|
60
|
+
<checksum type="md5">789</checksum>
|
61
|
+
<checksum type="sha1">666</checksum>
|
62
|
+
</file>
|
63
|
+
</resource>
|
64
|
+
</outer>
|
59
65
|
|
60
|
-
|
61
|
-
it "should have the right proxy terms" do
|
62
|
-
subject.ead_fedora_pid.should include "hypatia:ead_file_asset_fixture"
|
63
|
-
subject.ead_ds_label.should include "my_ead.xml"
|
64
|
-
subject.ead_size.should include "47570"
|
65
|
-
subject.ead_md5.should include "123"
|
66
|
-
subject.ead_sha1.should include "456"
|
67
|
-
end
|
66
|
+
EOF
|
68
67
|
end
|
69
68
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
69
|
+
describe "image" do
|
70
|
+
it "should have the right proxy terms" do
|
71
|
+
subject.ead_fedora_pid.should include "hypatia:ead_file_asset_fixture"
|
72
|
+
subject.ead_ds_label.should include "my_ead.xml"
|
73
|
+
subject.ead_size.should include "47570"
|
74
|
+
subject.ead_md5.should include "123"
|
75
|
+
subject.ead_sha1.should include "456"
|
76
|
+
end
|
77
77
|
end
|
78
78
|
|
79
|
+
describe "ead" do
|
80
|
+
it "should have the right proxy terms" do
|
81
|
+
subject.image_fedora_pid.should include "hypatia:coll_img_file_asset_fixture"
|
82
|
+
subject.image_ds_label.should include "my_image.jpg"
|
83
|
+
subject.image_size.should include "302080"
|
84
|
+
subject.image_md5.should include "789"
|
85
|
+
subject.image_sha1.should include "666"
|
86
|
+
end
|
87
|
+
end
|
79
88
|
end
|
80
|
-
|
81
89
|
end
|
@@ -65,7 +65,7 @@ describe "OM::XML::Accessors" do
|
|
65
65
|
|
66
66
|
describe "update_properties" do
|
67
67
|
it "should update the declared properties" do
|
68
|
-
|
68
|
+
skip "nesting is too deep..."
|
69
69
|
@sample.retrieve(*[:edit_access, :machine, :person]).length.should == 0
|
70
70
|
@sample.update_properties([:edit_access, :machine, :person]=>"user id").should == {"edit_access_machine_person"=>{"-1"=>"user id"}}
|
71
71
|
@sample.retrieve(*[:edit_access, :machine, :person]).length.should == 1
|
@@ -120,13 +120,13 @@ describe "an example of xpath-y stuff, also using :proxy and :ref and namespaces
|
|
120
120
|
end
|
121
121
|
|
122
122
|
it "should have the terms :author_given and :author_family to get the author name" do
|
123
|
-
|
123
|
+
skip "This doesn't seem to work?"
|
124
124
|
subject.author_given.should include("Mary")
|
125
125
|
subject.author_family.should include("Pickral")
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should have the terms :advisor_given and :advisor_family to get the advisor name" do
|
129
|
-
|
129
|
+
skip "This doesn't seem to work?"
|
130
130
|
subject.advisor_given.should include("David")
|
131
131
|
subject.advisor_family.should include("Small")
|
132
132
|
end
|
data/spec/unit/document_spec.rb
CHANGED
@@ -89,7 +89,7 @@ describe "OM::XML::Document" do
|
|
89
89
|
|
90
90
|
describe ".find_by_terms_and_value" do
|
91
91
|
it "should fail gracefully if you try to look up nodes for an undefined property" do
|
92
|
-
|
92
|
+
skip "better to get an informative error?"
|
93
93
|
@fixturemods.find_by_terms_and_value(:nobody_home).should == []
|
94
94
|
end
|
95
95
|
it "should use Nokogiri to retrieve a NodeSet corresponding to the term pointers" do
|
@@ -123,7 +123,7 @@ describe "OM::XML::Document" do
|
|
123
123
|
@mods_article.find_by_terms( {:person=>1}, :person_id).first.text.should == "123987"
|
124
124
|
end
|
125
125
|
it "should support accessors whose relative_xpath is a lookup array instead of an xpath string" do
|
126
|
-
#
|
126
|
+
# skip "this only impacts scenarios where we want to display & edit"
|
127
127
|
DocumentTest.terminology.retrieve_term(:title_info, :language).path.should == {:attribute=>"lang"}
|
128
128
|
# @sample.retrieve( :title, 1 ).first.text.should == "Artikkelin otsikko Hydrangea artiklan 1"
|
129
129
|
@mods_article.find_by_terms( {:title_info=>1}, :language ).first.text.should == "finnish"
|
@@ -134,7 +134,7 @@ describe "OM::XML::Document" do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it "should return nil if the xpath fails to generate" do
|
137
|
-
|
137
|
+
skip "Can't decide if it's better to return nil or raise an error. Choosing informative errors for now."
|
138
138
|
@mods_article.find_by_terms( {:foo=>20}, :bar ).should == nil
|
139
139
|
end
|
140
140
|
|
data/spec/unit/term_spec.rb
CHANGED
@@ -35,14 +35,14 @@ describe OM::XML::Term do
|
|
35
35
|
|
36
36
|
describe 'inner_xml' do
|
37
37
|
it "should be a kind of Nokogiri::XML::Node" do
|
38
|
-
|
38
|
+
skip
|
39
39
|
@test_mapping.inner_xml.should be_kind_of(Nokogiri::XML::Node)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
describe '#from_node' do
|
44
44
|
it "should create a mapper from a nokogiri node" do
|
45
|
-
|
45
|
+
skip "probably should do this in the Builder"
|
46
46
|
ng_builder = Nokogiri::XML::Builder.new do |xml|
|
47
47
|
xml.mapper(:name=>"person", :path=>"name") {
|
48
48
|
xml.attribute(:name=>"type", :value=>"personal")
|
@@ -87,7 +87,7 @@ describe OM::XML::Term do
|
|
87
87
|
|
88
88
|
describe 'inner_xml' do
|
89
89
|
it "should be a kind of Nokogiri::XML::Node" do
|
90
|
-
|
90
|
+
skip
|
91
91
|
@test_name_part.inner_xml.should be_kind_of(Nokogiri::XML::Node)
|
92
92
|
end
|
93
93
|
end
|
@@ -138,13 +138,13 @@ describe "OM::XML::TermValueOperators" do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
it "should support inserting attributes" do
|
141
|
-
|
141
|
+
skip "HYDRA-415"
|
142
142
|
@sample.update_values({['title_info', 'language']=>'Le Titre'})
|
143
143
|
@sample.term_values('title_info', 'french_title').should == ['Le Titre']
|
144
144
|
end
|
145
145
|
|
146
146
|
it "should support inserting namespaced attributes" do
|
147
|
-
|
147
|
+
skip "HYDRA-415"
|
148
148
|
@sample.update_values({['title_info', 'main_title', 'main_title_lang']=>'eng'})
|
149
149
|
@sample.term_values('title_info', 'main_title', 'main_title_lang').should == ['eng']
|
150
150
|
## After a proxy
|
@@ -329,7 +329,7 @@ describe "OM::XML::TermValueOperators" do
|
|
329
329
|
end
|
330
330
|
|
331
331
|
it "should support more complex mixing & matching" do
|
332
|
-
|
332
|
+
skip "not working because builder_template is not returning the correct template (returns builder for role instead of roleTerm)"
|
333
333
|
@sample.ng_xml.xpath('//oxns:name[@type="personal"][2]/oxns:role[1]/oxns:roleTerm', @sample.ox_namespaces).length.should == 2
|
334
334
|
@sample.term_values_append(
|
335
335
|
:parent_select =>'//oxns:name[@type="personal"][2]/oxns:role',
|
@@ -389,7 +389,7 @@ describe "OM::XML::TermValueOperators" do
|
|
389
389
|
end
|
390
390
|
|
391
391
|
it "should replace the existing node if you pass a template and values" do
|
392
|
-
|
392
|
+
skip
|
393
393
|
@sample.term_value_update(
|
394
394
|
:parent_select =>'//oxns:name[@type="personal"]',
|
395
395
|
:parent_index => 1,
|
@@ -143,7 +143,7 @@ EOF
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it "should support mappers with default_content_path" do
|
146
|
-
|
146
|
+
skip "need to implement mapper_set first"
|
147
147
|
#@test_term_with_default_path = OM::XML::Term.new(:volume, :path=>"detail", :attributes=>{:type=>"volume"}, :default_content_path=>"number")
|
148
148
|
|
149
149
|
OM::XML::TermXpathGenerator.generate_relative_xpath(@test_term_with_default_path).should == 'oxns:detail[@type="volume"]'
|
@@ -115,7 +115,7 @@ describe "OM::XML::Terminology::Builder" do
|
|
115
115
|
|
116
116
|
describe '#from_xml' do
|
117
117
|
it "should let you load mappings from an xml file" do
|
118
|
-
|
118
|
+
skip
|
119
119
|
vocab = OM::XML::Terminology.from_xml( fixture("sample_mappings.xml") )
|
120
120
|
vocab.should be_instance_of OM::XML::Terminology
|
121
121
|
vocab.mappers.should == {}
|
@@ -159,7 +159,7 @@ describe "OM::XML::Terminology::Builder" do
|
|
159
159
|
|
160
160
|
describe '.insert_term' do
|
161
161
|
it "should create a new OM::XML::Term::Builder and insert it into the class mappings hash" do
|
162
|
-
|
162
|
+
skip
|
163
163
|
|
164
164
|
result = @test_builder.insert_mapper(:name_, :namePart).index_as([:facetable, :searchable, :sortable, :displayable]).required(true).type(:text)
|
165
165
|
@test_builder.mapper_builders(:name_, :namePart).should == result
|
@@ -179,7 +179,7 @@ describe "OM::XML::Terminology" do
|
|
179
179
|
|
180
180
|
describe '#from_xml' do
|
181
181
|
it "should let you load mappings from an xml file" do
|
182
|
-
|
182
|
+
skip
|
183
183
|
vocab = OM::XML::Terminology.from_xml( fixture("sample_mappings.xml") )
|
184
184
|
vocab.should be_instance_of OM::XML::Terminology
|
185
185
|
vocab.mappers.should == {}
|
@@ -188,7 +188,7 @@ describe "OM::XML::Terminology" do
|
|
188
188
|
|
189
189
|
describe '#to_xml' do
|
190
190
|
it "should let you serialize mappings to an xml document" do
|
191
|
-
|
191
|
+
skip
|
192
192
|
TerminologyTest.to_xml.should == ""
|
193
193
|
end
|
194
194
|
end
|
@@ -240,7 +240,7 @@ describe "OM::XML::Terminology" do
|
|
240
240
|
|
241
241
|
describe ".term_xpath" do
|
242
242
|
it "should insert calls to xpath array lookup into parent xpaths if parents argument is provided" do
|
243
|
-
|
243
|
+
skip
|
244
244
|
# conference_mapper = TerminologyTest.retrieve_mapper(:conference)
|
245
245
|
# role_mapper = TerminologyTest.retrieve_mapper(:conference, :role)
|
246
246
|
# text_mapper = TerminologyTest.retrieve_mapper(:conference, :role, :text)
|
@@ -270,12 +270,12 @@ describe "OM::XML::Terminology" do
|
|
270
270
|
end
|
271
271
|
|
272
272
|
it "should support queries with complex constraints" do
|
273
|
-
|
273
|
+
skip
|
274
274
|
@test_full_terminology.xpath_for(:person, {:date=>"2010"}).should == '//oxns:name[@type="personal" and contains(oxns:namePart[@type="date"], "2010")]'
|
275
275
|
end
|
276
276
|
|
277
277
|
it "should support queries with multiple complex constraints" do
|
278
|
-
|
278
|
+
skip
|
279
279
|
@test_full_terminology.xpath_for(:person, {:role=>"donor", :last_name=>"Rockefeller"}).should == '//oxns:name[@type="personal" and contains(oxns:role/oxns:roleTerm, "donor") and contains(oxns:namePart[@type="family"], "Rockefeller")]'
|
280
280
|
end
|
281
281
|
|
@@ -25,14 +25,14 @@ describe "OM::XML::Validation" do
|
|
25
25
|
|
26
26
|
describe "#schema" do
|
27
27
|
it "should return an instance of Nokogiri::XML::Schema loaded from the schema url -- fails if no internet connection" do
|
28
|
-
|
28
|
+
skip "no internet connection"
|
29
29
|
ValidationTest.schema.should be_kind_of Nokogiri::XML::Schema
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#validate" do
|
34
34
|
it "should validate the provided document against the schema provided in class definition -- fails if no internet connection" do
|
35
|
-
|
35
|
+
skip "no internet connection"
|
36
36
|
ValidationTest.schema.should_receive(:validate).with(@sample).and_return([])
|
37
37
|
ValidationTest.validate(@sample)
|
38
38
|
end
|
@@ -73,7 +73,7 @@ describe "OM::XML::Validation" do
|
|
73
73
|
lambda {ValidationTest.send(:file_from_url, "foo")}.should raise_error(RuntimeError, "Could not retrieve file from foo. Error: No such file or directory - foo")
|
74
74
|
end
|
75
75
|
it "should raise an error if file retrieval fails" do
|
76
|
-
|
76
|
+
skip "no internet connection"
|
77
77
|
lambda {ValidationTest.send(:file_from_url, "http://fedora-commons.org/nonexistent_file")}.should raise_error(RuntimeError, "Could not retrieve file from http://fedora-commons.org/nonexistent_file. Error: 404 Not Found")
|
78
78
|
end
|
79
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: om
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-06-
|
12
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -205,6 +205,7 @@ extra_rdoc_files:
|
|
205
205
|
files:
|
206
206
|
- ".document"
|
207
207
|
- ".gitignore"
|
208
|
+
- ".rspec"
|
208
209
|
- ".travis.yml"
|
209
210
|
- COMMON_OM_PATTERNS.textile
|
210
211
|
- CONTRIBUTING.md
|