Sha256: 2c83e6d6dd01faf788c022c57b19c21a43988d3981fed5971cb080de7c0fcd7e

Contents?: true

Size: 1.26 KB

Versions: 14

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require 'opal/rewriters/base'

module Opal
  module Rubyspec
    class FiltersRewriter < Opal::Rewriters::Base
      class << self
        def filters
          @filters ||= []
        end

        def filter(spec_name)
          filters << spec_name
        end

        alias fails filter
        alias fails_badly filter

        def filtered?(spec_name)
          filters.include?(spec_name)
        end

        def clear_filters!
          @filters = []
        end
      end

      def initialize
        @specs_stack = []
      end

      RUBYSPEC_DSL = %i[describe it context].freeze

      def on_send(node)
        _recvr, method_name, *args = *node

        if rubyspec_dsl?(method_name)
          spec_name, _ = *args.first
          begin
            @specs_stack.push(spec_name)
            if skip?
              s(:nil)
            else
              super
            end
          ensure
            @specs_stack.pop
          end
        else
          super
        end
      end

      def skip?
        self.class.filtered?(current_spec_name)
      end

      def rubyspec_dsl?(method_name)
        RUBYSPEC_DSL.include?(method_name)
      end

      def current_spec_name
        @specs_stack.join(' ')
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
opal-1.3.0.alpha1 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.2.0 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.2.0.beta1 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.1.1 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.1.1.rc1 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.1.0 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.1.0.rc1 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.5 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.4 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.3 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.2 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.1 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.0 lib/opal/rewriters/rubyspec/filters_rewriter.rb
opal-1.0.0.beta1 lib/opal/rewriters/rubyspec/filters_rewriter.rb