stanford-mods 3.0.0.alpha1 → 3.2.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/lib/stanford-mods/concerns/name.rb +1 -1
- data/lib/stanford-mods/concerns/origin_info.rb +10 -6
- data/lib/stanford-mods/concerns/title.rb +34 -26
- data/lib/stanford-mods/coordinate.rb +5 -2
- data/lib/stanford-mods/date_parsing.rb +4 -4
- data/lib/stanford-mods/imprint.rb +44 -19
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/fixtures/searchworks_imprint_data.rb +11 -11
- data/spec/fixtures/searchworks_pub_date_data.rb +14 -14
- data/spec/fixtures/spotlight_pub_date_data.rb +3 -3
- data/spec/imprint_spec.rb +35 -10
- data/spec/lib/stanford-mods/coordinate_spec.rb +3 -5
- data/spec/origin_info_spec.rb +2 -2
- data/spec/searchworks_title_spec.rb +4 -4
- data/stanford-mods.gemspec +1 -1
- metadata +7 -7
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 57865ef64be3774919a58f9771243fb7f5090b09867fae098d3fa5ae6e2523cf
         | 
| 4 | 
            +
              data.tar.gz: 1a09641f450a3739c9c61598ec4ad7a4f1f7b410c804d12df6d50530fb249cb7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c86f9171a032d1349068b43f6cf1272fbdf4a24419a58f66040132d7de2ea745853707b803608ea3344a137e544eff0e7e291a7b9c3922c09fe0568c68409a5e
         | 
| 7 | 
            +
              data.tar.gz: d031a52bb328ae6efa0e42e7050fc4f990295509e4ee0a4b4c1f93f51b2412049b16c87091f27b95a02ed95be1278ccd5cbcc11771f59272bf77f82d73bd3bb2
         | 
| @@ -25,7 +25,7 @@ module Stanford | |
| 25 25 |  | 
| 26 26 | 
             
                  # @return [Array<String>] values for author_person_facet, author_person_display
         | 
| 27 27 | 
             
                  def sw_person_authors
         | 
| 28 | 
            -
                    mods_ng_xml. | 
| 28 | 
            +
                    mods_ng_xml.personal_name.map(&:display_value_w_date)
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 |  | 
| 31 31 | 
             
                  # return the display_value_w_date for all <mods><name> elements that do not have type='personal'
         | 
| @@ -15,7 +15,7 @@ module Stanford | |
| 15 15 | 
             
                  #  look for a keyDate and use it if there is one;  otherwise pick earliest date
         | 
| 16 16 | 
             
                  # @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute) should be ignored; false if approximate dates should be included
         | 
| 17 17 | 
             
                  # @return [Integer] publication year as an Integer
         | 
| 18 | 
            -
                  # @note for sorting:  5  | 
| 18 | 
            +
                  # @note for sorting:  5 BCE => -5;  666 BCE => -666
         | 
| 19 19 | 
             
                  def pub_year_int(fields = [:dateIssued, :dateCreated, :dateCaptured], ignore_approximate: false)
         | 
| 20 20 | 
             
                    fields.each do |date_key|
         | 
| 21 21 | 
             
                      values = mods_ng_xml.origin_info.send(date_key)
         | 
| @@ -31,7 +31,7 @@ module Stanford | |
| 31 31 | 
             
                  #  look for a keyDate and use it if there is one;  otherwise pick earliest date
         | 
| 32 32 | 
             
                  # @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute) should be ignored; false if approximate dates should be included
         | 
| 33 33 | 
             
                  # @return [String] single String containing publication year for lexical sorting
         | 
| 34 | 
            -
                  # @note for string sorting  5  | 
| 34 | 
            +
                  # @note for string sorting  5 BCE = -5  => -995;  6 BCE => -994, so 6 BCE sorts before 5 BCE
         | 
| 35 35 | 
             
                  # @deprecated use pub_year_int
         | 
| 36 36 | 
             
                  def pub_year_sort_str(fields = [:dateIssued, :dateCreated, :dateCaptured], ignore_approximate: false)
         | 
| 37 37 | 
             
                    fields.each do |date_key|
         | 
| @@ -44,12 +44,12 @@ module Stanford | |
| 44 44 | 
             
                  end
         | 
| 45 45 |  | 
| 46 46 | 
             
                  # return a single string intended for display of pub year
         | 
| 47 | 
            -
                  # 0 < year < 1000:  add  | 
| 48 | 
            -
                  # year < 0:  add  | 
| 47 | 
            +
                  # 0 < year < 1000:  add CE suffix
         | 
| 48 | 
            +
                  # year < 0:  add BCE suffix.  ('-5'  =>  '5 BCE', '700 BCE'  => '700 BCE')
         | 
| 49 49 | 
             
                  # 195u =>  195x
         | 
| 50 50 | 
             
                  # 19uu => 19xx
         | 
| 51 | 
            -
                  #   '-5'  =>  '5  | 
| 52 | 
            -
                  #   '700  | 
| 51 | 
            +
                  #   '-5'  =>  '5 BCE'
         | 
| 52 | 
            +
                  #   '700 BCE'  => '700 BCE'
         | 
| 53 53 | 
             
                  #   '7th century' => '7th century'
         | 
| 54 54 | 
             
                  # date ranges?
         | 
| 55 55 | 
             
                  # prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
         | 
| @@ -72,6 +72,10 @@ module Stanford | |
| 72 72 | 
             
                    origin_info.map { |el| Stanford::Mods::Imprint.new(el) }
         | 
| 73 73 | 
             
                  end
         | 
| 74 74 |  | 
| 75 | 
            +
                  def place
         | 
| 76 | 
            +
                    term_values([:origin_info, :place, :placeTerm])
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 75 79 | 
             
                  # @return [String] single String containing imprint information for display
         | 
| 76 80 | 
             
                  def imprint_display_str
         | 
| 77 81 | 
             
                    imprints.map(&:display_str).reject(&:empty?).join('; ')
         | 
| @@ -9,41 +9,49 @@ module Stanford | |
| 9 9 | 
             
                  # Searchworks requires that the MODS has a '//titleInfo/title'
         | 
| 10 10 | 
             
                  # @return [String] value for title_245_search, title_full_display
         | 
| 11 11 | 
             
                  def sw_full_title(title_info = first_title_info_node, sortable: false)
         | 
| 12 | 
            -
                    return unless title_info
         | 
| 12 | 
            +
                    return unless title_info&.children&.any?
         | 
| 13 13 |  | 
| 14 14 | 
             
                    title = title_info.title&.text&.strip
         | 
| 15 | 
            -
             | 
| 16 15 | 
             
                    return if title.nil? || title.empty?
         | 
| 17 16 |  | 
| 18 | 
            -
                     | 
| 17 | 
            +
                    title = ''
         | 
| 18 | 
            +
                    previous_element = nil
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    title_info.children.select { |value| title_parts.include? value.name }.each do |value|
         | 
| 21 | 
            +
                      next if value.name == 'nonSort' && sortable
         | 
| 19 22 |  | 
| 20 | 
            -
             | 
| 23 | 
            +
                      str = value.text.strip
         | 
| 24 | 
            +
                      next if str.empty?
         | 
| 21 25 |  | 
| 22 | 
            -
             | 
| 26 | 
            +
                      delimiter = if title.empty? || title.end_with?(' ')
         | 
| 27 | 
            +
                                    nil
         | 
