Module: Sloprb::Transformer

Defined in:
lib/sloprb/transformer.rb

Defined Under Namespace

Classes: SyntaxError

Class Method Summary collapse

Class Method Details

.call(path, source, chat: nil) ⇒ Object



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

def call(path, source, chat: nil)
  source ||= File.read(path)

  return unless source.include?(":slop:")

  slop_methods = Parser.call(source)
  return if slop_methods.empty?

  bodies = Generator.call(source, slop_methods, chat:)
  transformed = splice(source, slop_methods, bodies)

  validate_syntax!(transformed)

  if ENV["SLOPRB_DEBUG"]
    File.write("#{path.sub(/\.rb$/, "")}.slop.rb", transformed)
  end

  transformed
rescue => e
  raise if e.is_a?(SyntaxError)
  warn "sloprb: Failed to generate methods for #{path}: #{e.message}"
  nil
end