DRY up mysql/postgres yaml generators

Hey folks,

Not sure about you, but when setting up a rails project, I get tired of
specifying username, login, etc 3 times, when it should only be done
once, in the config/database.yml file.

To me, it makes more sense to use yaml and do the following:

login: &login
  adapter: mysql
  encoding: utf8
  username: robert
  password: super_secret

development:
  database: cool_app_development
  <<: *login

test:
  database: cool_app_test
  <<: *login

production:
  database: cool_app_production
  <<: *login

So, I've written a patch for mysql and postgres generators to follow the
above, instead of what we are used to. Links below, looking for some
+1's :slight_smile:

link: http://dev.rubyonrails.org/ticket/10069

I use it, but have noticed that a significant number of coders don’t like this YAML feature.

Please, express your opinions here.

The syntax is too obscure and not many people know it. It could
confuse people who use Rails for the first time, or people who are not
intimately familiar with YAML. I think it's more important that the
config file is easy to read, than saving 20 seconds at the beginning
of a project.

I agree. Perhaps it could just be a link in the comments of
database.yml which points to more info on the rails rdoc/trac?

-- Chad

Yes, that's a good compromise.

How about keeping the structure I suggested, but adding comments
explaining the structure for clarification? To me it makes sense
because it DRY's up your code, something Rails advocates, but doesn't
follow in this area.

Yes but Rails also advocates readability, and unfortunately this YAML
syntax doesn't. I think readability is more important.

Agree. Too much DRY leads to perlism sometimes, this is quite close to
that. And not much to gain from it either.

I rarely use the same username and password for my production and
development databases, so not only does this obfuscate the file a
little bit it also makes me have to do more work when I get ready to
do production testing and deployment.

--Jeremy

I totally disagree with the "perlism" comparison here. If it is a
taste thing, that's understandable, but saying the above code snippet
is too hard to read or akin to perlism, I don't agree. But whatever
the consensus is, is cool with me.

Second. I actually use Robert's syntax myself, as I'm sure many developers
do, but it would be too daunting for a first-time configuration.

Now, if there were a way to specify "default:" at the top, and have the
*code* that reads database.yml merge in the default hash keys, that would
be more worthwhile. But -1 for the pure-YAML version.