RailsMode
I’ve been spreading things like this all around my code, where I wanted to do something differently in production vs. development mode. Previously, I’d write something like this:
- if ENV[’RAILS_ENV’] == ‘production’
- … perform magic …
- end
While this is pretty simple, it just didn’t feel very DRY. So, I decided to use this as a reason to learn about modules and mixins.
I have a generic plug-in in vendor/plugins that I put small bits of code like this. You might as well, but if you don’t, you can drop this in a helper.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
module RailsMode def railsmode(*list) list.map! do |item| item.to_s end if block_given? if list.include?(ENV['RAILS_ENV']) yield end else return list.include?(ENV['RAILS_ENV']) end end end |
I also put this line in my environment.rb file:
1 2 |
include RailsMode
|
This mixes the module into the current class. Doing this in environment.rb makes it available everywhere in rails. Putting that line in a specific file would also work, such as a controller, or a helper.
With this, I can now write:
1 2 3 4 |
if railsmode(:production) ... perform magic ... end |
I can also check for multiple modes at once:
1 2 3 4 |
if railsmode(:production, :development) ... perform magic ... end |
And of course, who needs an if when I can pass in a block:
1 2 3 4 |
railsmode(:production) do ... perform magic ... end |