mods 0.0.2 → 0.0.4
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.
- data/README.rdoc +6 -2
- data/lib/mods.rb +12 -2
- data/lib/mods/constants.rb +60 -0
- data/lib/mods/marc_relator_codes.rb +228 -0
- data/lib/mods/name.rb +18 -0
- data/lib/mods/nom_terminology.rb +221 -0
- data/lib/mods/reader.rb +41 -0
- data/lib/mods/record.rb +145 -0
- data/lib/mods/title_info.rb +24 -0
- data/lib/mods/version.rb +2 -1
- data/mods.gemspec +12 -6
- data/spec/language_spec.rb +69 -0
- data/spec/location_spec.rb +148 -0
- data/spec/name_spec.rb +257 -0
- data/spec/origin_info_spec.rb +311 -0
- data/spec/physical_description_spec.rb +79 -0
- data/spec/reader_spec.rb +50 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/title_spec.rb +111 -0
- data/spec/top_level_elmnts_simple_spec.rb +32 -0
- metadata +69 -10
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Mods <physicalDescription> Element" do
|
4
|
+
before(:all) do
|
5
|
+
@mods_rec = Mods::Record.new
|
6
|
+
@extent_only = '<mods><physicalDescription><extent>extent</extent></physicalDescription></mods>'
|
7
|
+
@form_and_extent = '<mods><physicalDescription>
|
8
|
+
<form authority="smd">map</form>
|
9
|
+
<form type="material">foo</form>
|
10
|
+
<extent>1 map ; 22 x 18 cm.</extent>
|
11
|
+
</physicalDescription></mods>'
|
12
|
+
@forms_and_notes = '<mods><physicalDescription>
|
13
|
+
<form authority="aat">Graphics</form>
|
14
|
+
<form>plain form</form>
|
15
|
+
<note displayLabel="Dimensions">dimension text</note>
|
16
|
+
<note displayLabel="Condition">condition text</note>
|
17
|
+
</physicalDescription></mods>'
|
18
|
+
@digital = '<mods><physicalDescription>
|
19
|
+
<reformattingQuality>preservation</reformattingQuality>
|
20
|
+
<internetMediaType>image/jp2</internetMediaType>
|
21
|
+
<digitalOrigin>reformatted digital</digitalOrigin>
|
22
|
+
</physicalDescription></mods>'
|
23
|
+
end
|
24
|
+
|
25
|
+
context "basic physical_description terminology pieces" do
|
26
|
+
before(:all) do
|
27
|
+
@mods_rec.from_str(@form_and_extent)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "extent child element" do
|
31
|
+
@mods_rec.from_str(@extent_only)
|
32
|
+
@mods_rec.physical_description.extent.map { |n| n.text }.should == ["extent"]
|
33
|
+
end
|
34
|
+
|
35
|
+
context "note child element" do
|
36
|
+
before(:all) do
|
37
|
+
@mods_rec.from_str(@forms_and_notes)
|
38
|
+
end
|
39
|
+
it "should understand note element" do
|
40
|
+
@mods_rec.physical_description.note.map { |n| n.text }.should == ["dimension text", "condition text"]
|
41
|
+
end
|
42
|
+
it "should understand displayLabel attribute on note element" do
|
43
|
+
@mods_rec.physical_description.note.displayLabel.should == ["Dimensions", "Condition"]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "form child element" do
|
48
|
+
before(:all) do
|
49
|
+
@mods_rec.from_str(@form_and_extent)
|
50
|
+
end
|
51
|
+
it "should understand form element" do
|
52
|
+
@mods_rec.physical_description.form.map { |n| n.text }.should == ["map", "foo"]
|
53
|
+
end
|
54
|
+
it "should understand authority attribute on form element" do
|
55
|
+
@mods_rec.physical_description.form.authority.should == ["smd"]
|
56
|
+
end
|
57
|
+
it "should understand type attribute on form element" do
|
58
|
+
@mods_rec.physical_description.form.type_at.should == ["material"]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "digital materials" do
|
63
|
+
before(:all) do
|
64
|
+
@mods_rec.from_str(@digital)
|
65
|
+
end
|
66
|
+
it "should understand reformattingQuality child element" do
|
67
|
+
@mods_rec.physical_description.reformattingQuality.map { |n| n.text }.should == ["preservation"]
|
68
|
+
end
|
69
|
+
it "should understand digitalOrigin child element" do
|
70
|
+
@mods_rec.physical_description.digitalOrigin.map { |n| n.text }.should == ["reformatted digital"]
|
71
|
+
end
|
72
|
+
it "should understand internetMediaType child element" do
|
73
|
+
@mods_rec.physical_description.internetMediaType.map { |n| n.text }.should == ["image/jp2"]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end # basic terminology pieces
|
78
|
+
|
79
|
+
end
|
data/spec/reader_spec.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Mods::Reader" do
|
4
|
+
before(:all) do
|
5
|
+
# url is for a namespaced document
|
6
|
+
@example_url = 'http://www.loc.gov/standards/mods/v3/mods99042030_linkedDataAdded.xml'
|
7
|
+
@example_no_ns_str = '<mods><note>hi</note></mods>'
|
8
|
+
@example_wrong_ns_str = '<mods xmlns="whoops"><note>hi</note></mods>'
|
9
|
+
@from_no_ns_str = Mods::Reader.new.from_str(@example_no_ns_str)
|
10
|
+
@from_wrong_ns_str = Mods::Reader.new.from_str(@example_wrong_ns_str)
|
11
|
+
@from_url = Mods::Reader.new.from_url(@example_url)
|
12
|
+
@ns_hash = {'mods' => Mods::MODS_NS}
|
13
|
+
end
|
14
|
+
|
15
|
+
it "from_str should turn an xml string into a Nokogiri::XML::Document object" do
|
16
|
+
@from_no_ns_str.class.should == Nokogiri::XML::Document
|
17
|
+
@from_wrong_ns_str.class.should == Nokogiri::XML::Document
|
18
|
+
end
|
19
|
+
|
20
|
+
it "from_url should turn the contents at the url into a Nokogiri::XML::Document object" do
|
21
|
+
@from_url.class.should == Nokogiri::XML::Document
|
22
|
+
end
|
23
|
+
|
24
|
+
context "namespace awareness" do
|
25
|
+
it "should not care about namespace by default" do
|
26
|
+
r = Mods::Reader.new
|
27
|
+
r.namespace_aware.should == false
|
28
|
+
@from_no_ns_str.xpath('/mods/note').text.should == "hi"
|
29
|
+
@from_wrong_ns_str.xpath('/mods/note').text.should == "hi"
|
30
|
+
# @from_no_ns_str.xpath('/mods:mods/mods:note', @ns_hash).text.should == ""
|
31
|
+
# @from_wrong_ns_str.xpath('/mods:mods/mods:note', @ns_hash).text.should == ""
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be allowed to care about namespaces" do
|
35
|
+
r = Mods::Reader.new
|
36
|
+
r.namespace_aware = true
|
37
|
+
r.from_url(@example_url).root.namespace.href.should == Mods::MODS_NS
|
38
|
+
my_from_str_no_ns = r.from_str(@example_no_ns_str)
|
39
|
+
my_from_str_no_ns.xpath('/mods:mods/mods:note', @ns_hash).text.should_not == "hi"
|
40
|
+
my_from_str_wrong_ns = r.from_str(@example_wrong_ns_str)
|
41
|
+
my_from_str_wrong_ns.root.namespace.href.should == 'whoops'
|
42
|
+
my_from_str_wrong_ns.xpath('/mods:mods/mods:note', @ns_hash).text.should_not == "hi"
|
43
|
+
my_from_str_wrong_ns.xpath('/mods/note').text.should_not == "hi"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should do something useful when it gets unparseable XML" do
|
48
|
+
pending "need to implement error handling for bad xml"
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# for test coverage
|
2
|
+
require 'simplecov'
|
3
|
+
require 'simplecov-rcov'
|
4
|
+
class SimpleCov::Formatter::MergedFormatter
|
5
|
+
def format(result)
|
6
|
+
SimpleCov::Formatter::HTMLFormatter.new.format(result)
|
7
|
+
SimpleCov::Formatter::RcovFormatter.new.format(result)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
|
11
|
+
SimpleCov.start do
|
12
|
+
add_filter "/spec/"
|
13
|
+
end
|
14
|
+
|
15
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
16
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
17
|
+
|
18
|
+
require 'mods'
|
19
|
+
|
20
|
+
#RSpec.configure do |config|
|
21
|
+
#end
|
data/spec/title_spec.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Mods <titleInfo> element" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@mods_rec = Mods::Record.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should recognize type attribute on titleInfo element" do
|
10
|
+
Mods::TitleInfo::TYPES.each { |t|
|
11
|
+
@mods_rec.from_str("<mods><titleInfo type='#{t}'>hi</titleInfo></mods>")
|
12
|
+
@mods_rec.title_info.type_at.text.should == t
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should recognize subelements" do
|
17
|
+
Mods::TitleInfo::SUBELEMENTS.each { |e|
|
18
|
+
@mods_rec.from_str("<mods><titleInfo><#{e}>oofda</#{e}></titleInfo></mods>")
|
19
|
+
@mods_rec.title_info.send(e).text.should == 'oofda'
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
context "short_title" do
|
24
|
+
it "should start with nonSort element" do
|
25
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo></mods>')
|
26
|
+
@mods_rec.title_info.short_title.should == ["The Jerk"]
|
27
|
+
end
|
28
|
+
it "should not include subtitle" do
|
29
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>')
|
30
|
+
@mods_rec.title_info.short_title.should == ["The Jerk"]
|
31
|
+
end
|
32
|
+
it "Mods::Record.short_titles convenience method should return an Array (multiple titles are legal in Mods)" do
|
33
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo><titleInfo><title>Joke</title></titleInfo></mods>')
|
34
|
+
@mods_rec.short_titles.should == ["The Jerk", "Joke"]
|
35
|
+
end
|
36
|
+
it "should not include alternative titles" do
|
37
|
+
@mods_rec.from_str('<mods><titleInfo type="alternative"><title>ta da!</title></titleInfo></mods>')
|
38
|
+
@mods_rec.short_titles.should_not include("ta da!")
|
39
|
+
@mods_rec.from_str("<mods><titleInfo type='alternative'><title>1</title></titleInfo><titleInfo><title>2</title></titleInfo></mods>")
|
40
|
+
@mods_rec.short_titles.should == ['2']
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "full_title" do
|
45
|
+
it "should start with nonSort element" do
|
46
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo></mods>')
|
47
|
+
@mods_rec.title_info.full_title.should == ["The Jerk"]
|
48
|
+
end
|
49
|
+
it "should include subtitle" do
|
50
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>')
|
51
|
+
@mods_rec.title_info.full_title.should == ["The Jerk A Tale of Tourettes"]
|
52
|
+
end
|
53
|
+
it "Mods::Record.full_titles convenience method should return an Array (multiple titles are legal in Mods)" do
|
54
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo><titleInfo><title>Joke</title></titleInfo></mods>')
|
55
|
+
@mods_rec.full_titles.should == ["The Jerk", "Joke"]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "sort_title" do
|
60
|
+
it "should skip nonSort element" do
|
61
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><nonSort>The</nonSort></titleInfo></mods>')
|
62
|
+
@mods_rec.title_info.sort_title.should == ["Jerk"]
|
63
|
+
end
|
64
|
+
it "should contain title and subtitle" do
|
65
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>')
|
66
|
+
@mods_rec.title_info.sort_title.should == ["Jerk A Tale of Tourettes"]
|
67
|
+
end
|
68
|
+
it "should be an alternative title if there are no other choices" do
|
69
|
+
@mods_rec.from_str("<mods><titleInfo type='alternative'><title>1</title></titleInfo></mods>")
|
70
|
+
@mods_rec.title_info.sort_title.should == ['1']
|
71
|
+
end
|
72
|
+
it "should not be an alternative title if there are other choices" do
|
73
|
+
@mods_rec.from_str("<mods><titleInfo type='alternative'><title>1</title></titleInfo><titleInfo><title>2</title></titleInfo></mods>")
|
74
|
+
@mods_rec.title_info.sort_title.should == ['2']
|
75
|
+
@mods_rec.sort_title.should == '2'
|
76
|
+
end
|
77
|
+
it "should have a configurable delimiter between title and subtitle" do
|
78
|
+
m = Mods::Record.new(' : ')
|
79
|
+
m.from_str('<mods><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>')
|
80
|
+
m.title_info.sort_title.should == ["Jerk : A Tale of Tourettes"]
|
81
|
+
end
|
82
|
+
context "Mods::Record.sort_title convenience method" do
|
83
|
+
it "convenience method sort_title in Mods::Record should return a string" do
|
84
|
+
@mods_rec.from_str('<mods><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>')
|
85
|
+
@mods_rec.sort_title.should == "Jerk A Tale of Tourettes"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "alternative_title" do
|
91
|
+
it "should get an alternative title, if it exists" do
|
92
|
+
@mods_rec.from_str('<mods><titleInfo type="alternative"><title>ta da!</title></titleInfo></mods>')
|
93
|
+
@mods_rec.title_info.alternative_title.should == ["ta da!"]
|
94
|
+
end
|
95
|
+
it "Mods::Record.alternative_titles convenience method for getting an Array of alternative titles when there are multiple elements" do
|
96
|
+
@mods_rec.from_str("<mods><titleInfo type='alternative'><title>1</title></titleInfo><titleInfo type='alternative'><title>2</title></titleInfo></mods>")
|
97
|
+
@mods_rec.alternative_titles.should == ['1', '2']
|
98
|
+
@mods_rec.from_str("<mods><titleInfo type='alternative'><title>1</title><title>2</title></titleInfo></mods>")
|
99
|
+
@mods_rec.alternative_titles.should == ['12']
|
100
|
+
end
|
101
|
+
it "should not get an alternative title if type attribute is absent from titleInfo" do
|
102
|
+
@mods_rec.from_str('<mods><titleInfo><title>ta da!</title></titleInfo></mods>')
|
103
|
+
@mods_rec.alternative_titles.should == []
|
104
|
+
end
|
105
|
+
it "should not get an alternative title if type attribute from titleInfo is not 'alternative'" do
|
106
|
+
@mods_rec.from_str('<mods><titleInfo type="uniform"><title>ta da!</title></titleInfo></mods>')
|
107
|
+
@mods_rec.alternative_titles.should == []
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Mods Top Level Elements that do not have Child Elements" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@mods_rec = Mods::Record.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should get the text contents of any single simple (cannot have child elements) top level element" do
|
10
|
+
Mods::TOP_LEVEL_ELEMENTS_SIMPLE.each { |elname|
|
11
|
+
@mods_rec.from_str("<mods><#{elname}>hi</#{elname}></mods>")
|
12
|
+
@mods_rec.send(elname.to_sym).map { |e| e.text }.should == ["hi"]
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should get the text contents of any single complex top level element instance with no child elements" do
|
17
|
+
pending "to be implemented"
|
18
|
+
Mods::TOP_LEVEL_ELEMENTS_COMPLEX.each { |elname|
|
19
|
+
@mods_rec.from_str("<mods><#{elname}>hi</#{elname}></mods>")
|
20
|
+
@mods_rec.send(elname.to_sym).map { |e| e.text }.should == ["hi"]
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return an array of strings when there are multiple occurrences of simple top level elements" do
|
25
|
+
@mods_rec.from_str('<mods><note>hi</note><note>hello</note></mods>').note.map { |e| e.text }.should == ["hi", "hello"]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should deal with camelcase vs. ruby underscore convention" do
|
29
|
+
pending "need to implement ruby style version of (element/attribute) method names"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -28,6 +28,38 @@ dependencies:
|
|
28
28
|
- - ! '>='
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: nom-xml
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: iso-639
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
31
63
|
- !ruby/object:Gem::Dependency
|
32
64
|
name: rake
|
33
65
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,13 +156,16 @@ dependencies:
|
|
124
156
|
- - ! '>='
|
125
157
|
- !ruby/object:Gem::Version
|
126
158
|
version: '0'
|
127
|
-
description:
|
159
|
+
description: Parse MODS (Metadata Object Description Schema) records. More information
|
160
|
+
about MODS can be found at http://www.loc.gov/standards/mods/
|
128
161
|
email:
|
129
162
|
- ndushay AT stanford.edu
|
130
163
|
- bess AT stanford.edu
|
131
164
|
executables: []
|
132
165
|
extensions: []
|
133
|
-
extra_rdoc_files:
|
166
|
+
extra_rdoc_files:
|
167
|
+
- LICENSE
|
168
|
+
- README.rdoc
|
134
169
|
files:
|
135
170
|
- .gitignore
|
136
171
|
- .rvmrc
|
@@ -141,9 +176,25 @@ files:
|
|
141
176
|
- README.rdoc
|
142
177
|
- Rakefile
|
143
178
|
- lib/mods.rb
|
179
|
+
- lib/mods/constants.rb
|
180
|
+
- lib/mods/marc_relator_codes.rb
|
181
|
+
- lib/mods/name.rb
|
182
|
+
- lib/mods/nom_terminology.rb
|
183
|
+
- lib/mods/reader.rb
|
184
|
+
- lib/mods/record.rb
|
185
|
+
- lib/mods/title_info.rb
|
144
186
|
- lib/mods/version.rb
|
145
187
|
- mods.gemspec
|
146
|
-
|
188
|
+
- spec/language_spec.rb
|
189
|
+
- spec/location_spec.rb
|
190
|
+
- spec/name_spec.rb
|
191
|
+
- spec/origin_info_spec.rb
|
192
|
+
- spec/physical_description_spec.rb
|
193
|
+
- spec/reader_spec.rb
|
194
|
+
- spec/spec_helper.rb
|
195
|
+
- spec/title_spec.rb
|
196
|
+
- spec/top_level_elmnts_simple_spec.rb
|
197
|
+
homepage: https://github.com/sul-dlss/mods
|
147
198
|
licenses: []
|
148
199
|
post_install_message:
|
149
200
|
rdoc_options: []
|
@@ -157,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
157
208
|
version: '0'
|
158
209
|
segments:
|
159
210
|
- 0
|
160
|
-
hash:
|
211
|
+
hash: 1304587137062887266
|
161
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
213
|
none: false
|
163
214
|
requirements:
|
@@ -166,13 +217,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
217
|
version: '0'
|
167
218
|
segments:
|
168
219
|
- 0
|
169
|
-
hash:
|
220
|
+
hash: 1304587137062887266
|
170
221
|
requirements: []
|
171
222
|
rubyforge_project:
|
172
223
|
rubygems_version: 1.8.24
|
173
224
|
signing_key:
|
174
225
|
specification_version: 3
|
175
|
-
summary:
|
176
|
-
|
177
|
-
|
226
|
+
summary: Parse MODS (Metadata Object Description Schema) records.
|
227
|
+
test_files:
|
228
|
+
- spec/language_spec.rb
|
229
|
+
- spec/location_spec.rb
|
230
|
+
- spec/name_spec.rb
|
231
|
+
- spec/origin_info_spec.rb
|
232
|
+
- spec/physical_description_spec.rb
|
233
|
+
- spec/reader_spec.rb
|
234
|
+
- spec/spec_helper.rb
|
235
|
+
- spec/title_spec.rb
|
236
|
+
- spec/top_level_elmnts_simple_spec.rb
|
178
237
|
has_rdoc:
|