mabmapper 1.0.0.pre18 → 2.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.
- checksums.yaml +4 -4
- data/.rspec +3 -0
- data/Gemfile +27 -5
- data/README.md +7 -0
- data/lib/mabmapper/aleph_mab_xml_engine.rb +316 -275
- data/lib/mabmapper/cli.rb +30 -35
- data/lib/mabmapper/engine.rb +2 -1
- data/lib/mabmapper/mab_xml/document.rb +5 -3
- data/lib/mabmapper/version.rb +1 -1
- data/lib/mabmapper.rb +2 -1
- data/mabmapper.gemspec +7 -11
- data/spec/mabmapper/aleph_mab_xml_engine/publisher_spec.rb +197 -0
- data/spec/spec_helper.rb +86 -0
- data/test/mab_files/test_description/405.xml +4 -4
- data/test/mab_files/test_description/501-519.xml +8 -8
- data/test/mab_files/test_description/522.xml +4 -4
- data/test/mab_files/test_description/523.xml +4 -4
- data/test/mab_files/test_description/536-537.xml +8 -8
- data/test/mab_files/test_description/PAD01.001249913.PRIMO.xml +171 -0
- data/test/mab_files/test_publisher/PAD01.001206544.PRIMO.xml +1130 -0
- data/test/mab_files/test_publisher/PAD01.001231060.PRIMO.xml +145 -0
- data/test/mabmapper/test_creationdate.rb +3 -3
- data/test/mabmapper/test_description.rb +9 -0
- data/test/mabmapper/test_edition.rb +1 -1
- data/test/mabmapper/test_publisher.rb +2 -0
- data/test/test_mabmapper.rb +1 -1
- metadata +36 -65
| @@ -8,7 +8,7 @@ module Mabmapper | |
| 8 8 | 
             
                # Id
         | 
| 9 9 | 
             
                #
         | 
| 10 10 | 
             
                field :id do
         | 
| 11 | 
            -
                   | 
| 11 | 
            +
                  source.controlfield('SYS').values.join
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 14 | 
             
                #
         | 
| @@ -18,14 +18,14 @@ module Mabmapper | |
| 18 18 | 
             
                  value = 'A'
         | 
| 19 19 |  | 
| 20 20 | 
             
                  # gelöscht -> LDR Position 6 == 'd'
         | 
| 21 | 
            -
                  value = 'D' if  | 
| 21 | 
            +
                  value = 'D' if source.controlfield('LDR').at(5) == 'd'
         | 
| 22 22 | 
             
                  # ausgesondert über Feld 078
         | 
| 23 | 
            -
                  value = 'D' if  | 
| 23 | 
            +
                  value = 'D' if source.datafields('078', ind1: 'r').subfields('a').value.try(:downcase) == 'aus'
         | 
| 24 24 | 
             
                  # Standort Detmold unterdrücken
         | 
| 25 | 
            -
                  detmold_locations =  | 
| 25 | 
            +
                  detmold_locations = source.datafields('LOC').subfields('n').values.flatten
         | 
| 26 26 | 
             
                  value = 'D' if detmold_locations.present? && detmold_locations.all?{|v| v == '50'}
         | 
| 27 27 | 
             
                  # Interimsaufnahmen unterdrücken
         | 
| 28 | 
            -
                  value = 'D' if  | 
| 28 | 
            +
                  value = 'D' if source.datafields('537', ind1: '-', ind2: '1').subfields('a').values.flatten.any? { |v| v.downcase.include? 'interimsaufnahme' }
         | 
| 29 29 |  | 
| 30 30 | 
             
                  value
         | 
| 31 31 | 
             
                end
         | 
| @@ -34,21 +34,21 @@ module Mabmapper | |
| 34 34 | 
             
                # HT Nummer
         | 
| 35 35 | 
             
                #
         | 
| 36 36 | 
             
                field :ht_number do
         | 
| 37 | 
            -
                   | 
| 37 | 
            +
                  source.datafields('001', ind2: '1').subfields('a').value
         | 
| 38 38 | 
             
                end
         | 
| 39 39 |  | 
| 40 40 | 
             
                #
         | 
| 41 41 | 
             
                # Creation date
         | 
| 42 42 | 
             
                #
         | 
| 43 43 | 
             
                field :creation_date do
         | 
| 44 | 
            -
                   | 
| 44 | 
            +
                  source.datafields('LOC', ind2: :blank).subfields('k').values.flatten.map(&:presence).compact.uniq
         | 
| 45 45 | 
             
                end
         | 
| 46 46 |  | 
| 47 47 | 
             
                #
         | 
| 48 48 | 
             
                # Materialtyp
         | 
| 49 49 | 
             
                #
         | 
| 50 50 | 
             
                field :materialtyp do
         | 
| 51 | 
            -
                  f050 =  | 
| 51 | 
            +
                  f050 = source.controlfield('050')
         | 
| 52 52 | 
             
                  type = case
         | 
| 53 53 | 
             
                  when (%w(a    ).include?(f050.at( 0)) ) then 'print'
         | 
| 54 54 | 
             
                  when (%w(a b c).include?(f050.at( 3)) ) then 'microform'
         | 
| @@ -68,10 +68,10 @@ module Mabmapper | |
| 68 68 | 
             
                # Inhaltstyp
         | 
| 69 69 | 
             
                #
         | 
| 70 70 | 
             
                field :inhaltstyp do
         | 
| 71 | 
            -
                  f051  =  | 
| 72 | 
            -
                  f052  =  | 
| 73 | 
            -
                  f051s = f051.join.slice(1..3) || ""
         | 
| 74 | 
            -
                  f052s = f052.join.slice(1..6) || ""
         | 
| 71 | 
            +
                  f051  = source.controlfield('051')
         | 
| 72 | 
            +
                  f052  = source.controlfield('052')
         | 
| 73 | 
            +
                  f051s = f051.values.join.slice(1..3) || ""
         | 
| 74 | 
            +
                  f052s = f052.values.join.slice(1..6) || ""
         | 
| 75 75 |  | 
| 76 76 | 
             
                  type = case
         | 
| 77 77 | 
             
                  # Monos
         | 
| @@ -112,7 +112,7 @@ module Mabmapper | |
| 112 112 | 
             
                  # Bandzählung von Reihen
         | 
| 113 113 | 
             
                  volumes = []
         | 
| 114 114 | 
             
                  (456..496).step(10) do |f|
         | 
| 115 | 
            -
                    value =  | 
| 115 | 
            +
                    value = source.datafields("#{f}", ind2: '1').subfields('a').value
         | 
| 116 116 | 
             
                    volumes << value if value.present?
         | 
| 117 117 | 
             
                  end
         | 
| 118 118 | 
             
                  volumes.first
         | 
| @@ -122,20 +122,20 @@ module Mabmapper | |
| 122 122 | 
             
                # Title
         | 
| 123 123 | 
             
                #
         | 
| 124 124 | 
             
                field :title do
         | 
| 125 | 
            -
                  f331_2 =  | 
| 126 | 
            -
                  f333_2 =  | 
| 127 | 
            -
                  f335_2 =  | 
| 128 | 
            -
                  f360_2 =  | 
| 129 | 
            -
             | 
| 130 | 
            -
                  f089_1 =  | 
| 131 | 
            -
                  f331_1 =  | 
| 132 | 
            -
                  f333_1 =  | 
| 133 | 
            -
                  f335_1 =  | 
| 134 | 
            -
                  f360_1 =  | 
| 135 | 
            -
                  f304_1 =  | 
| 136 | 
            -
                  f310_1 =  | 
| 137 | 
            -
                  f340_1 =  | 
| 138 | 
            -
                  f341_1 =  | 
| 125 | 
            +
                  f331_2 = source.datafields('331', ind2: '2').subfields('a').value
         | 
| 126 | 
            +
                  f333_2 = source.datafields('333', ind2: '2').subfields('a').value
         | 
| 127 | 
            +
                  f335_2 = source.datafields('335', ind2: '2').subfields('a').value
         | 
| 128 | 
            +
                  f360_2 = source.datafields('360', ind2: '2').subfields('a').value
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  f089_1 = source.datafields('089', ind2: '1').subfields('a').values.join(" ").presence # can occur multple times
         | 
| 131 | 
            +
                  f331_1 = source.datafields('331', ind2: '1').subfields('a').value
         | 
| 132 | 
            +
                  f333_1 = source.datafields('333', ind2: '1').subfields('a').value
         | 
| 133 | 
            +
                  f335_1 = source.datafields('335', ind2: '1').subfields('a').value
         | 
| 134 | 
            +
                  f360_1 = source.datafields('360', ind2: '1').subfields('a').value
         | 
| 135 | 
            +
                  f304_1 = source.datafields('304', ind2: '1').subfields('a').value
         | 
| 136 | 
            +
                  f310_1 = source.datafields('310', ind2: '1').subfields('a').value
         | 
| 137 | 
            +
                  f340_1 = source.datafields('340', ind2: '1').subfields('a').value
         | 
| 138 | 
            +
                  f341_1 = source.datafields('341', ind2: '1').subfields('a').value
         | 
| 139 139 |  | 
| 140 140 | 
             
                  title = merge(title, f331_2, delimiter: '. ')
         | 
| 141 141 | 
             
                  title = merge(title, f333_2, delimiter: ' / ')
         | 
| @@ -163,35 +163,42 @@ module Mabmapper | |
| 163 163 | 
             
                end
         | 
| 164 164 |  | 
| 165 165 | 
             
                field :short_title_display do
         | 
| 166 | 
            -
                   | 
| 167 | 
            -
                   | 
| 168 | 
            -
                   | 
| 169 | 
            -
                   | 
| 170 | 
            -
                   | 
| 171 | 
            -
                   | 
| 172 | 
            -
             | 
| 173 | 
            -
                   | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
                     | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
                  elsif f331_1
         | 
| 182 | 
            -
                    f331_1
         | 
