Class: Quarter
Constant Summary
collapse
- DEFAULTS =
{ :us_fiscal => [ [ 10, 12 ], [ 1, 3 ], [ 4, 6 ], [ 7, 9 ] ] }
Argumentation::REGES, Argumentation::REGEX
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
build_arguments
Constructor Details
#initialize(*args) ⇒ Quarter
Returns a new instance of Quarter.
95
96
97
98
99
100
101
|
# File 'lib/quarter_system/quarter.rb', line 95
def initialize(*args)
attrs = args.
self.type = attrs.delete(:type)
self.count = attrs.delete(:number)
self.number = (self.count.pred % Quarter.number_of_quarters(:type => self.type)).next
super
end
|
Instance Attribute Details
Returns the value of attribute count.
93
94
95
|
# File 'lib/quarter_system/quarter.rb', line 93
def count
@count
end
|
Returns the value of attribute number.
93
94
95
|
# File 'lib/quarter_system/quarter.rb', line 93
def number
@number
end
|
Returns the value of attribute type.
93
94
95
|
# File 'lib/quarter_system/quarter.rb', line 93
def type
@type
end
|
Class Method Details
.all(*args) ⇒ Object
52
53
54
55
|
# File 'lib/quarter_system/quarter.rb', line 52
def all(*args)
type, year = type_and_year_from_args(*args)
1.upto(number_of_quarters(type)).map { |number| specific(*args.merge_options(:number => number)) }
end
|
.current(*args) ⇒ Object
61
62
63
|
# File 'lib/quarter_system/quarter.rb', line 61
def current(*args)
all(*args.merge_options(:this_year => true)).detect { |rng| rng.include? ::Time.zone_default.today }
end
|
.current_number(*args) ⇒ Object
65
66
67
|
# File 'lib/quarter_system/quarter.rb', line 65
def current_number(*args)
current(*args).number
end
|
.default_number ⇒ Object
20
21
22
|
# File 'lib/quarter_system/quarter.rb', line 20
def default_number
1
end
|
.default_type ⇒ Object
12
13
14
|
# File 'lib/quarter_system/quarter.rb', line 12
def default_type
:us_fiscal
end
|
.default_year ⇒ Object
16
17
18
|
# File 'lib/quarter_system/quarter.rb', line 16
def default_year
Time.zone_default.today.year rescue Time.new.year
end
|
.general(*args) ⇒ Object
57
58
59
|
# File 'lib/quarter_system/quarter.rb', line 57
def general(*args)
specific(*args.merge_options(:this_year => true))
end
|
.method_missing(method_symbol, *arguments, &block) ⇒ Object
86
87
88
89
|
# File 'lib/quarter_system/quarter.rb', line 86
def method_missing(method_symbol, *arguments, &block)
ordinals = Integer::ORDINALS
method_symbol.to_s.match(/^(#{ordinals.join('|')})$/).only_if_a?(MatchData) { |md| specific(ordinals.index(md[1]), *arguments) } || super
end
|
.number_from_args(*args) ⇒ Object
82
83
84
|
# File 'lib/quarter_system/quarter.rb', line 82
def number_from_args(*args)
find_from_args(args, :quey => :number, :class => Numeric, :condition => ".to_s.size < 3")
end
|
.number_of_quarters(*args) ⇒ Object
32
33
34
|
# File 'lib/quarter_system/quarter.rb', line 32
def number_of_quarters(*args);
quarters_table(*args).size
end
|
.quarters_table(*args) ⇒ Object
Changing this so that table type can be input as an option. This is so that when changing quarter system, the dev can use the with_options to change the type easily for all relevant calls. Ex: Quarter.quarters_table(:uk_fiscal)
Quarter.quarters_table(:type => :uk_fiscal)
28
29
30
|
# File 'lib/quarter_system/quarter.rb', line 28
def quarters_table(*args)
DEFAULTS[type_from_args(args)]
end
|
.specific(*args) ⇒ Object
Sequential returns the Quarter for the correct year depending on the magnitude of the ‘number` argument.
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/quarter_system/quarter.rb', line 37
def specific(*args)
number, year, type = number_and_year_and_type_from_args(*args)
index = number.pred % number_of_quarters(*args)
opts = args.
months_array = quarters_table(type)[index]
first_months_array = quarters_table(type)[0]
specified_quarter_month = months_array[0]
first_quarter_month = first_months_array[0]
year += opts[:this_year] ? 0 : (number.pred / number_of_quarters) + (first_quarter_month > specified_quarter_month ? 1 : 0)
new(Date.new(year, months_array[0], 1), Date.new(year, months_array[1], 1).end_of_month, :number => number)
end
|
.type_from_args(*args) ⇒ Object
ARGUMENTS MUST NOT BE SPLATTED INTO THIS. Point is for this method to not be destructive. Also, whatever ‘type` is defined within normal list of arguments overrides any written as a hash value. Thing about this whole file is that `type` is the only argument ever that’s a symbol,
`year` is the only argument that's ever a Numeric of length == 4,
`number` is the only argument that's ever a Numeric of length < 4.
74
75
76
|
# File 'lib/quarter_system/quarter.rb', line 74
def type_from_args(*args)
find_from_args(args, :quey => :type, :class => Symbol)
end
|
.year_from_args(*args) ⇒ Object
78
79
80
|
# File 'lib/quarter_system/quarter.rb', line 78
def year_from_args(*args)
find_from_args(args, :quey => :year, :class => Numeric, :condition => ".to_s.size == 4")
end
|
Instance Method Details
#include?(date_or_time) ⇒ Boolean
103
104
105
106
107
108
109
|
# File 'lib/quarter_system/quarter.rb', line 103
def include?(date_or_time)
if date_or_time.is_a?(Time)
super(date_or_time.in_time_zone(Time.zone_default).to_date)
else
super
end
end
|