mods 2.4.0 → 3.0.0

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 (45) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +24 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +0 -4
  5. data/README.md +1 -3
  6. data/lib/mods/date.rb +51 -17
  7. data/lib/mods/marc_country_codes.rb +12 -10
  8. data/lib/mods/nom_terminology.rb +110 -849
  9. data/lib/mods/reader.rb +9 -39
  10. data/lib/mods/record.rb +13 -28
  11. data/lib/mods/version.rb +1 -1
  12. data/mods.gemspec +3 -3
  13. data/spec/fixture_data/hp566jq8781.xml +334 -0
  14. data/spec/integration/parker_spec.rb +217 -0
  15. data/spec/{date_spec.rb → lib/date_spec.rb} +8 -1
  16. data/spec/lib/language_spec.rb +123 -0
  17. data/spec/lib/location_spec.rb +175 -0
  18. data/spec/lib/name_spec.rb +368 -0
  19. data/spec/lib/origin_info_spec.rb +134 -0
  20. data/spec/lib/part_spec.rb +162 -0
  21. data/spec/lib/physical_description_spec.rb +72 -0
  22. data/spec/{reader_spec.rb → lib/reader_spec.rb} +1 -41
  23. data/spec/lib/record_info_spec.rb +114 -0
  24. data/spec/lib/record_spec.rb +287 -0
  25. data/spec/lib/related_item_spec.rb +124 -0
  26. data/spec/lib/subject_spec.rb +427 -0
  27. data/spec/lib/title_spec.rb +108 -0
  28. data/spec/lib/top_level_elmnts_simple_spec.rb +169 -0
  29. data/spec/spec_helper.rb +87 -6
  30. data/spec/support/fixtures.rb +9 -0
  31. metadata +61 -43
  32. data/.coveralls.yml +0 -1
  33. data/.travis.yml +0 -6
  34. data/spec/language_spec.rb +0 -118
  35. data/spec/location_spec.rb +0 -295
  36. data/spec/name_spec.rb +0 -759
  37. data/spec/origin_info_spec.rb +0 -447
  38. data/spec/part_spec.rb +0 -471
  39. data/spec/physical_description_spec.rb +0 -144
  40. data/spec/record_info_spec.rb +0 -493
  41. data/spec/record_spec.rb +0 -356
  42. data/spec/related_item_spec.rb +0 -305
  43. data/spec/subject_spec.rb +0 -809
  44. data/spec/title_spec.rb +0 -226
  45. 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
- require 'coveralls'
2
- Coveralls.wear!
1
+ # frozen_string_literal: true
3
2
 
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'simplecov'
4
+ SimpleCov.start
6
5
 
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.0
4
+ version: 3.0.0
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: 2018-08-09 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
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: 1.6.6
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: 1.6.6
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: nom-xml
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -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
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '3.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: simplecov
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.17.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 0.17.0
126
140
  - !ruby/object:Gem::Dependency
127
141
  name: equivalent-xml
128
142
  requirement: !ruby/object:Gem::Requirement
@@ -148,10 +162,9 @@ extra_rdoc_files:
148
162
  - LICENSE
149
163
  - README.md
150
164
  files:
151
- - ".coveralls.yml"
165
+ - ".github/workflows/ruby.yml"
152
166
  - ".gitignore"
153
167
  - ".rspec"
154
- - ".travis.yml"
155
168
  - ".yardopts"
156
169
  - Gemfile
157
170
  - LICENSE
@@ -172,26 +185,29 @@ files:
172
185
  - lib/mods/title_info.rb
173
186
  - lib/mods/version.rb
174
187
  - mods.gemspec
175
- - spec/date_spec.rb
188
+ - spec/fixture_data/hp566jq8781.xml
176
189
  - spec/fixture_data/shpc1.mods.xml
177
- - spec/language_spec.rb
178
- - spec/location_spec.rb
179
- - spec/name_spec.rb
180
- - spec/origin_info_spec.rb
181
- - spec/part_spec.rb
182
- - spec/physical_description_spec.rb
183
- - spec/reader_spec.rb
184
- - spec/record_info_spec.rb
185
- - spec/record_spec.rb
186
- - 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
187
205
  - spec/spec_helper.rb
188
- - spec/subject_spec.rb
189
- - spec/title_spec.rb
190
- - spec/top_level_elmnts_simple_spec.rb
206
+ - spec/support/fixtures.rb
191
207
  homepage: https://github.com/sul-dlss/mods
192
208
  licenses: []
193
209
  metadata: {}
194
- post_install_message:
210
+ post_install_message:
195
211
  rdoc_options: []
196
212
  require_paths:
197
213
  - lib
@@ -206,25 +222,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
222
  - !ruby/object:Gem::Version
207
223
  version: '0'
208
224
  requirements: []
209
- rubyforge_project:
210
- rubygems_version: 2.6.11
211
- signing_key:
225
+ rubygems_version: 3.2.32
226
+ signing_key:
212
227
  specification_version: 4
213
228
  summary: Parse MODS (Metadata Object Description Schema) records.
214
229
  test_files:
215
- - spec/date_spec.rb
230
+ - spec/fixture_data/hp566jq8781.xml
216
231
  - spec/fixture_data/shpc1.mods.xml
217
- - spec/language_spec.rb
218
- - spec/location_spec.rb
219
- - spec/name_spec.rb
220
- - spec/origin_info_spec.rb
221
- - spec/part_spec.rb
222
- - spec/physical_description_spec.rb
223
- - spec/reader_spec.rb
224
- - spec/record_info_spec.rb
225
- - spec/record_spec.rb
226
- - 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
227
247
  - spec/spec_helper.rb
228
- - spec/subject_spec.rb
229
- - spec/title_spec.rb
230
- - spec/top_level_elmnts_simple_spec.rb
248
+ - spec/support/fixtures.rb
data/.coveralls.yml DELETED
@@ -1 +0,0 @@
1
- service_name: travis-ci
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- script: rake rspec
3
- rvm:
4
- - 2.4.3
5
- - 2.3.1
6
- - jruby-9.2.0.0
@@ -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