| 183 | 
            -
                  elsif f089_1 && f089_1.length > 3 && f089_1[/\A(\d|\s)+\Z/].nil? && !['buch', 'hauptbd.'].include?(f089_1.gsub(/\[|\]/, '').downcase)
         | 
| 184 | 
            -
                    f089_1.gsub(/.*(bd|Bd).*\,/, '') # Try to remove volume count from
         | 
| 185 | 
            -
                  elsif f331_2
         | 
| 186 | 
            -
                    f331_2
         | 
| 187 | 
            -
                  else
         | 
| 188 | 
            -
                    ''
         | 
| 189 | 
            -
                  end
         | 
| 166 | 
            +
                  bandangabe_in_vorlageform                     = source.datafields('089', ind2: '1').subfields('a').values.join(" ")
         | 
| 167 | 
            +
                  hauptsachtitel_in_ansetzungsform              = source.datafields('310', ind1: ['-', 'a'], ind2: '1').subfields('a').value
         | 
| 168 | 
            +
                  hauptsachtitel_in_vorlageform                 = source.datafields('331', ind2: '1').subfields('a').value
         | 
| 169 | 
            +
                  hauptsachtitel_der_überordnung_in_vorlageform = source.datafields('331', ind2: '2').subfields('a').value
         | 
| 170 | 
            +
                  allgemeine_materialbenennung                  = source.datafields('334', ind1: '-', ind2: '1').value
         | 
| 171 | 
            +
                  zusätze_zum_hauptsachtitel                    = source.datafields('335', ind2: '1').subfields('a').value
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                  # helper
         | 
| 174 | 
            +
                  bandangabe_may_be_used_as_title = -> (bandangabe) {
         | 
| 175 | 
            +
                    has_minimal_length = bandangabe_in_vorlageform.length > 3
         | 
| 176 | 
            +
                    does_not_only_contain_numbers_or_spaces = bandangabe_in_vorlageform[/\A(\d|\s)+\Z/].nil?
         | 
| 177 | 
            +
                    is_no_well_known_identifier = !['buch', 'hauptbd.'].include?(bandangabe_in_vorlageform.gsub(/\[|\]/, '').downcase)
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                    has_minimal_length && does_not_only_contain_numbers_or_spaces && is_no_well_known_identifier
         | 
| 180 | 
            +
                  }
         | 
| 190 181 |  | 
| 191 | 
            -
                   | 
| 192 | 
            -
             | 
| 193 | 
            -
                   | 
| 194 | 
            -
             | 
| 182 | 
            +
                  if hauptsachtitel_in_ansetzungsform
         | 
| 183 | 
            +
                    hauptsachtitel_in_ansetzungsform
         | 
| 184 | 
            +
                  elsif hauptsachtitel_in_vorlageform
         | 
| 185 | 
            +
                    [
         | 
| 186 | 
            +
                      "#{hauptsachtitel_in_vorlageform}",
         | 
| 187 | 
            +
                      if allgemeine_materialbenennung then "[#{allgemeine_materialbenennung}]" end,
         | 
| 188 | 
            +
                      if zusätze_zum_hauptsachtitel   then ": #{zusätze_zum_hauptsachtitel}"   end
         | 
| 189 | 
            +
                    ]
         | 
| 190 | 
            +
                    .compact.join(" ")
         | 
| 191 | 
            +
                  elsif bandangabe_may_be_used_as_title.call(bandangabe_in_vorlageform)
         | 
| 192 | 
            +
                    bandangabe_in_vorlageform.gsub(/.*(bd|Bd).*\,/, '') # Try to remove volume count from
         | 
| 193 | 
            +
                  elsif hauptsachtitel_der_überordnung_in_vorlageform
         | 
| 194 | 
            +
                    hauptsachtitel_der_überordnung_in_vorlageform
         | 
| 195 | 
            +
                  end
         | 
| 196 | 
            +
                  .try do |_title|
         | 
| 197 | 
            +
                    _title.gsub(/<<|>>/, '').strip.presence
         | 
| 198 | 
            +
                  end
         | 
| 199 | 
            +
                  .try do |_cleaned_title|
         | 
| 200 | 
            +
                    _cleaned_title[0].upcase << _cleaned_title[1..-1]
         | 
| 201 | 
            +
                  end
         | 
| 195 202 | 
             
                end
         | 
| 196 203 |  | 
| 197 204 | 
             
                field :title_search do
         | 
| @@ -199,24 +206,24 @@ module Mabmapper | |
| 199 206 | 
             
                  search_titles << ref(:title_display)
         | 
| 200 207 |  | 
| 201 208 | 
             
                  (342..355).each do |f|
         | 
| 202 | 
            -
                    search_titles <<  | 
| 209 | 
            +
                    search_titles << source.datafields("#{f}", ind2: '1').subfields('a').values
         | 
| 203 210 | 
             
                  end
         | 
| 204 211 |  | 
| 205 | 
            -
                  search_titles <<  | 
| 212 | 
            +
                  search_titles << source.datafields('370', ind2: '1').subfields('a').values
         | 
| 206 213 |  | 
| 207 | 
            -
                  search_titles <<  | 
| 214 | 
            +
                  search_titles << source.datafields('376', ind2: '1').subfields('a').values
         | 
| 208 215 | 
             
                  (451..491).step(10).each do |f|
         | 
| 209 | 
            -
                    search_titles <<  | 
| 216 | 
            +
                    search_titles << source.datafields("#{f}", ind2: '1').subfields('a').values
         | 
| 210 217 | 
             
                  end
         | 
| 211 | 
            -
                  search_titles <<  | 
| 212 | 
            -
                  search_titles <<  | 
| 213 | 
            -
                  search_titles <<  | 
| 218 | 
            +
                  search_titles << source.datafields('502', ind2: '1').subfields('a').values
         | 
| 219 | 
            +
                  search_titles << source.datafields('504', ind2: '1').subfields('a').values
         | 
| 220 | 
            +
                  search_titles << source.datafields('505', ind2: '1').subfields('a').values
         | 
| 214 221 | 
             
                  (526..534).each do |f|
         | 
| 215 | 
            -
                    search_titles <<  | 
| 222 | 
            +
                    search_titles << source.datafields("#{f}", ind2: '1').subfields('a').values
         | 
| 216 223 | 
             
                  end
         | 
| 217 | 
            -
                  search_titles <<  | 
| 218 | 
            -
                  search_titles <<  | 
| 219 | 
            -
                  search_titles <<  | 
| 224 | 
            +
                  search_titles << source.datafields('621', ind2: '1').subfields('a').values
         | 
| 225 | 
            +
                  search_titles << source.datafields('627', ind2: '1').subfields('a').values
         | 
| 226 | 
            +
                  search_titles << source.datafields('633', ind2: '1').subfields('a').values
         | 
| 220 227 |  | 
| 221 228 | 
             
                  search_titles
         | 
| 222 229 | 
             
                  .flatten
         | 
| @@ -242,26 +249,26 @@ module Mabmapper | |
| 242 249 |  | 
| 243 250 | 
             
                  # Personen
         | 
| 244 251 | 
             
                  (100..196).step(4) do |f|
         | 
| 245 | 
            -
                     | 
