以 devise 为例,有些时候我们需要调试或者检查一下 gem 中的方法是如何工作的。
方法 1
rails g devise:views
生成出 Devise 的 views,并修改 devise/registrations/new.html.erb
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<% if resource.errors.any? %>
<ul>
<% resource.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
方法 2 Inspecting Ruby Gems
- 查看 Gemfile.lock 中 devise 的版本
git clone git@github.com:plataformatec/devise.git
然后进入 devise 目录并 checkout 到对应版本分支
- 在 Gemfile 中指定 gem 的 path 路径,并再次执行
bundle
gem 'devise', path: "~/projects/devise"
现在你可以自己在其中添加一些代码和断点之类的。
方法 3 Accessing the gem in its own path
$ bundle show grape
# /Users/myuser/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/grape-1.0.2
This will point to the version we already have in Gemfile.lock
, so you don’t need to worry about the version.
# ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/grape-1.0.2/lib/grape/dsl/parameters.rb
def requires(*attrs, &block)
binding.pry
# method implementation..
# resource.inspect 之类的也没问题
end
利用 pry
有时候找不到具体的文件和方法,那可以使用 pry 提供的一些方法。具体自己查吧。
show-doc obj
show-source obj
edit obj
obj
can be a variable referencing an instantiated class, or the constant to a class or module itself.
相关链接