Pergunta

I am using Spree, and Spree has a class called Order that looks like:

module Spree
  class Order
    # class definition.
  end
end

In my own app, I have been customising Order like so:

Spree::Order.class_eval do
  # customisations
end

My question is, can I simply just do this:

module Spree
  class Order
    # My own customisations.
  end
end

Any downsides to this? Essentially, I want to avoid using class_eval.

Foi útil?

Solução

Benjamin, reopen class will not inform you (but class_eval will raise error) if the existing class does not exist or not loaded.

But if you have test coverage, reopen class should be safe I guess?

See https://stackoverflow.com/a/900508/474597 for more detailed explanation.

Outras dicas

you cant alter the class without class_eval. just try to override one method, and all other methods are gone. with class_eval you avoid it. thats the ruby way.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top