method

find_offset

Importance_0
v7.1.3.2 - Show latest stable - 0 notes - Class: ActionView::Template::Handlers::ERB
  • 1.0.0
  • 1.1.6
  • 1.2.6
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.8
  • 3.0.0
  • 3.0.9
  • 3.1.0
  • 3.2.1
  • 3.2.8
  • 3.2.13
  • 4.0.2
  • 4.1.8
  • 4.2.1
  • 4.2.7
  • 4.2.9
  • 5.0.0.1
  • 5.1.7
  • 5.2.3
  • 6.0.0
  • 6.1.3.1
  • 6.1.7.7
  • 7.0.0
  • 7.1.3.2 (0)
  • 7.1.3.4 (0)
  • What's this?
find_offset(compiled, source_tokens, error_column) private

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File actionview/lib/action_view/template/handlers/erb.rb, line 108
        def find_offset(compiled, source_tokens, error_column)
          compiled = StringScanner.new(compiled)

          passed_tokens = []

          while tok = source_tokens.shift
            tok_name, str = *tok
            case tok_name
            when :TEXT
              loop do
                break if compiled.match?(str)
                compiled.getch
              end
              raise LocationParsingError unless compiled.scan(str)
            when :CODE
              if compiled.pos > error_column
                raise LocationParsingError, "We went too far"
              end

              if compiled.pos + str.bytesize >= error_column
                offset = error_column - compiled.pos
                return passed_tokens.map(&:last).join.bytesize + offset
              else
                unless compiled.scan(str)
                  raise LocationParsingError, "Couldn't find code snippet"
                end
              end
            when :OPEN
              next_tok = source_tokens.first.last
              loop do
                break if compiled.match?(next_tok)
                compiled.getch
              end
            when :CLOSE
              next_tok = source_tokens.first.last
              loop do
                break if compiled.match?(next_tok)
                compiled.getch
              end
            else
              raise LocationParsingError, "Not implemented: #{tok.first}"
            end

            passed_tokens << tok
          end
        end
Register or log in to add new notes.