collectiveidea / interactor

Interactor provides a common interface for performing complex user interactions.
MIT License
3.36k stars 212 forks source link

Using display as property name on Context #183

Open lenart opened 4 years ago

lenart commented 4 years ago

I stumbled across this issue during specs where I named a property on the Context object display. The results were surprising and, after some code reading, it turns out it has to do with the way OpenStruct lazy-loads/queries properties.

Sample class

class SampleInteractor
  include Interactor

  def call
    context.display = 'Foobar'
  end
end

Expected

SampleInteractor.call.display # => 'Foobar'

Actual

SampleInteractor.call.display # => #<Interactor::Context display="Foobar">nil

As mentioned this problem is in using OpenStruct where the same behavior can be observed and it's all because there is already Object#display defined on Object.

Maybe something worth adding to the docs as a caveat?