| 246 | 
            -
                      creators << ( | 
| 252 | 
            +
                    source.datafields("#{f}", ind1: ['-', 'a'], ind2: ['1', '2']).each do |datafield|
         | 
| 253 | 
            +
                      creators << (datafield.subfields('a').value || datafield.subfields('p').value || datafield.subfields('c').value)
         | 
| 247 254 | 
             
                    end
         | 
| 248 255 | 
             
                  end
         | 
| 249 256 |  | 
| 250 | 
            -
                  creators.map(&:presence).compact.uniq
         | 
| 257 | 
            +
                  creators.map(&:presence).compact.uniq.map { |element| element.gsub(/<<|>>/, '') }
         | 
| 251 258 | 
             
                end
         | 
| 252 259 |  | 
| 253 | 
            -
                def self.corporate_body_from_field( | 
| 254 | 
            -
                  subfield_a =  | 
| 255 | 
            -
                  subfield_b =  | 
| 256 | 
            -
                  subfield_c =  | 
| 257 | 
            -
                  subfield_d =  | 
| 258 | 
            -
                  subfield_e =  | 
| 259 | 
            -
                  subfield_g =  | 
| 260 | 
            -
                  subfield_h =  | 
| 261 | 
            -
                  subfield_k =  | 
| 262 | 
            -
                  subfield_n =  | 
| 263 | 
            -
                  subfield_x =  | 
| 264 | 
            -
                  subfield_z =  | 
| 260 | 
            +
                def self.corporate_body_from_field(datafield)
         | 
| 261 | 
            +
                  subfield_a = datafield.subfields('a').value # Körperschafts-/Kongressname/Geografikum ohne IDN-Verknüpfung (NW)
         | 
| 262 | 
            +
                  subfield_b = datafield.subfields('b').value # Unterordnung
         | 
| 263 | 
            +
                  subfield_c = datafield.subfields('c').value # Ort (NW)
         | 
| 264 | 
            +
                  subfield_d = datafield.subfields('d').value # Datum (NW)
         | 
| 265 | 
            +
                  subfield_e = datafield.subfields('e').value # Kongressname (NW)
         | 
| 266 | 
            +
                  subfield_g = datafield.subfields('g').value # Name des Geografikums (NW)
         | 
| 267 | 
            +
                  subfield_h = datafield.subfields('h').value # Zusatz
         | 
| 268 | 
            +
                  subfield_k = datafield.subfields('k').value # Körperschaftsname (NW)
         | 
| 269 | 
            +
                  subfield_n = datafield.subfields('n').value # Zählung (W)
         | 
| 270 | 
            +
                  subfield_x = datafield.subfields('x').value # nachgeordneter Teil (W)
         | 
| 271 | 
            +
                  subfield_z = datafield.subfields('x').value # geografische Unterteilung (W)
         | 
| 265 272 |  | 
| 266 273 | 
             
                  if !subfield_a && subfield_b && !subfield_c && !subfield_e && !subfield_g && subfield_h && subfield_k && !subfield_x && !subfield_z
         | 
| 267 274 | 
             
                    "#{subfield_k} <#{subfield_h}> / #{subfield_b}"
         | 
| @@ -282,7 +289,7 @@ module Mabmapper | |
| 282 289 |  | 
| 283 290 | 
             
                  # Körpferschaften
         | 
| 284 291 | 
             
                  (200..296).step(4) do |f|
         | 
| 285 | 
            -
                     | 
| 292 | 
            +
                    source.datafields("#{f}", ind1: ['-', 'a'], ind2: ['1', '2']).each do |field|
         | 
| 286 293 | 
             
                      creators << engine.corporate_body_from_field(field)
         | 
| 287 294 | 
             
                    end
         | 
| 288 295 | 
             
                  end
         | 
| @@ -291,8 +298,8 @@ module Mabmapper | |
| 291 298 | 
             
                end
         | 
| 292 299 |  | 
| 293 300 | 
             
                field :author_statement do
         | 
| 294 | 
            -
                  f359_1 =  | 
| 295 | 
            -
                  f359_2 =  | 
| 301 | 
            +
                  f359_1 = source.datafields('359', ind1: :blank, ind2:'1').subfields('a').values.flatten.presence
         | 
| 302 | 
            +
                  f359_2 = source.datafields('359', ind1: :blank, ind2:'2').subfields('a').values.flatten.presence
         | 
| 296 303 | 
             
                  f359_1 || f359_2
         | 
| 297 304 | 
             
                end
         | 
| 298 305 |  | 
| @@ -304,9 +311,9 @@ module Mabmapper | |
| 304 311 |  | 
| 305 312 | 
             
                  # Personen
         | 
| 306 313 | 
             
                  (100..196).step(4) do |f|
         | 
| 307 | 
            -
                     | 
| 308 | 
            -
                      name = ( | 
| 309 | 
            -
                      action_designator =  | 
| 314 | 
            +
                    source.datafields("#{f}", ind1: ['b', 'c', 'e', 'f'], ind2: ['1', '2']).each do |datafield|
         | 
| 315 | 
            +
                      name = (datafield.subfields('a').value || datafield.subfields('p').value || datafield.subfields('c').value)
         | 
| 316 | 
            +
                      action_designator = datafield.subfields('b').value
         | 
| 310 317 | 
             
                      contributors << [name, action_designator].map(&:presence).compact.join(' ')
         | 
| 311 318 | 
             
                    end
         | 
| 312 319 | 
             
                  end
         | 
| @@ -319,7 +326,7 @@ module Mabmapper | |
| 319 326 |  | 
| 320 327 | 
             
                  # Körpferschaften
         | 
| 321 328 | 
             
                  (200..296).step(4) do |f|
         | 
| 322 | 
            -
                     | 
| 329 | 
            +
                    source.datafields("#{f}", ind1: ['b', 'c', 'e', 'f'], ind2: ['1', '2']).each do |field|
         | 
| 323 330 | 
             
                      contributors << engine.corporate_body_from_field(field)
         | 
| 324 331 | 
             
                    end
         | 
| 325 332 | 
             
                  end
         | 
| @@ -332,16 +339,16 @@ module Mabmapper | |
| 332 339 |  | 
| 333 340 | 
             
                  # Personen
         | 
| 334 341 | 
             
                  (100..196).step(4) do |f|
         | 
| 335 | 
            -
                    creators <<  | 
| 342 | 
            +
                    creators << source.datafields("#{f}", ind2: ['1', '2']).map { |_field| _field.subfields(['a','p','n','c','b']).values.presence.try(:join, " ") }
         | 
| 336 343 | 
             
                  end
         | 
| 337 344 |  | 
| 338 345 | 
             
                  # Körperschaften
         | 
| 339 346 | 
             
                  (200..296).step(4) do |f|
         | 
| 340 | 
            -
                    creators <<  | 
| 347 | 
            +
                    creators << source.datafields("#{f}", ind2: ['1', '2']).map { |_field| _field.subfields(['a','k','b','e','n','c','g','h']).values.presence.try(:join, " ") }
         | 
| 341 348 | 
             
                  end
         | 
| 342 349 |  | 
| 343 350 | 
             
                  # Sonderfall: Verfasserangaben aus 359 -> [u.a.]
         | 
| 344 | 
            -
                  t =  | 
| 351 | 
            +
                  t = source.datafields("359", ind2: '1').subfields('a').value
         | 
| 345 352 | 
             
                  creators << '[u.a.]' if t && t.match(/\.\.\.|\[u\.a\.\]/i)
         | 
| 346 353 |  | 
| 347 354 | 
             
                  # Cleanup
         | 
| @@ -371,15 +378,15 @@ module Mabmapper | |
| 371 378 | 
             
                  creators.reject!{|e| e == '[u.a.]'}
         | 
| 372 379 |  | 
| 373 380 | 
             
                  # + Index Felder für Personen
         | 
| 374 | 
            -
                  creators <<  | 
| 381 | 
            +
                  creators << source.datafields('PPE').subfields(['a', 'p']).values
         | 
| 375 382 |  | 
| 376 383 | 
             
                  # + zweiteilige Nebeneintragungen / beigefügte oder enthaltene Werke
         | 
| 377 384 | 
             
                  (800..824).step(6) do |f|
         | 
| 378 | 
            -
                    creators <<  | 
| 385 | 
            +
                    creators << source.datafields("#{f}").subfields(['a','p','c','n','b']).values
         | 
| 379 386 | 
             
                  end
         | 
| 380 387 |  | 
| 381 388 | 
             
                  # + Index Felder für Körperschaften
         | 
| 382 | 
            -
                  creators <<  | 
| 389 | 
            +
                  creators << source.datafields('PKO').subfields(['a','k','b','e','g']).values
         | 
| 383 390 |  | 
| 384 391 | 
             
                  # Füge alle Teile zusammen
         | 
| 385 392 | 
             
                  creators = creators.flatten.compact
         | 
| @@ -393,9 +400,9 @@ module Mabmapper | |
| 393 400 | 
             
                # Edition
         | 
| 394 401 | 
             
                #
         | 
| 395 402 | 
             
                field :edition do
         | 
| 396 | 
            -
                  f403_1 =  | 
| 397 | 
            -
                  f403_2 =  | 
| 398 | 
            -
                  f407_1 =  | 
| 403 | 
            +
                  f403_1 = source.datafields('403', ind2: '1').subfields('a').value
         | 
| 404 | 
            +
                  f403_2 = source.datafields('403', ind2: '2').subfields('a').value
         | 
| 405 | 
            +
                  f407_1 = source.datafields('407', ind2: '1').subfields('a').value
         | 
| 399 406 |  | 
| 400 407 | 
             
                  f403_1.presence || f403_2.presence || f407_1.presence
         | 
| 401 408 | 
             
                end
         | 
| @@ -404,62 +411,83 @@ module Mabmapper | |
| 404 411 | 
             
                # Publisher
         | 
| 405 412 | 
             
                #
         | 
| 406 413 | 
             
                field :publisher do
         | 
| 407 | 
            -
                   | 
| 408 | 
            -
             | 
| 409 | 
            -
                   | 
| 410 | 
            -
                  f415_1 = doc.field('415', ind2: '1').subfield('a').get.value
         | 
| 411 | 
            -
                  f415_2 = doc.field('415', ind2: '2').subfield('a').get.value
         | 
| 414 | 
            +
                  publisher = []
         | 
| 415 | 
            +
             | 
| 416 | 
            +
                  is_rda_record = source.datafields('419').present?
         | 
| 412 417 |  | 
| 413 | 
            -
                   | 
| 414 | 
            -
             | 
| 418 | 
            +
                  if is_rda_record
         | 
| 419 | 
            +
                    source.datafields('419').each do |_veröffentlichungsangabe|
         | 
| 420 | 
            +
                      verlagsorte = _veröffentlichungsangabe.subfields('a').values.first.try(:split, ';').try(:map!, &:strip)
         | 
| 421 | 
            +
                      verlagsname = _veröffentlichungsangabe.subfields('b').value
         | 
| 422 | 
            +
                      erster_verlagsort = verlagsorte.try(:first)
         | 
| 415 423 |  | 
| 416 | 
            -
             | 
| 417 | 
            -
             | 
| 418 | 
            -
             | 
| 419 | 
            -
             | 
| 420 | 
            -
                   | 
| 424 | 
            +
                      if verlagsname.present?
         | 
| 425 | 
            +
                        publisher << [erster_verlagsort, verlagsname].compact.join(" : ")
         | 
| 426 | 
            +
                      end
         | 
| 427 | 
            +
                    end
         | 
| 428 | 
            +
                  else # is rak record
         | 
| 429 | 
            +
                    orte_der_ersten_verleger                  = source.datafields('410', ind2: '1').subfields('a').values.presence
         | 
| 430 | 
            +
                    orte_der_ersten_verleger_der_überordnung  = source.datafields('410', ind2: '2').subfields('a').values.presence
         | 
| 431 | 
            +
                    orte_der_zweiten_verleger                 = source.datafields('415', ind2: '1').subfields('a').values.presence
         | 
| 432 | 
            +
                    orte_der_zweiten_verleger_der_überordnung = source.datafields('415', ind2: '2').subfields('a').values.presence
         | 
| 421 433 |  | 
| 422 | 
            -
             | 
| 423 | 
            -
             | 
| 424 | 
            -
                  # ... weitere Verleger in 418 ohne Ortsangabe ignorieren wir
         | 
| 434 | 
            +
                    orte_der_ersten_verleger  ||= orte_der_ersten_verleger_der_überordnung
         | 
| 435 | 
            +
                    orte_der_zweiten_verleger ||= orte_der_zweiten_verleger_der_überordnung
         | 
| 425 436 |  | 
| 426 | 
            -
             | 
| 427 | 
            -
             | 
| 428 | 
            -
             | 
| 429 | 
            -
             | 
| 437 | 
            +
                    namen_der_ersten_verleger                  = source.datafields('412', ind2: '1').subfields('a').values.presence
         | 
| 438 | 
            +
                    namen_der_ersten_verleger_der_überordnung  = source.datafields('412', ind2: '2').subfields('a').values.presence
         | 
| 439 | 
            +
                    namen_der_zweiten_verleger                 = source.datafields('417', ind2: '1').subfields('a').values.presence
         | 
| 440 | 
            +
                    namen_der_zweiten_verleger_der_überordnung = source.datafields('417', ind2: '2').subfields('a').values.presence
         | 
| 441 | 
            +
             | 
| 442 | 
            +
                    namen_der_ersten_verleger  ||= namen_der_ersten_verleger_der_überordnung
         | 
| 443 | 
            +
                    namen_der_zweiten_verleger ||= namen_der_zweiten_verleger_der_überordnung
         | 
| 444 | 
            +
             | 
| 445 | 
            +
                    # ... weitere Verleger in 418 ohne Ortsangabe ignorieren wir
         | 
| 446 | 
            +
             | 
| 447 | 
            +
                    erste_verleger = namen_der_ersten_verleger
         | 
| 448 | 
            +
                    .try(:map).try(:with_index) do |_name_eines_ersten_verlegers, _index|
         | 
| 449 | 
            +
                      [orte_der_ersten_verleger.try(:[], _index), _name_eines_ersten_verlegers].compact.join(" : ")
         | 
| 450 | 
            +
                    end
         | 
| 451 | 
            +
             | 
| 452 | 
            +
                    zweite_verleger = namen_der_zweiten_verleger
         | 
| 453 | 
            +
                    .try(:map).try(:with_index) do |_name_eines_zweiten_verlegers, _index|
         | 
| 454 | 
            +
                      [orte_der_zweiten_verleger.try(:[], _index), _name_eines_zweiten_verlegers].compact.join(" : ")
         | 
| 455 | 
            +
                    end
         | 
| 456 | 
            +
             | 
| 457 | 
            +
                    publisher.concat(erste_verleger) if erste_verleger.present?
         | 
| 458 | 
            +
                    publisher.concat(zweite_verleger) if zweite_verleger.present?
         | 
| 459 | 
            +
                  end
         | 
| 460 | 
            +
             | 
| 461 | 
            +
                  publisher.map! { |_verleger| _verleger.gsub(/<<|>>/, '') }
         | 
| 430 462 | 
             
                end
         | 
| 431 463 |  | 
| 432 464 | 
             
                #
         | 
| 433 465 | 
             
                # Creation date
         | 
| 434 466 | 
             
                #
         | 
| 435 467 | 
             
                field :creationdate do
         | 
| 436 | 
            -
                   | 
| 437 | 
            -
             | 
| 438 | 
            -
             | 
| 439 | 
            -
             | 
| 440 | 
            -
             | 
| 441 | 
            -
                   | 
| 442 | 
            -
             | 
| 443 | 
            -
                   | 
| 444 | 
            -
             | 
| 445 | 
            -
                   | 
| 446 | 
            -
             | 
| 447 | 
            -
                   | 
| 448 | 
            -
             | 
| 449 | 
            -
             | 
| 450 | 
            -
             | 
| 451 | 
            -
             | 
| 452 | 
            -
             | 
| 453 | 
            -
                       | 
| 454 | 
            -
             | 
| 455 | 
            -
             | 
| 456 | 
            -
                     | 
| 457 | 
            -
                      "– #{f425_c1}"
         | 
| 458 | 
            -
                    else
         | 
| 459 | 
            -
                      f425_a1.presence || f425_p1.presence
         | 
| 460 | 
            -
                    end
         | 
| 468 | 
            +
                  is_superorder = begin
         | 
| 469 | 
            +
                    f051 = source.controlfield('051')
         | 
| 470 | 
            +
                    f052 = source.controlfield('052')
         | 
| 471 | 
            +
             | 
| 472 | 
            +
                    %w(n t).include?(f051.at(0)) || %w(r p).include?(f052.at(0))
         | 
| 473 | 
            +
                  end
         | 
| 474 | 
            +
             | 
| 475 | 
            +
                  erscheinungsjahr_in_ansetzungsform  = source.datafields('425', ind1: 'a', ind2: '1').subfields('a').value
         | 
| 476 | 
            +
                  erscheinungsjahr_des_ersten_bandes  = source.datafields('425', ind1: 'b', ind2: '1').subfields('a').value
         | 
| 477 | 
            +
                  erscheinungsjahr_des_letzten_bandes = source.datafields('425', ind1: 'c', ind2: '1').subfields('a').value
         | 
| 478 | 
            +
                  publikationsdatum_bei_tonträgern    = source.datafields('425', ind1: 'p', ind2: '1').subfields('a').value
         | 
| 479 | 
            +
                  erscheinungsjahr_der_quelle         = source.datafields('595').value
         | 
| 480 | 
            +
             | 
| 481 | 
            +
                  if erscheinungsjahr_der_quelle
         | 
| 482 | 
            +
                    erscheinungsjahr_der_quelle # hat Vorrang vor dem eigentlichen Erscheinungsjahr
         | 
| 483 | 
            +
                  elsif is_superorder && (erscheinungsjahr_des_ersten_bandes || erscheinungsjahr_des_letzten_bandes)
         | 
| 484 | 
            +
                    [
         | 
| 485 | 
            +
                      erscheinungsjahr_des_ersten_bandes,
         | 
| 486 | 
            +
                      erscheinungsjahr_des_letzten_bandes
         | 
| 487 | 
            +
                    ]
         | 
| 488 | 
            +
                    .uniq.join(" - ").strip # returns either "xxxx -", "xxxx - yyyy" or "- yyyy"
         | 
| 461 489 | 
             
                  else
         | 
| 462 | 
            -
                     | 
| 490 | 
            +
                    erscheinungsjahr_in_ansetzungsform || publikationsdatum_bei_tonträgern
         | 
| 463 491 | 
             
                  end
         | 
| 464 492 | 
             
                end
         | 
| 465 493 |  | 
| @@ -474,11 +502,11 @@ module Mabmapper | |
| 474 502 | 
             
                # Format
         | 
| 475 503 | 
             
                #
         | 
| 476 504 | 
             
                field :format do
         | 
| 477 | 
            -
                  f433 =  | 
| 478 | 
            -
                  f434 =  | 
| 479 | 
            -
                  f435 =  | 
| 480 | 
            -
                  f437 =  | 
| 481 | 
            -
                  f653 =  | 
| 505 | 
            +
                  f433 = source.datafields('433', ind2: '1').subfields('a').value
         | 
| 506 | 
            +
                  f434 = source.datafields('434', ind2: '1').subfields('a').values.join(', ')
         | 
| 507 | 
            +
                  f435 = source.datafields('435', ind2: '1').subfields('a').value
         | 
| 508 | 
            +
                  f437 = source.datafields('437', ind2: '1').subfields('a').value
         | 
| 509 | 
            +
                  f653 = source.datafields('653', ind2: '1').subfields('a').values.join(', ')
         | 
| 482 510 |  | 
| 483 511 | 
             
                  format = f433
         | 
| 484 512 | 
             
                  format = merge(format, f434, delimiter: ' : ')
         | 
| @@ -493,16 +521,16 @@ module Mabmapper | |
| 493 521 | 
             
                # Is part of
         | 
| 494 522 | 
             
                #
         | 
| 495 523 | 
             
                field :is_part_of do
         | 
| 496 | 
            -
                  f525   =  | 
| 497 | 
            -
                  f590   =  | 
| 498 | 
            -
                  f591   =  | 
| 499 | 
            -
                  f592   =  | 
| 500 | 
            -
                  f593   =  | 
| 501 | 
            -
                  f594   =  | 
| 502 | 
            -
                  f595   =  | 
| 503 | 
            -
                  f596   =  | 
| 504 | 
            -
                  f597   =  | 
| 505 | 
            -
                  f598   =  | 
| 524 | 
            +
                  f525   = source.datafields('525', ind2: '1').subfields(['p','a']).values.presence.try(:join, ': ')
         | 
| 525 | 
            +
                  f590   = source.datafields('590', ind2: '1').subfields('a').value
         | 
| 526 | 
            +
                  f591   = source.datafields('591', ind2: '1').subfields('a').value
         | 
| 527 | 
            +
                  f592   = source.datafields('592', ind2: '1').subfields('a').value
         | 
| 528 | 
            +
                  f593   = source.datafields('593', ind2: '1').subfields('a').value
         | 
| 529 | 
            +
                  f594   = source.datafields('594', ind2: '1').subfields('a').value
         | 
| 530 | 
            +
                  f595   = source.datafields('595', ind2: '1').subfields('a').value
         | 
| 531 | 
            +
                  f596   = source.datafields('596', ind2: '1').subfields('a').value
         | 
| 532 | 
            +
                  f597   = source.datafields('597', ind2: '1').subfields('a').value
         | 
| 533 | 
            +
                  f598   = source.datafields('598', ind2: '1').subfields('a').value
         | 
| 506 534 |  | 
| 507 535 | 
             
                  #f599_1 = doc.datafield('599', ind1: 'a,b', ind2: '1', subfield: 'a', multiple: true).join(' ') # ISSN
         | 
| 508 536 | 
             
                  #f599_2 = doc.datafield('599', ind1: 'c,d', ind2: '1', subfield: 'a', multiple: true).join(' ') # ISBN
         | 
| @@ -533,9 +561,15 @@ module Mabmapper | |
| 533 561 | 
             
                #
         | 
| 534 562 | 
             
                field :isbn do
         | 
| 535 563 | 
             
                  isbns = []
         | 
| 536 | 
            -
                   | 
| 537 | 
            -
             | 
| 538 | 
            -
                   | 
| 564 | 
            +
                  source.datafields('540', ind2: '1').each do |_datafield|
         | 
| 565 | 
            +
                    isbns << _datafield.subfields('a').values if _datafield.ind1 != "z"
         | 
| 566 | 
            +
                  end
         | 
| 567 | 
            +
             | 
| 568 | 
            +
                  source.datafields('634', ind2: '1').each do |_datafield|
         | 
| 569 | 
            +
                    isbns << _datafield.subfields('a').values if _datafield.ind1 != "z"
         | 
| 570 | 
            +
                  end
         | 
| 571 | 
            +
             | 
| 572 | 
            +
                  isbns << source.datafields('086', ind2: '1').subfields(['b','c','d']).values
         | 
| 539 573 | 
             
                  isbns.flatten.map{|v| v.gsub(/[^0-9\-x]/i, '').strip if v.present?}.map(&:presence).compact.uniq
         | 
| 540 574 | 
             
                end
         | 
| 541 575 |  | 
| @@ -544,9 +578,15 @@ module Mabmapper | |
| 544 578 | 
             
                #
         | 
| 545 579 | 
             
                field :issn do
         | 
| 546 580 | 
             
                  issns = []
         | 
| 547 | 
            -
                   | 
| 548 | 
            -
             | 
| 549 | 
            -
                   | 
| 581 | 
            +
                  source.datafields('542', ind2: '1').each do |_datafield|
         | 
| 582 | 
            +
                    issns << _datafield.subfields('a').values if _datafield.ind1 != "z"
         | 
| 583 | 
            +
                  end
         | 
| 584 | 
            +
             | 
| 585 | 
            +
                  source.datafields('635', ind2: '1').each do |_datafield|
         | 
| 586 | 
            +
                    issns << _datafield.subfields('a').values if _datafield.ind1 != "z"
         | 
| 587 | 
            +
                  end
         | 
| 588 | 
            +
             | 
| 589 | 
            +
                  issns << source.datafields('545', ind2: '1').subfields(['a','b','c','d']).values
         | 
| 550 590 | 
             
                  issns.flatten.map{|v| v.gsub(/[^0-9\-x]/i, '').strip if v.present?}.map(&:presence).compact.uniq
         | 
| 551 591 | 
             
                end
         | 
| 552 592 |  | 
| @@ -555,7 +595,7 @@ module Mabmapper | |
| 555 595 | 
             
                #
         | 
| 556 596 | 
             
                field :zdb_id do
         | 
| 557 597 | 
             
                  zdb_ids = []
         | 
| 558 | 
            -
                  zdb_ids <<  | 
| 598 | 
            +
                  zdb_ids << source.datafields('025', ind1: 'z',  ind2: '1').subfields('a').values
         | 
| 559 599 | 
             
                  zdb_ids.flatten.map(&:presence).compact.uniq
         | 
| 560 600 | 
             
                end
         | 
| 561 601 |  | 
| @@ -565,11 +605,11 @@ module Mabmapper | |
| 565 605 | 
             
                field :subject do
         | 
| 566 606 | 
             
                  subjects = []
         | 
| 567 607 |  | 
| 568 | 
            -
                  subjects <<  | 
| 608 | 
            +
                  subjects << source.datafields('902').subfields(['a','p','k','s','g','e','t']).values
         | 
| 569 609 |  | 
| 570 610 | 
             
                  # Beispiel aus 740: New York (N.Y.)--Social life and customs--20th century--Fiction.
         | 
| 571 611 | 
             
                  %w(710 711 740).each do |f|
         | 
| 572 | 
            -
                    t =  | 
| 612 | 
            +
                    t = source.datafields(f).subfields('a').values
         | 
| 573 613 | 
             
                    t = t.flatten.map(&:presence).compact
         | 
| 574 614 | 
             
                    t = t.map{|a| a.split('--')}.flatten.map{|s| s.end_with?('.') ? s[0..-2].strip : s}.map(&:presence).compact.uniq
         | 
| 575 615 | 
             
                    subjects = subjects + t
         | 
| @@ -585,7 +625,7 @@ module Mabmapper | |
| 585 625 | 
             
                  subjects << ref(:subject)
         | 
| 586 626 |  | 
| 587 627 | 
             
                  # + Index Felder für weitere Schlagworte
         | 
| 588 | 
            -
                  subjects <<  | 
| 628 | 
            +
                  subjects << source.datafields('PSW').subfields(['a','k','e','g','s','p','t','f','z']).values
         | 
| 589 629 |  | 
| 590 630 | 
             
                  subjects.flatten.map(&:presence).compact.map{|f| f.delete('<').delete('>')}.uniq
         | 
| 591 631 | 
             
                end
         | 
| @@ -595,8 +635,8 @@ module Mabmapper | |
| 595 635 | 
             
                #
         | 
| 596 636 | 
             
                field :ddc do
         | 
| 597 637 | 
             
                  ddc_fields = []
         | 
| 598 | 
            -
                  ddc_fields <<  | 
| 599 | 
            -
                  ddc_fields <<  | 
| 638 | 
            +
                  ddc_fields << source.datafields('700', ind1: 'b', ind2: '1').subfields('a').values
         | 
| 639 | 
            +
                  ddc_fields << source.datafields('705', ind1: :blank, ind2: '1').subfields('a').values
         | 
| 600 640 |  | 
| 601 641 | 
             
                  ddc_fields.flatten.map(&:presence).compact.uniq
         | 
| 602 642 | 
             
                end
         | 
| @@ -607,9 +647,9 @@ module Mabmapper | |
| 607 647 | 
             
                field :abstract do
         | 
| 608 648 | 
             
                  abstracts = []
         | 
| 609 649 |  | 
| 610 | 
            -
                  abstracts <<  | 
| 611 | 
            -
                  abstracts <<  | 
| 612 | 
            -
                  abstracts <<  | 
| 650 | 
            +
                  abstracts << source.datafields('750').subfields('a').value
         | 
| 651 | 
            +
                  abstracts << source.datafields('753').subfields('a').value
         | 
| 652 | 
            +
                  abstracts << source.datafields('756').subfields('a').value
         | 
| 613 653 |  | 
| 614 654 | 
             
                  abstracts.map(&:presence).compact
         | 
| 615 655 | 
             
                end
         | 
| @@ -619,7 +659,7 @@ module Mabmapper | |
| 619 659 | 
             
                #
         | 
| 620 660 | 
             
                field :language do
         | 
| 621 661 | 
             
                  languages = []
         | 
| 622 | 
            -
                  languages <<  | 
| 662 | 
            +
                  languages << source.datafields('037', ind1: 'b', ind2: ['1','2']).subfields('a').values
         | 
| 623 663 | 
             
                  languages.flatten.map(&:presence).compact.uniq
         | 
| 624 664 | 
             
                end
         | 
| 625 665 |  | 
| @@ -629,14 +669,14 @@ module Mabmapper | |
| 629 669 | 
             
                field :relation do
         | 
| 630 670 | 
             
                  relations = []
         | 
| 631 671 |  | 
| 632 | 
            -
                  if (f021a =  | 
| 672 | 
            +
                  if (f021a = source.datafields('021').subfields('a').value).present?
         | 
| 633 673 | 
             
                    relations << {
         | 
| 634 674 | 
             
                      ht_number: f021a,
         | 
| 635 675 | 
             
                      label: 'Primärform'
         | 
| 636 676 | 
             
                    }
         | 
| 637 677 | 
             
                  end
         | 
| 638 678 |  | 
| 639 | 
            -
                  if (f022a =  | 
| 679 | 
            +
                  if (f022a = source.datafields('022').subfields('a').value).present?
         | 
| 640 680 | 
             
                    relations << {
         | 
| 641 681 | 
             
                      ht_number: f022a,
         | 
| 642 682 | 
             
                      label: 'Sekundärform'
         | 
| @@ -644,11 +684,11 @@ module Mabmapper | |
| 644 684 | 
             
                  end
         | 
| 645 685 |  | 
| 646 686 | 
             
                  (526..534).each do |mab_field_number|
         | 
| 647 | 
            -
                     | 
| 648 | 
            -
                      ht_number =  | 
| 687 | 
            +
                    source.datafields("#{mab_field_number}", ind2: '1').each do |datafield|
         | 
| 688 | 
            +
                      ht_number = datafield.subfields('9').value
         | 
| 649 689 | 
             
                      label = [
         | 
| 650 | 
            -
                         | 
| 651 | 
            -
                         | 
| 690 | 
            +
                        datafield.subfields('p').value,
         | 
| 691 | 
            +
                        datafield.subfields('a').value.try(:gsub, /<<|>>/, '')
         | 
| 652 692 | 
             
                      ].compact.join(' ')
         | 
| 653 693 |  | 
| 654 694 | 
             
                      relations << {ht_number: ht_number, label: label} if label
         | 
| @@ -666,23 +706,24 @@ module Mabmapper | |
| 666 706 |  | 
| 667 707 | 
             
                  # Link zur Überordung eines mehrbändigen Werkes
         | 
| 668 708 | 
             
                  superorders << {
         | 
| 669 | 
            -
                    ht_number:  | 
| 670 | 
            -
                    label:  | 
| 671 | 
            -
                    volume_count:  | 
| 709 | 
            +
                    ht_number: source.datafields('010', ind2: '1').subfields('a').value,
         | 
| 710 | 
            +
                    label: source.datafields('331', ind2: '2').subfields('a').value,
         | 
| 711 | 
            +
                    volume_count: source.datafields('089', ind2: '1').subfields('a').values.presence.try(:join, " ") # Bandzählung dieses Werkes innerhalb der entsprechenden Überordnung
         | 
| 672 712 | 
             
                  }
         | 
| 673 713 |  | 
| 674 714 | 
             
                  # 451 ff
         | 
| 675 715 | 
             
                  (451..491).step(10) do |f|
         | 
| 676 716 | 
             
                    superorders << {
         | 
| 677 | 
            -
                      ht_number:  | 
| 678 | 
            -
                      label: [ | 
| 679 | 
            -
                      volume_count:  | 
| 717 | 
            +
                      ht_number: source.datafields("#{f+2}", ind2: '1').subfields('a').value,
         | 
| 718 | 
            +
                      label: [source.datafields("#{f}", ind2: '1').subfields('a').value, source.datafields("#{f}", ind2: '2').subfields('a').value].compact.reject { |label| label[/\A\.\.\.\s+(;|:)/] }.first,
         | 
| 719 | 
            +
                      volume_count: source.datafields("#{f+4}", ind2: '1').subfields('a').value
         | 
| 680 720 | 
             
                    }
         | 
| 681 721 | 
             
                  end
         | 
| 682 722 |  | 
| 683 723 | 
             
                  superorders
         | 
| 684 724 | 
             
                  .map(&:presence)
         | 
| 685 725 | 
             
                  .delete_if { |element| element[:label].blank? }
         | 
| 726 | 
            +
                  .deep_dup # to be able tu use .gsub!
         | 
| 686 727 | 
             
                  .each do |element|
         | 
| 687 728 | 
             
                    # remove 'not sort' indicators from label
         | 
| 688 729 | 
             
                    element[:label].try(:gsub!, /<<|>>/, '')
         | 
| @@ -726,8 +767,8 @@ module Mabmapper | |
| 726 767 | 
             
                field :superorder do
         | 
| 727 768 | 
             
                  superorders = []
         | 
| 728 769 |  | 
| 729 | 
            -
                  f623 =  | 
| 730 | 
            -
                  f629 =  | 
| 770 | 
            +
                  f623 = source.datafields('623').value # Identifikationsnummer des 1. GT der Sekundärform
         | 
| 771 | 
            +
                  f629 = source.datafields('629').value # Identifikationsnummer des 2. GT der Sekundärform
         | 
| 731 772 |  | 
| 732 773 | 
             
                  superorders << if (json_encoded_superorders_display = ref(:superorder_display)).present?
         | 
| 733 774 | 
             
                    superorders_display = json_encoded_superorders_display.map { |json_encoded_superorder_display| JSON.parse(json_encoded_superorder_display) }
         | 
| @@ -744,8 +785,8 @@ module Mabmapper | |
| 744 785 | 
             
                # Sind wir eine Überordnung?
         | 
| 745 786 | 
             
                #
         | 
| 746 787 | 
             
                field :is_superorder do
         | 
| 747 | 
            -
                  f051  =  | 
| 748 | 
            -
                  f052  =  | 
| 788 | 
            +
                  f051  = source.controlfield('051')
         | 
| 789 | 
            +
                  f052  = source.controlfield('052')
         | 
| 749 790 |  | 
| 750 791 | 
             
                  f051.at(0) == 'n' || f051.at(0) == 't' || f052.at(0) == 'p' || f052.at(0) == 'r' || f052.at(0) == 'z'
         | 
| 751 792 | 
             
                end
         | 
| @@ -761,10 +802,10 @@ module Mabmapper | |
| 761 802 | 
             
                # Erscheinungsform
         | 
| 762 803 | 
             
                #
         | 
| 763 804 | 
             
                field :erscheinungsform do
         | 
| 764 | 
            -
                  f051  =  | 
| 765 | 
            -
                  f052  =  | 
| 766 | 
            -
                  f051s = f051.join.slice(1..3) || ""
         | 
| 767 | 
            -
                  f052s = f052.join.slice(1..6) || ""
         | 
| 805 | 
            +
                  f051  = source.controlfield('051')
         | 
| 806 | 
            +
                  f052  = source.controlfield('052')
         | 
| 807 | 
            +
                  f051s = f051.values.join.slice(1..3) || ""
         | 
| 808 | 
            +
                  f052s = f052.values.join.slice(1..6) || ""
         | 
| 768 809 |  | 
| 769 810 | 
             
                  type = case
         | 
| 770 811 | 
             
                  when (f051.at(0) == 'a') then 'article'
         | 
| @@ -802,20 +843,20 @@ module Mabmapper | |
| 802 843 | 
             
                  descriptions = []
         | 
| 803 844 |  | 
| 804 845 | 
             
                  # 405 - Erscheinungsverlauf von Zeitschriften
         | 
| 805 | 
            -
                  descriptions <<  | 
| 846 | 
            +
                  descriptions << source.datafields('405', ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
         | 
| 806 847 |  | 
| 807 848 | 
             
                  # 522 - Teilungsvermerk bei fortlaufenden Sammelwerken
         | 
| 808 | 
            -
                  descriptions <<  | 
| 849 | 
            +
                  descriptions << source.datafields('522', ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
         | 
| 809 850 |  | 
| 810 851 | 
             
                  # 523 - Erscheinungsverlauf von Monos
         | 
| 811 | 
            -
                  descriptions <<  | 
| 852 | 
            +
                  descriptions << source.datafields('523', ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
         | 
| 812 853 |  | 
| 813 854 | 
             
                  (501..519).each do |f|
         | 
| 814 | 
            -
                    descriptions <<  | 
| 855 | 
            +
                    descriptions << source.datafields("#{f}", ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') }
         | 
| 815 856 | 
             
                  end
         | 
| 816 857 |  | 
| 817 858 | 
             
                  (536..537).each do |f|
         | 
| 818 | 
            -
                    descriptions <<  | 
| 859 | 
            +
                    descriptions << source.datafields("#{f}", ind2: '1').map { |_field| _field.subfields(['p', 'a']).values.join(': ') } unless f == 537 && ref(:erscheinungsform) == "journal"
         | 
| 819 860 | 
             
                  end
         | 
| 820 861 |  | 
| 821 862 | 
             
                  # Finally...
         | 
| @@ -840,16 +881,16 @@ module Mabmapper | |
| 840 881 |  | 
| 841 882 | 
             
                field :volume_count_sort do
         | 
| 842 883 | 
             
                  possible_values = []
         | 
| 843 | 
            -
                  possible_values <<  | 
| 844 | 
            -
                  (451..491).step(10) { |f| possible_values <<  | 
| 884 | 
            +
                  possible_values << source.datafields('090', ind2: '1').subfields('a').value
         | 
| 885 | 
            +
                  (451..491).step(10) { |f| possible_values << source.datafields("#{f+5}", ind2: '1').subfields('a').value }
         | 
| 845 886 | 
             
                  count = possible_values.map(&:presence).compact.uniq.first
         | 
| 846 887 | 
             
                  count.rjust(15, '0') if count.present?
         | 
| 847 888 | 
             
                end
         | 
| 848 889 |  | 
| 849 890 | 
             
                field :volume_count_sort2 do
         | 
| 850 891 | 
             
                  possible_values = []
         | 
| 851 | 
            -
                  possible_values <<  | 
| 852 | 
            -
                  (451..491).step(10) { |f| possible_values <<  | 
| 892 | 
            +
                  possible_values << source.datafields('090', ind2: '1').subfields('a').value
         | 
| 893 | 
            +
                  (451..491).step(10) { |f| possible_values << source.datafields("#{f+5}", ind2: '1').subfields('a').value }
         | 
| 853 894 | 
             
                  count = possible_values.map(&:presence).compact.uniq.first
         | 
| 854 895 |  | 
| 855 896 | 
             
                  if count.present?
         | 
| @@ -876,7 +917,7 @@ module Mabmapper | |
| 876 917 | 
             
                # Notation
         | 
| 877 918 | 
             
                #
         | 
| 878 919 | 
             
                field :notation do
         | 
| 879 | 
            -
                   | 
| 920 | 
            +
                  source.datafields('700', ind2: ' ').subfields('a').values
         | 
| 880 921 | 
             
                end
         | 
| 881 922 |  | 
| 882 923 | 
             
                field :notation_sort do
         | 
| @@ -887,7 +928,7 @@ module Mabmapper | |
| 887 928 | 
             
                # Table of contents
         | 
| 888 929 | 
             
                #
         | 
| 889 930 | 
             
                field :toc do
         | 
| 890 | 
            -
                   | 
| 931 | 
            +
                  source.datafields('TXT').subfields('a').values.join(' ')
         | 
| 891 932 | 
             
                end
         | 
| 892 933 |  | 
| 893 934 | 
             
                #
         | 
| @@ -897,11 +938,11 @@ module Mabmapper | |
| 897 938 | 
             
                  signatures = []
         | 
| 898 939 |  | 
| 899 940 | 
             
                  # Lade LOC Felder für Signaturen-Extraktion
         | 
| 900 | 
            -
                  fields =  | 
| 941 | 
            +
                  fields = source.datafields('LOC')
         | 
| 901 942 | 
             
                  # Lösche alle Felder die kein Unterfeld d haben (ausgesondert)
         | 
| 902 | 
            -
                  fields = fields.reject{|f| f.subfields.find{|sf| sf. | 
| 943 | 
            +
                  fields = fields.reject{|f| f.subfields.find{|sf| sf.code == "d"}.blank?}
         | 
| 903 944 | 
             
                  # Prüfe ob alle Exemplare im Magazin stehen
         | 
| 904 | 
            -
                  all_stack = fields.map{|f| f.subfields.find {|sf| sf. | 
| 945 | 
            +
                  all_stack = fields.map{|f| f.subfields.find {|sf| sf.code == 'b' && sf.value.match(/02|03|04|07/)}.present?}.all?
         | 
| 905 946 |  | 
| 906 947 | 
             
                  # Zeitschriftensignatur (haben Vorrgang, falls vorhanden)
         | 
| 907 948 | 
             
                  #
         | 
| @@ -909,16 +950,16 @@ module Mabmapper | |
| 909 950 | 
             
                  # Darüber hinaus kann dieses Feld mehrfach vorkommen. Wir nehmen an, dass Subfeld 0 eine Art Zählung angibt, weshalb dort
         | 
| 910 951 | 
             
                  # ein Wert von '1' zu bevorzugen ist.
         | 
| 911 952 | 
             
                  #
         | 
| 912 | 
            -
                  signatures <<  | 
| 913 | 
            -
                  .select { |f| f. | 
| 914 | 
            -
                  .select { |f| (value = f. | 
| 915 | 
            -
                  .map    { |f| f. | 
| 953 | 
            +
                  signatures << source.datafields('200', ind1: ' ', ind2: ' ')
         | 
| 954 | 
            +
                  .select { |f| f.subfields('f').present?                  }
         | 
| 955 | 
            +
                  .select { |f| (value = f.subfields('0').value) == '1' || value.nil? }
         | 
| 956 | 
            +
                  .map    { |f| f.subfields('f').value.try(:gsub, ' ', '') }
         | 
| 916 957 | 
             
                  .first.presence
         | 
| 917 958 |  | 
| 918 959 | 
             
                  # Wenn alle Exemplare im Magzin stehen, dann nimm nur die erste signatur
         | 
| 919 960 | 
             
                  if all_stack
         | 
| 920 961 | 
             
                    fields.each do |field|
         | 
| 921 | 
            -
                      subfield = field.subfields.find{|f| f. | 
| 962 | 
            +
                      subfield = field.subfields.find{|f| f.code == "d"}
         | 
| 922 963 | 
             
                      if subfield.present? && subfield.value.present?
         | 
| 923 964 | 
             
                        signatures << subfield.value
         | 
| 924 965 | 
             
                        break
         | 
| @@ -927,14 +968,14 @@ module Mabmapper | |
| 927 968 | 
             
                  # ansonsten extrahiere aus den normalen Signaturen eine Basis-Signatur
         | 
| 928 969 | 
             
                  else
         | 
| 929 970 | 
             
                    # Lösche alle Felder die als Standordkennziffer eine Magazinkennung haben
         | 
| 930 | 
            -
                    fields = fields.reject{|f| f.subfields.find{|sf| sf. | 
| 971 | 
            +
                    fields = fields.reject{|f| f.subfields.find{|sf| sf.code == 'b' && sf.value.match(/02|03|04|07/)}.present?}
         | 
| 931 972 |  | 
| 932 973 | 
             
                    # Sortiere die restlichen Felder nach Unterfeld 5 (Strichcode)
         | 
| 933 974 | 
             
                    fields = fields.sort do |x, y|
         | 
| 934 | 
            -
                     x5 = x.subfields.find{|f| f. | 
| 935 | 
            -
                     y5 = y.subfields.find{|f| f. | 
| 975 | 
            +
                     x5 = x.subfields.find{|f| f.code == "5"}
         | 
| 976 | 
            +
                     y5 = y.subfields.find{|f| f.code == "5"}
         | 
| 936 977 | 
             
                     if x5 && y5
         | 
| 937 | 
            -
                       x5.value <=>  | 
| 978 | 
            +
                       x5.value <=> y5.value
         | 
| 938 979 | 
             
                     else
         | 
| 939 980 | 
             
                       0
         | 
| 940 981 | 
             
                     end
         | 
| @@ -942,7 +983,7 @@ module Mabmapper | |
| 942 983 |  | 
| 943 984 | 
             
                    # Extrahiere die Signaturen aus Unterfeld d und erzeuge eine Basis-Signatur
         | 
| 944 985 | 
             
                    fields.each do |field|
         | 
| 945 | 
            -
                      subfield = field.subfields.find{|f| f. | 
| 986 | 
            +
                      subfield = field.subfields.find{|f| f.code == "d"}
         | 
| 946 987 | 
             
                      if subfield.present? && subfield.value.present?
         | 
| 947 988 | 
             
                        signature      = subfield.value
         | 
| 948 989 | 
             
                        index          = signature.index('+') || signature.length
         | 
| @@ -953,7 +994,7 @@ module Mabmapper | |
| 953 994 | 
             
                  end
         | 
| 954 995 |  | 
| 955 996 | 
             
                  # Stücktitel Signatur
         | 
| 956 | 
            -
                  signatures <<  | 
| 997 | 
            +
                  signatures << source.datafields('100', ind2: ' ').subfields('a').value
         | 
| 957 998 |  | 
| 958 999 | 
             
                  # Some additional love for journal signatures
         | 
| 959 1000 | 
             
                  signatures.map! do |signature|
         | 
| @@ -961,9 +1002,9 @@ module Mabmapper | |
| 961 1002 | 
             
                    if signature.try(:[], /\d+[A-Za-z]\d+$/).present?
         | 
| 962 1003 | 
             
                      # unless there is a leading standortkennziffer
         | 
| 963 1004 | 
             
                      unless signature.starts_with?('P')
         | 
| 964 | 
            -
                        standort_kennziffer = if (loc_standort_kennziffer =  | 
| 1005 | 
            +
                        standort_kennziffer = if (loc_standort_kennziffer = source.datafields('LOC').subfields('b').value).present?
         | 
| 965 1006 | 
             
                          loc_standort_kennziffer
         | 
| 966 | 
            -
                        elsif (f105a =  | 
| 1007 | 
            +
                        elsif (f105a = source.datafields('105').subfields('a').value).present?
         | 
| 967 1008 | 
             
                          f105a
         | 
| 968 1009 | 
             
                        end
         | 
| 969 1010 |  | 
| @@ -982,11 +1023,11 @@ module Mabmapper | |
| 982 1023 |  | 
| 983 1024 | 
             
                field :signature_search do
         | 
| 984 1025 | 
             
                  signatures = []
         | 
| 985 | 
            -
                  signatures = signatures +  | 
| 1026 | 
            +
                  signatures = signatures + source.datafields('LOC').subfields('d').values
         | 
| 986 1027 | 
             
                  # Stücktitel Signatur
         | 
| 987 | 
            -
                  signatures <<  | 
| 1028 | 
            +
                  signatures << source.datafields('100', ind2: ' ').subfields('a').value
         | 
| 988 1029 | 
             
                  # Zeitschriftensignatur
         | 
| 989 | 
            -
                  signatures <<  | 
| 1030 | 
            +
                  signatures << source.datafields('200', ind1: ' ', ind2: ' ').subfields('f').values
         | 
| 990 1031 |  | 
| 991 1032 | 
             
                  signatures = signatures.flatten.map(&:presence).compact
         | 
| 992 1033 | 
             
                  .map do |signature|
         | 
| @@ -1006,9 +1047,9 @@ module Mabmapper | |
| 1006 1047 | 
             
                  if (journal_signature = signatures.select { |signature| signature.try(:[], /\d+[A-Za-z]\d+$/).present? }.first).present?
         | 
| 1007 1048 | 
             
                    if signatures.none? { |signature| signature.starts_with? 'P' }
         | 
| 1008 1049 | 
             
                      # TODO: code duplication with :signature
         | 
| 1009 | 
            -
                      standort_kennziffer = if (loc_standort_kennziffer =  | 
| 1050 | 
            +
                      standort_kennziffer = if (loc_standort_kennziffer = source.datafields('LOC').subfields('b').value).present?
         | 
| 1010 1051 | 
             
                        loc_standort_kennziffer
         | 
| 1011 | 
            -
                      elsif (f105a =  | 
| 1052 | 
            +
                      elsif (f105a = source.datafields('105').subfields('a').value).present?
         | 
| 1012 1053 | 
             
                        f105a
         | 
| 1013 1054 | 
             
                      end
         | 
| 1014 1055 |  | 
| @@ -1037,12 +1078,11 @@ module Mabmapper | |
| 1037 1078 | 
             
                field :resource_link do
         | 
| 1038 1079 | 
             
                  fulltext_links = []
         | 
| 1039 1080 |  | 
| 1040 | 
            -
                   | 
| 1041 | 
            -
             | 
| 1042 | 
            -
                     | 
| 1043 | 
            -
                     | 
| 1044 | 
            -
                     | 
| 1045 | 
            -
                    subfield_t = link.get_subfield('t') # Type: VIEW => Adam Inhaltsverzeichnis
         | 
| 1081 | 
            +
                  source.datafields('655').each do |datafield|
         | 
| 1082 | 
            +
                    url        = datafield.subfields('u').value
         | 
| 1083 | 
            +
                    subfield_3 = datafield.subfields('3') # HBZ Inhaltsverzeichnisse
         | 
| 1084 | 
            +
                    subfield_z = datafield.subfields('z') # BVB Inhaltsverzeichnisse
         | 
| 1085 | 
            +
                    subfield_t = datafield.subfields('t') # Type: VIEW => Adam Inhaltsverzeichnis
         | 
| 1046 1086 |  | 
| 1047 1087 | 
             
                    unless (url.present? && subfield_3.present? && subfield_3.value =~ /^inhalt/i) ||
         | 
| 1048 1088 | 
             
                           (url.present? && subfield_z.present? && subfield_z.value =~ /^inhalt/i) ||
         | 
| @@ -1060,12 +1100,11 @@ module Mabmapper | |
| 1060 1100 | 
             
                field :link_to_toc do
         | 
| 1061 1101 | 
             
                  toc_links = []
         | 
| 1062 1102 |  | 
| 1063 | 
            -
                   | 
| 1064 | 
            -
             | 
| 1065 | 
            -
                     | 
| 1066 | 
            -
                     | 
| 1067 | 
            -
                     | 
| 1068 | 
            -
                    subfield_t = link.get_subfield('t') # Type: VIEW => Adam Inhaltsverzeichnis
         | 
| 1103 | 
            +
                  source.datafields('655').each do |datafield|
         | 
| 1104 | 
            +
                    url        = datafield.subfields('u').value
         | 
| 1105 | 
            +
                    subfield_3 = datafield.subfields('3') # HBZ Inhaltsverzeichnisse
         | 
| 1106 | 
            +
                    subfield_z = datafield.subfields('z') # BVB Inhaltsverzeichnisse
         | 
| 1107 | 
            +
                    subfield_t = datafield.subfields('t') # Type: VIEW => Adam Inhaltsverzeichnis
         | 
| 1069 1108 |  | 
| 1070 1109 | 
             
                    if (url.present? && subfield_3.present? && subfield_3.value =~ /^inhaltsv/i) ||
         | 
| 1071 1110 | 
             
                       (url.present? && subfield_z.present? && subfield_z.value =~ /^inhaltsv/i) ||
         | 
| @@ -1082,7 +1121,7 @@ module Mabmapper | |
| 1082 1121 | 
             
                #
         | 
| 1083 1122 | 
             
                field :selection_code do
         | 
| 1084 1123 | 
             
                  codes = []
         | 
| 1085 | 
            -
                  codes <<  | 
| 1124 | 
            +
                  codes << source.datafields('078', ind1: ['e', 'r']).subfields('a').values
         | 
| 1086 1125 |  | 
| 1087 1126 | 
             
                  codes.flatten.map(&:presence).compact.uniq
         | 
| 1088 1127 | 
             
                end
         | 
| @@ -1101,21 +1140,20 @@ module Mabmapper | |
| 1101 1140 | 
             
                  #   f - Signatur
         | 
| 1102 1141 | 
             
                  r = []
         | 
| 1103 1142 |  | 
| 1104 | 
            -
                   | 
| 1105 | 
            -
             | 
| 1106 | 
            -
                     | 
| 1107 | 
            -
                     | 
| 1108 | 
            -
                     | 
| 1109 | 
            -
                     | 
| 1110 | 
            -
                     | 
| 1111 | 
            -
                    field_f = field.get_subfield('f')
         | 
| 1143 | 
            +
                  source.datafields('200', ind2: ' ').each do |field|
         | 
| 1144 | 
            +
                    field_0 = field.subfields('0')
         | 
| 1145 | 
            +
                    field_a = field.subfields('a')
         | 
| 1146 | 
            +
                    field_b = field.subfields('b')
         | 
| 1147 | 
            +
                    field_c = field.subfields('c')
         | 
| 1148 | 
            +
                    field_e = field.subfields('e')
         | 
| 1149 | 
            +
                    field_f = field.subfields('f')
         | 
| 1112 1150 |  | 
| 1113 1151 | 
             
                    s = ""
         | 
| 1114 | 
            -
                    s = merge(s, field_a. | 
| 1115 | 
            -
                    s = merge(s, field_b. | 
| 1116 | 
            -
                    s = merge(s, field_c. | 
| 1117 | 
            -
                    s = merge(s, field_e. | 
| 1118 | 
            -
                    s = merge(s, field_f. | 
| 1152 | 
            +
                    s = merge(s, field_a.value, delimiter: ' ')
         | 
| 1153 | 
            +
                    s = merge(s, field_b.value, delimiter: ': ')
         | 
| 1154 | 
            +
                    s = merge(s, field_c.value, delimiter: ' ')
         | 
| 1155 | 
            +
                    s = merge(s, field_e.value, delimiter: '. ')
         | 
| 1156 | 
            +
                    s = merge(s, field_f.value, delimiter: ' <strong>Zeitschriftensignatur</strong>: ')
         | 
| 1119 1157 |  | 
| 1120 1158 | 
             
                    # Cleanup
         | 
| 1121 1159 | 
             
                    s = s.gsub(/^\- /, '') # Z.b. "- Index: Foo Bar"
         | 
| @@ -1142,11 +1180,11 @@ module Mabmapper | |
| 1142 1180 | 
             
                #
         | 
| 1143 1181 | 
             
                field :frbr_t do
         | 
| 1144 1182 | 
             
                  value = 1
         | 
| 1145 | 
            -
                  f052  =  | 
| 1146 | 
            -
                  ffmt  =  | 
| 1147 | 
            -
                  f100  =  | 
| 1148 | 
            -
                  f200  =  | 
| 1149 | 
            -
                  f300  =  | 
| 1183 | 
            +
                  f052  = source.controlfield('052')
         | 
| 1184 | 
            +
                  ffmt  = source.controlfield('FMT')
         | 
| 1185 | 
            +
                  f100  = source.datafields('100').subfields(['a','p']).value
         | 
| 1186 | 
            +
                  f200  = source.datafields('200').subfields(['a','k','g','e']).value
         | 
| 1187 | 
            +
                  f300  = source.datafields('300', ind2: '2').subfields('a').value
         | 
| 1150 1188 |  | 
| 1151 1189 | 
             
                  if (f052.present? and ['p','z','r','j'].include?(f052.at(0)))
         | 
| 1152 1190 | 
             
                    value = 99
         | 
| @@ -1164,11 +1202,11 @@ module Mabmapper | |
| 1164 1202 | 
             
                #
         | 
| 1165 1203 | 
             
                field :frbr_k1 do
         | 
| 1166 1204 | 
             
                  value  = nil
         | 
| 1167 | 
            -
                  ffmt   =  | 
| 1168 | 
            -
                  f052   =  | 
| 1169 | 
            -
                  f334   =  | 
| 1170 | 
            -
                  f100_1 = doc.naco_normalization( | 
| 1171 | 
            -
                  f100_2 = doc.naco_normalization( | 
| 1205 | 
            +
                  ffmt   = source.controlfield('FMT')
         | 
| 1206 | 
            +
                  f052   = source.controlfield('052')
         | 
| 1207 | 
            +
                  f334   = source.datafields('334', ind2: '1').subfields('a').value.try(:downcase)
         | 
| 1208 | 
            +
                  f100_1 = doc.naco_normalization(source.datafields('100', ind1: '-', ind2: '1').subfields(['a','p']).value).presence
         | 
| 1209 | 
            +
                  f100_2 = doc.naco_normalization(source.datafields('100', ind1: 'b', ind2: '1').subfields(['a','p']).value).presence
         | 
| 1172 1210 |  | 
| 1173 1211 | 
             
                  if (f100_1.present?)
         | 
| 1174 1212 | 
             
                    value = "$$Kpad#{f100_1}$$AA"
         | 
| @@ -1184,54 +1222,57 @@ module Mabmapper | |
| 1184 1222 | 
             
                end
         | 
| 1185 1223 |  | 
| 1186 1224 | 
             
                field :redactional_remark do
         | 
| 1187 | 
            -
                   | 
| 1225 | 
            +
                  source.datafields("537", ind2: '1').map do |_datafield|
         | 
| 1226 | 
            +
                    _datafield.subfields(['a', 'p']).values.join(': ')
         | 
| 1227 | 
            +
                  end
         | 
| 1228 | 
            +
                  .presence.try(:join)
         | 
| 1188 1229 | 
             
                end
         | 
| 1189 1230 |  | 
| 1190 1231 | 
             
                #
         | 
| 1191 1232 | 
             
                # Sekundärformen
         | 
| 1192 1233 | 
             
                #
         | 
| 1193 1234 | 
             
                field :is_secondary_form do
         | 
| 1194 | 
            -
                  ( | 
| 1235 | 
            +
                  (source.datafields('610').value || source.datafields('611').value || source.datafields('619').value || source.datafields('621').value) != nil
         | 
| 1195 1236 | 
             
                end
         | 
| 1196 1237 |  | 
| 1197 1238 | 
             
                field :secondary_form_preliminary_phrase do
         | 
| 1198 | 
            -
                   | 
| 1239 | 
            +
                  source.datafields('610', ind1: '-', ind2: '1').value
         | 
| 1199 1240 | 
             
                end
         | 
| 1200 1241 |  | 
| 1201 1242 | 
             
                field :secondary_form_publisher do
         | 
| 1202 | 
            -
                  ( | 
| 1243 | 
            +
                  (source.datafields('611').value.to_s << ' : ' << source.datafields('613').value.to_s).gsub(/\A : /, '').presence
         | 
| 1203 1244 | 
             
                end
         | 
| 1204 1245 |  | 
| 1205 1246 | 
             
                field :secondary_form_creationdate do
         | 
| 1206 | 
            -
                   | 
| 1247 | 
            +
                  source.datafields('619').value
         | 
| 1207 1248 | 
             
                end
         | 
| 1208 1249 |  | 
| 1209 1250 | 
             
                field :secondary_form_isbn do
         | 
| 1210 | 
            -
                   | 
| 1251 | 
            +
                  source.datafields('634').value
         | 
| 1211 1252 | 
             
                end
         | 
| 1212 1253 |  | 
| 1213 1254 | 
             
                field :secondary_form_physical_description do
         | 
| 1214 | 
            -
                   | 
| 1255 | 
            +
                  source.datafields('637').value
         | 
| 1215 1256 | 
             
                end
         | 
| 1216 1257 |  | 
| 1217 1258 | 
             
                # there can at most be two of 'em
         | 
| 1218 1259 | 
             
                field :secondary_form_superorder do
         | 
| 1219 1260 | 
             
                  [
         | 
| 1220 1261 | 
             
                    {
         | 
| 1221 | 
            -
                      ht_number:  | 
| 1222 | 
            -
                      label:  | 
| 1223 | 
            -
                      volume_count:  | 
| 1262 | 
            +
                      ht_number: source.datafields('623').value,
         | 
| 1263 | 
            +
                      label: source.datafields('621').value,
         | 
| 1264 | 
            +
                      volume_count: source.datafields('625').value
         | 
| 1224 1265 | 
             
                    },
         | 
| 1225 1266 | 
             
                    {
         | 
| 1226 | 
            -
                      ht_number:  | 
| 1227 | 
            -
                      label:  | 
| 1228 | 
            -
                      volume_count:  | 
| 1267 | 
            +
                      ht_number: source.datafields('629').value,
         | 
| 1268 | 
            +
                      label: source.datafields('627').value,
         | 
| 1269 | 
            +
                      volume_count: source.datafields('631').value
         | 
| 1229 1270 | 
             
                    }
         | 
| 1230 1271 | 
             
                  ].select { |superorder| superorder[:label].present? }.map(&:to_json).presence
         | 
| 1231 1272 | 
             
                end
         | 
| 1232 1273 |  | 
| 1233 1274 | 
             
                field :local_comment do
         | 
| 1234 | 
            -
                   | 
| 1275 | 
            +
                  source.datafields('125', ind1: ' ', ind2: ' ').subfields(['_', 'a']).values.flatten.uniq.presence
         | 
| 1235 1276 | 
             
                end
         | 
| 1236 1277 |  | 
| 1237 1278 | 
             
                #
         |