mods 2.4.1 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +24 -0
  3. data/.gitignore +1 -0
  4. data/README.md +0 -1
  5. data/lib/mods/date.rb +54 -17
  6. data/lib/mods/marc_country_codes.rb +12 -10
  7. data/lib/mods/nom_terminology.rb +109 -845
  8. data/lib/mods/reader.rb +9 -39
  9. data/lib/mods/record.rb +13 -28
  10. data/lib/mods/version.rb +1 -1
  11. data/mods.gemspec +2 -2
  12. data/spec/fixture_data/hp566jq8781.xml +334 -0
  13. data/spec/integration/parker_spec.rb +217 -0
  14. data/spec/{date_spec.rb → lib/date_spec.rb} +9 -1
  15. data/spec/lib/language_spec.rb +123 -0
  16. data/spec/lib/location_spec.rb +175 -0
  17. data/spec/lib/name_spec.rb +368 -0
  18. data/spec/lib/origin_info_spec.rb +134 -0
  19. data/spec/lib/part_spec.rb +162 -0
  20. data/spec/lib/physical_description_spec.rb +72 -0
  21. data/spec/{reader_spec.rb → lib/reader_spec.rb} +1 -41
  22. data/spec/lib/record_info_spec.rb +114 -0
  23. data/spec/lib/record_spec.rb +287 -0
  24. data/spec/lib/related_item_spec.rb +124 -0
  25. data/spec/lib/subject_spec.rb +427 -0
  26. data/spec/lib/title_spec.rb +108 -0
  27. data/spec/lib/top_level_elmnts_simple_spec.rb +169 -0
  28. data/spec/spec_helper.rb +86 -5
  29. data/spec/support/fixtures.rb +9 -0
  30. metadata +49 -44
  31. data/.travis.yml +0 -16
  32. data/spec/language_spec.rb +0 -118
  33. data/spec/location_spec.rb +0 -295
  34. data/spec/name_spec.rb +0 -759
  35. data/spec/origin_info_spec.rb +0 -447
  36. data/spec/part_spec.rb +0 -471
  37. data/spec/physical_description_spec.rb +0 -144
  38. data/spec/record_info_spec.rb +0 -493
  39. data/spec/record_spec.rb +0 -356
  40. data/spec/related_item_spec.rb +0 -305
  41. data/spec/subject_spec.rb +0 -809
  42. data/spec/title_spec.rb +0 -226
  43. data/spec/top_level_elmnts_simple_spec.rb +0 -369
