How to add plugin to ActiveRecord


#1

I’m trying to set a date field’s day to the last day of the month before
I save it. I can do this successfully now using this code:

class Account < ActiveRecord::Base
def before_save
self.exp_date = last_day_of_month(self.exp_date)
end

Returns a Date object set to the last day of the current month

def last_day_of_month(date = Date.today)
next_month_str = date.year.to_s + ‘-’ + (date.month + 1).to_s +
‘-01’
Date.parse(next_month_str) - 1
end
end

However, this is Ruby on Rails, and I’m trying to break all my old
programming habits like making ugly code, and this looks ugly. Is there
a way to make this into some kind of plugin so that all I have to do is
say:

class Account < ActiveRecord::Base
acts_as_expiration_date :exp_date
end

and it will automatically do what I want behind the scenes?

Thanks!
Mike


#2

Mike Haggerty wrote:

class Account < ActiveRecord::Base
acts_as_expiration_date :exp_date
end

Try looking at other acts_as_* plugins and see how they work.


#3

if you are onyl using this for account models, a plugin is going to be
overkill…why not just do:

class Account < ActiveRecord::Base
before_create :set_expiry_date

other methods

private

set the expiry date

def set_expiry_date
self.exp_date = Time.now.end_of_month.to_date.to_s
end
end

ex:

Time.now.end_of_month.to_date.to_s
=> “2006-06-30”

note: if you use before_save, every time you save the record, whether
it’s a
new record or an update, the expiry date will be updated to reflect the
last
day of the current month…in my example, I used before_create to
indicate i
only want the expiry date set when a new record is created.

Chris