Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Pry within Factory Girl Rails?

In order to debug a factory I've inserted rescue binding.pry at the end of a problematic line:

after_create do |my_object, proxy|
  my_object.foreign_key_id = proxy.generated_attribute rescue binding.pry

Unfortunately, inside the resulting FactoryGirl::Declaration::Implicit context I can't seem to access the context like I would in "normal" code (NameError: undefined local variable or method `proxy' for #<FactoryGirl::Declaration::Implicit:0x0...>). How do I inspect and manipulate my_object and proxy within the Pry session?

The code is called as part of the background of a Cucumber feature:

Given the following my_objects exist:
| property |
| value    |

factory_girl_rails and factory_girl/step_definitions.rb are required by the support script.

like image 818
l0b0 Avatar asked Apr 16 '12 12:04

l0b0


1 Answers

In order to allow attribute names to define attributes without having a block argument, factory_girl evaluates the definition block using instance_eval and undefines most private methods on Object, including binding. That means that when you call binding.pry above, you're not calling pry on the binding for that block; instead, you're defining a new attribute with a name of "binding" and invoking pry on the created attribute definition.

You can get around this by using Kernel.binding.pry instead.

like image 135
Joe Ferris Avatar answered Oct 20 '22 00:10

Joe Ferris