I am planning on using Runt to calculate recurring events. I calculate a Runt object in the view and use it to see if it includes a certain date, which is populates from the database, and display the info for that date if it is included. I have recurring events for every week, which was pretty easy to set up. I can just say:
r = Runt::DIWeek.new(4)
For a recurring event every Thursday, and then do r.include(some_date) to see if it falls on a Thursday. The question I have is for developing recurring events for other time limits, such as twice a month/every other week, once a month, once every other month, once every six months. To create Runt expressions for every other week, you can create an expression using the day name with respect to its order in the month. So, for example, you can say I want a recurring event for the first Tuesday of every month and that would look like this:
r = Runt::DIMonth.new(First,Tuesday)
You are allowed to use these orderings: (first|second|third|fourth| last>second_to_last). So this will allow me to do the expressions every other week and once a month. But my question is, does anyone have a fast clean way of figuring out the ordering of a day within the month given its date. So, for example, if I have the date November 20th, 2008 and I want to figure out if that is the first, second, third, or fourth Thursday of the month how would I do this?
I guess the easiest way is to write a function that takes the day number and divides the date by 7? If its less than or equal to one then it is the first day of the month, if it has a remainder of one then it is the second and so on... Just looking for some feedback on this idea and any other ideas. Maybe there is some way to do it with the Runt class? Thanks, Dave