Class: Month
- Inherits:
-
Object
- Object
- Month
- Includes:
- Comparable
- Defined in:
- lib/month.rb,
lib/month.rb,
lib/month.rb,
lib/month/yaml.rb
Defined Under Namespace
Modules: Methods
Instance Attribute Summary collapse
-
#number ⇒ Object
(also: #month)
readonly
Returns the value of attribute number.
-
#year ⇒ Object
readonly
Returns the value of attribute year.
Class Method Summary collapse
Instance Method Summary collapse
- #+(number) ⇒ Object
- #-(object) ⇒ Object
- #<<(n) ⇒ Object
- #<=>(month) ⇒ Object
- #>>(n) ⇒ Object
- #april? ⇒ Boolean
- #august? ⇒ Boolean
- #dates ⇒ Object (also: #date_range)
- #december? ⇒ Boolean
- #deconstruct_keys(keys) ⇒ Object
- #downto(min, &block) ⇒ Object
- #encode_with(coder) ⇒ Object
- #end_date ⇒ Object
- #end_time ⇒ Object
- #eql?(object) ⇒ Boolean
- #february? ⇒ Boolean
- #hash ⇒ Object
- #include?(time) ⇒ Boolean (also: #===)
-
#initialize(year, number) ⇒ Month
constructor
A new instance of Month.
- #inspect ⇒ Object
- #january? ⇒ Boolean
- #july? ⇒ Boolean
- #june? ⇒ Boolean
- #length ⇒ Object
- #march? ⇒ Boolean
- #may? ⇒ Boolean
- #name ⇒ Object
- #next ⇒ Object (also: #succ, #next_month)
- #november? ⇒ Boolean
- #october? ⇒ Boolean
- #prev_month ⇒ Object
- #september? ⇒ Boolean
- #start_date ⇒ Object
- #start_time ⇒ Object
- #step(limit, step = 1) ⇒ Object
- #to_s ⇒ Object (also: #iso8601)
- #upto(max, &block) ⇒ Object
Constructor Details
#initialize(year, number) ⇒ Month
Returns a new instance of Month.
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/month.rb', line 5 def initialize(year, number) unless year.is_a?(Integer) raise ArgumentError, 'invalid year' end unless number.is_a?(Integer) && number.between?(1, 12) raise ArgumentError, 'invalid month number' end @year, @number = year, number freeze end |
Instance Attribute Details
#number ⇒ Object (readonly) Also known as: month
Returns the value of attribute number.
19 20 21 |
# File 'lib/month.rb', line 19 def number @number end |
#year ⇒ Object (readonly)
Returns the value of attribute year.
19 20 21 |
# File 'lib/month.rb', line 19 def year @year end |
Class Method Details
.parse(string) ⇒ Object
202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/month.rb', line 202 def self.parse(string) case string when REGEXP1 Month.new($1.to_i, $2.to_i) when REGEXP2 Month.new($1.to_i, ABBREVIATIONS.fetch($2)) when REGEXP3 Month.new($2.to_i, Date::MONTHNAMES.index($1)) else raise ArgumentError, 'invalid month' end end |
Instance Method Details
#+(number) ⇒ Object
130 131 132 133 134 |
# File 'lib/month.rb', line 130 def +(number) a, b = (@number - 1 + number).divmod(12) self.class.new(@year + a, b + 1) end |
#-(object) ⇒ Object
136 137 138 139 140 141 142 |
# File 'lib/month.rb', line 136 def -(object) if object.is_a?(Integer) self + (-object) else 12 * (year - object.year) + (@number - object.number) end end |
#<<(n) ⇒ Object
94 95 96 |
# File 'lib/month.rb', line 94 def <<(n) self - n end |
#<=>(month) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/month.rb', line 62 def <=>(month) return unless month.class == self.class if @year == month.year @number <=> month.number else @year <=> month.year end end |
#>>(n) ⇒ Object
90 91 92 |
# File 'lib/month.rb', line 90 def >>(n) self + n end |
#april? ⇒ Boolean
40 |
# File 'lib/month.rb', line 40 def april?; @number == 4; end |
#august? ⇒ Boolean
44 |
# File 'lib/month.rb', line 44 def august?; @number == 8; end |
#dates ⇒ Object Also known as: date_range
166 167 168 |
# File 'lib/month.rb', line 166 def dates start_date .. end_date end |
#december? ⇒ Boolean
48 |
# File 'lib/month.rb', line 48 def december?; @number == 12; end |
#deconstruct_keys(keys) ⇒ Object
58 59 60 |
# File 'lib/month.rb', line 58 def deconstruct_keys(keys) {year: @year, number: @number} end |
#downto(min, &block) ⇒ Object
126 127 128 |
# File 'lib/month.rb', line 126 def downto(min, &block) step(min, -1, &block) end |
#encode_with(coder) ⇒ Object
4 5 6 |
# File 'lib/month/yaml.rb', line 4 def encode_with(coder) coder.represent_scalar(nil, to_s) end |
#end_date ⇒ Object
162 163 164 |
# File 'lib/month.rb', line 162 def end_date Date.new(@year, @number, -1) end |
#end_time ⇒ Object
154 155 156 |
# File 'lib/month.rb', line 154 def end_time Time.new(@year, @number, end_date.day, 23, 59, 59) end |
#eql?(object) ⇒ Boolean
54 55 56 |
# File 'lib/month.rb', line 54 def eql?(object) object.class == self.class && object.year == @year && object.number == @number end |
#february? ⇒ Boolean
38 |
# File 'lib/month.rb', line 38 def february?; @number == 2; end |
#hash ⇒ Object
50 51 52 |
# File 'lib/month.rb', line 50 def hash [@year, @number].hash end |
#include?(time) ⇒ Boolean Also known as: ===
144 145 146 |
# File 'lib/month.rb', line 144 def include?(time) @year == time.year && @number == time.month end |
#inspect ⇒ Object
29 30 31 |
# File 'lib/month.rb', line 29 def inspect "<Month: #{to_s}>" end |
#january? ⇒ Boolean
37 |
# File 'lib/month.rb', line 37 def january?; @number == 1; end |
#july? ⇒ Boolean
43 |
# File 'lib/month.rb', line 43 def july?; @number == 7; end |
#june? ⇒ Boolean
42 |
# File 'lib/month.rb', line 42 def june?; @number == 6; end |
#length ⇒ Object
172 173 174 |
# File 'lib/month.rb', line 172 def length end_date.mday end |
#march? ⇒ Boolean
39 |
# File 'lib/month.rb', line 39 def march?; @number == 3; end |
#may? ⇒ Boolean
41 |
# File 'lib/month.rb', line 41 def may?; @number == 5; end |
#name ⇒ Object
33 34 35 |
# File 'lib/month.rb', line 33 def name Date::MONTHNAMES[@number] end |
#next ⇒ Object Also known as: succ, next_month
74 75 76 77 78 79 80 |
# File 'lib/month.rb', line 74 def next if @number == 12 self.class.new(@year + 1, 1) else self.class.new(@year, @number + 1) end end |
#november? ⇒ Boolean
47 |
# File 'lib/month.rb', line 47 def november?; @number == 11; end |
#october? ⇒ Boolean
46 |
# File 'lib/month.rb', line 46 def october?; @number == 10; end |
#prev_month ⇒ Object
86 87 88 |
# File 'lib/month.rb', line 86 def prev_month self - 1 end |
#september? ⇒ Boolean
45 |
# File 'lib/month.rb', line 45 def september?; @number == 9; end |
#start_date ⇒ Object
158 159 160 |
# File 'lib/month.rb', line 158 def start_date Date.new(@year, @number, 1) end |
#start_time ⇒ Object
150 151 152 |
# File 'lib/month.rb', line 150 def start_time Time.new(@year, @number, 1, 0, 0, 0) end |
#step(limit, step = 1) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/month.rb', line 98 def step(limit, step = 1) raise ArgumentError if step.zero? unless block_given? return enum_for(:step, limit, step) end month = self if step > 0 until month > limit yield month month += step end else until month < limit yield month month += step end end end |
#to_s ⇒ Object Also known as: iso8601
23 24 25 |
# File 'lib/month.rb', line 23 def to_s "#{@year}-#{@number.to_s.rjust(2, '0')}" end |
#upto(max, &block) ⇒ Object
122 123 124 |
# File 'lib/month.rb', line 122 def upto(max, &block) step(max, 1, &block) end |