class RemoteRuby::SourceExtractor

Receives a block and extracts Ruby code (as a string) with this block's source

Public Instance Methods

extract(&block) click to toggle source
# File lib/remote_ruby/source_extractor.rb, line 9
def extract(&block)
  ast = Parser::CurrentRuby.parse(block.source)
  block_node = find_block(ast)

  return '' unless block_node

  _, body = parse(block_node)
  Unparser.unparse(body)
end

Private Instance Methods

find_block(node) click to toggle source
# File lib/remote_ruby/source_extractor.rb, line 21
def find_block(node)
  return nil unless node.is_a? AST::Node
  return node if node.type == :block

  node.children.each do |child|
    res = find_block(child)
    return res if res
  end

  nil
end
parse(node) click to toggle source
# File lib/remote_ruby/source_extractor.rb, line 33
def parse(node)
  args = node.children[1].children
  body = node.children[2]
  [args, body]
end