sheha 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG +0 -0
- data/LICENSE +0 -0
- data/README.md +4 -0
- data/Rakefile +8 -0
- data/lib/sheha/errors.rb +5 -0
- data/lib/sheha/event.rb +29 -0
- data/lib/sheha/helper.rb +55 -0
- data/lib/sheha/monthly_event.rb +22 -0
- data/lib/sheha/one_time_event.rb +11 -0
- data/lib/sheha/weekly_event.rb +26 -0
- data/lib/sheha/yearly_event.rb +51 -0
- data/lib/sheha.rb +81 -0
- data/sheha.gemspec +21 -0
- data/test/test_sheha.rb +59 -0
- data/test/test_sheha_event.rb +59 -0
- data/test/test_sheha_helper.rb +67 -0
- data/test/test_sheha_monthly_event.rb +70 -0
- data/test/test_sheha_one_time_event.rb +64 -0
- data/test/test_sheha_weekly_event.rb +70 -0
- data/test/test_sheha_yearly_event.rb +103 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e93889e41290d0ac873f1d252c73d75d361436c3
|
4
|
+
data.tar.gz: d757c8222bc97e6e7a84f25d28d00209262241f5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 10bae87fdc036d35bb422e4b99682e0185d6682d676fc6d0ef42f719da73d931d6e27c43bd12739ddf32a315d57bc6ad80f35fbf3c3c7fe348e1f64707b43dce
|
7
|
+
data.tar.gz: b4a7f807895a572c7e636ef20617ef4d1f2dd651661edd42994bd1c9cbbc3cd89c0d1ca380ee8797644ce295abc456d0b1e8de4d57126899020e392650128828
|
data/CHANGELOG
ADDED
File without changes
|
data/LICENSE
ADDED
File without changes
|
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/sheha/errors.rb
ADDED
data/lib/sheha/event.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
class Sheha::Event
|
2
|
+
include Comparable
|
3
|
+
|
4
|
+
attr_accessor :name, :description
|
5
|
+
|
6
|
+
def initialize(id)
|
7
|
+
@id = id
|
8
|
+
end
|
9
|
+
|
10
|
+
def ==(other)
|
11
|
+
@id == other.instance_variable_get("@id")
|
12
|
+
end
|
13
|
+
|
14
|
+
def eql?(other)
|
15
|
+
@id.eql? other.instance_variable_get("@id")
|
16
|
+
end
|
17
|
+
|
18
|
+
def hash
|
19
|
+
@id.hash
|
20
|
+
end
|
21
|
+
|
22
|
+
def <=>(other)
|
23
|
+
@id <=> other.instance_variable_get("@id")
|
24
|
+
end
|
25
|
+
|
26
|
+
def succ
|
27
|
+
self.class.new @id.succ
|
28
|
+
end
|
29
|
+
end
|
data/lib/sheha/helper.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
class Module
|
2
|
+
def attr_alias(new_attr, original)
|
3
|
+
alias_method(new_attr, original) if method_defined? original
|
4
|
+
new_writer = "#{new_attr}="
|
5
|
+
original_writer = "#{original}="
|
6
|
+
alias_method(new_writer, original_writer) if method_defined? original_writer
|
7
|
+
end
|
8
|
+
|
9
|
+
def attr_instance_var(attr_name, instance_var)
|
10
|
+
# Define a setter for @var
|
11
|
+
send :define_method, attr_name do |data|
|
12
|
+
instance_variable_set("@#{instance_var}", data)
|
13
|
+
end
|
14
|
+
# Define a getter for @var
|
15
|
+
send :define_method, attr_name do
|
16
|
+
instance_variable_get("@#{instance_var}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Sheha::Helper
|
22
|
+
WEEK_DAYS = Date.const_get(:DAYNAMES).map {|week_day| week_day.downcase}
|
23
|
+
|
24
|
+
def self.validate_month(month)
|
25
|
+
raise Sheha::InvalidMonthError, "There is no #{month} month." unless valid_month? month
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.validate_month_day(month_day)
|
29
|
+
raise Sheha::InvalidMonthDayError, "There is no #{month_day} day in a month." unless valid_month_day? month_day
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.validate_week_day(week_day)
|
33
|
+
raise Sheha::InvalidWeekDayError, "There is no #{week_day} in a week." unless valid_week_day? week_day
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.valid_month?(month)
|
37
|
+
month >= 1 && month <= 12
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.valid_month_day?(month_day)
|
41
|
+
month_day >= 1 && month_day <= 31
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.valid_week_day?(week_day)
|
45
|
+
WEEK_DAYS.member? week_day
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.week_day_at(index)
|
49
|
+
WEEK_DAYS[index - 1]
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.find_week_day_index(week_day)
|
53
|
+
WEEK_DAYS.find_index(week_day) + 1
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Sheha::MonthlyEvent < Sheha::Event
|
2
|
+
attr_instance_var :month_day, :id
|
3
|
+
|
4
|
+
def initialize(month_day)
|
5
|
+
Sheha::Helper.validate_month_day(month_day)
|
6
|
+
super month_day
|
7
|
+
end
|
8
|
+
|
9
|
+
def event?(date)
|
10
|
+
month_day == date.day
|
11
|
+
end
|
12
|
+
|
13
|
+
def succ
|
14
|
+
self.class.new succ_month_day
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def succ_month_day
|
19
|
+
return 1 if month_day == 31
|
20
|
+
month_day + 1
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Sheha::WeeklyEvent < Sheha::Event
|
2
|
+
attr_instance_var :week_day, :id
|
3
|
+
|
4
|
+
def initialize(week_day)
|
5
|
+
Sheha::Helper.validate_week_day(week_day)
|
6
|
+
super week_day
|
7
|
+
end
|
8
|
+
|
9
|
+
def event?(date)
|
10
|
+
week_day == "#{date.strftime('%A').downcase}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def <=>(other)
|
14
|
+
Sheha::Helper.find_week_day_index(week_day) <=> Sheha::Helper.find_week_day_index(other.week_day)
|
15
|
+
end
|
16
|
+
|
17
|
+
def succ
|
18
|
+
self.class.new succ_week_day
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def succ_week_day
|
23
|
+
return Sheha::Helper.week_day_at(1) if Sheha::Helper.find_week_day_index(week_day) == 7
|
24
|
+
Sheha::Helper.week_day_at(Sheha::Helper.find_week_day_index(week_day) + 1)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class Sheha::YearlyEvent < Sheha::Event
|
2
|
+
def initialize(month, month_day)
|
3
|
+
Sheha::Helper.validate_month(month)
|
4
|
+
Sheha::Helper.validate_month_day(month_day)
|
5
|
+
super "#{month}#{month_day}".to_i
|
6
|
+
end
|
7
|
+
|
8
|
+
def month
|
9
|
+
"#{four_digits_id[0..1]}".to_i
|
10
|
+
end
|
11
|
+
|
12
|
+
def month=(month)
|
13
|
+
Sheha::Helper.validate_month(month)
|
14
|
+
@id = "#{month}#{four_digits_id[2..3]}".to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
def month_day
|
18
|
+
"#{four_digits_id[2..3]}".to_i
|
19
|
+
end
|
20
|
+
|
21
|
+
def month_day=(month_day)
|
22
|
+
Sheha::Helper.validate_month_day(month_day)
|
23
|
+
@id = "#{four_digits_id[0..1]}#{month_day}".to_i
|
24
|
+
end
|
25
|
+
|
26
|
+
def event?(date)
|
27
|
+
month == date.month && month_day == date.day
|
28
|
+
end
|
29
|
+
|
30
|
+
def succ
|
31
|
+
self.class.new(succ_month, succ_month_day)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def four_digits_id
|
36
|
+
"%04d" % @id
|
37
|
+
end
|
38
|
+
|
39
|
+
def succ_month
|
40
|
+
if month_day == 31
|
41
|
+
return 1 if month == 12
|
42
|
+
return month + 1
|
43
|
+
end
|
44
|
+
month
|
45
|
+
end
|
46
|
+
|
47
|
+
def succ_month_day
|
48
|
+
return 1 if month_day == 31
|
49
|
+
month_day + 1
|
50
|
+
end
|
51
|
+
end
|
data/lib/sheha.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
class Sheha
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@events = Set.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(event)
|
11
|
+
@events.add event
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_range(from, to)
|
15
|
+
raise "Invalid Range" if not valid_range?(from, to)
|
16
|
+
|
17
|
+
(from..to).each do |date|
|
18
|
+
if block_given?
|
19
|
+
add yield(date)
|
20
|
+
else
|
21
|
+
add date
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def event?(date)
|
27
|
+
@events.each do |event|
|
28
|
+
return true if event.event? date
|
29
|
+
end
|
30
|
+
return false
|
31
|
+
end
|
32
|
+
|
33
|
+
# Add Events
|
34
|
+
|
35
|
+
def add_weekly_event(week_day)
|
36
|
+
add WeeklyEvent.new(week_day)
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_monthly_event(month_day)
|
40
|
+
add MonthlyEvent.new(month_day)
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_yearly_event(month, month_day)
|
44
|
+
add YearlyEvent.new(month, month_day)
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_one_time_event(date)
|
48
|
+
add OneTimeEvent.new(date)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Add Ranges
|
52
|
+
|
53
|
+
def add_weekly_event_range(from, to)
|
54
|
+
add_range WeeklyEvent.new(from), WeeklyEvent.new(to)
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_monthly_event_range(from, to)
|
58
|
+
add_range MonthlyEvent.new(from), MonthlyEvent.new(to)
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_yearly_event_range(from, to)
|
62
|
+
add_range YearlyEvent.new(from[0], from[1]), YearlyEvent.new(to[0], to[1])
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_one_time_event_range(from, to)
|
66
|
+
add_range OneTimeEvent.new(from), OneTimeEvent.new(to)
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def valid_range?(from, to)
|
71
|
+
from < to
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
require 'sheha/errors'
|
76
|
+
require 'sheha/helper'
|
77
|
+
require 'sheha/event'
|
78
|
+
require 'sheha/weekly_event'
|
79
|
+
require 'sheha/monthly_event'
|
80
|
+
require 'sheha/yearly_event'
|
81
|
+
require 'sheha/one_time_event'
|
data/sheha.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'sheha'
|
3
|
+
s.version = '0.0.0'
|
4
|
+
s.date = '2013-06-17'
|
5
|
+
s.summary = "Simple Holidays & Events Handler"
|
6
|
+
s.description = "A Simple Holidays & Events Handler Gem"
|
7
|
+
s.authors = ["Agustin Pelliza"]
|
8
|
+
s.email = 'agpelliza@gmail.com'
|
9
|
+
s.homepage =
|
10
|
+
'http://rubygems.org/gems/sheha'
|
11
|
+
|
12
|
+
s.files = Dir[
|
13
|
+
"LICENSE",
|
14
|
+
"CHANGELOG",
|
15
|
+
"README.md",
|
16
|
+
"Rakefile",
|
17
|
+
"lib/**/*.rb",
|
18
|
+
"*.gemspec",
|
19
|
+
"test/*.*"
|
20
|
+
]
|
21
|
+
end
|
data/test/test_sheha.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_add_event
|
7
|
+
sheha = Sheha.new
|
8
|
+
sheha.add(Sheha::OneTimeEvent.new(Date.new(2012, 12, 25)))
|
9
|
+
assert(sheha.instance_variable_get('@events').include?(Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))))
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_is_event
|
13
|
+
sheha = Sheha.new
|
14
|
+
sheha.add(Sheha::OneTimeEvent.new(Date.new(2012, 12, 25)))
|
15
|
+
assert sheha.event? Date.new(2012, 12, 25)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_add_one_time_event
|
19
|
+
sheha = Sheha.new
|
20
|
+
sheha.add_one_time_event(Date.new(2012, 12, 25))
|
21
|
+
assert sheha.event? Date.new(2012, 12, 25)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_add_yearly_event
|
25
|
+
sheha = Sheha.new
|
26
|
+
sheha.add_yearly_event 12, 25
|
27
|
+
assert sheha.event? Date.new(2013, 12, 25)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_add_monthly_event
|
31
|
+
sheha = Sheha.new
|
32
|
+
sheha.add_monthly_event 25
|
33
|
+
assert sheha.event? Date.new(2013, 12, 25)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_add_weekly_event
|
37
|
+
sheha = Sheha.new
|
38
|
+
sheha.add_weekly_event 'wednesday'
|
39
|
+
assert sheha.event? Date.new(2013, 12, 25)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_add_event_range_one_time_dates
|
43
|
+
sheha = Sheha.new
|
44
|
+
sheha.add_one_time_event_range Date.new(2013, 12, 20), Date.new(2013, 12, 30)
|
45
|
+
assert sheha.event? Date.new(2013, 12, 25)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_add_yearly_event_range
|
49
|
+
sheha = Sheha.new
|
50
|
+
sheha.add_yearly_event_range [12, 20], [12, 30]
|
51
|
+
assert sheha.event? Date.new(2013, 12, 25)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_add_monthly_event_range
|
55
|
+
sheha = Sheha.new
|
56
|
+
sheha.add_monthly_event_range 20, 30
|
57
|
+
assert sheha.event? Date.new(2013, 12, 25)
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaEventTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_new_event
|
7
|
+
event = Sheha::Event.new 'my_id'
|
8
|
+
assert event.is_a? Sheha::Event
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_event_compare_as_equal
|
12
|
+
event = Sheha::Event.new 'my_id'
|
13
|
+
assert_equal(Sheha::Event.new('my_id'), event)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_event_compare_as_not_equal
|
17
|
+
event = Sheha::Event.new 'my_id'
|
18
|
+
assert_not_equal(Sheha::Event.new('other_id'), event)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_event_eql_and_hash_eval_as_equal
|
22
|
+
set = Set.new
|
23
|
+
set.add Sheha::Event.new('my_id')
|
24
|
+
set.add Sheha::Event.new('my_id')
|
25
|
+
assert_equal(1, set.size)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_event_eql_and_hash_eval_as_not_equal
|
29
|
+
set = Set.new
|
30
|
+
set.add Sheha::Event.new('my_id')
|
31
|
+
set.add Sheha::Event.new('other_id')
|
32
|
+
assert_equal(2, set.size)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_event_has_succ
|
36
|
+
event = Sheha::Event.new(1)
|
37
|
+
assert_equal(Sheha::Event.new(2), event.succ)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_events_are_ranges
|
41
|
+
event_1 = Sheha::Event.new(1)
|
42
|
+
event_2 = Sheha::Event.new(2)
|
43
|
+
assert (event_1..event_2).is_a? Range
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_event_range_between_1_and_3_has_2
|
47
|
+
event_1 = Sheha::Event.new(1)
|
48
|
+
event_3 = Sheha::Event.new(3)
|
49
|
+
assert (event_1..event_3).member? Sheha::Event.new(2)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_event_range_is_iterable
|
53
|
+
event_1 = Sheha::Event.new(1)
|
54
|
+
event_3 = Sheha::Event.new(3)
|
55
|
+
(event_1..event_3).each do |event|
|
56
|
+
assert event.is_a? Sheha::Event
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaHelperTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_helper_valid_month
|
7
|
+
assert Sheha::Helper.valid_month?(12)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_helper_invalid_month
|
11
|
+
assert !Sheha::Helper.valid_month?(13)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_helper_valid_month_day
|
15
|
+
assert Sheha::Helper.valid_month_day?(25)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_helper_invalid_month_day
|
19
|
+
assert !Sheha::Helper.valid_month_day?(32)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_helper_valid_week_day
|
23
|
+
assert Sheha::Helper.valid_week_day?('tuesday')
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_helper_invalid_week_day
|
27
|
+
assert !Sheha::Helper.valid_week_day?('not_a_week_day')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_helper_validate_valid_month
|
31
|
+
assert_equal(nil, Sheha::Helper.validate_month(12))
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_helper_validate_invalid_month
|
35
|
+
assert_raise Sheha::InvalidMonthError do
|
36
|
+
Sheha::Helper.validate_month(13)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_helper_validate_valid_month_day
|
41
|
+
assert_equal(nil, Sheha::Helper.validate_month_day(25))
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_helper_validate_invalid_month_day
|
45
|
+
assert_raise Sheha::InvalidMonthDayError do
|
46
|
+
Sheha::Helper.validate_month_day(32)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_helper_validate_valid_week_day
|
51
|
+
assert_equal(nil, Sheha::Helper.validate_week_day('tuesday'))
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_helper_validate_invalid_week_day
|
55
|
+
assert_raise Sheha::InvalidWeekDayError do
|
56
|
+
Sheha::Helper.validate_week_day('not_a_week_day')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_helper_week_day_at_index
|
61
|
+
assert_equal('tuesday', Sheha::Helper.week_day_at(3))
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_helper_find_week_day_index
|
65
|
+
assert_equal(3, Sheha::Helper.find_week_day_index('tuesday'))
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaMonthlyEventTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_new_monthly_event
|
7
|
+
event = Sheha::MonthlyEvent.new(25)
|
8
|
+
assert event.is_a? Sheha::MonthlyEvent
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_monthly_event_has_given_month_day
|
12
|
+
event = Sheha::MonthlyEvent.new(25)
|
13
|
+
assert_equal(25, event.month_day)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_monthly_event_raise_error_if_invalid_month_day
|
17
|
+
assert_raise Sheha::InvalidMonthDayError do
|
18
|
+
Sheha::MonthlyEvent.new(32)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_monthly_event_compare_as_equal
|
23
|
+
event = Sheha::MonthlyEvent.new 25
|
24
|
+
assert_equal(Sheha::MonthlyEvent.new(25), event)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_monthly_event_compare_as_not_equal
|
28
|
+
event = Sheha::MonthlyEvent.new 25
|
29
|
+
assert_not_equal(Sheha::MonthlyEvent.new(26), event)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_monthly_event_eql_and_hash_eval_as_equal
|
33
|
+
set = Set.new
|
34
|
+
set.add Sheha::MonthlyEvent.new(25)
|
35
|
+
set.add Sheha::MonthlyEvent.new(25)
|
36
|
+
assert_equal(1, set.size)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_monthly_event_eql_and_hash_eval_as_not_equal
|
40
|
+
set = Set.new
|
41
|
+
set.add Sheha::MonthlyEvent.new(25)
|
42
|
+
set.add Sheha::MonthlyEvent.new(26)
|
43
|
+
assert_equal(2, set.size)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_monthly_event_has_succ
|
47
|
+
event = Sheha::MonthlyEvent.new(25)
|
48
|
+
assert_equal(Sheha::MonthlyEvent.new(26), event.succ)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_monthly_events_are_ranges
|
52
|
+
event_1 = Sheha::MonthlyEvent.new(25)
|
53
|
+
event_2 = Sheha::MonthlyEvent.new(26)
|
54
|
+
assert (event_1..event_2).is_a? Range
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_monthly_event_range_between_1_and_3_has_2
|
58
|
+
event_1 = Sheha::MonthlyEvent.new(25)
|
59
|
+
event_3 = Sheha::MonthlyEvent.new(27)
|
60
|
+
assert (event_1..event_3).member? Sheha::MonthlyEvent.new(26)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_monthly_event_range_is_iterable
|
64
|
+
event_1 = Sheha::MonthlyEvent.new(25)
|
65
|
+
event_3 = Sheha::MonthlyEvent.new(27)
|
66
|
+
(event_1..event_3).each do |event|
|
67
|
+
assert event.is_a? Sheha::MonthlyEvent
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaOneTimeEventTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_new_one_time_event
|
7
|
+
event = Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
8
|
+
assert event.is_a? Sheha::OneTimeEvent
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_one_time_event_has_given_date
|
12
|
+
event = Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
13
|
+
assert_equal(Date.new(2012, 12, 25), event.date)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_one_time_event_compare_as_equal
|
17
|
+
event = Sheha::OneTimeEvent.new Date.new(2012, 12, 25)
|
18
|
+
assert_equal(Sheha::OneTimeEvent.new(Date.new(2012, 12, 25)), event)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_one_time_event_compare_as_not_equal
|
22
|
+
event = Sheha::OneTimeEvent.new Date.new(2012, 12, 25)
|
23
|
+
assert_not_equal(Sheha::OneTimeEvent.new(Date.new(2012, 12, 26)), event)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_one_time_event_eql_and_hash_eval_as_equal
|
27
|
+
set = Set.new
|
28
|
+
set.add Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
29
|
+
set.add Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
30
|
+
assert_equal(1, set.size)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_one_time_event_eql_and_hash_eval_as_not_equal
|
34
|
+
set = Set.new
|
35
|
+
set.add Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
36
|
+
set.add Sheha::OneTimeEvent.new(Date.new(2012, 12, 26))
|
37
|
+
assert_equal(2, set.size)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_one_time_event_has_succ
|
41
|
+
event = Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
42
|
+
assert_equal(Sheha::OneTimeEvent.new(Date.new(2012, 12, 26)), event.succ)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_one_time_events_are_ranges
|
46
|
+
event_1 = Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
47
|
+
event_2 = Sheha::OneTimeEvent.new(Date.new(2012, 12, 26))
|
48
|
+
assert (event_1..event_2).is_a? Range
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_one_time_event_range_between_1_and_3_has_2
|
52
|
+
event_1 = Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
53
|
+
event_2 = Sheha::OneTimeEvent.new(Date.new(2012, 12, 27))
|
54
|
+
assert (event_1..event_2).member? Sheha::OneTimeEvent.new(Date.new(2012, 12, 26))
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_one_time_event_range_is_iterable
|
58
|
+
event_1 = Sheha::OneTimeEvent.new(Date.new(2012, 12, 25))
|
59
|
+
event_2 = Sheha::OneTimeEvent.new(Date.new(2012, 12, 27))
|
60
|
+
(event_1..event_2).each do |event|
|
61
|
+
assert event.is_a? Sheha::OneTimeEvent
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaWeeklyEventTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_new_weekly_event
|
7
|
+
event = Sheha::WeeklyEvent.new('tuesday')
|
8
|
+
assert event.is_a? Sheha::WeeklyEvent
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_weekly_event_has_given_week_day
|
12
|
+
event = Sheha::WeeklyEvent.new('tuesday')
|
13
|
+
assert_equal('tuesday', event.week_day)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_weekly_event_raise_error_if_invalid_week_day
|
17
|
+
assert_raise Sheha::InvalidWeekDayError do
|
18
|
+
Sheha::WeeklyEvent.new('not_a_week_day')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_weekly_event_compare_as_equal
|
23
|
+
event = Sheha::WeeklyEvent.new 'tuesday'
|
24
|
+
assert_equal(Sheha::WeeklyEvent.new('tuesday'), event)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_weekly_event_compare_as_not_equal
|
28
|
+
event = Sheha::WeeklyEvent.new 'tuesday'
|
29
|
+
assert_not_equal(Sheha::WeeklyEvent.new('wednesday'), event)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_weekly_event_eql_and_hash_eval_as_equal
|
33
|
+
set = Set.new
|
34
|
+
set.add Sheha::WeeklyEvent.new('tuesday')
|
35
|
+
set.add Sheha::WeeklyEvent.new('tuesday')
|
36
|
+
assert_equal(1, set.size)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_weekly_event_eql_and_hash_eval_as_not_equal
|
40
|
+
set = Set.new
|
41
|
+
set.add Sheha::WeeklyEvent.new('tuesday')
|
42
|
+
set.add Sheha::WeeklyEvent.new('wednesday')
|
43
|
+
assert_equal(2, set.size)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_weekly_event_has_succ
|
47
|
+
event = Sheha::WeeklyEvent.new('tuesday')
|
48
|
+
assert_equal(Sheha::WeeklyEvent.new('wednesday'), event.succ)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_weekly_events_are_ranges
|
52
|
+
event_1 = Sheha::WeeklyEvent.new('tuesday')
|
53
|
+
event_2 = Sheha::WeeklyEvent.new('wednesday')
|
54
|
+
assert (event_1..event_2).is_a? Range
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_weekly_event_range_between_1_and_3_has_2
|
58
|
+
event_1 = Sheha::WeeklyEvent.new('tuesday')
|
59
|
+
event_3 = Sheha::WeeklyEvent.new('thursday')
|
60
|
+
assert (event_1..event_3).member? Sheha::WeeklyEvent.new('wednesday')
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_weekly_event_range_is_iterable
|
64
|
+
event_1 = Sheha::WeeklyEvent.new('tuesday')
|
65
|
+
event_3 = Sheha::WeeklyEvent.new('thursday')
|
66
|
+
(event_1..event_3).each do |event|
|
67
|
+
assert event.is_a? Sheha::WeeklyEvent
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sheha'
|
3
|
+
|
4
|
+
class ShehaYearlyEventTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_new_yearly_event
|
7
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
8
|
+
assert event.is_a? Sheha::YearlyEvent
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_yearly_event_raise_exception_if_invalid_month
|
12
|
+
assert_raise Sheha::InvalidMonthError do
|
13
|
+
Sheha::YearlyEvent.new(13, 25)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_yearly_event_raise_error_if_invalid_month_day
|
18
|
+
assert_raise Sheha::InvalidMonthDayError do
|
19
|
+
Sheha::YearlyEvent.new(12, 32)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_yearly_event_has_given_month_and_day
|
24
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
25
|
+
assert_equal(12, event.month)
|
26
|
+
assert_equal(25, event.month_day)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_yearly_event_set_month
|
30
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
31
|
+
event.month = 11
|
32
|
+
assert_equal(11, event.month)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_yearly_event_raise_error_if_set_invalid_month
|
36
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
37
|
+
assert_raise Sheha::InvalidMonthError do
|
38
|
+
event.month = 13
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_yearly_event_set_month_day
|
43
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
44
|
+
event.month_day = 26
|
45
|
+
assert_equal(26, event.month_day)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_yearly_event_raise_error_if_set_invalid_month_day
|
49
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
50
|
+
assert_raise Sheha::InvalidMonthDayError do
|
51
|
+
event.month_day = 32
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_yearly_event_compare_as_equal
|
56
|
+
event = Sheha::YearlyEvent.new 12, 25
|
57
|
+
assert_equal(Sheha::YearlyEvent.new(12, 25), event)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_yearly_event_compare_as_not_equal
|
61
|
+
event = Sheha::YearlyEvent.new 12, 25
|
62
|
+
assert_not_equal(Sheha::YearlyEvent.new(12, 26), event)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_yearly_event_eql_and_hash_eval_as_equal
|
66
|
+
set = Set.new
|
67
|
+
set.add Sheha::YearlyEvent.new(12, 25)
|
68
|
+
set.add Sheha::YearlyEvent.new(12, 25)
|
69
|
+
assert_equal(1, set.size)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_yearly_event_eql_and_hash_eval_as_not_equal
|
73
|
+
set = Set.new
|
74
|
+
set.add Sheha::YearlyEvent.new(12, 25)
|
75
|
+
set.add Sheha::YearlyEvent.new(12, 26)
|
76
|
+
assert_equal(2, set.size)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_yearly_event_has_succ
|
80
|
+
event = Sheha::YearlyEvent.new(12, 25)
|
81
|
+
assert_equal(Sheha::YearlyEvent.new(12, 26), event.succ)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_yearly_events_are_ranges
|
85
|
+
event_1 = Sheha::YearlyEvent.new(12, 25)
|
86
|
+
event_2 = Sheha::YearlyEvent.new(12, 26)
|
87
|
+
assert (event_1..event_2).is_a? Range
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_yearly_event_range_between_1_and_3_has_2
|
91
|
+
event_1 = Sheha::YearlyEvent.new(12, 25)
|
92
|
+
event_3 = Sheha::YearlyEvent.new(12, 27)
|
93
|
+
assert (event_1..event_3).member? Sheha::YearlyEvent.new(12, 26)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_yearly_event_range_is_iterable
|
97
|
+
event_1 = Sheha::YearlyEvent.new(12, 25)
|
98
|
+
event_3 = Sheha::YearlyEvent.new(12, 27)
|
99
|
+
(event_1..event_3).each do |event|
|
100
|
+
assert event.is_a? Sheha::YearlyEvent
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sheha
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Agustin Pelliza
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-06-17 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A Simple Holidays & Events Handler Gem
|
14
|
+
email: agpelliza@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- LICENSE
|
20
|
+
- CHANGELOG
|
21
|
+
- README.md
|
22
|
+
- Rakefile
|
23
|
+
- lib/sheha.rb
|
24
|
+
- lib/sheha/errors.rb
|
25
|
+
- lib/sheha/event.rb
|
26
|
+
- lib/sheha/helper.rb
|
27
|
+
- lib/sheha/one_time_event.rb
|
28
|
+
- lib/sheha/yearly_event.rb
|
29
|
+
- lib/sheha/monthly_event.rb
|
30
|
+
- lib/sheha/weekly_event.rb
|
31
|
+
- sheha.gemspec
|
32
|
+
- test/test_sheha_yearly_event.rb
|
33
|
+
- test/test_sheha_helper.rb
|
34
|
+
- test/test_sheha_event.rb
|
35
|
+
- test/test_sheha.rb
|
36
|
+
- test/test_sheha_weekly_event.rb
|
37
|
+
- test/test_sheha_monthly_event.rb
|
38
|
+
- test/test_sheha_one_time_event.rb
|
39
|
+
homepage: http://rubygems.org/gems/sheha
|
40
|
+
licenses: []
|
41
|
+
metadata: {}
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 2.0.0
|
59
|
+
signing_key:
|
60
|
+
specification_version: 4
|
61
|
+
summary: Simple Holidays & Events Handler
|
62
|
+
test_files: []
|