class RetailCalendar::Finder
Constants
- QUARTER_LENGTH
- SEASON_LENGTH
- YEAR_LENGTH
Attributes
offset[RW]
Public Class Methods
new(offset = '+0000')
click to toggle source
# File lib/retail_calendar/finder.rb, line 13 def initialize(offset = '+0000') @offset = offset end
Public Instance Methods
determine_current_year(curr_date = DateTime.now.change(:offset => @offset))
click to toggle source
# File lib/retail_calendar/finder.rb, line 132 def determine_current_year(curr_date = DateTime.now.change(:offset => @offset)) curr_date_year = DateTime.now.change(:offset => @offset).year if (curr_date >= year(curr_date_year).start_date && curr_date <= year(curr_date_year).end_date) return curr_date_year elsif curr_date < year(curr_date_year).start_date return curr_date_year - 1 elsif curr_date > year(curr_date_year).end_date return curr_date_year + 1 end end
get_from_date(date)
click to toggle source
# File lib/retail_calendar/finder.rb, line 163 def get_from_date(date) Dish({ period: get_period(date), quarter: get_quarter(date), season: get_season(date) }) end
last_period()
click to toggle source
# File lib/retail_calendar/finder.rb, line 119 def last_period current_year = determine_current_year current_period = get_period if current_period == 1 previous_year = current_year - 1 previous_period = 12 else previous_year = current_year previous_period = current_period - 1 end period(previous_year, previous_period) end
last_quarter()
click to toggle source
# File lib/retail_calendar/finder.rb, line 100 def last_quarter current_year = determine_current_year current_quarter = get_quarter if current_quarter == 1 previous_year = current_year - 1 previous_quarter = 4 else previous_year = current_year previous_quarter = current_quarter - 1 end quarter(previous_year, previous_quarter) end
last_season()
click to toggle source
# File lib/retail_calendar/finder.rb, line 81 def last_season current_year = determine_current_year current_season = get_season if current_season == 1 previous_year = current_year - 1 previous_season = 2 else previous_year = current_year previous_season = current_season - 1 end season(previous_year, previous_season) end
last_week()
click to toggle source
# File lib/retail_calendar/finder.rb, line 149 def last_week start_date = DateTime.now.change(:offset => @offset) - 1.week start_date = start_date.beginning_of_week(start_day = :sunday) end_date = start_date + 1.week - 1 create_return_object(start_date,end_date) end
last_year()
click to toggle source
# File lib/retail_calendar/finder.rb, line 73 def last_year year(determine_current_year - 1) end
period(year, period)
click to toggle source
# File lib/retail_calendar/finder.rb, line 30 def period(year, period) period = period.to_i raise ArgumentError, 'invalid period' if (period > 12 or period < 1) start_date = start_time_for_year(year) for i in 1..(period - 1) start_date = start_date + weeks_in_month((i % 12) + 1).weeks end end_date = start_date + weeks_in_month((period % 12) + 1).weeks - 1 if year_has_extra_week?(year) and period == 12 end_date = end_date + 1.week end create_return_object(start_date,end_date) end
quarter(year, quarter)
click to toggle source
# File lib/retail_calendar/finder.rb, line 44 def quarter(year, quarter) quarter = quarter.to_i raise ArgumentError, 'invalid quarter' if (quarter > 4 or quarter < 1) start_date = start_time_for_year(year) + (QUARTER_LENGTH * (quarter - 1)) end_date = start_date + QUARTER_LENGTH - 1 if year_has_extra_week?(year) and quarter == 4 end_date = end_date + 1.week end create_return_object(start_date,end_date) end
season(year, season)
click to toggle source
# File lib/retail_calendar/finder.rb, line 55 def season(year, season) season = season.to_i raise ArgumentError, 'invalid season' if (season > 2 or season < 1) start_date = start_time_for_year(year) + (SEASON_LENGTH * (season - 1)) end_date = start_date + SEASON_LENGTH - 1 if year_has_extra_week?(year) and season == 2 end_date = end_date + 1.week end create_return_object(start_date,end_date) end
this_period()
click to toggle source
# File lib/retail_calendar/finder.rb, line 143 def this_period current_year = determine_current_year current_period = get_period period(current_year, current_period) end
this_quarter()
click to toggle source
# File lib/retail_calendar/finder.rb, line 113 def this_quarter current_year = determine_current_year current_quarter = get_quarter quarter(current_year, current_quarter) end
this_season()
click to toggle source
# File lib/retail_calendar/finder.rb, line 94 def this_season current_year = determine_current_year current_season = get_season season(current_year, current_season) end
this_week()
click to toggle source
# File lib/retail_calendar/finder.rb, line 156 def this_week start_date = DateTime.now.change(:offset => @offset) start_date = start_date.beginning_of_week(start_day = :sunday) end_date = start_date + 1.week - 1 create_return_object(start_date,end_date) end
this_year()
click to toggle source
# File lib/retail_calendar/finder.rb, line 77 def this_year year(determine_current_year) end
week(year, period, week)
click to toggle source
# File lib/retail_calendar/finder.rb, line 17 def week(year, period, week) period = period.to_i raise ArgumentError, 'invalid period' if (period > 12 or period < 1) week = week.to_i raise ArgumentError, 'invalid week' if (week > 5 or week < 1) start_date = period(year, period).start_date for i in 1..(week - 1) start_date = start_date + 7 end end_date = start_date + 1.week - 1 create_return_object(start_date,end_date) end
year(year)
click to toggle source
# File lib/retail_calendar/finder.rb, line 66 def year(year) start_date = start_time_for_year(year) end_date = start_date + YEAR_LENGTH - 1 end_date = year_has_extra_week?(year) ? (end_date + 1.week) : end_date create_return_object(start_date,end_date) end
Private Instance Methods
create_return_object(start_date, end_date)
click to toggle source
# File lib/retail_calendar/finder.rb, line 205 def create_return_object(start_date, end_date) Dish({ start_date: start_date, end_date: end_date }) end
get_period(curr_date = DateTime.now.change(:offset => @offset))
click to toggle source
# File lib/retail_calendar/finder.rb, line 194 def get_period(curr_date = DateTime.now.change(:offset => @offset)) start_date = start_time_for_year(determine_current_year(curr_date)) period = 1 while start_date < curr_date no_weeks = weeks_in_month(period + 1) start_date += no_weeks.weeks period += 1 end period - 1 end
get_quarter(curr_date = DateTime.now.change(:offset => @offset))
click to toggle source
# File lib/retail_calendar/finder.rb, line 179 def get_quarter(curr_date = DateTime.now.change(:offset => @offset)) start_date = start_time_for_year(determine_current_year(curr_date)) days_passed = (curr_date.to_date - start_date.to_date).to_i case days_passed when 0..91 1 when 92..182 2 when 183..273 3 else 4 end end
get_season(curr_date = DateTime.now.change(:offset => @offset))
click to toggle source
# File lib/retail_calendar/finder.rb, line 173 def get_season(curr_date = DateTime.now.change(:offset => @offset)) start_date = start_time_for_year(determine_current_year(curr_date)) days_passed = (curr_date.to_date - start_date.to_date).to_i days_passed < SEASON_LENGTH ? 1 : 2 end
start_time_for_year(year)
click to toggle source
# File lib/retail_calendar/finder.rb, line 217 def start_time_for_year(year) year = year.to_i jan31 = DateTime.new(year,1,31).change(:offset => @offset) jan31day = jan31.cwday if jan31day < 3 start = jan31 - jan31day elsif jan31day < 7 start = jan31 + (7 - jan31day) elsif jan31day == 7 start = jan31 end start end
weeks_in_month(month)
click to toggle source
# File lib/retail_calendar/finder.rb, line 212 def weeks_in_month(month) month = month.to_i month % 3 == 0 ? 5 : 4 end
year_has_extra_week?(year)
click to toggle source
# File lib/retail_calendar/finder.rb, line 231 def year_has_extra_week?(year) year = year.to_i expected = start_time_for_year(year) + 364 actual = start_time_for_year(year + 1) actual > expected ? true : false end