hiccup 0.5.15 → 0.5.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 180b4da041c8d42e737e95f8d2960f810d499880
4
- data.tar.gz: 749a34b97e947982cb47f3623b34b9953368b5a0
3
+ metadata.gz: 5360432a77538aebc70858cfabaa86053f0de7d2
4
+ data.tar.gz: f6b1a1605bcb80ab578dda9b44c2dc6d50199c23
5
5
  SHA512:
6
- metadata.gz: 9ce0d249305f1740a3f01eae8397591c54872f7eb91b82a7696bb6546f0e7dff76f42c925ea0b7d8504ff6660b5f791dcdc49ed9f9108fb0ede15ad0f59be94b
7
- data.tar.gz: cbe05cd9de92f19f785300905c17c19c55aec7c0700d09fc6282df45963f0d1b1f217d934d982fe879106c15dce77b4e09f2810ea099ac6b4e36cd3c4a5af787
6
+ metadata.gz: 0d1ed6207b1477718f353df54ff3b5bd430d0f4ff223fcf312a7419165decee220cf0b8981ad54c2d768b4528d2a8f101e4104206f2e499fa557e7a05e658829
7
+ data.tar.gz: 5b9dd9c74e8b5baf294e5a108a82933bdf179740cb1083d56d7339fc33576ed5defc074af775eb94a999a1ba1d284cff944c0470f949d579b7c555289367d59e
@@ -102,15 +102,21 @@ module Hiccup
102
102
 
103
103
 
104
104
  def occurrences_in_month(year, month)
105
- wday_of_first_of_month = Date.new(year, month, 1).wday
106
105
  monthly_pattern.map do |occurrence|
107
106
  if occurrence.is_a?(Array)
108
107
  ordinal, weekday = occurrence
109
108
  wday = Date::DAYNAMES.index(weekday)
110
109
  day = wday
111
- day = day + 7 if (wday < wday_of_first_of_month)
112
- day = day - wday_of_first_of_month
113
- day = day + (ordinal * 7) - 6
110
+ if ordinal < 0
111
+ wday_of_last_of_month = Date.new(year, month, -1).wday
112
+ day = day + 7 if wday <= wday_of_last_of_month
113
+ day = day - wday_of_last_of_month + (ordinal * 7) - 1
114
+ else
115
+ wday_of_first_of_month = Date.new(year, month, 1).wday
116
+ day = day + 7 if (wday < wday_of_first_of_month)
117
+ day = day - wday_of_first_of_month
118
+ day = day + (ordinal * 7) - 6
119
+ end
114
120
  day
115
121
  else
116
122
  occurrence
@@ -1,3 +1,3 @@
1
1
  module Hiccup
2
- VERSION = "0.5.15"
2
+ VERSION = "0.5.16"
3
3
  end
@@ -69,6 +69,65 @@ class MonthlyEnumeratorTest < ActiveSupport::TestCase
69
69
  end
70
70
 
71
71
 
72
+ context "last of the month" do
73
+ should "return the last day of the month" do
74
+ date = Date.new(2014, 12, 31)
75
+ @schedule = Schedule.new(
76
+ kind: :monthly,
77
+ monthly_pattern: [-1],
78
+ start_date: date
79
+ )
80
+ enumerator = @schedule.enumerator.new(@schedule, date)
81
+ assert_equal Date.new(2015, 1, 31), enumerator.next
82
+ assert_equal Date.new(2015, 2, 28), enumerator.next
83
+ assert_equal Date.new(2015, 3, 31), enumerator.next
84
+ end
85
+
86
+ should "return the last sunday of the month" do
87
+ date = Date.new(2014, 12, 31)
88
+ @schedule = Schedule.new(
89
+ kind: :monthly,
90
+ monthly_pattern: [[-1, "Sunday"]],
91
+ start_date: date
92
+ )
93
+ enumerator = @schedule.enumerator.new(@schedule, date)
94
+ assert_equal Date.new(2015, 1, 25), enumerator.next
95
+ end
96
+
97
+ should "return the last monday of the month" do
98
+ date = Date.new(2014, 12, 31)
99
+ @schedule = Schedule.new(
100
+ kind: :monthly,
101
+ monthly_pattern: [[-1, "Monday"]],
102
+ start_date: date
103
+ )
104
+ enumerator = @schedule.enumerator.new(@schedule, Date.new(2015, 2, 28))
105
+ assert_equal Date.new(2015, 3, 30), enumerator.next
106
+ end
107
+
108
+ should "return the last tuesday of the month" do
109
+ date = Date.new(2014, 12, 31)
110
+ @schedule = Schedule.new(
111
+ kind: :monthly,
112
+ monthly_pattern: [[-1, "Tuesday"]],
113
+ start_date: date
114
+ )
115
+ enumerator = @schedule.enumerator.new(@schedule, Date.new(2015, 1, 31))
116
+ assert_equal Date.new(2015, 2, 24), enumerator.next
117
+ end
118
+
119
+ should "return the second to last tuesday of the month" do
120
+ date = Date.new(2014, 12, 31)
121
+ @schedule = Schedule.new(
122
+ kind: :monthly,
123
+ monthly_pattern: [[-2, "Tuesday"]],
124
+ start_date: date
125
+ )
126
+ enumerator = @schedule.enumerator.new(@schedule, Date.new(2015, 2, 28))
127
+ assert_equal Date.new(2015, 2, 17), enumerator.prev
128
+ end
129
+ end
130
+
72
131
  context "with an empty schedule" do
73
132
  setup do
74
133
  @schedule = Schedule.new(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiccup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.15
4
+ version: 0.5.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-24 00:00:00.000000000 Z
11
+ date: 2015-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport