class Ellipses::Client::Source

Attributes

series[R]
server[R]

Public Class Methods

new(lines, series, server) click to toggle source
# File lib/ellipses/client/source.rb, line 10
def initialize(lines, series, server)
  @lines  = lines
  @series = series || []
  @server = server
end

Private Class Methods

from_file(file, config, series = nil) click to toggle source
# File lib/ellipses/client/source.rb, line 63
def from_file(file, config, series = nil)
  lines = File.readlines(Support.file!(file, error: Error)).lazy
  new lines, series, Server::Application.new(config.paths)
end

Public Instance Methods

compile() click to toggle source
# File lib/ellipses/client/source.rb, line 28
def compile
  new_lines = Lines[]

  lines.each do |line|
    new_lines.append(*(Parser.match?(line) ? execute_and_record(line) : line))
  end

  @lines = new_lines
end
decompile() click to toggle source
# File lib/ellipses/client/source.rb, line 20
def decompile
  return if series.empty?

  while (lock = series.shift)
    lines.substitute_uniq_like_chunk!(lock.insertion, lock.directive)
  end
end
lines() click to toggle source
# File lib/ellipses/client/source.rb, line 16
def lines
  @lines.is_a?(Lines) ? @lines : (@lines = Lines.new @lines.to_a)
end
recompile() click to toggle source
# File lib/ellipses/client/source.rb, line 38
def recompile
  decompile
  compile
end

Private Instance Methods

execute(line, **kwargs) click to toggle source
# File lib/ellipses/client/source.rb, line 45
def execute(line, **kwargs)
  raise Error, "No directive found: #{line}" unless (parsed = Parser.parse(line))

  directive = Directive.new(parsed.lexemes, server)

  outlines = directive.execute(**kwargs)
  outlines.map! { |outline| Support.prefixize_non_blank(outline, parsed.prefix, excludes: "\f\f\f") }

  Lines[outlines]
end
execute_and_record(line, **kwargs) click to toggle source
# File lib/ellipses/client/source.rb, line 56
def execute_and_record(line, **kwargs)
  result = execute(line, **kwargs)
  series << Meta::Lock.new(directive: line, insertion: result.insertion_by_entropy)
  result
end