Class: RubyQueryHook

Inherits:
Mumukit::Templates::FileHook
  • Object
show all
Defined in:
lib/query_hook.rb

Instance Method Summary collapse

Instance Method Details

#build_state(cookie) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/query_hook.rb', line 50

def build_state(cookie)
  (cookie||[]).map do |statement|
  "begin\n  \#{statement}\nrescue\nend\n"
  end
end

#command_line(filename) ⇒ Object



30
31
32
# File 'lib/query_hook.rb', line 30

def command_line(filename)
  "ruby #{filename}"
end


61
62
63
# File 'lib/query_hook.rb', line 61

def compile_cookie(cookie)
  build_state(cookie).join("\n")
end

#compile_file_content(r) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/query_hook.rb', line 8

def compile_file_content(r)
  "  class MumukiConsole\n    def self.write(string)\n    end\n    def self.enter_cookie!\n      @@old_stdout = $stdout\n      $stdout = MumukiConsole\n    end\n    def self.exit_cookie!\n      $stdout = @@old_stdout\n    end\n  end\n  \#{r.extra}\n  \#{r.content}\n  MumukiConsole.enter_cookie!\n  \#{compile_cookie(r.cookie)}\n  MumukiConsole.exit_cookie!\n  \#{compile_query(r.query)}\n"
end

#compile_query(query) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/query_hook.rb', line 42

def compile_query(query)
  if query.start_with? 'def '
    "#{query}\nputs \"=> nil\""
  else
    "print('=> ' + (#{query}).inspect)"
  end
end

#error_output?(result) ⇒ Boolean



65
66
67
# File 'lib/query_hook.rb', line 65

def error_output?(result)
  /\.rb:(\d)+:in `<main>': / =~ result
end

#post_process_file(_file, result, status) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/query_hook.rb', line 34

def post_process_file(_file, result, status)
  if status == :failed && error_output?(result)
    [sanitize_error_output(result), status]
  else
    super
  end
end

#sanitize_error_output(result) ⇒ Object



69
70
71
# File 'lib/query_hook.rb', line 69

def sanitize_error_output(result)
  result.split("<main>': ").second
end

#tempfile_extensionObject



4
5
6
# File 'lib/query_hook.rb', line 4

def tempfile_extension
  '.rb'
end