sheha 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|