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