Sha256: 941c680cc2f71db6abc4d784e196a99d615ae5fcbc0360e1e24b56670c626c0b

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: false

ARGUMENT_ERROR_TEXT = 'Parameter 1, the block of text to parse, is not a string'.freeze

# The map reduce (MR) algorithm. Faster by ~2x than the other algorithm.
# Maps parts of the text such as 'at' or 'FOUR' down to '@' and '4'
# removes spaces etc, and then runs a simple regex over the remainder
# Information loss occurs and hence it can't return indices
MR_ALGO = 'MR'.freeze

# The glorified regex (GR) algorithm.
# An obtuse and yet heartily strong regex that does a single pass over
# the text. Since the regex is so complicated and robust - it is slower
# than the map reduce algorithm. No information loss occurs
# so we can return indices of where the phone numbers and etc. exist
GR_ALGO = 'GR'.freeze

# Given some text it replaces each matched instance with the given insertable
def replace(text, instances, &block) # rubocop:disable Lint/UnusedMethodArgument
  altered_text = String.new(text)

  instances.map do |instance|
    insertable = yield instance
    altered_text[instance[:start_offset]...instance[:end_offset]] = insertable
  end
  altered_text
end

# Given some text it scans the text with the given regex for matches
def scan(text, regex, type)
  text
    .enum_for(:scan, regex)
    .map do
      {
        start_offset: Regexp.last_match.begin(0),
        end_offset: Regexp.last_match.begin(0) + Regexp.last_match.to_s.length,
        value: Regexp.last_match.to_s,
        type: type
      }
    end
end

# Check if two ranges overlap
def ranges_overlap?(r1, r2)
  r1.cover?(r2.first) || r2.cover?(r1.first)
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ramparts-0.3.1 lib/ramparts/helpers.rb
ramparts-0.3.0 lib/ramparts/helpers.rb