Sha256: 672b6d580e6c6266ec285e4c4d29fd989726935008e12f66f11f2d7a54b3bc62

Contents?: true

Size: 917 Bytes

Versions: 1

Compression:

Stored size: 917 Bytes

Contents

require 'forwardable'

module Salt
  class Scanner
    class Token
      attr_reader :type
      attr_reader :values
      attr_reader :line
      attr_reader :column
      extend Forwardable
      include Comparable

      def_delegators :to_a, :[]

      def initialize(type, values, line = 0, column = 0)
        @type = type.to_s.upcase.intern
        @values = values
        @line = line
        @column = column
        @array = [@type].concat(@values.clone.freeze).freeze
        freeze
      end

      def to_a
        @array
      end

      def inspect
        "#<#{self.class}(#{self.type}) #{self.values.inspect}>"
      end

      def <=>(other)
        case other
        when Token
          to_a <=> other.to_a
        when Array
          to_a <=> other
        else
          raise ArgumentError,
            "Don't know how to compare Token with #{other}"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
salt-0.0.2 lib/salt/scanner/token.rb