Sha256: ea9aae46ae625c83380e47c0f32ee76aab770de6b9969ce2de3ff06dd64f3b5a

Contents?: true

Size: 1.09 KB

Versions: 49

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

require "ripper"

module Ariadne
  module Forms
    # :nodoc:
    class BufferRewriter < Ripper
      class << self
        def rewrite(code)
          parser = new(code, "(code)", 0)
          parser.parse

          line_offsets = calc_line_offsets(code)

          code.dup.tap do |result|
            parser.var_refs.reverse_each do |lineno, stop|
              line_offset = line_offsets[lineno]
              stop += line_offset
              stop -= 1 if stop < code.length
              start = stop - "@output_buffer".length
              result[start...stop] = "output_buffer"
            end
          end
        end

        private

        def calc_line_offsets(code)
          idx = -1

          [0].tap do |offsets|
            while (idx = code.index(/\r?\n/, idx + 1))
              offsets << Regexp.last_match.end(0)
            end
          end
        end
      end

      def on_var_ref(var)
        return unless var == "@output_buffer"

        var_refs << [lineno, column]
      end

      def var_refs
        @var_refs ||= []
      end
    end
  end
end

Version data entries

49 entries across 49 versions & 1 rubygems

Version Path
ariadne_view_components-0.0.93.2 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.93.1 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.93 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.92 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.91 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.90 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.89.1 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.89 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.88 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.87 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.9 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.8 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.7 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.6 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.5 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.4 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.3 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.2 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86.1 lib/ariadne/forms/buffer_rewriter.rb
ariadne_view_components-0.0.86 lib/ariadne/forms/buffer_rewriter.rb