Nokogiri太棒了。我可以执行类似#css('.bla')
的操作,它将返回第一个匹配元素。
现在,我们需要对Ruby源代码进行一些解析,找到类中的所有方法等。我们使用的是Ruby_parser gem,但它所做的只是梳理源代码并吐出S表达式。对于这些S表达式,有没有像Nokogiri这样的东西可以做一些事情,比如"为找到的第一个名为"foo"的方法返回S表达式"?
SExpPath
库。
虽然我接受了Jörg的答案,因为它更完整,但我最终发现了其他我最终使用的东西。ruby_parser安装一个名为sex_processor的依赖gem(它在这个gem中实际定义了Sexp
类)。如果您查看类文档,有一些方法将有助于基本的Ruby查找器。这里有一个例子:
class Sexp
def name # convenience method
self.sexp_body.first
end
end
# Print out all instance methods within classes. Beware - if "code" sexp itself
# is a class, it will NOT be included!
code = RubyParser.new.parse(IO.read('/src/file'))
code.each_of_type(:class){ |klass|
klass.each_of_type(:defn){ |meth|
puts meth.name
}
}
我对您正在寻找的gem一无所知,但您可以使用instance_methods
:在一个类中找到所有方法
class Foo
def bar
end
end
irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]
您可以检查rubinius解析器,它可能会帮助您做您想做的事情。