class Stockade::Lexer

Class Lexer

Usage `Stockade::Lexer.call(context)`

Returns list of found lexemes.

Attributes

context[R]

Public Class Methods

call(context) click to toggle source
# File lib/stockade/lexer.rb, line 24
def self.call(context)
  new(context).call
end
new(context) click to toggle source
# File lib/stockade/lexer.rb, line 20
def initialize(context)
  @context = context.dup
end

Public Instance Methods

call() click to toggle source
# File lib/stockade/lexer.rb, line 40
def call
  lexeme_classes.map do |lexeme_class|
    tokenize(lexeme_class)
  end.flatten
end
lexeme_classes() click to toggle source
# File lib/stockade/lexer.rb, line 28
def lexeme_classes
  [
    Stockade::Lexemes::PaymentCard,
    Stockade::Lexemes::Date,
    Stockade::Lexemes::Email,
    Stockade::Lexemes::Phone,
    Stockade::Lexemes::Word,
    Stockade::Lexemes::Firstname,
    Stockade::Lexemes::Lastname
  ]
end

Private Instance Methods

tokenize(lexeme_class) click to toggle source
# File lib/stockade/lexer.rb, line 48
def tokenize(lexeme_class)
  lexemes = []
  scanner = StringScanner.new(context)

  while scanner.scan_until(lexeme_class.regex)
    lexemes << lexeme_class.new(
      scanner.matched,
      scanner.pos - scanner.matched.size
    )
  end

  lexemes.select(&:valid?)
end