Class: Groupdate::Magic
- Inherits:
-
Object
show all
- Defined in:
- lib/groupdate/magic.rb
Defined Under Namespace
Classes: Enumerable, Relation
Constant Summary
collapse
- DAYS =
[:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday]
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(period:, **options) ⇒ Magic
Returns a new instance of Magic.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/groupdate/magic.rb', line 9
def initialize(period:, **options)
@period = period
@options = options
validate_keywords
validate_arguments
if options[:n]
raise ArgumentError, "n must be a positive integer" if !options[:n].is_a?(Integer) || options[:n] < 1
@period = :custom
@n_seconds = options[:n].to_i
@n_seconds *= 60 if period == :minute
end
end
|
Instance Attribute Details
#group_index ⇒ Object
Returns the value of attribute group_index.
7
8
9
|
# File 'lib/groupdate/magic.rb', line 7
def group_index
@group_index
end
|
#n_seconds ⇒ Object
Returns the value of attribute n_seconds.
7
8
9
|
# File 'lib/groupdate/magic.rb', line 7
def n_seconds
@n_seconds
end
|
#options ⇒ Object
Returns the value of attribute options.
7
8
9
|
# File 'lib/groupdate/magic.rb', line 7
def options
@options
end
|
#period ⇒ Object
Returns the value of attribute period.
7
8
9
|
# File 'lib/groupdate/magic.rb', line 7
def period
@period
end
|
Class Method Details
.validate_period(period, permit) ⇒ Object
101
102
103
104
|
# File 'lib/groupdate/magic.rb', line 101
def self.validate_period(period, permit)
permitted_periods = ((permit || Groupdate::PERIODS).map(&:to_sym) & Groupdate::PERIODS).map(&:to_s)
raise ArgumentError, "Unpermitted period" unless permitted_periods.include?(period.to_s)
end
|
Instance Method Details
#day_start ⇒ Object
68
69
70
|
# File 'lib/groupdate/magic.rb', line 68
def day_start
@day_start ||= ((options[:day_start] || Groupdate.day_start).to_f * 3600).round
end
|
#range ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/groupdate/magic.rb', line 72
def range
@range ||= begin
time_range = options[:range]
if time_range.is_a?(Range) && time_range.begin.nil? && time_range.end.nil?
nil
else
time_range
end
end
end
|
#series_builder ⇒ Object
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/groupdate/magic.rb', line 84
def series_builder
@series_builder ||=
SeriesBuilder.new(
**options,
period: period,
time_zone: time_zone,
range: range,
day_start: day_start,
week_start: week_start,
n_seconds: n_seconds
)
end
|
#time_range ⇒ Object
97
98
99
|
# File 'lib/groupdate/magic.rb', line 97
def time_range
series_builder.time_range
end
|
#time_zone ⇒ Object
53
54
55
56
57
58
59
|
# File 'lib/groupdate/magic.rb', line 53
def time_zone
@time_zone ||= begin
time_zone = "Etc/UTC" if options[:time_zone] == false
time_zone ||= options[:time_zone] || Groupdate.time_zone || (Groupdate.time_zone == false && "Etc/UTC") || Time.zone || "Etc/UTC"
time_zone.is_a?(ActiveSupport::TimeZone) ? time_zone : ActiveSupport::TimeZone[time_zone]
end
end
|
#validate_arguments ⇒ Object
46
47
48
49
50
51
|
# File 'lib/groupdate/magic.rb', line 46
def validate_arguments
raise ArgumentError, "Unrecognized time zone" unless time_zone
raise ArgumentError, "Unrecognized :week_start option" unless week_start
raise ArgumentError, ":day_start must be between 0 and 24" if (day_start / 3600) < 0 || (day_start / 3600) >= 24
end
|
#validate_keywords ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/groupdate/magic.rb', line 24
def validate_keywords
known_keywords = [:time_zone, :series, :format, :locale, :range, :expand_range, :reverse]
if %i[week day_of_week].include?(period)
known_keywords << :week_start
end
if %i[day week month quarter year day_of_week hour_of_day day_of_month day_of_year month_of_year].include?(period)
known_keywords << :day_start
else
@day_start = 0
end
if %i[second minute].include?(period)
known_keywords << :n
end
unknown_keywords = options.keys - known_keywords
raise ArgumentError, "unknown keywords: #{unknown_keywords.join(", ")}" if unknown_keywords.any?
end
|
#week_start ⇒ Object
61
62
63
64
65
66
|
# File 'lib/groupdate/magic.rb', line 61
def week_start
@week_start ||= begin
v = (options[:week_start] || Groupdate.week_start).to_sym
DAYS.index(v) || [:mon, :tue, :wed, :thu, :fri, :sat, :sun].index(v)
end
end
|