mods 2.4.1 → 3.0.1

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.
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