Sha256: dd1f1f27727fe2ea5947716b9aaf2527f36594a2176e06879b9341c80c0c5033
Contents?: true
Size: 1.09 KB
Versions: 3
Compression:
Stored size: 1.09 KB
Contents
require 'dentaku/tokenizer' module Dentaku class Expression attr_reader :tokens def initialize(string, variables={}) @raw = string @tokenizer ||= Tokenizer.new @tokens = @tokenizer.tokenize(@raw) replace_identifiers_with_values(variables) end def identifiers @tokens.select { |t| t.category == :identifier }.map { |t| t.value } end def unbound? identifiers.any? end private def replace_identifiers_with_values(variables) @tokens.map! do |token| if token.is?(:identifier) replace_identifier_with_value(token, variables) else token end end end def replace_identifier_with_value(token, variables) key = token.value.to_sym if variables.key? key value = variables[key] type = type_for_value(value) Token.new(type, value) else token end end def type_for_value(value) case value when String then :string when TrueClass, FalseClass then :logical else :numeric end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dentaku-1.2.1 | lib/dentaku/expression.rb |
dentaku-1.2.0 | lib/dentaku/expression.rb |
dentaku-1.1.0 | lib/dentaku/expression.rb |