Sha256: f9a7223536f09e1d4a4403a16763b0c2bfac03b687010f5a888365dd88ce4488

Contents?: true

Size: 1.46 KB

Versions: 205

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module EacRubyUtils
  class StringDelimited
    attr_reader :string, :begin_delimiter, :end_delimiter

    def initialize(string, begin_delimiter, end_delimiter)
      @string = string
      @begin_delimiter = begin_delimiter
      @end_delimiter = end_delimiter
    end

    def inner
      between_indexes(content_index, end_index).to_s
    end

    def outer
      between_indexes(begin_index, after_end_index).to_s
    end

    def without_inner
      without_join(
        between_indexes(sos_index, content_index), between_indexes(end_index, eos_index)
      )
    end

    def without_outer
      without_join(
        between_indexes(sos_index, begin_index),
        between_indexes(after_end_index, eos_index)
      )
    end

    private

    def after_end_index
      end_index.if_present { |v| v + end_delimiter.length }
    end

    def begin_index
      string.index(begin_delimiter)
    end

    def between_indexes(a_begin_index, a_end_index)
      a_begin_index && a_end_index ? string[a_begin_index, a_end_index - a_begin_index] : nil
    end

    def content_index
      begin_index.if_present { |v| v + begin_delimiter.length }
    end

    def without_join(*strings)
      return string if strings.any?(&:nil?)

      strings.join('')
    end

    def end_index
      content_index.if_present { |_v| string.index(end_delimiter, content_index) }
    end

    def sos_index
      0
    end

    def eos_index
      string.length
    end
  end
end

Version data entries

205 entries across 205 versions & 4 rubygems

Version Path
eac_tools-0.76.1 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.76.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.75.2 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_ruby_utils-0.119.2 lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.75.1 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.75.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_ruby_utils-0.119.1 lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.74.1 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.74.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.73.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_ruby_utils-0.119.0 lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.72.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_ruby_utils-0.118.1 lib/eac_ruby_utils/string_delimited.rb
eac_ruby_utils-0.118.0 lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.70.1 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.70.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.69.1 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_ruby_utils-0.117.1 lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.69.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb
eac_tools-0.68.0 sub/eac_ruby_utils/lib/eac_ruby_utils/string_delimited.rb