lib/by_star/between.rb in by_star-4.0.0 vs lib/by_star/between.rb in by_star-4.0.1

- old
+ new

@@ -1,185 +1,185 @@ -module ByStar - - module Between - - def between_times(*args) - options = args.extract_options!.symbolize_keys! - - start_time, end_time = ByStar::Normalization.extract_range(args) - offset = options[:offset] || 0 - - if start_time.is_a?(Date) - start_time = ByStar::Normalization.apply_offset_start(start_time.in_time_zone, offset) - elsif start_time - start_time += offset.seconds - end - - if end_time.is_a?(Date) - end_time = ByStar::Normalization.apply_offset_end(end_time.in_time_zone, offset) - elsif end_time - end_time += offset.seconds - end - - start_field = by_star_start_field(options) - end_field = by_star_end_field(options) - - scope = self - scope = if !start_time && !end_time - scope # do nothing - elsif !end_time - by_star_after_query(scope, start_field, start_time) - elsif !start_time - by_star_before_query(scope, start_field, end_time) - elsif start_field == end_field - by_star_point_query(scope, start_field, start_time, end_time) - elsif options[:strict] - by_star_span_strict_query(scope, start_field, end_field, start_time, end_time) - else - by_star_span_loose_query(scope, start_field, end_field, start_time, end_time, options) - end - - scope = by_star_order(scope, options[:order]) if options[:order] - scope - end - - def between_dates(*args) - options = args.extract_options! - start_date, end_date = ByStar::Normalization.extract_range(args) - start_date = ByStar::Normalization.date(start_date) - end_date = ByStar::Normalization.date(end_date) - between_times(start_date, end_date, options) - end - - def at_time(*args) - with_by_star_options(*args) do |time, options| - start_field = by_star_start_field(options) - end_field = by_star_end_field(options) - - scope = self - scope = if start_field == end_field - by_star_point_overlap_query(scope, start_field, time) - else - by_star_span_overlap_query(scope, start_field, end_field, time, options) - end - scope = by_star_order(scope, options[:order]) if options[:order] - scope - end - end - - def by_day(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.date(time) - between_dates(date, date, options) - end - end - - def by_week(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.week(time, options) - start_day = Array(options[:start_day]) - between_dates(date.beginning_of_week(*start_day), date.end_of_week(*start_day), options) - end - end - - def by_cweek(*args) - with_by_star_options(*args) do |time, options| - by_week(ByStar::Normalization.cweek(time, options), options) - end - end - - def by_weekend(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.week(time, options) - between_dates(date.beginning_of_weekend, date.end_of_weekend, options) - end - end - - def by_fortnight(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.fortnight(time, options) - between_dates(date.beginning_of_fortnight, date.end_of_fortnight, options) - end - end - - def by_month(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.month(time, options) - between_dates(date.beginning_of_month, date.end_of_month, options) - end - end - - def by_calendar_month(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.month(time, options) - start_day = Array(options[:start_day]) - between_dates(date.beginning_of_calendar_month(*start_day), date.end_of_calendar_month(*start_day), options) - end - end - - def by_quarter(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.quarter(time, options) - between_dates(date.beginning_of_quarter, date.end_of_quarter, options) - end - end - - def by_year(*args) - with_by_star_options(*args) do |time, options| - date = ByStar::Normalization.year(time, options) - between_dates(date.beginning_of_year, date.to_date.end_of_year, options) - end - end - - def today(options = {}) - by_day(Date.current, options) - end - - def yesterday(options = {}) - by_day(Date.yesterday, options) - end - - def tomorrow(options = {}) - by_day(Date.tomorrow, options) - end - - def past_day(options = {}) - between_times(Time.current - 1.day, Time.current, options) - end - - def past_week(options = {}) - between_times(Time.current - 1.week, Time.current, options) - end - - def past_fortnight(options = {}) - between_times(Time.current - 2.weeks, Time.current, options) - end - - def past_month(options = {}) - between_times(Time.current - 1.month, Time.current, options) - end - - def past_year(options = {}) - between_times(Time.current - 1.year, Time.current, options) - end - - def next_day(options = {}) - between_times(Time.current, Time.current + 1.day, options) - end - - def next_week(options = {}) - between_times(Time.current, Time.current + 1.week, options) - end - - def next_fortnight(options = {}) - between_times(Time.current, Time.current + 2.weeks, options) - end - - def next_month(options = {}) - between_times(Time.current, Time.current + 1.month, options) - end - - def next_year(options = {}) - between_times(Time.current, Time.current + 1.year, options) - end - end -end +module ByStar + + module Between + + def between_times(*args) + options = args.extract_options!.symbolize_keys! + + start_time, end_time = ByStar::Normalization.extract_range(args) + offset = options[:offset] || 0 + + if start_time.is_a?(Date) + start_time = ByStar::Normalization.apply_offset_start(start_time.in_time_zone, offset) + elsif start_time + start_time += offset.seconds + end + + if end_time.is_a?(Date) + end_time = ByStar::Normalization.apply_offset_end(end_time.in_time_zone, offset) + elsif end_time + end_time += offset.seconds + end + + start_field = by_star_start_field(options) + end_field = by_star_end_field(options) + + scope = self + scope = if !start_time && !end_time + scope # do nothing + elsif !end_time + by_star_after_query(scope, start_field, start_time) + elsif !start_time + by_star_before_query(scope, start_field, end_time) + elsif start_field == end_field + by_star_point_query(scope, start_field, start_time, end_time) + elsif options[:strict] + by_star_span_strict_query(scope, start_field, end_field, start_time, end_time) + else + by_star_span_loose_query(scope, start_field, end_field, start_time, end_time, options) + end + + scope = by_star_order(scope, options[:order]) if options[:order] + scope + end + + def between_dates(*args) + options = args.extract_options! + start_date, end_date = ByStar::Normalization.extract_range(args) + start_date = ByStar::Normalization.date(start_date) + end_date = ByStar::Normalization.date(end_date) + between_times(start_date, end_date, options) + end + + def at_time(*args) + with_by_star_options(*args) do |time, options| + start_field = by_star_start_field(options) + end_field = by_star_end_field(options) + + scope = self + scope = if start_field == end_field + by_star_point_overlap_query(scope, start_field, time) + else + by_star_span_overlap_query(scope, start_field, end_field, time, options) + end + scope = by_star_order(scope, options[:order]) if options[:order] + scope + end + end + + def by_day(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.date(time) + between_dates(date, date, options) + end + end + + def by_week(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.week(time, options) + start_day = Array(options[:start_day]) + between_dates(date.beginning_of_week(*start_day), date.end_of_week(*start_day), options) + end + end + + def by_cweek(*args) + with_by_star_options(*args) do |time, options| + by_week(ByStar::Normalization.cweek(time, options), options) + end + end + + def by_weekend(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.week(time, options) + between_dates(date.beginning_of_weekend, date.end_of_weekend, options) + end + end + + def by_fortnight(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.fortnight(time, options) + between_dates(date.beginning_of_fortnight, date.end_of_fortnight, options) + end + end + + def by_month(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.month(time, options) + between_dates(date.beginning_of_month, date.end_of_month, options) + end + end + + def by_calendar_month(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.month(time, options) + start_day = Array(options[:start_day]) + between_dates(date.beginning_of_calendar_month(*start_day), date.end_of_calendar_month(*start_day), options) + end + end + + def by_quarter(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.quarter(time, options) + between_dates(date.beginning_of_quarter, date.end_of_quarter, options) + end + end + + def by_year(*args) + with_by_star_options(*args) do |time, options| + date = ByStar::Normalization.year(time, options) + between_dates(date.beginning_of_year, date.to_date.end_of_year, options) + end + end + + def today(options = {}) + by_day(Date.current, options) + end + + def yesterday(options = {}) + by_day(Date.yesterday, options) + end + + def tomorrow(options = {}) + by_day(Date.tomorrow, options) + end + + def past_day(options = {}) + between_times(Time.current - 1.day, Time.current, options) + end + + def past_week(options = {}) + between_times(Time.current - 1.week, Time.current, options) + end + + def past_fortnight(options = {}) + between_times(Time.current - 2.weeks, Time.current, options) + end + + def past_month(options = {}) + between_times(Time.current - 1.month, Time.current, options) + end + + def past_year(options = {}) + between_times(Time.current - 1.year, Time.current, options) + end + + def next_day(options = {}) + between_times(Time.current, Time.current + 1.day, options) + end + + def next_week(options = {}) + between_times(Time.current, Time.current + 1.week, options) + end + + def next_fortnight(options = {}) + between_times(Time.current, Time.current + 2.weeks, options) + end + + def next_month(options = {}) + between_times(Time.current, Time.current + 1.month, options) + end + + def next_year(options = {}) + between_times(Time.current, Time.current + 1.year, options) + end + end +end