Module: ByStar::Between

Included in:
Base
Defined in:
lib/by_star/between.rb

Instance Method Summary collapse

Instance Method Details

#at_time(*args) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/by_star/between.rb', line 59

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

#between_dates(*args) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/by_star/between.rb', line 51

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

#between_times(*args) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/by_star/between.rb', line 3

def between_times(*args)
  options = args.extract_options!.symbolize_keys!

  start_time, end_time = ByStar::Normalization.extract_range(args)
  start_time = start_time.to_time if start_time.is_a?(String)
  end_time = end_time.to_time if end_time.is_a?(String)

  offset = options[:offset] || 0
  field_type = by_star_field_type(options)

  if start_time.is_a?(Date)
    start_time = field_type == '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 = field_type == '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

#by_calendar_month(*args) ⇒ Object



117
118
119
120
121
122
123
# File 'lib/by_star/between.rb', line 117

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

#by_cweek(*args) ⇒ Object



90
91
92
93
94
# File 'lib/by_star/between.rb', line 90

def by_cweek(*args)
  with_by_star_options(*args) do |time, options|
    by_week(ByStar::Normalization.cweek(time, options), options)
  end
end

#by_day(*args) ⇒ Object



75
76
77
78
79
80
# File 'lib/by_star/between.rb', line 75

def by_day(*args)
  with_by_star_options(*args) do |time, options|
    date = ByStar::Normalization.date(time)
    between_dates(date, date, options)
  end
end

#by_fortnight(*args) ⇒ Object



103
104
105
106
107
108
# File 'lib/by_star/between.rb', line 103

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

#by_month(*args) ⇒ Object



110
111
112
113
114
115
# File 'lib/by_star/between.rb', line 110

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

#by_quarter(*args) ⇒ Object



125
126
127
128
129
130
# File 'lib/by_star/between.rb', line 125

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

#by_week(*args) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/by_star/between.rb', line 82

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

#by_weekend(*args) ⇒ Object



96
97
98
99
100
101
# File 'lib/by_star/between.rb', line 96

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

#by_year(*args) ⇒ Object



132
133
134
135
136
137
# File 'lib/by_star/between.rb', line 132

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

#next_day(options = {}) ⇒ Object



171
172
173
# File 'lib/by_star/between.rb', line 171

def next_day(options = {})
  between_times(Time.current, Time.current + 1.day, options)
end

#next_fortnight(options = {}) ⇒ Object



179
180
181
# File 'lib/by_star/between.rb', line 179

def next_fortnight(options = {})
  between_times(Time.current, Time.current + 2.weeks, options)
end

#next_month(options = {}) ⇒ Object



183
184
185
# File 'lib/by_star/between.rb', line 183

def next_month(options = {})
  between_times(Time.current, Time.current + 1.month, options)
end

#next_week(options = {}) ⇒ Object



175
176
177
# File 'lib/by_star/between.rb', line 175

def next_week(options = {})
  between_times(Time.current, Time.current + 1.week, options)
end

#next_year(options = {}) ⇒ Object



187
188
189
# File 'lib/by_star/between.rb', line 187

def next_year(options = {})
  between_times(Time.current, Time.current + 1.year, options)
end

#past_day(options = {}) ⇒ Object



151
152
153
# File 'lib/by_star/between.rb', line 151

def past_day(options = {})
  between_times(Time.current - 1.day, Time.current, options)
end

#past_fortnight(options = {}) ⇒ Object



159
160
161
# File 'lib/by_star/between.rb', line 159

def past_fortnight(options = {})
  between_times(Time.current - 2.weeks, Time.current, options)
end

#past_month(options = {}) ⇒ Object



163
164
165
# File 'lib/by_star/between.rb', line 163

def past_month(options = {})
  between_times(Time.current - 1.month, Time.current, options)
end

#past_week(options = {}) ⇒ Object



155
156
157
# File 'lib/by_star/between.rb', line 155

def past_week(options = {})
  between_times(Time.current - 1.week, Time.current, options)
end

#past_year(options = {}) ⇒ Object



167
168
169
# File 'lib/by_star/between.rb', line 167

def past_year(options = {})
  between_times(Time.current - 1.year, Time.current, options)
end

#today(options = {}) ⇒ Object



139
140
141
# File 'lib/by_star/between.rb', line 139

def today(options = {})
  by_day(Date.current, options)
end

#tomorrow(options = {}) ⇒ Object



147
148
149
# File 'lib/by_star/between.rb', line 147

def tomorrow(options = {})
  by_day(Date.tomorrow, options)
end

#yesterday(options = {}) ⇒ Object



143
144
145
# File 'lib/by_star/between.rb', line 143

def yesterday(options = {})
  by_day(Date.yesterday, options)
end