Hi there, so I ported Memoizable into my app, but I need a way to spec that certain methods have been memoized. Is it a bad idea to add a :memoized_methods attribute to any memoized class / object so; class Abberation memoize :some_method end will allow me to spec; Abberation.memoized_methods.should include(:some_method) I''d prefer this rather than spec-ing Abberation.instance_methods.should include("_unmemoized_some_method") (I still don''t get why it''s not just an "alias_method_chain :some_method, :memoization") MrJ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
> class Abberation > memoize :some_method > end > > will allow me to spec; > > Abberation.memoized_methods.should include(:some_method) > > I''d prefer this rather than spec-ing > > Abberation.instance_methods.should include("_unmemoized_some_method") > > (I still don''t get why it''s not just an > "alias_method_chain :some_method, :memoization")Isn''t that testing the *implementation* rather than the intended effect? I think it''d be better to test the memoization by ensuring the method doesn''t calculate the value twice, rather than asserting (shoulding?) the thing is memoized? -- Cheers Koz --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Well, I''d suggest the opposite. the :memoize functionality is extensively tested in ActiveSupport more extensively than I''m going to remember to do each time I test its use in my app. so if I can do a basic "consequences of being memoized" test, and also say "as far as rails is concerned, this is memoized" then I get primary confidence that it works, i also get secondary confidence that its "memoized", and Rails has promised me that "memoized" works. def something(n) return randomly(n) end memoize :something test "something is declared as memoized" do assert my_model.memoized_methods.include?(:something) end test "something is memoized" do my_model.stubs(:randomly).returns(1,2,3) assert_equal 1, my_model.something(7) assert_equal 1, my_model.something(7) assert_equal 2, my_model.something(100) end I can grab those edge cases into my tests without having to think about them. On Aug 22, 9:12 am, "Michael Koziarski" <mich...@koziarski.com> wrote:> > class Abberation > > memoize :some_method > > end > > > will allow me to spec; > > > Abberation.memoized_methods.should include(:some_method) > > > I''d prefer this rather than spec-ing > > > Abberation.instance_methods.should include("_unmemoized_some_method") > > > (I still don''t get why it''s not just an > > "alias_method_chain :some_method, :memoization") > > Isn''t that testing the *implementation* rather than the intended > effect? I think it''d be better to test the memoization by ensuring > the method doesn''t calculate the value twice, rather than asserting > (shoulding?) the thing is memoized? > > -- > Cheers > > Koz--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
> the :memoize functionality is extensively tested in ActiveSupport > more extensively than I''m going to remember to do each time I test its > use in my app.OK, you''ve convinced me. Send a patch and I''ll look it over . I still think that you should include the implementation test, but I can see where you''re coming from and piggy backing on the AS tests is a good idea. -- Cheers Koz --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
If you have no confidence that "memoize :foo" does its job. How can you have confidence in Foo.memoized_methods? For all you know its lying to you as well. If you think you need these silly DSL assertion tests, just grep your source for extra "confidence". File.open("foo.rb").read.grep(/memoize :foo/) memoization *is* an implementation detail. The helper should not be treated any different than def foo @foo ||= 1 + 1 end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
On Aug 24, 6:48 pm, Joshua Peek <j...@joshpeek.com> wrote:> If you have no confidence that "memoize :foo" does its job. How can > you have confidence in Foo.memoized_methods?Umm... I do have confidence in "memoize :foo" doing its job, Josh. Which is precisely what I''m saying. Grep-ing through source is plainly a crap way. Having "memoize :foo" store the fact that :foo is :memoized will; a) allow me to spec against it b) stop the "unmemoize_all" code having to grep through instance_methods> memoization *is* an implementation detail. The helper should not be > treated any different than > > def foo > @foo ||= 1 + 1 > endIndeed, except you get extra stuff in there for free, like reloading, and it claims to take care of arguments. (although I worry that any function like do_something(true) will instead just unmemoize itself) Will get my laptop out, see what I can do to make a patch. Have a good bank holiday (if you''re in the UK WHOOP WHOOP) :) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/897-patch-memoized-methods-are-stored-in-klass-memoized_methods --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
On Aug 25, 3:21 am, "matthewrudyjac...@gmail.com" <matthewrudyjac...@gmail.com> wrote:> Grep-ing through source is plainly a crap way.j/k ;)> Having "memoize :foo" store the fact that :foo is :memoized will; > a) allow me to spec against it > b) stop the "unmemoize_all" code having to grep through > instance_methodsHow does it stop unmemoize_all from looking for __memoized methods? You''ve just delegated the responsibility.> > memoization *is* an implementation detail. The helper should not be > > treated any different than > > > def foo > > @foo ||= 1 + 1 > > end > > Indeed, > except you get extra stuff in there for free, like reloading, > and it claims to take care of arguments. > (although I worry that any function like do_something(true) will > instead just unmemoize itself)So how would you test this simple memoized method? However you answer, that is how you should test it will the memoize helper. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---