@@ -0,0 +1,169 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Mods Top Level Elements that do not have Child Elements" do
4
+ it "should get the text contents of any single simple (cannot have child elements) top level element" do
5
+ Mods::TOP_LEVEL_ELEMENTS_SIMPLE.each { |elname|
6
+ record = mods_record("<#{elname}>hi</#{elname}>")
7
+ expect(record.send(elname.to_sym).map { |e| e.text }).to eq(["hi"])
8
+ }
9
+ end
10
+
11
+ it "should return an array of strings when there are multiple occurrences of simple top level elements" do
12
+ expect(mods_record('<note>hi</note><note>hello</note></mods>').note.map { |e| e.text }).to eq(%w[hi hello])
13
+ end
14
+
15
+ context "<abstract> child element" do
16
+ it ".abstract.displayLabel should be an accessor for displayLabel attribute on abstract element: <abstract displayLabel='foo'>" do
17
+ record = mods_record('<abstract displayLabel="Summary">blah blah blah</abstract>')
18
+ expect(record.abstract.displayLabel).to eq(['Summary'])
19
+ end
20
+ it ".abstract.type_at should be an accessor for type attribute on abstract element: <abstract type='foo'>" do
21
+ record = mods_record('<abstract type="Scope and Contents note">blah blah blah</abstract>')
22
+ expect(record.abstract.type_at).to eq(['Scope and Contents note'])
23
+ end
24
+ end
25
+
26
+ context "<accessCondition> child element" do
27
+ before(:all) do
28
+ @acc_cond = mods_record('<accessCondition displayLabel="meh" type="useAndReproduction">blah blah blah</accessCondition></mods>').accessCondition
29
+ @acc_cond2 = mods_record('<accessCondition type="useAndReproduction">All rights reserved.</accessCondition></mods>').accessCondition
30
+ end
31
+ it ".accessCondition.displayLabel should be an accessor for displayLabel attribute on accessCondition element: <accessCondition displayLabel='foo'>" do
32
+ expect(@acc_cond.displayLabel).to eq(['meh'])
33
+ end
34
+ it ".accessCondition.type_at should be an accessor for type attribute on accessCondition element: <accessCondition type='foo'>" do
35
+ [@acc_cond, @acc_cond2].each { |ac| expect(ac.type_at).to eq(['useAndReproduction']) }
36
+ end
37
+ end
38
+
39
+ context "<classification> child element" do
40
+ before(:all) do
41
+ @class1 = mods_record('<classification authority="ddc" edition="11">683</classification></mods>').classification
42
+ @class2 = mods_record('<classification authority="lcc">JK609.M2</classification></mods>').classification
43
+ end
44
+ it ".classification.authority should be an accessor for authority attribute on classification element: <classification authority='foo'>" do
45
+ expect(@class1.authority).to eq(['ddc'])
46
+ expect(@class2.authority).to eq(['lcc'])
47
+ end
48
+ it ".classification.edition should be an accessor for edition attribute on classification element: <classification edition='foo'>" do
49
+ expect(@class1.edition).to eq(['11'])
50
+ end
51
+ it "should recognize all authority attributes" do
52
+ Mods::AUTHORITY_ATTRIBS.each { |a|
53
+ record = mods_record("<classification #{a}='attr_val'>zzz</classification>")
54
+ expect(record.classification.send(a.to_sym)).to eq(['attr_val'])
55
+ }
56
+ end
57
+ end
58
+
59
+ context "<extension> child element" do
60
+ before(:all) do
61
+ @ext = record = mods_record('<extension xmlns:dcterms="http://purl.org/dc/ >
62
+ <dcterms:modified>2003-03-24</dcterms:modified>
63
+ </extension></mods>').extension
64
+ end
65
+ it ".extension.displayLabel should be an accessor for displayLabel attribute on extension element: <extension displayLabel='foo'>" do
66
+ record = mods_record('<extension displayLabel="something">blah blah blah</extension>')
67
+ expect(record.extension.displayLabel).to eq(['something'])
68
+ end
69
+ end
70
+
71
+ context "<genre> child element" do
72
+ it ".genre.displayLabel should be an accessor for displayLabel attribute on genre element: <genre displayLabel='foo'>" do
73
+ record = mods_record('<genre displayLabel="something">blah blah blah</genre>')
74
+ expect(record.genre.displayLabel).to eq(['something'])
75
+ end
76
+ it ".genre.type_at should be an accessor for type attribute on genre element: <genre type='foo'>" do
77
+ record = mods_record('<genre type="maybe">blah blah blah</genre>')
78
+ expect(record.genre.type_at).to eq(['maybe'])
79
+ end
80
+ it ".genre.usage should be an accessor for usage attribute on genre element: <genre usage='foo'>" do
81
+ record = mods_record('<genre usage="fer sure">blah blah blah</genre>')
82
+ expect(record.genre.usage).to eq(['fer sure'])
83
+ end
84
+ it "should recognize all authority attributes" do
85
+ Mods::AUTHORITY_ATTRIBS.each { |a|
86
+ record = mods_record("<genre #{a}='attr_val'>zzz</genre>")
87
+ expect(record.genre.send(a.to_sym)).to eq(['attr_val'])
88
+ }
89
+ end
90
+ end
91
+
92
+ context "<identifier> child element" do
93
+ let(:record) do
94
+ mods_record('<identifier displayLabel="book_number" type="local">70</identifier></mods>')
95
+ end
96
+ it ".identifier.displayLabel should be an accessor for displayLabel attribute on identifier element: <identifier displayLabel='foo'>" do
97
+ expect(record.identifier.displayLabel).to eq(['book_number'])
98
+ end
99
+ it ".identifier.invalid should be an accessor for invalid attribute on identifier element: <identifier invalid='foo'>" do
100
+ record = mods_record('<identifier type="isbn" invalid="yes">0877780116</identifier>')
101
+ expect(record.identifier.invalid).to eq(['yes'])
102
+ end
103
+ it ".identifier.type_at should be an accessor for type attribute on identifier element: <identifier type='foo'>" do
104
+ expect(record.identifier.type_at).to eq(['local'])
105
+ end
106
+ end
107
+
108
+ context "<note> child element" do
109
+ it ".note.displayLabel should be an accessor for displayLabel attribute on note element: <note displayLabel='foo'>" do
110
+ record = mods_record('<note displayLabel="state_note">blah</note>')
111
+ expect(record.note.displayLabel).to eq(['state_note'])
112
+ end
113
+ it ".note.id_at should be an accessor for ID attribute on note element: <note ID='foo'>" do
114
+ record = mods_record('<note ID="foo">blah blah blah</note>')
115
+ expect(record.note.id_at).to eq(['foo'])
116
+ end
117
+ it ".note.type_at should be an accessor for type attribute on note element: <note type='foo'>" do
118
+ record = mods_record('<note type="content">blah</note>')
119
+ expect(record.note.type_at).to eq(['content'])
120
+ end
121
+ end
122
+
123
+ context "<tableOfContents> child element" do
124
+ it ".tableOfContents.displayLabel should be an accessor for displayLabel attribute on tableOfContents element: <tableOfContents displayLabel='foo'>" do
125
+ record = mods_record('<tableOfContents displayLabel="Chapters included in book">blah blah</tableOfContents>')
126
+ expect(record.tableOfContents.displayLabel).to eq(['Chapters included in book'])
127
+ end
128
+ it ".tableOfContents.shareable should be an accessor for shareable attribute on tableOfContents element: <tableOfContents shareable='foo'>" do
129
+ record = mods_record('<tableOfContents shareable="no">blah blah blah</tableOfContents>')
130
+ expect(record.tableOfContents.shareable).to eq(['no'])
131
+ end
132
+ it ".tableOfContents.type_at should be an accessor for type attribute on tableOfContents element: <tableOfContents type='foo'>" do
133
+ record = mods_record('<tableOfContents type="partial contents">blah blah</tableOfContents>')
134
+ expect(record.tableOfContents.type_at).to eq(['partial contents'])
135
+ end
136
+ end
137
+
138
+ context "<targetAudience> child element" do
139
+ it ".targetAudience.displayLabel should be an accessor for displayLabel attribute on targetAudience element: <targetAudience displayLabel='foo'>" do
140
+ record = mods_record('<targetAudience displayLabel="ta da">blah blah</targetAudience>')
141
+ expect(record.targetAudience.displayLabel).to eq(['ta da'])
142
+ end
143
+ it "should recognize all authority attributes" do
144
+ Mods::AUTHORITY_ATTRIBS.each { |a|
145
+ record = mods_record("<targetAudience #{a}='attr_val'>zzz</targetAudience>")
146
+ expect(record.targetAudience.send(a.to_sym)).to eq(['attr_val'])
147
+ }
148
+ end
149
+ end
150
+
151
+ context "<typeOfResource> child element" do
152
+ it ".typeOfResource.collection should be an accessor for collection attribute on typeOfResource element: <typeOfResource collection='foo'>" do
153
+ record = mods_record('<typeOfResource collection="yes">blah blah blah</typeOfResource>')
154
+ expect(record.typeOfResource.collection).to eq(['yes'])
155
+ end
156
+ it ".typeOfResource.displayLabel should be an accessor for displayLabel attribute on typeOfResource element: <typeOfResource displayLabel='foo'>" do
157
+ record = mods_record('<typeOfResource displayLabel="Summary">blah blah blah</typeOfResource>')
158
+ expect(record.typeOfResource.displayLabel).to eq(['Summary'])
159
+ end
160
+ it ".typeOfResource.manuscript should be an accessor for manuscript attribute on typeOfResource element: <typeOfResource manuscript='foo'>" do
161
+ record = mods_record('<typeOfResource manuscript="yes">blah blah blah</typeOfResource>')
162
+ expect(record.typeOfResource.manuscript).to eq(['yes'])
163
+ end
164
+ it ".typeOfResource.usage should be an accessor for usage attribute on typeOfResource element: <typeOfResource usage='foo'>" do
165
+ record = mods_record('<typeOfResource usage="fer sure">blah blah blah</typeOfResource>')
166
+ expect(record.typeOfResource.usage).to eq(['fer sure'])
167
+ end
168
+ end
169
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,91 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov'
2
4
  SimpleCov.start
3
5
 
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
6
-
7
6
  require 'mods'
8
7
 
9
- #RSpec.configure do |config|
10
- #end
8
+ Dir[File.join(File.dirname(__FILE__), 'support', '**', '*.rb')].sort.each { |f| require f }
9
+
10
+ RSpec.configure do |config|
11
+ config.include Fixtures
12
+
13
+ # rspec-expectations config goes here. You can use an alternate
14
+ # assertion/expectation library such as wrong or the stdlib/minitest
15
+ # assertions if you prefer.
16
+ config.expect_with :rspec do |expectations|
17
+ # This option will default to `true` in RSpec 4. It makes the `description`
18
+ # and `failure_message` of custom matchers include text for helper methods
19
+ # defined using `chain`, e.g.:
20
+ # be_bigger_than(2).and_smaller_than(4).description
21
+ # # => "be bigger than 2 and smaller than 4"
22
+ # ...rather than:
23
+ # # => "be bigger than 2"
24
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
25
+ end
26
+
27
+ # rspec-mocks config goes here. You can use an alternate test double
28
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
29
+ config.mock_with :rspec do |mocks|
30
+ # Prevents you from mocking or stubbing a method that does not exist on
31
+ # a real object. This is generally recommended, and will default to
32
+ # `true` in RSpec 4.
33
+ mocks.verify_partial_doubles = true
34
+ end
35
+
36
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
37
+ # have no way to turn it off -- the option exists only for backwards
38
+ # compatibility in RSpec 3). It causes shared context metadata to be
39
+ # inherited by the metadata hash of host groups and examples, rather than
40
+ # triggering implicit auto-inclusion in groups with matching metadata.
41
+ config.shared_context_metadata_behavior = :apply_to_host_groups
42
+
43
+ # The settings below are suggested to provide a good initial experience
44
+ # with RSpec, but feel free to customize to your heart's content.
45
+
46
+ # This allows you to limit a spec run to individual examples or groups
47
+ # you care about by tagging them with `:focus` metadata. When nothing
48
+ # is tagged with `:focus`, all examples get run. RSpec also provides
49
+ # aliases for `it`, `describe`, and `context` that include `:focus`
50
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
51
+ config.filter_run_when_matching :focus
52
+
53
+ # Allows RSpec to persist some state between runs in order to support
54
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
55
+ # you configure your source control system to ignore this file.
56
+ config.example_status_persistence_file_path = 'spec/examples.txt'
57
+
58
+ # Limits the available syntax to the non-monkey patched syntax that is
59
+ # recommended. For more details, see:
60
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
61
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
62
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
63
+ # config.disable_monkey_patching!
64
+
65
+ # Many RSpec users commonly either run the entire suite or an individual
66
+ # file, and it's useful to allow more verbose output when running an
67
+ # individual spec file.
68
+ if config.files_to_run.one?
69
+ # Use the documentation formatter for detailed output,
70
+ # unless a formatter has already been configured
71
+ # (e.g. via a command-line flag).
72
+ config.default_formatter = 'doc'
73
+ end
74
+
75
+ # Print the 10 slowest examples and example groups at the
76
+ # end of the spec run, to help surface which specs are running
77
+ # particularly slow.
78
+ config.profile_examples = 10
79
+
80
+ # Run specs in random order to surface order dependencies. If you find an
81
+ # order dependency and want to debug it, you can fix the order by providing
82
+ # the seed, which is printed after each run.
83
+ # --seed 1234
84
+ config.order = :random
85
+
86
+ # Seed global randomization in this process using the `--seed` CLI option.
87
+ # Setting this allows you to use `--seed` to deterministically reproduce
88
+ # test failures related to randomization by passing the same `--seed` value
89
+ # as the one that triggered the failure.
90
+ Kernel.srand config.seed
91
+ end
@@ -0,0 +1,9 @@
1
+ module Fixtures
2
+ def mods_record(xml)
3
+ Mods::Record.new.from_str(<<-XML)
4
+ <mods xmlns='#{Mods::MODS_NS}'>
5
+ #{xml}
6
+ </mods>
7
+ XML
8
+ end
9
+ end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mods
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naomi Dushay
8
8
  - Bess Sadler
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-01-07 00:00:00.000000000 Z
12
+ date: 2022-02-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -57,16 +57,16 @@ dependencies:
57
57
  name: edtf
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0'
62
+ version: '3.0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: '3.0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rake
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -127,16 +127,16 @@ dependencies:
127
127
  name: simplecov
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ">="
130
+ - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: '0'
132
+ version: 0.17.0
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ">="
137
+ - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '0'
139
+ version: 0.17.0
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: equivalent-xml
142
142
  requirement: !ruby/object:Gem::Requirement
@@ -162,9 +162,9 @@ extra_rdoc_files:
162
162
  - LICENSE
163
163
  - README.md
164
164
  files:
165
+ - ".github/workflows/ruby.yml"
165
166
  - ".gitignore"
166
167
  - ".rspec"
167
- - ".travis.yml"
168
168
  - ".yardopts"
169
169
  - Gemfile
170
170
  - LICENSE
@@ -185,26 +185,29 @@ files:
185
185
  - lib/mods/title_info.rb
186
186
  - lib/mods/version.rb
187
187
  - mods.gemspec
188
- - spec/date_spec.rb
188
+ - spec/fixture_data/hp566jq8781.xml
189
189
  - spec/fixture_data/shpc1.mods.xml
190
- - spec/language_spec.rb
191
- - spec/location_spec.rb
192
- - spec/name_spec.rb
193
- - spec/origin_info_spec.rb
194
- - spec/part_spec.rb
195
- - spec/physical_description_spec.rb
196
- - spec/reader_spec.rb
197
- - spec/record_info_spec.rb
198
- - spec/record_spec.rb
199
- - spec/related_item_spec.rb
190
+ - spec/integration/parker_spec.rb
191
+ - spec/lib/date_spec.rb
192
+ - spec/lib/language_spec.rb
193
+ - spec/lib/location_spec.rb
194
+ - spec/lib/name_spec.rb
195
+ - spec/lib/origin_info_spec.rb
196
+ - spec/lib/part_spec.rb
197
+ - spec/lib/physical_description_spec.rb
198
+ - spec/lib/reader_spec.rb
199
+ - spec/lib/record_info_spec.rb
200
+ - spec/lib/record_spec.rb
201
+ - spec/lib/related_item_spec.rb
202
+ - spec/lib/subject_spec.rb
203
+ - spec/lib/title_spec.rb
204
+ - spec/lib/top_level_elmnts_simple_spec.rb
200
205
  - spec/spec_helper.rb
201
- - spec/subject_spec.rb
202
- - spec/title_spec.rb
203
- - spec/top_level_elmnts_simple_spec.rb
206
+ - spec/support/fixtures.rb
204
207
  homepage: https://github.com/sul-dlss/mods
205
208
  licenses: []
206
209
  metadata: {}
207
- post_install_message:
210
+ post_install_message:
208
211
  rdoc_options: []
209
212
  require_paths:
210
213
  - lib
@@ -219,25 +222,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
222
  - !ruby/object:Gem::Version
220
223
  version: '0'
221
224
  requirements: []
222
- rubyforge_project:
223
- rubygems_version: 2.7.6
224
- signing_key:
225
+ rubygems_version: 3.2.32
226
+ signing_key:
225
227
  specification_version: 4
226
228
  summary: Parse MODS (Metadata Object Description Schema) records.
227
229
  test_files:
228
- - spec/date_spec.rb
230
+ - spec/fixture_data/hp566jq8781.xml
229
231
  - spec/fixture_data/shpc1.mods.xml
230
- - spec/language_spec.rb
231
- - spec/location_spec.rb
232
- - spec/name_spec.rb
233
- - spec/origin_info_spec.rb
234
- - spec/part_spec.rb
235
- - spec/physical_description_spec.rb
236
- - spec/reader_spec.rb
237
- - spec/record_info_spec.rb
238
- - spec/record_spec.rb
239
- - spec/related_item_spec.rb
232
+ - spec/integration/parker_spec.rb
233
+ - spec/lib/date_spec.rb
234
+ - spec/lib/language_spec.rb
235
+ - spec/lib/location_spec.rb
236
+ - spec/lib/name_spec.rb
237
+ - spec/lib/origin_info_spec.rb
238
+ - spec/lib/part_spec.rb
239
+ - spec/lib/physical_description_spec.rb
240
+ - spec/lib/reader_spec.rb
241
+ - spec/lib/record_info_spec.rb
242
+ - spec/lib/record_spec.rb
243
+ - spec/lib/related_item_spec.rb
244
+ - spec/lib/subject_spec.rb
245
+ - spec/lib/title_spec.rb
246
+ - spec/lib/top_level_elmnts_simple_spec.rb
240
247
  - spec/spec_helper.rb
241
- - spec/subject_spec.rb
242
- - spec/title_spec.rb
243
- - spec/top_level_elmnts_simple_spec.rb
248
+ - spec/support/fixtures.rb
data/.travis.yml DELETED
@@ -1,16 +0,0 @@
1
- language: ruby
2
- script: rake rspec
3
- rvm:
4
- - 2.5.3
5
- - 2.4.3
6
- - jruby-9.2.0.0
7
- env:
8
- global:
9
- - CC_TEST_REPORTER_ID=5c7c917c5d19e953ecd168c67fe630c0ecfee96ad0e28a4e95de81e1a2d55ea9
10
-
11
- before_script:
12
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
13
- - chmod +x ./cc-test-reporter
14
- - ./cc-test-reporter before-build
15
- after_script:
16
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -1,118 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Mods <language> Element" do
4
- before(:all) do
5
- @mods_rec = Mods::Record.new
6
- end
7
-
8
- context "basic <language> terminology pieces" do
9
-
10
- context "namespace aware" do
11
- before(:all) do
12
- @ns_decl = "xmlns='#{Mods::MODS_NS}'"
13
- @iso639_2b_code = "<mods #{@ns_decl}><language><languageTerm authority='iso639-2b' type='code'>fre</languageTerm></language></mods>"
14
- @iso639_2b_code_ln = @mods_rec.from_str(@iso639_2b_code).language
15
- mult_code_terms = "<mods #{@ns_decl}><language><languageTerm authority='iso639-2b' type='code'>spa</languageTerm><languageTerm authority='iso639-2b' type='code'>dut</languageTerm></language></mods>"
16
- @mult_code_terms = @mods_rec.from_str(mult_code_terms).language
17
- mult_text_terms = "<mods #{@ns_decl}><language><languageTerm authority='iso639-2b' type='text'>Chinese</languageTerm><languageTerm authority='iso639-2b' type='text'>Spanish</languageTerm></language></mods>"
18
- @mult_text_terms = @mods_rec.from_str(mult_text_terms).language
19
- @ex_array = [@iso639_2b_code_ln, @mult_code_terms, @mult_text_terms]
20
- end
21
- it "should be a NodeSet" do
22
- @ex_array.each { |t| expect(t).to be_an_instance_of(Nokogiri::XML::NodeSet) }
23
- end
24
- it "should have as many members as there are <language> elements in the xml" do
25
- @ex_array.each { |t| expect(t.size).to eq(1) }
26
- end
27
-
28
- context "<languageTerm> child element" do
29
- it "should understand languageTerm.type_at attribute" do
30
- expect(@iso639_2b_code_ln.languageTerm.type_at).to eq(["code"])
31
- end
32
- it "should understand languageTerm.authority attribute" do
33
- expect(@iso639_2b_code_ln.languageTerm.authority).to eq(["iso639-2b"])
34
- end
35
- it "should understand languageTerm value" do
36
- expect(@iso639_2b_code_ln.languageTerm.text).to eq("fre")
37
- expect(@iso639_2b_code_ln.languageTerm.size).to eq(1)
38
- end
39
-
40
- it "should recognize all authority attributes" do
41
- Mods::AUTHORITY_ATTRIBS.each { |a|
42
- @mods_rec.from_str("<mods #{@ns_decl}><language><languageTerm #{a}='attr_val'>zzz</languageTerm></language></mods>")
43
- expect(@mods_rec.language.languageTerm.send(a.to_sym)).to eq(['attr_val'])
44
- }
45
- end
46
- end # <languageTerm>
47
-
48
- it "should get one language.code_term for each languageTerm element with a type attribute of 'code'" do
49
- expect(@iso639_2b_code_ln.code_term.size).to eq(1)
50
- expect(@iso639_2b_code_ln.code_term.text).to eq("fre")
51
- expect(@mult_code_terms.code_term.size).to eq(2)
52
- expect(@mult_code_terms.code_term.first.text).to include("spa")
53
- expect(@mult_code_terms.code_term[1].text).to eq("dut")
54
- end
55
- it "should get one language.text_term for each languageTerm element with a type attribute of 'text'" do
56
- expect(@mult_text_terms.text_term.size).to eq(2)
57
- expect(@mult_text_terms.text_term.first.text).to include("Chinese")
58
- expect(@mult_text_terms.text_term[1].text).to eq("Spanish")
59
- end
60
- end # namespace_aware
61
-
62
-
63
- context "NOT namespace aware" do
64
- before(:all) do
65
- @iso639_2b_code = "<mods><language><languageTerm authority='iso639-2b' type='code'>fre</languageTerm></language></mods>"
66
- @iso639_2b_code_ln = @mods_rec.from_str(@iso639_2b_code, false).language
67
- mult_code_terms = "<mods><language><languageTerm authority='iso639-2b' type='code'>spa</languageTerm><languageTerm authority='iso639-2b' type='code'>dut</languageTerm></language></mods>"
68
- @mult_code_terms = @mods_rec.from_str(mult_code_terms, false).language
69
- mult_text_terms = "<mods><language><languageTerm authority='iso639-2b' type='text'>Chinese</languageTerm><languageTerm authority='iso639-2b' type='text'>Spanish</languageTerm></language></mods>"
70
- @mult_text_terms = @mods_rec.from_str(mult_text_terms, false).language
71
- @ex_array = [@iso639_2b_code_ln, @mult_code_terms, @mult_text_terms]
72
- end
73
- it "should be a NodeSet" do
74
- @ex_array.each { |t| expect(t).to be_an_instance_of(Nokogiri::XML::NodeSet) }
75
- end
76
- it "should have as many members as there are <language> elements in the xml" do
77
- @ex_array.each { |t| expect(t.size).to eq(1) }
78
- end
79
-
80
- context "<languageTerm> child element" do
81
- it "should understand languageTerm.type_at attribute" do
82
- expect(@iso639_2b_code_ln.languageTerm.type_at).to eq(["code"])
83
- end
84
- it "should understand languageTerm.authority attribute" do
85
- expect(@iso639_2b_code_ln.languageTerm.authority).to eq(["iso639-2b"])
86
- end
87
- it "should understand languageTerm value" do
88
- expect(@iso639_2b_code_ln.languageTerm.text).to eq("fre")
89
- expect(@iso639_2b_code_ln.languageTerm.size).to eq(1)
90
- end
91
-
92
- it "should recognize all authority attributes" do
93
- Mods::AUTHORITY_ATTRIBS.each { |a|
94
- @mods_rec.from_str("<mods><language><languageTerm #{a}='attr_val'>zzz</languageTerm></language></mods>", false)
95
- expect(@mods_rec.language.languageTerm.send(a.to_sym)).to eq(['attr_val'])
96
- }
97
- end
98
- end # <languageTerm>
99
-
100
- it "should get one language.code_term for each languageTerm element with a type attribute of 'code'" do
101
- expect(@iso639_2b_code_ln.code_term.size).to eq(1)
102
- expect(@iso639_2b_code_ln.code_term.text).to eq("fre")
103
- expect(@mult_code_terms.code_term.size).to eq(2)
104
- expect(@mult_code_terms.code_term.first.text).to include("spa")
105
- expect(@mult_code_terms.code_term[1].text).to eq("dut")
106
- end
107
- it "should get one language.text_term for each languageTerm element with a type attribute of 'text'" do
108
- expect(@mult_text_terms.text_term.size).to eq(2)
109
- expect(@mult_text_terms.text_term.first.text).to include("Chinese")
110
- expect(@mult_text_terms.text_term[1].text).to eq("Spanish")
111
- end
112
- end # NOT namespace_aware
113
-
114
- end # basic <language> terminology pieces
115
-
116
- # note that Mods::Record.languages tests are in record_spec
117
-
118
- end