class Regexp

Constants

EXTENDED

Public Class Methods

from_s(str, *options, ignore_invalid: false) click to toggle source
# File lib/bblib/core/util/regexp.rb, line 25
def self.from_s(str, *options, ignore_invalid: false)
  opt_map = options.map { |o| BBLib::REGEXP_OPTIONS.find { |k, v| o == k || o == k.to_s || v.include?(o) || v.include?(o.to_s.to_sym) }.first }.compact
  return Regexp.new(str, opt_map.inject(0) { |s, x| s += BBLib::REGEXP_MODE_HASH[x] }) if str.encap_by?('(') || !str.start_with?('/')
  str += opt_map.join
  mode = 0
  unless str.end_with?('/')
    str.split('/').last.chars.uniq.each do |l|
      raise ArgumentError, "Invalid Regexp mode: '#{l}'" unless ignore_invalid || BBLib::REGEXP_MODE_HASH[l.to_sym]
      mode += (BBLib::REGEXP_MODE_HASH[l.to_sym] || 0)
    end
    str = str[0..(str.rindex('/') || -1)]
  end
  Regexp.new(str.uncapsulate('/', limit: 1), mode)
end