method

find_offset

Importance_0
v8.0.0 - Show latest stable - 0 notes - Class: ActionView::Template::Handlers::ERB
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.