lib/timely/date_chooser.rb in timely-0.0.2 vs lib/timely/date_chooser.rb in timely-0.1.0
- old
+ new
@@ -1,13 +1,13 @@
module Timely
class DateChooser
# Where is this used... so far only in one place, _date_range.html.haml
# May be good to refactor this as well, after the class behaviour is refactored.
INTERVALS = [
- {:code => 'w', :name => 'week(s)', :description =>
+ {:code => 'week', :name => 'week(s)', :description =>
'Weekdays selected will be chosen every {{n}} weeks for the date range'},
- {:code => 'wom', :name => 'week of month', :description =>
+ {:code => 'week_of_month', :name => 'week of month', :description =>
'Weekdays selected will be chosen in their {{ord}} occurance every month,
e.g. if wednesday and thursday are selected, the first wednesday and
first thursday are selected. Note: this may mean the booking is copied
to Thursday 1st and Wednesday 7th'}
]
@@ -18,10 +18,11 @@
@multiple_dates = options[:multiple_dates] || false
@from = process_date(options[:from])
@to = process_date(options[:to])
@select = options[:select]
@dates = options[:dates]
+ @specific_dates = options[:specific_dates]
@interval = options[:interval]
@weekdays = WeekDays.new(options[:weekdays]) if @select == 'weekdays'
validate
end
@@ -38,11 +39,12 @@
# date_info - A hash with conditions and date information
# :from - The start of the date range
# :to - The end of the date range
#
# You can either specify specific dates to be chosen each month:
- # :dates - A comma separated string of days of the month, e.g. 1,16
+ # :dates - A comma separated string of days of the month, e.g. 1,16
+ # :specific_dates - A comma separated string of dates, e.g. 26-10-2012, 03-11-2012, 01-01-2013
#
# or you can specify how to select the dates
# :day - A hash of days, the index being the wday, e.g. 0 = sunday, and the value being 1 if chosen
# :interval - A hash of information about the interval
# :level - The level/multiplier of the interval unit
@@ -58,22 +60,25 @@
case @select
when 'days'
days = @dates.gsub(/\s/, '').split(',')
all_days.select { |date| days.include?(date.mday.to_s) }
+ when 'specific_days'
+ days = @specific_dates.gsub(/\s/, '').split(',')
+ days.map(&:to_date)
when 'weekdays'
raise DateChooserException, "No days of the week selected" if @weekdays.weekdays.empty?
raise DateChooserException, "No weekly interval selected" if @interval && @interval.empty?
all_days.select do |date|
if @weekdays.has_day?(date.wday)
case @interval[:unit]
- when 'w'
+ when 'week'
# 0 = first week, 1 = second week, 2 = third week, etc.
nth_week = (date - @from).to_i / 7
# true every 2nd week (0, 2, 4, 6, etc.)
(nth_week % @interval[:level].to_i).zero?
- when 'wom'
+ when 'week_of_month'
week = @interval[:level].to_i
(date.mday > (week-1)*7 && date.mday <= week*7)
end
end
end