| 28 | 
            +
                                  elsif previous_element&.name == 'nonSort' && title.end_with?('-', '\'')
         | 
| 29 | 
            +
                                    nil
         | 
| 30 | 
            +
                                  elsif title.end_with?('.', ',', ':', ';')
         | 
| 31 | 
            +
                                    ' '
         | 
| 32 | 
            +
                                  elsif value.name == 'subTitle'
         | 
| 33 | 
            +
                                    ' : '
         | 
| 34 | 
            +
                                  elsif value.name == 'partName' && previous_element.name == 'partNumber'
         | 
| 35 | 
            +
                                    ', '
         | 
| 36 | 
            +
                                  elsif value.name == 'partNumber' || value.name == 'partName'
         | 
| 37 | 
            +
                                    '. '
         | 
| 38 | 
            +
                                  else
         | 
| 39 | 
            +
                                    ' '
         | 
| 40 | 
            +
                                  end
         | 
| 23 41 |  | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                    preParts.sub!(/\.$/, '') if preParts # remove trailing period
         | 
| 42 | 
            +
                      title += delimiter if delimiter
         | 
| 43 | 
            +
                      title += str
         | 
| 27 44 |  | 
| 28 | 
            -
             | 
| 29 | 
            -
                    partNumber = title_info.partNumber.text.strip unless title_info.partNumber.text.strip.empty?
         | 
| 30 | 
            -
                    partNumber.sub!(/,$/, '') if partNumber # remove trailing comma
         | 
| 31 | 
            -
                    if partNumber && partName
         | 
| 32 | 
            -
                      parts = partNumber + ", " + partName
         | 
| 33 | 
            -
                    elsif partNumber
         | 
| 34 | 
            -
                      parts = partNumber
         | 
| 35 | 
            -
                    elsif partName
         | 
| 36 | 
            -
                      parts = partName
         | 
| 45 | 
            +
                      previous_element = value
         | 
| 37 46 | 
             
                    end
         | 
| 38 | 
            -
                    parts.sub!(/\.$/, '') if parts
         | 
| 39 47 |  | 
| 40 | 
            -
                     | 
| 41 | 
            -
             | 
| 48 | 
            +
                    title += "." unless title =~ /\s*[[:punct:]]$/
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    title.strip
         | 
| 51 | 
            +
                  end
         | 
| 42 52 |  | 
| 43 | 
            -
             | 
| 44 | 
            -
                     | 
| 45 | 
            -
                    result = nil if result.empty?
         | 
| 46 | 
            -
                    result
         | 
| 53 | 
            +
                  def title_parts
         | 
| 54 | 
            +
                    %w[nonSort title subTitle partName partNumber]
         | 
| 47 55 | 
             
                  end
         | 
| 48 56 |  | 
| 49 57 | 
             
                  # like sw_full_title without trailing \,/;:.
         | 
| @@ -57,7 +65,7 @@ module Stanford | |
| 57 65 | 
             
                  # this includes all titles except
         | 
| 58 66 | 
             
                  # @return [Array<String>] values for title_variant_search
         | 
| 59 67 | 
             
                  def sw_addl_titles
         | 
