matthewrudy / memoist

ActiveSupport::Memoizable with a few enhancements

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Odd reload behavior with optional args

SamGerber-zz opened this issue · comments

It seems to me that passing true here should cause the ivar to continue growing?

$ pry
[1] pry(main)> require 'memoist'
=> true
[2] pry(main)> class Thing
[2] pry(main)*   extend Memoist
[2] pry(main)*   def grow(opts = {})
[2] pry(main)*     @num ||= 0
[2] pry(main)*     p 'growing'
[2] pry(main)*     @num += 1
[2] pry(main)*   end
[2] pry(main)*   memoize :grow
[2] pry(main)* end
=> :grow
[3] pry(main)> thing = Thing.new
=> #<Thing:0x007f90c001b938>
[4] pry(main)> thing.grow
"growing"
=> 1
[5] pry(main)> thing.grow
=> 1
[6] pry(main)> thing.grow(true)
"growing"
=> 2
[7] pry(main)> thing.grow(true)
=> 2
[8] pry(main)> thing.grow(true)
=> 2

Like so:

$ pry
[1] pry(main)> require 'memoist'
=> true
[2] pry(main)> class Thing
[2] pry(main)*   extend Memoist
[2] pry(main)*   def grow(opts)
[2] pry(main)*     @num ||= 0
[2] pry(main)*     p 'growing'
[2] pry(main)*     @num += 1
[2] pry(main)*   end
[2] pry(main)*   memoize :grow
[2] pry(main)* end
=> :grow
[3] pry(main)> thing = Thing.new
=> #<Thing:0x007f9e42ba2bc8>
[4] pry(main)> thing.grow({})
"growing"
=> 1
[5] pry(main)> thing.grow({})
=> 1
[6] pry(main)> thing.grow({}, true)
"growing"
=> 2
[7] pry(main)> thing.grow({}, true)
"growing"
=> 3
[8] pry(main)> thing.grow({}, true)
"growing"
=> 4
[9] pry(main)> thing.grow({})
=> 4
[10] pry(main)> thing.grow({hi: true})
"growing"
=> 5
[11] pry(main)> thing.grow({hi: true})
=> 5
[12] pry(main)> thing.grow({hi: true}, true)
"growing"
=> 6

My mistake, this works as expected. opts was swallowing the true. In order to get it to reload, a second argument must be passed:
thing.grow({}, true)