title: How do I implement configurations and settings?
body: <p>I'm writing a system that is deployed in several places and each site needs its own configurations and settings.  A "configuration" is a named value that is necessary to a particular site (e.g., the database URL, S3 bucket name); every configuration is necessary, there is not usually a default, and it's typically string-valued.  A setting is a named value but it just tweaks the behavior of the system; it's often numeric or Boolean, and there's usually some default.</p>
  
  <p>So far, I've been using property files or thing like them, but it's a terrible solution.  Several times, a developer has added a requirement for a configuration but not added the value to file for the live configuration, so the new release passed all the tests, then failed when released to live.</p>
  
  <p>Better, of course, for every file to be compiled — so if there's a missing configuration, or one of the wrong type, it won't get past the compiler — and inject the site-specific class into the build for each site.  As a bones, a Scala file can easy model more complex values, especially lists, but also maps and tuples.</p>
  
  <p>The downside is, the files are sometimes maintained by people who aren't developers, so it has to be pretty self-explanatory, which was the advantage of property files.  (Someone explain XML configurations to me: all the complexity of a compilable file but the run-time risk of a property file.)</p>
  
  <p>What I'm looking for is an easy pattern for defining a group required names and allowable values.  Any suggestions?</p>