Class: ZombieKiller

Inherits:
Object
  • Object
show all
Defined in:
lib/zombie_killer/killer.rb,
lib/zombie_killer/version.rb

Overview

The main class called from the CLI

Constant Summary collapse

VERSION =
"0.4".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(eager: false) ⇒ ZombieKiller

Returns a new instance of ZombieKiller.



12
13
14
# File 'lib/zombie_killer/killer.rb', line 12

def initialize(eager: false)
  @eager = eager
end

Instance Attribute Details

#eagerBoolean (readonly)

Returns use the EagerRewriter.

Returns:

  • (Boolean)

    use the EagerRewriter



10
11
12
# File 'lib/zombie_killer/killer.rb', line 10

def eager
  @eager
end

Instance Method Details

#kill_file(filename, new_filename, unsafe: false) ⇒ Object

Parameters:

  • new_filename

    may be the same as filename



37
38
39
40
41
42
43
44
# File 'lib/zombie_killer/killer.rb', line 37

def kill_file(filename, new_filename, unsafe: false)
  new_string = kill_string(File.read(filename), filename, unsafe: unsafe)

  File.write(new_filename, new_string)
rescue
  puts "While processing #{filename}"
  raise
end

#kill_string(code, filename = "(inline code)", unsafe: false) ⇒ Object Also known as: kill

Parameters:

  • code (String)
  • filename (String) (defaults to: "(inline code)")


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/zombie_killer/killer.rb', line 19

def kill_string(code, filename = "(inline code)", unsafe: false)
  fixed_point(code) do |c|
    parser   = Parser::CurrentRuby.new
    rewriter = eager ? EagerRewriter.new : ZombieKillerRewriter.new(unsafe: unsafe)
    buffer   = Parser::Source::Buffer.new(filename)
    buffer.source = c
    ast = parser.parse(buffer)
    if ast
      rewriter.rewrite(buffer, ast)
    else
      puts "Parse error for '#{filename}', returning it unchanged"
      return code
    end
  end
end