| 60 | 
            -
                    (full_titles - first_title_info_node | 
| 68 | 
            +
                    (full_titles - Array(first_title_info_node&.full_title)).reject(&:blank?)
         | 
| 61 69 | 
             
                  end
         | 
| 62 70 |  | 
| 63 71 | 
             
                  # Returns a sortable version of the main title
         | 
| @@ -76,4 +84,4 @@ module Stanford | |
| 76 84 | 
             
                  end
         | 
| 77 85 | 
             
                end
         | 
| 78 86 | 
             
              end
         | 
| 79 | 
            -
            end
         | 
| 87 | 
            +
            end
         | 
| @@ -65,11 +65,14 @@ module Stanford | |
| 65 65 | 
             
                  # @param [String] point coordinate point in degrees notation
         | 
| 66 66 | 
             
                  # @return [Float] converted value in decimal notation
         | 
| 67 67 | 
             
                  def coord_to_decimal(point)
         | 
| 68 | 
            -
                    regex =  | 
| 68 | 
            +
                    regex = Regexp.union(
         | 
| 69 | 
            +
                      /(?<dir>[NESW])\s*(?<deg>\d+)[°⁰º](?:(?<min>\d+)[ʹ'])?(?:(?<sec>\d+)[ʺ"])?/,
         | 
| 70 | 
            +
                      /^\s*(?<dir>[NESW])\s*(?<deg>\d+(?:[.]\d+)?)\s*$/
         | 
| 71 | 
            +
                    )
         | 
| 69 72 | 
             
                    match = regex.match(point)
         | 
| 70 73 | 
             
                    return Float::INFINITY unless match
         | 
| 71 74 |  | 
| 72 | 
            -
                    dec = match['deg']. | 
| 75 | 
            +
                    dec = match['deg'].to_f
         | 
| 73 76 | 
             
                    dec += match['min'].to_f / 60
         | 
| 74 77 | 
             
                    dec += match['sec'].to_f / 60 / 60
         | 
| 75 78 | 
             
                    dec = -1 * dec if match['dir'] == 'W' || match['dir'] == 'S'
         | 
| @@ -15,7 +15,7 @@ module Stanford | |
| 15 15 | 
             
                    @xml = xml
         | 
| 16 16 | 
             
                  end
         | 
| 17 17 |  | 
| 18 | 
            -
                  # get display value for year, generally an explicit year or "17th century" or "5  | 
| 18 | 
            +
                  # get display value for year, generally an explicit year or "17th century" or "5 BCE" or "1950s" or '845 CE'
         | 
| 19 19 | 
             
                  # @return [String, nil] String value for year if we could parse one, nil otherwise
         | 
| 20 20 | 
             
                  def date_str_for_display
         | 
| 21 21 | 
             
                    date = xml&.as_object&.date
         | 
| @@ -32,9 +32,9 @@ module Stanford | |
| 32 32 | 
             
                      if !self.class.year_int_valid? date.year
         | 
| 33 33 | 
             
                        xml.text
         | 
| 34 34 | 
             
                      elsif date.year < 1
         | 
| 35 | 
            -
                        "#{date.year.abs + 1}  | 
| 35 | 
            +
                        "#{date.year.abs + 1} BCE"
         | 
| 36 36 | 
             
                      elsif date.year < 1000
         | 
| 37 | 
            -
                        "#{date.year}  | 
| 37 | 
            +
                        "#{date.year} CE"
         | 
| 38 38 | 
             
                      else
         | 
| 39 39 | 
             
                        date.year.to_s
         | 
| 40 40 | 
             
                      end
         | 
| @@ -49,7 +49,7 @@ module Stanford | |
| 49 49 |  | 
| 50 50 | 
             
                  # get String sortable value year if we can parse date_str to get a year.
         | 
| 51 51 | 
             
                  #   SearchWorks currently uses a string field for pub date sorting; thus so does Spotlight.
         | 
| 52 | 
            -
                  #   The values returned must *lexically* sort in chronological order, so the  | 
| 52 | 
            +
                  #   The values returned must *lexically* sort in chronological order, so the BCE dates are tricky
         | 
| 53 53 | 
             
                  # @return [String, nil] String sortable year if we could parse one, nil otherwise
         | 
| 54 54 | 
             
                  #  note that these values must *lexically* sort to create a chronological sort.
         | 
| 55 55 | 
             
                  def sortable_year_string_from_date_str
         | 
| @@ -149,7 +149,7 @@ module Stanford | |
| 149 149 | 
             
                    end
         | 
| 150 150 |  | 
| 151 151 | 
             
                    # Element text reduced to digits and hyphen. Captures date ranges and
         | 
| 152 | 
            -
                    # negative ( | 
| 152 | 
            +
                    # negative (BCE) dates. Used for comparison/deduping.
         | 
| 153 153 | 
             
                    def base_value
         | 
| 154 154 | 
             
                      if text =~ /^\[?1\d{3}-\d{2}\??\]?$/
         | 
| 155 155 | 
             
                        return text.sub(/(\d{2})(\d{2})-(\d{2})/, '\1\2-\1\3')
         | 
| @@ -166,8 +166,26 @@ module Stanford | |
| 166 166 | 
             
                        return text.strip unless text =~ /^-?\d+$/ || text =~ /^[\dXxu?-]{4}$/
         | 
| 167 167 | 
             
                      end
         | 
| 168 168 |  | 
| 169 | 
            -
                       | 
| 170 | 
            -
             | 
| 169 | 
            +
                      if date.is_a?(EDTF::Interval)
         | 
| 170 | 
            +
                        if value.precision == :century || value.precision == :decade
         | 
| 171 | 
            +
                          return format_date(date, value.precision)
         | 
| 172 | 
            +
                        end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                        range = [
         | 
| 175 | 
            +
                          format_date(date.min, date.min.precision),
         | 
| 176 | 
            +
                          format_date(date.max, date.max.precision)
         | 
| 177 | 
            +
                        ].uniq.compact
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                        return text.strip if range.empty?
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                        range.join(' - ')
         | 
| 182 | 
            +
                      else
         | 
| 183 | 
            +
                        format_date(date, value.precision) || text.strip
         | 
| 184 | 
            +
                      end
         | 
| 185 | 
            +
                    end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    def format_date(date, precision)
         | 
| 188 | 
            +
                      case precision
         | 
| 171 189 | 
             
                      when :day
         | 
| 172 190 | 
             
                        date.strftime('%B %e, %Y')
         | 
| 173 191 | 
             
                      when :month
         | 
| @@ -175,32 +193,39 @@ module Stanford | |
| 175 193 | 
             
                      when :year
         | 
| 176 194 | 
             
                        year = date.year
         | 
| 177 195 | 
             
                        if year < 1
         | 
| 178 | 
            -
                          "#{year.abs + 1}  | 
| 179 | 
            -
                        # Any dates before the year 1000 are explicitly marked  | 
| 196 | 
            +
                          "#{year.abs + 1} BCE"
         | 
| 197 | 
            +
                        # Any dates before the year 1000 are explicitly marked CE
         | 
| 180 198 | 
             
                        elsif year > 1 && year < 1000
         | 
| 181 | 
            -
                          "#{year}  | 
| 199 | 
            +
                          "#{year} CE"
         | 
| 182 200 | 
             
                        else
         | 
| 183 201 | 
             
                          year.to_s
         | 
| 184 202 | 
             
                        end
         | 
| 185 203 | 
             
                      when :century
         | 
| 186 | 
            -
                         | 
| 204 | 
            +
                        if date.year.negative?
         | 
| 205 | 
            +
                          "#{((date.year / 100).abs + 1).ordinalize} century BCE"
         | 
| 206 | 
            +
                        else
         | 
| 207 | 
            +
                          "#{((date.year / 100) + 1).ordinalize} century"
         | 
| 208 | 
            +
                        end
         | 
| 187 209 | 
             
                      when :decade
         | 
| 188 | 
            -
                         | 
| 189 | 
            -
                      else
         | 
| 190 | 
            -
                        text.strip
         | 
| 210 | 
            +
                        "#{date.year}s"
         | 
| 191 211 | 
             
                      end
         | 
| 192 212 | 
             
                    end
         | 
| 193 213 |  | 
| 194 | 
            -
                    # Decoded date with " | 
| 214 | 
            +
                    # Decoded date with "BCE" or "CE" and qualifier markers. See (outdated):
         | 
| 195 215 | 
             
                    # https://consul.stanford.edu/display/chimera/MODS+display+rules#MODSdisplayrules-3b.%3CoriginInfo%3E
         | 
| 196 216 | 
             
                    def qualified_value
         | 
| 197 | 
            -
                       | 
| 198 | 
            -
             | 
| 199 | 
            -
             | 
| 200 | 
            -
                       | 
| 201 | 
            -
             | 
| 217 | 
            +
                      qualified_format = case qualifier
         | 
| 218 | 
            +
                      when 'approximate'
         | 
| 219 | 
            +
                        '[ca. %s]'
         | 
| 220 | 
            +
                      when 'questionable'
         | 
| 221 | 
            +
                        '[%s?]'
         | 
| 222 | 
            +
                      when 'inferred'
         | 
| 223 | 
            +
                        '[%s]'
         | 
| 224 | 
            +
                      else
         | 
| 225 | 
            +
                        '%s'
         | 
| 226 | 
            +
                      end
         | 
| 202 227 |  | 
| 203 | 
            -
                       | 
| 228 | 
            +
                      format(qualified_format, decoded_value)
         | 
| 204 229 | 
             
                    end
         | 
| 205 230 | 
             
                  end
         | 
| 206 231 |  | 
| @@ -225,7 +250,7 @@ module Stanford | |
| 225 250 | 
             
                      @start&.encoding || @stop&.encoding
         | 
| 226 251 | 
             
                    end
         | 
| 227 252 |  | 
| 228 | 
            -
                    # Decoded dates with " | 
| 253 | 
            +
                    # Decoded dates with "BCE" or "CE" and qualifier markers applied to
         | 
| 229 254 | 
             
                    # the entire range, or individually if dates differ.
         | 
| 230 255 | 
             
                    def qualified_value
         | 
| 231 256 | 
             
                      if @start&.qualifier == @stop&.qualifier
         | 
| @@ -281,7 +306,7 @@ module Stanford | |
| 281 306 |  | 
| 282 307 | 
             
                    dates = dates - duplicated_ranges
         | 
| 283 308 |  | 
| 284 | 
            -
                    # output formatted dates with qualifiers,  | 
| 309 | 
            +
                    # output formatted dates with qualifiers, CE/BCE, etc.
         | 
| 285 310 | 
             
                    dates.map(&:qualified_value)
         | 
| 286 311 | 
             
                  end
         | 
| 287 312 | 
             
                end
         | 
| @@ -700,7 +700,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 700 700 | 
             
                    <dateIssued encoding="marc" point="start" keyDate="yes">0850</dateIssued>
         | 
| 701 701 | 
             
                    <dateIssued encoding="marc" point="end">1499</dateIssued>
         | 
| 702 702 | 
             
                    <issuance>monographic</issuance>' +
         | 
| 703 | 
            -
                    mods_origin_info_end_str => 'California, 850  | 
| 703 | 
            +
                    mods_origin_info_end_str => 'California, 850 CE - 1499',
         | 
| 704 704 | 
             
                  # coll rec  bd001pp3337
         | 
| 705 705 | 
             
                  # coll rec fn508pj9953
         | 
| 706 706 | 
             
                  mods_origin_info_start_str +
         | 
| @@ -728,7 +728,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 728 728 | 
             
                    <dateCreated point="start" qualifier="approximate" keyDate="yes">850</dateCreated>
         | 
| 729 729 | 
             
                    <dateCreated point="end" qualifier="approximate">1499</dateCreated>
         | 
| 730 730 | 
             
                    <issuance>monographic</issuance>' +
         | 
| 731 | 
            -
                    mods_origin_info_end_str => 'England, [ca. 850  | 
| 731 | 
            +
                    mods_origin_info_end_str => 'England, [ca. 850 CE - 1499]',
         | 
| 732 732 | 
             
                  # sc582cv9633
         | 
| 733 733 | 
             
                  mods_origin_info_start_str +
         | 
| 734 734 | 
             
                    '<dateCreated keydate="yes">1314</dateCreated>
         | 
| @@ -1055,7 +1055,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1055 1055 | 
             
                    <originInfo>
         | 
| 1056 1056 | 
             
                      <dateCreated encoding="edtf" point="start" keyDate="yes">-18</dateCreated>
         | 
| 1057 1057 | 
             
                      <dateCreated encoding="edtf" point="end">-17</dateCreated>' +
         | 
| 1058 | 
            -
                    mods_origin_info_end_str => 'Spain; 19  | 
| 1058 | 
            +
                    mods_origin_info_end_str => 'Spain; 19 BCE - 18 BCE',
         | 
| 1059 1059 | 
             
                  # bb408km1389
         | 
| 1060 1060 | 
             
                  mods_origin_info_start_str +
         | 
| 1061 1061 | 
             
                    ' <place supplied="yes">
         | 
| @@ -1065,7 +1065,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1065 1065 | 
             
                    <originInfo>
         | 
| 1066 1066 | 
             
                      <dateCreated encoding="edtf" point="start" keyDate="yes">-1</dateCreated>
         | 
| 1067 1067 | 
             
                      <dateCreated encoding="edtf" point="end">11</dateCreated>' +
         | 
| 1068 | 
            -
                    mods_origin_info_end_str => 'Lyon (France); 2  | 
| 1068 | 
            +
                    mods_origin_info_end_str => 'Lyon (France); 2 BCE - 11 CE',
         | 
| 1069 1069 | 
             
                  # cs470ng8064
         | 
| 1070 1070 | 
             
                  mods_origin_info_start_str +
         | 
| 1071 1071 | 
             
                    ' <place supplied="yes">
         | 
| @@ -1075,7 +1075,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1075 1075 | 
             
                    <originInfo>
         | 
| 1076 1076 | 
             
                      <dateCreated encoding="edtf" point="start" keyDate="yes">-1</dateCreated>
         | 
| 1077 1077 | 
             
                      <dateCreated encoding="edtf" point="end">0</dateCreated>' +
         | 
| 1078 | 
            -
                    mods_origin_info_end_str => 'Antioch (Turkey) (?); 2  | 
| 1078 | 
            +
                    mods_origin_info_end_str => 'Antioch (Turkey) (?); 2 BCE - 1 BCE',
         | 
| 1079 1079 | 
             
                  # vh834jh5059
         | 
| 1080 1080 | 
             
                  mods_origin_info_start_str +
         | 
| 1081 1081 | 
             
                    ' <place supplied="yes">
         | 
| @@ -1085,7 +1085,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1085 1085 | 
             
                    <originInfo>
         | 
| 1086 1086 | 
             
                      <dateCreated encoding="edtf" point="start" keyDate="yes">13</dateCreated>
         | 
| 1087 1087 | 
             
                      <dateCreated encoding="edtf" point="end">14</dateCreated>' +
         | 
| 1088 | 
            -
                    mods_origin_info_end_str => 'Lyon (France); 13  | 
| 1088 | 
            +
                    mods_origin_info_end_str => 'Lyon (France); 13 CE - 14 CE',
         | 
| 1089 1089 | 
             
                  # sk424bh9379
         | 
| 1090 1090 | 
             
                  mods_origin_info_start_str +
         | 
| 1091 1091 | 
             
                    ' <place supplied="yes">
         | 
| @@ -1095,7 +1095,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1095 1095 | 
             
                    <originInfo>
         | 
| 1096 1096 | 
             
                      <dateCreated encoding="edtf" point="start" keyDate="yes">34</dateCreated>
         | 
| 1097 1097 | 
             
                      <dateCreated encoding="edtf" point="end">35</dateCreated>' +
         | 
| 1098 | 
            -
                    mods_origin_info_end_str => 'Alexandria (Egypt); 34  | 
| 1098 | 
            +
                    mods_origin_info_end_str => 'Alexandria (Egypt); 34 CE - 35 CE'
         | 
| 1099 1099 | 
             
                },
         | 
| 1100 1100 | 
             
              # rigler
         | 
| 1101 1101 | 
             
              'rumsey' =>
         | 
| @@ -1235,7 +1235,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1235 1235 | 
             
                    '<dateIssued encoding="marc" point="start">800</dateIssued>
         | 
| 1236 1236 | 
             
                    <dateIssued encoding="marc" point="end">1899</dateIssued>
         | 
| 1237 1237 | 
             
                    <issuance>monographic</issuance>' +
         | 
| 1238 | 
            -
                    mods_origin_info_end_str => '800  | 
| 1238 | 
            +
                    mods_origin_info_end_str => '800 CE - 1899',
         | 
| 1239 1239 | 
             
                  # dc882bs3541
         | 
| 1240 1240 | 
             
                  mods_origin_info_start_str +
         | 
| 1241 1241 | 
             
                    '<place>
         | 
| @@ -1245,7 +1245,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1245 1245 | 
             
                    <dateCreated encoding="w3cdtf" point="end" qualifier="approximate">0799</dateCreated>
         | 
| 1246 1246 | 
             
                    <dateCreated encoding="w3cdtf" keyDate="yes"/>
         | 
| 1247 1247 | 
             
                    <issuance>monographic</issuance>' +
         | 
| 1248 | 
            -
                    mods_origin_info_end_str => 'Egypt, [ca. 700  | 
| 1248 | 
            +
                    mods_origin_info_end_str => 'Egypt, [ca. 700 CE - 799 CE]',
         | 
| 1249 1249 | 
             
                  # hg026ds6978
         | 
| 1250 1250 | 
             
                  mods_origin_info_start_str +
         | 
| 1251 1251 | 
             
                    '<place>
         | 
| @@ -1253,7 +1253,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1253 1253 | 
             
                    </place>
         | 
| 1254 1254 | 
             
                    <dateCreated encoding="w3cdtf" keyDate="yes">0816</dateCreated>
         | 
| 1255 1255 | 
             
                    <issuance>monographic</issuance>' +
         | 
| 1256 | 
            -
                    mods_origin_info_end_str => 'Central Arab lands, 816  | 
| 1256 | 
            +
                    mods_origin_info_end_str => 'Central Arab lands, 816 CE',
         | 
| 1257 1257 | 
             
                  # ch617yk2621
         | 
| 1258 1258 | 
             
                  mods_origin_info_start_str +
         | 
| 1259 1259 | 
             
                    '<place>
         | 
| @@ -1273,7 +1273,7 @@ SEARCHWORKS_IMPRINT_DATA = { | |
| 1273 1273 | 
             
                    <dateCreated encoding="w3cdtf" point="end" qualifier="approximate">1000</dateCreated>
         | 
| 1274 1274 | 
             
                    <dateCreated encoding="w3cdtf" keyDate="yes"/>
         | 
| 1275 1275 | 
             
                    <issuance>monographic</issuance>' +
         | 
| 1276 | 
            -
                    mods_origin_info_end_str => 'Byzantine Empire, [ca. 950  | 
| 1276 | 
            +
                    mods_origin_info_end_str => 'Byzantine Empire, [ca. 950 CE - 1000]',
         | 
| 1277 1277 | 
             
                  # hj537kj5737
         | 
| 1278 1278 | 
             
                  mods_origin_info_start_str +
         | 
| 1279 1279 | 
             
                    '<dateIssued>15th century CE</dateIssued>
         | 
| @@ -607,7 +607,7 @@ SEARCHWORKS_PUB_DATE_DATA = { | |
| 607 607 | 
             
                  mods_origin_info_start_str +
         | 
| 608 608 | 
             
                    '<dateIssued encoding="marc" point="start" keyDate="yes">0850</dateIssued>' +
         | 
| 609 609 | 
             
                    '<dateIssued encoding="marc" point="end">1499</dateIssued>' +
         | 
| 610 | 
            -
                    mods_origin_info_end_str => [850, '850  | 
| 610 | 
            +
                    mods_origin_info_end_str => [850, '850 CE - 1499'],
         | 
| 611 611 | 
             
                  # coll rec  bd001pp3337
         | 
| 612 612 | 
             
                  mods_origin_info_start_str +
         | 
| 613 613 | 
             
                    '<dateIssued encoding="marc" keyDate="yes" point="start">1000</dateIssued>' +
         | 
| @@ -637,7 +637,7 @@ SEARCHWORKS_PUB_DATE_DATA = { | |
| 637 637 | 
             
                  mods_origin_info_start_str +
         | 
| 638 638 | 
             
                    '<dateCreated point="start" qualifier="approximate" keyDate="yes">850</dateCreated>' +
         | 
| 639 639 | 
             
                    '<dateCreated point="end" qualifier="approximate">1499</dateCreated>' +
         | 
| 640 | 
            -
                    mods_origin_info_end_str => [850, '850  | 
| 640 | 
            +
                    mods_origin_info_end_str => [850, '850 CE - 1499'],
         | 
| 641 641 | 
             
                  # sc582cv9633
         | 
| 642 642 | 
             
                  mods_origin_info_start_str +
         | 
| 643 643 | 
             
                    '<dateCreated keydate="yes">1314</dateCreated>' +
         | 
| @@ -722,12 +722,12 @@ SEARCHWORKS_PUB_DATE_DATA = { | |
| 722 722 | 
             
                  mods_origin_info_start_str +
         | 
| 723 723 | 
             
                    '<dateCreated keyDate="yes" point="start" qualifier="approximate">199 B.C.</dateCreated>' +
         | 
| 724 724 | 
             
                    '<dateCreated keyDate="yes" point="end" qualifier="approximate">100 B.C.</dateCreated>' +
         | 
| 725 | 
            -
                    mods_origin_info_end_str => [-198, '199  | 
| 725 | 
            +
                    mods_origin_info_end_str => [-198, '199 BCE - 100 BCE'],
         | 
| 726 726 | 
             
                  # ww728rz0477
         | 
| 727 727 | 
             
                  mods_origin_info_start_str +
         | 
| 728 728 | 
             
                    '<dateCreated keyDate="yes" point="start" qualifier="approximate">211 B.C.</dateCreated>' +
         | 
| 729 729 | 
             
                    '<dateCreated keyDate="yes" point="end" qualifier="approximate">150 B.C.</dateCreated>' +
         | 
| 730 | 
            -
                    mods_origin_info_end_str => [-210, '211  | 
| 730 | 
            +
                    mods_origin_info_end_str => [-210, '211 BCE - 150 BCE']
         | 
| 731 731 | 
             
                },
         | 
| 732 732 | 
             
              # pcc
         | 
| 733 733 | 
             
              # peace
         | 
| @@ -796,27 +796,27 @@ SEARCHWORKS_PUB_DATE_DATA = { | |
| 796 796 | 
             
                  mods_origin_info_start_str +
         | 
| 797 797 | 
             
                    '<dateCreated encoding="edtf" point="start" keyDate="yes">-18</dateCreated>' +
         | 
| 798 798 | 
             
                    '<dateCreated encoding="edtf" point="end">-17</dateCreated>' +
         | 
| 799 | 
            -
                    mods_origin_info_end_str => [-18, '19  | 
| 799 | 
            +
                    mods_origin_info_end_str => [-18, '19 BCE - 17 BCE'],
         | 
| 800 800 | 
             
                  # bb408km1389
         | 
| 801 801 | 
             
                  mods_origin_info_start_str +
         | 
| 802 802 | 
             
                    '<dateCreated encoding="edtf" point="start" keyDate="yes">-1</dateCreated>' +
         | 
| 803 803 | 
             
                    '<dateCreated encoding="edtf" point="end">11</dateCreated>' +
         | 
| 804 | 
            -
                    mods_origin_info_end_str => [-1, '2  | 
| 804 | 
            +
                    mods_origin_info_end_str => [-1, '2 BCE - 11 CE'],
         | 
| 805 805 | 
             
                  # cs470ng8064
         | 
| 806 806 | 
             
                  mods_origin_info_start_str +
         | 
| 807 807 | 
             
                    '<dateCreated encoding="edtf" point="start" keyDate="yes">-1</dateCreated>' +
         | 
| 808 808 | 
             
                    '<dateCreated encoding="edtf" point="end">0</dateCreated>' +
         | 
| 809 | 
            -
                    mods_origin_info_end_str => [-1, '2  | 
| 809 | 
            +
                    mods_origin_info_end_str => [-1, '2 BCE - 0 CE'],
         | 
| 810 810 | 
             
                  # vh834jh5059
         | 
| 811 811 | 
             
                  mods_origin_info_start_str +
         | 
| 812 812 | 
             
                    '<dateCreated encoding="edtf" point="start" keyDate="yes">13</dateCreated>' +
         | 
| 813 813 | 
             
                    '<dateCreated encoding="edtf" point="end">14</dateCreated>' +
         | 
| 814 | 
            -
                    mods_origin_info_end_str => [13, '13  | 
| 814 | 
            +
                    mods_origin_info_end_str => [13, '13 CE - 14 CE'],
         | 
| 815 815 | 
             
                  # sk424bh9379
         | 
| 816 816 | 
             
                  mods_origin_info_start_str +
         | 
| 817 817 | 
             
                    '<dateCreated encoding="edtf" point="start" keyDate="yes">34</dateCreated>' +
         | 
| 818 818 | 
             
                    '<dateCreated encoding="edtf" point="end">35</dateCreated>' +
         | 
| 819 | 
            -
                    mods_origin_info_end_str => [34, '34  | 
| 819 | 
            +
                    mods_origin_info_end_str => [34, '34 CE - 35 CE']
         | 
| 820 820 | 
             
                },
         | 
| 821 821 | 
             
              # rigler
         | 
| 822 822 | 
             
              # rumsey
         | 
| @@ -931,23 +931,23 @@ SEARCHWORKS_PUB_DATE_DATA = { | |
| 931 931 | 
             
                  mods_origin_info_start_str +
         | 
| 932 932 | 
             
                    '<dateIssued encoding="marc" point="start">800</dateIssued>' +
         | 
| 933 933 | 
             
                    '<dateIssued encoding="marc" point="start">1899</dateIssued>' +
         | 
| 934 | 
            -
                    mods_origin_info_end_str => [800, '800  | 
| 934 | 
            +
                    mods_origin_info_end_str => [800, '800 CE'],
         | 
| 935 935 | 
             
                  # dc882bs3541
         | 
| 936 936 | 
             
                  mods_origin_info_start_str +
         | 
| 937 937 | 
             
                    '<dateCreated encoding="w3cdtf" point="start" qualifier="approximate" keyDate="yes">0700</dateCreated>' +
         | 
| 938 938 | 
             
                    '<dateCreated encoding="w3cdtf" point="end" qualifier="approximate">0799</dateCreated>' +
         | 
| 939 939 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes"/>' +
         | 
| 940 | 
            -
                    mods_origin_info_end_str => [700, '700  | 
| 940 | 
            +
                    mods_origin_info_end_str => [700, '700 CE - 799 CE'],
         | 
| 941 941 | 
             
                  # hg026ds6978
         | 
| 942 942 | 
             
                  mods_origin_info_start_str +
         | 
| 943 943 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes">0816</dateCreated>' +
         | 
| 944 | 
            -
                    mods_origin_info_end_str => [816, '816  | 
| 944 | 
            +
                    mods_origin_info_end_str => [816, '816 CE'],
         | 
| 945 945 | 
             
                  # ct437ht0445
         | 
| 946 946 | 
             
                  mods_origin_info_start_str +
         | 
| 947 947 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes" point="start" qualifier="approximate">0900</dateCreated>' +
         | 
| 948 948 | 
             
                    '<dateCreated encoding="w3cdtf" point="end" qualifier="approximate">0999</dateCreated>' +
         | 
| 949 949 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes"/>' +
         | 
| 950 | 
            -
                    mods_origin_info_end_str => [900, '900  | 
| 950 | 
            +
                    mods_origin_info_end_str => [900, '900 CE - 999 CE'],
         | 
| 951 951 | 
             
                  # ch617yk2621
         | 
| 952 952 | 
             
                  mods_origin_info_start_str +
         | 
| 953 953 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes" point="start" qualifier="approximate">1000</dateCreated>' +
         | 
| @@ -959,7 +959,7 @@ SEARCHWORKS_PUB_DATE_DATA = { | |
| 959 959 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes" point="start" qualifier="approximate">0950</dateCreated>' +
         | 
| 960 960 | 
             
                    '<dateCreated encoding="w3cdtf" point="end" qualifier="approximate">1000</dateCreated>' +
         | 
| 961 961 | 
             
                    '<dateCreated encoding="w3cdtf" keyDate="yes"/>' +
         | 
| 962 | 
            -
                    mods_origin_info_end_str => [950, '950  | 
| 962 | 
            +
                    mods_origin_info_end_str => [950, '950 CE - 1000'],
         | 
| 963 963 | 
             
                  # hj537kj5737
         | 
| 964 964 | 
             
                  mods_origin_info_start_str +
         | 
| 965 965 | 
             
                    '<dateIssued>15th century CE</dateIssued>' +
         | 
| @@ -156,7 +156,7 @@ SPOTLIGHT_PUB_DATE_DATA = { | |
| 156 156 | 
             
                  mods_origin_info_start_str +
         | 
| 157 157 | 
             
                    '<dateIssued encoding="marc" point="start" keyDate="yes">0850</dateIssued>' +
         | 
| 158 158 | 
             
                    '<dateIssued encoding="marc" point="end">1499</dateIssued>' +
         | 
| 159 | 
            -
                    mods_origin_info_end_str => ['0850', '850  | 
| 159 | 
            +
                    mods_origin_info_end_str => ['0850', '850 CE'],
         | 
| 160 160 | 
             
                  # nc881qb8504
         | 
| 161 161 | 
             
                  mods_origin_info_start_str +
         | 
| 162 162 | 
             
                    '<dateCreated point="start" qualifier="approximate" keyDate="yes">1000</dateCreated>' +
         | 
| @@ -236,12 +236,12 @@ SPOTLIGHT_PUB_DATE_DATA = { | |
| 236 236 | 
             
                  mods_origin_info_start_str +
         | 
| 237 237 | 
             
                    '<dateCreated keyDate="yes" point="start" qualifier="approximate">200 B.C.</dateCreated>' +
         | 
| 238 238 | 
             
                    '<dateCreated keyDate="yes" point="end" qualifier="approximate">180 B.C.</dateCreated>' +
         | 
| 239 | 
            -
                    mods_origin_info_end_str => ['-801', '200  | 
| 239 | 
            +
                    mods_origin_info_end_str => ['-801', '200 BCE'],
         | 
| 240 240 | 
             
                  # ww728rz0477
         | 
| 241 241 | 
             
                  mods_origin_info_start_str +
         | 
| 242 242 | 
             
                    '<dateCreated keyDate="yes" point="start" qualifier="approximate">211 B.C.</dateCreated>' +
         | 
| 243 243 | 
             
                    '<dateCreated keyDate="yes" point="end" qualifier="approximate">150 B.C.</dateCreated>' +
         | 
| 244 | 
            -
                    mods_origin_info_end_str => ['-790', '211  | 
| 244 | 
            +
                    mods_origin_info_end_str => ['-790', '211 BCE']
         | 
| 245 245 | 
             
                },
         | 
| 246 246 | 
             
              'renaissance' =>
         | 
| 247 247 | 
             
                { # key is mods_xml;  values = [pub date sortable facet value, pub date single string facet value]
         | 
    
        data/spec/imprint_spec.rb
    CHANGED
    
    | @@ -108,7 +108,7 @@ describe Stanford::Mods::Imprint do | |
| 108 108 | 
             
                it 'presents centuries' do
         | 
| 109 109 | 
             
                  smods_rec.from_str <<-XML
         | 
| 110 110 | 
             
                    #{mods_origin_info_start_str}
         | 
| 111 | 
            -
                      <dateIssued encoding="edtf"> | 
| 111 | 
            +
                      <dateIssued encoding="edtf">18xx</dateIssued>
         | 
| 112 112 | 
             
                    #{mods_origin_info_end_str}
         | 
| 113 113 | 
             
                  XML
         | 
| 114 114 |  | 
| @@ -120,7 +120,7 @@ describe Stanford::Mods::Imprint do | |
| 120 120 | 
             
                it 'presents decades' do
         | 
| 121 121 | 
             
                  smods_rec.from_str <<-XML
         | 
| 122 122 | 
             
                    #{mods_origin_info_start_str}
         | 
| 123 | 
            -
                      <dateIssued encoding="edtf"> | 
| 123 | 
            +
                      <dateIssued encoding="edtf">147x</dateIssued>
         | 
| 124 124 | 
             
                    #{mods_origin_info_end_str}
         | 
| 125 125 | 
             
                  XML
         | 
| 126 126 |  | 
| @@ -129,7 +129,7 @@ describe Stanford::Mods::Imprint do | |
| 129 129 | 
             
                  expect(updated_element).to eq '1470s'
         | 
| 130 130 | 
             
                end
         | 
| 131 131 |  | 
| 132 | 
            -
                it 'adds  | 
| 132 | 
            +
                it 'adds CE to early years' do
         | 
| 133 133 | 
             
                  smods_rec.from_str <<-XML
         | 
| 134 134 | 
             
                    #{mods_origin_info_start_str}
         | 
| 135 135 | 
             
                      <dateIssued encoding="edtf">988</dateIssued>
         | 
| @@ -138,10 +138,10 @@ describe Stanford::Mods::Imprint do | |
| 138 138 |  | 
| 139 139 | 
             
                  imp = stanford_mods_imprint(smods_rec)
         | 
| 140 140 | 
             
                  updated_element = imp.send(:date_str)
         | 
| 141 | 
            -
                  expect(updated_element).to eq '988  | 
| 141 | 
            +
                  expect(updated_element).to eq '988 CE'
         | 
| 142 142 | 
             
                end
         | 
| 143 143 |  | 
| 144 | 
            -
                it 'adds  | 
| 144 | 
            +
                it 'adds BCE to BCE years' do
         | 
| 145 145 | 
             
                  smods_rec.from_str <<-XML
         | 
| 146 146 | 
             
                    #{mods_origin_info_start_str}
         | 
| 147 147 | 
             
                      <dateIssued encoding="edtf">-5</dateIssued>
         | 
| @@ -150,10 +150,10 @@ describe Stanford::Mods::Imprint do | |
| 150 150 |  | 
| 151 151 | 
             
                  imp = stanford_mods_imprint(smods_rec)
         | 
| 152 152 | 
             
                  updated_element = imp.send(:date_str)
         | 
| 153 | 
            -
                  expect(updated_element).to eq '6  | 
| 153 | 
            +
                  expect(updated_element).to eq '6 BCE'
         | 
| 154 154 | 
             
                end
         | 
| 155 155 |  | 
| 156 | 
            -
                it 'has special handling for the year 0 (1  | 
| 156 | 
            +
                it 'has special handling for the year 0 (1 BCE)' do
         | 
| 157 157 | 
             
                  smods_rec.from_str <<-XML
         | 
| 158 158 | 
             
                    #{mods_origin_info_start_str}
         | 
| 159 159 | 
             
                      <dateIssued>0</dateIssued>
         | 
| @@ -162,7 +162,7 @@ describe Stanford::Mods::Imprint do | |
| 162 162 |  | 
| 163 163 | 
             
                  imp = stanford_mods_imprint(smods_rec)
         | 
| 164 164 | 
             
                  updated_element = imp.send(:date_str)
         | 
| 165 | 
            -
                  expect(updated_element).to eq '1  | 
| 165 | 
            +
                  expect(updated_element).to eq '1 BCE'
         | 
| 166 166 | 
             
                end
         | 
| 167 167 |  | 
| 168 168 | 
             
                it 'presents years + months' do
         | 
| @@ -189,6 +189,31 @@ describe Stanford::Mods::Imprint do | |
| 189 189 | 
             
                  expect(updated_element).to eq 'April  2, 1948'
         | 
| 190 190 | 
             
                end
         | 
| 191 191 |  | 
| 192 | 
            +
                it 'handles very precise EDTF ranges' do
         | 
| 193 | 
            +
                  smods_rec.from_str <<-XML
         | 
| 194 | 
            +
                    #{mods_origin_info_start_str}
         | 
| 195 | 
            +
                      <dateIssued encoding="edtf">2014-01/2020-12-31</dateIssued>
         | 
| 196 | 
            +
                    #{mods_origin_info_end_str}
         | 
| 197 | 
            +
                  XML
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                  imp = stanford_mods_imprint(smods_rec)
         | 
| 200 | 
            +
                  updated_element = imp.send(:date_str)
         | 
| 201 | 
            +
                  expect(updated_element).to eq 'January 2014 - December 31, 2020'
         | 
| 202 | 
            +
                end
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                xit 'handles BC EDTF centuries' do
         | 
| 205 | 
            +
                  # ruby-edtf apparently can't handle this format
         | 
| 206 | 
            +
                  smods_rec.from_str <<-XML
         | 
| 207 | 
            +
                    #{mods_origin_info_start_str}
         | 
| 208 | 
            +
                      <dateIssued encoding="edtf">-09XX</dateIssued>
         | 
| 209 | 
            +
                    #{mods_origin_info_end_str}
         | 
| 210 | 
            +
                  XML
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                  imp = stanford_mods_imprint(smods_rec)
         | 
| 213 | 
            +
                  updated_element = imp.send(:date_str)
         | 
| 214 | 
            +
                  expect(updated_element).to eq '10th century BCE'
         | 
| 215 | 
            +
                end
         | 
| 216 | 
            +
             | 
| 192 217 | 
             
                it 'handles the approximate qualifier' do
         | 
| 193 218 | 
             
                  smods_rec.from_str <<-XML
         | 
| 194 219 | 
             
                    #{mods_origin_info_start_str}
         | 
| @@ -210,13 +235,13 @@ describe Stanford::Mods::Imprint do | |
| 210 235 |  | 
| 211 236 | 
             
                  imp = stanford_mods_imprint(smods_rec)
         | 
| 212 237 | 
             
                  updated_element = imp.send(:date_str)
         | 
| 213 | 
            -
                  expect(updated_element).to eq '[322  | 
| 238 | 
            +
                  expect(updated_element).to eq '[322 CE?]'
         | 
| 214 239 | 
             
                end
         | 
| 215 240 |  | 
| 216 241 | 
             
                it 'handles the inferred qualifier' do
         | 
| 217 242 | 
             
                  smods_rec.from_str <<-XML
         | 
| 218 243 | 
             
                    #{mods_origin_info_start_str}
         | 
| 219 | 
            -
                      <dateIssued encoding="edtf" qualifier="inferred"> | 
| 244 | 
            +
                      <dateIssued encoding="edtf" qualifier="inferred">190x</dateIssued>
         | 
| 220 245 | 
             
                    #{mods_origin_info_end_str}
         | 
| 221 246 | 
             
                  XML
         | 
| 222 247 |  | 
| @@ -9,10 +9,6 @@ describe Stanford::Mods::Coordinate do | |
| 9 9 | 
             
                  expect(described_class.new('W80°--E100°/N487°--S42°')).not_to be_valid
         | 
| 10 10 | 
             
                end
         | 
| 11 11 |  | 
| 12 | 
            -
                it 'rejects coordinates without degree symbols' do
         | 
| 13 | 
            -
                  expect(described_class.new('W 650--W 100/N 700--N 550')).not_to be_valid
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 12 | 
             
                it 'rejects malformed coordinates' do
         | 
| 17 13 | 
             
                  expect(described_class.new('(E29°--E35/°S12°--S16°).')).not_to be_valid
         | 
| 18 14 | 
             
                end
         | 
| @@ -43,7 +39,9 @@ describe Stanford::Mods::Coordinate do | |
| 43 39 | 
             
                  %((W 170⁰--E 55⁰/N 40⁰--S 36⁰).) =>
         | 
| 44 40 | 
             
                    '-170.0 -36.0 55.0 40.0', # superscript 0 is almost a degree character..
         | 
| 45 41 | 
             
                  %((W 0°-W 0°/S 90°---S 90°)) =>
         | 
| 46 | 
            -
                    '-0.0 -90.0 -0.0 -90.0' # one dash, two dashes, three dashes.. what's the difference?
         | 
| 42 | 
            +
                    '-0.0 -90.0 -0.0 -90.0', # one dash, two dashes, three dashes.. what's the difference?
         | 
| 43 | 
            +
                  %((W 030.6--E 068.1/N 041.7--S 042.4)) =>
         | 
| 44 | 
            +
                    '-30.6 -42.4 68.1 41.7'
         | 
| 47 45 | 
             
                }.each do |value, expected|
         | 
| 48 46 | 
             
                  describe 'parsing' do
         | 
| 49 47 | 
             
                    let(:subject) { described_class.new(value) }
         | 
    
        data/spec/origin_info_spec.rb
    CHANGED
    
    | @@ -89,7 +89,7 @@ describe "computations from /originInfo field" do | |
| 89 89 | 
             
              context '#pub_year_int' do
         | 
| 90 90 | 
             
                it_behaves_like "single pub date value", :pub_year_int, 0
         | 
| 91 91 | 
             
                # papyri - the only Spotlight data with BC dates
         | 
| 92 | 
            -
                it '- | 
| 92 | 
            +
                it '-199 for 200 B.C.' do
         | 
| 93 93 | 
             
                  # hd778hw9236
         | 
| 94 94 | 
             
                  mods_str = mods_origin_info_start_str +
         | 
| 95 95 | 
             
                    '<dateCreated keyDate="yes" point="start" qualifier="approximate">200 B.C.</dateCreated>' +
         | 
| @@ -98,7 +98,7 @@ describe "computations from /originInfo field" do | |
| 98 98 | 
             
                  smods_rec.from_str(mods_str)
         | 
| 99 99 | 
             
                  expect(smods_rec.pub_year_int).to eq(-199)
         | 
| 100 100 | 
             
                end
         | 
| 101 | 
            -
                it '- | 
| 101 | 
            +
                it '-210 for 211 B.C.' do
         | 
| 102 102 | 
             
                  # ww728rz0477
         | 
| 103 103 | 
             
                  mods_str = mods_origin_info_start_str +
         | 
| 104 104 | 
             
                    '<dateCreated keyDate="yes" point="start" qualifier="approximate">211 B.C.</dateCreated>' +
         | 
| @@ -3,7 +3,7 @@ describe 'title fields (searchworks.rb)' do | |
| 3 3 | 
             
              before(:all) do
         | 
| 4 4 | 
             
                @smods_rec = Stanford::Mods::Record.new
         | 
| 5 5 | 
             
                @ns_decl = "xmlns='#{Mods::MODS_NS}'"
         | 
| 6 | 
            -
                m = "<mods #{@ns_decl}><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle | 
| 6 | 
            +
                m = "<mods #{@ns_decl}><titleInfo><nonSort>The</nonSort><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle></titleInfo></mods>"
         | 
| 7 7 | 
             
                @smods_rec.from_str m
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| @@ -19,7 +19,7 @@ describe 'title fields (searchworks.rb)' do | |
| 19 19 |  | 
| 20 20 | 
             
              context 'blank title node' do
         | 
| 21 21 | 
             
                it 'should deal with a second blank titleInfo node' do
         | 
| 22 | 
            -
                  m = "<mods #{@ns_decl}><titleInfo> </titleInfo><otherStuff>goes here</otherStuff><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle | 
| 22 | 
            +
                  m = "<mods #{@ns_decl}><titleInfo> </titleInfo><otherStuff>goes here</otherStuff><titleInfo><nonSort>The</nonSort><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle>></titleInfo></mods>"
         | 
| 23 23 | 
             
                  smods_rec_blank_node = Stanford::Mods::Record.new
         | 
| 24 24 | 
             
                  smods_rec_blank_node.from_str m
         | 
| 25 25 | 
             
                  expect(smods_rec_blank_node.sw_short_title).to eq 'The Jerk'
         | 
| @@ -113,7 +113,7 @@ describe 'title fields (searchworks.rb)' do | |
| 113 113 | 
             
                          <subTitle>a history</subTitle>
         | 
| 114 114 | 
             
                        </titleInfo></mods>"
         | 
| 115 115 | 
             
                      @smods_rec.from_str(m)
         | 
| 116 | 
            -
                      expect(@smods_rec.sw_full_title).to eq 'The Olympics | 
| 116 | 
            +
                      expect(@smods_rec.sw_full_title).to eq 'The Olympics: a history.'
         | 
| 117 117 | 
             
                    end #
         | 
| 118 118 | 
             
                    # "end subtitle with period" - see above
         | 
| 119 119 | 
             
                    it 'subtitle already ends with period' do
         | 
| @@ -389,7 +389,7 @@ describe 'title fields (searchworks.rb)' do | |
| 389 389 | 
             
                        <subTitle>a history</subTitle>
         | 
| 390 390 | 
             
                      </titleInfo></mods>"
         | 
| 391 391 | 
             
                    @smods_rec.from_str(m)
         | 
| 392 | 
            -
                    expect(@smods_rec.sw_title_display).to eq 'The Olympics | 
| 392 | 
            +
                    expect(@smods_rec.sw_title_display).to eq 'The Olympics: a history'
         | 
| 393 393 | 
             
                  end #
         | 
| 394 394 | 
             
                  # "end subtitle with period" - see above
         | 
| 395 395 | 
             
                  it 'subtitle already ends with period' do
         | 
    
        data/stanford-mods.gemspec
    CHANGED
    
    | @@ -16,7 +16,7 @@ Gem::Specification.new do |gem| | |
| 16 16 | 
             
              gem.test_files    = gem.files.grep(%r{^spec/})
         | 
| 17 17 | 
             
              gem.require_paths = ["lib"]
         | 
| 18 18 |  | 
| 19 | 
            -
              gem.add_dependency 'mods', '~> 3.0', '>= 3.0. | 
| 19 | 
            +
              gem.add_dependency 'mods', '~> 3.0', '>= 3.0.3'
         | 
| 20 20 | 
             
              # active_support for .ordinalize, eg. 1 -> 1st, 2 -> 2nd for centuries
         | 
| 21 21 | 
             
              gem.add_dependency 'activesupport'
         | 
| 22 22 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: stanford-mods
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Naomi Dushay
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire:
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2022- | 
| 12 | 
            +
            date: 2022-07-14 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: mods
         | 
| @@ -20,7 +20,7 @@ dependencies: | |
| 20 20 | 
             
                    version: '3.0'
         | 
| 21 21 | 
             
                - - ">="
         | 
| 22 22 | 
             
                  - !ruby/object:Gem::Version
         | 
| 23 | 
            -
                    version: 3.0. | 
| 23 | 
            +
                    version: 3.0.3
         | 
| 24 24 | 
             
              type: :runtime
         | 
| 25 25 | 
             
              prerelease: false
         | 
| 26 26 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -30,7 +30,7 @@ dependencies: | |
| 30 30 | 
             
                    version: '3.0'
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 3.0. | 
| 33 | 
            +
                    version: 3.0.3
         | 
| 34 34 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 35 35 | 
             
              name: activesupport
         | 
| 36 36 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -213,11 +213,11 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 213 213 | 
             
                  version: '0'
         | 
| 214 214 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 215 215 | 
             
              requirements:
         | 
| 216 | 
            -
              - - " | 
| 216 | 
            +
              - - ">="
         | 
| 217 217 | 
             
                - !ruby/object:Gem::Version
         | 
| 218 | 
            -
                  version:  | 
| 218 | 
            +
                  version: '0'
         | 
| 219 219 | 
             
            requirements: []
         | 
| 220 | 
            -
            rubygems_version: 3. | 
| 220 | 
            +
            rubygems_version: 3.3.7
         | 
| 221 221 | 
             
            signing_key:
         | 
| 222 222 | 
             
            specification_version: 4
         | 
| 223 223 | 
             
            summary: Stanford specific wrangling of MODS metadata
         |