Sha256: b03186e9a0e33fe2de2f836be2e196f6006326f31da4eea305d9a861e0c0e430

Contents?: true

Size: 736 Bytes

Versions: 10

Compression:

Stored size: 736 Bytes

Contents

# frozen_string_literal: true
module Temple
  module Filters
    # Convert [:dynamic, code] to [:static, text] if code is static Ruby expression.
    class StaticAnalyzer < Filter
      def call(exp)
        # Optimize only when Ripper is available.
        if ::Temple::StaticAnalyzer.available?
          super
        else
          exp
        end
      end

      def on_dynamic(code)
        if ::Temple::StaticAnalyzer.static?(code)
          exp = [:static, eval(code).to_s]

          newlines = code.count("\n")
          if newlines == 0
            exp
          else
            [:multi, exp, *newlines.times.map { [:newline] }]
          end
        else
          [:dynamic, code]
        end
      end
    end
  end
end

Version data entries

10 entries across 9 versions & 3 rubygems

Version Path
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.1.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
brakeman-7.0.0 bundle/ruby/3.1.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
brakeman-6.2.2 bundle/ruby/3.1.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
brakeman-6.2.2.rc1 bundle/ruby/3.3.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
brakeman-6.2.1 bundle/ruby/3.1.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
brakeman-6.2.0 bundle/ruby/3.1.0/gems/temple-0.10.3/lib/temple/filters/static_analyzer.rb
temple-0.10.3 lib/temple/filters/static_analyzer.rb
temple-0.10.2 lib/temple/filters/static_analyzer.rb
temple-0.10.1 lib/temple/filters/static_analyzer.rb