Class: Mayl::Repl

Inherits:
Object
  • Object
show all
Includes:
Colors
Defined in:
lib/mayl/repl.rb

Overview

Public: The class responsible for reading user input, interpreting it and executing associated commands.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Colors

#color

Constructor Details

#initialize(path) ⇒ Repl

Public: Initializes a new REPL from a given path.

path - The path to get the locales from (defaults to ‘config/locales’).



13
14
15
16
17
# File 'lib/mayl/repl.rb', line 13

def initialize(path)
  path    ||= 'config/locales'
  @env    = Env.new(path)
  @parser = Parser.new(@env)
end

Instance Attribute Details

#parserObject (readonly)

Returns the value of attribute parser.



8
9
10
# File 'lib/mayl/repl.rb', line 8

def parser
  @parser
end

Instance Method Details

#startObject

Public: Fires up the REPL that parses and executes given commands.

Returns nothing.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/mayl/repl.rb', line 22

def start
  locales = @env.locales.map(&:name)
  stty_save = `stty -g`.chomp
  prompt = color(:red, "> ")
  puts color(:green, "Detected locales: #{locales.join(', ')}")

  env = @env
  Readline.completion_proc = proc { |s| Commands.autocomplete(s, env) }
  Readline.completion_append_character = ''

  begin
    while input = Readline.readline(prompt, true)
      begin
        value = @parser.parse(input.chomp).execute
        @env.last_value = value
        @env.commit
        prompt = color(:red, [@env.namespace, '> '].reject(&:empty?).join(' '))
      rescue => e
        print "Error: #{e.message}"
      ensure
        print "\n"
      end
    end
  rescue Interrupt
    system("stty", stty_save)
    exit
  end
end