On 21 Jul 2009, at 20:58, Tom Stuart wrote:

Hi,

A Rails project I'm working on has, for better or worse, some data- driven structure in its models: a few model classes need certain values (e.g. some enumerations) to be available in the database at load time in order for certain bits of metaprogramming to kick off correctly. It would be possible to do this all lazily instead of when the classes load, but in reality the database values are always there and everything already works beautifully so it's hard to justify putting in the effort required to be that lazy.

The problem is that RSpec starts with an empty test database and I can't see the best way or place to prepopulate it before the models get loaded (i.e. when Rails bootstraps, since config.cache_classes = true), ideally so that both rake spec and script/spec do the correct setup in time. It would be incredibly convenient to be able to use Fixtures.create_fixtures to do the loading so that the required data can live in YAML fixtures, but maybe it's optimistic to try to do that before Rails has loaded.

Or maybe I'm just going about this completely the wrong way, and someone has a clever idea about what the right way is? That would be brilliant.

One challenge for you before we dig into how to solve it the way you've suggested: do you really need to keep these enumerables in the database, or could you keep them in code? That is, is there a valid use case where they will be altered at run-time, or do they change so seldom that it would be OK to have to release a new version of the code when they need to be changed?

I ask because these things tend to get a lot easier if you're not having to mess around with databases, so it's always worth pushing back on that one first.

cheers,
Matt Wynne

http://mattwynne.net
+447974 430184

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to