Sha256: ae0666ba7e32cf6d8d340c96348640e71389ef914fa229758aa340b7170fdc8e

Contents?: true

Size: 1.92 KB

Versions: 9

Compression:

Stored size: 1.92 KB

Contents

RSpec::Support.require_rspec_core "source/location"

module RSpec
  module Core
    class Source
      # @private
      # A wrapper for Ripper token which is generated with `Ripper.lex`.
      class Token
        CLOSING_TYPES_BY_OPENING_TYPE = {
          :on_lbracket    => :on_rbracket,
          :on_lparen      => :on_rparen,
          :on_lbrace      => :on_rbrace,
          :on_heredoc_beg => :on_heredoc_end
        }.freeze

        CLOSING_KEYWORDS_BY_OPENING_KEYWORD = {
          'do' => 'end'
        }.freeze

        attr_reader :token

        def self.tokens_from_ripper_tokens(ripper_tokens)
          ripper_tokens.map { |ripper_token| new(ripper_token) }.freeze
        end

        def initialize(ripper_token)
          @token = ripper_token.freeze
        end

        def location
          @location ||= Location.new(*token[0])
        end

        def type
          token[1]
        end

        def string
          token[2]
        end

        def ==(other)
          token == other.token
        end

        alias_method :eql?, :==

        def inspect
          "#<#{self.class} #{type} #{string.inspect}>"
        end

        def keyword?
          type == :on_kw
        end

        def opening?
          opening_delimiter? || opening_keyword?
        end

        def closed_by?(other)
          closed_by_delimiter?(other) || closed_by_keyword?(other)
        end

        private

        def opening_delimiter?
          CLOSING_TYPES_BY_OPENING_TYPE.key?(type)
        end

        def opening_keyword?
          return false unless keyword?
          CLOSING_KEYWORDS_BY_OPENING_KEYWORD.key?(string)
        end

        def closed_by_delimiter?(other)
          other.type == CLOSING_TYPES_BY_OPENING_TYPE[type]
        end

        def closed_by_keyword?(other)
          return false unless other.keyword?
          other.string == CLOSING_KEYWORDS_BY_OPENING_KEYWORD[string]
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 4 rubygems

Version Path
tdiary-5.0.1 vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb
guesswhat-1.1.0 vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb
guesswhat-1.0.1 vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb
guesswhat-1.0.0 vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb
guesswhat-0.1.0 vendor/bundle/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/rspec-core-3.4.4/lib/rspec/core/source/token.rb
rspec-core-3.5.0.beta2 lib/rspec/core/source/token.rb
rspec-core-3.4.4 lib/rspec/core/source/token.rb
rspec-core-3.4.3 lib/rspec/core/source/token.rb