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, in production mode ... 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 file in lib or in a helper.
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:
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:
if railsmode(:production) # perform magic, in production mode ... end
I can also check for multiple modes at once:
if railsmode(:production, :development) # perform magic, in production or development ... end
And of course, who needs an if when I can pass in a block:
railsmode(:production) do # perform magic, in production mode ... end
No comments:
Post a Comment