sheha 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,4 @@
1
+ Sheha
2
+ =====
3
+
4
+ A Simple Holidays & Events Handler
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ class Sheha::InvalidMonthError < StandardError; end
2
+
3
+ class Sheha::InvalidMonthDayError < StandardError; end
4
+
5
+ class Sheha::InvalidWeekDayError < StandardError; end
@@ -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
@@ -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,11 @@
1
+ class Sheha::OneTimeEvent < Sheha::Event
2
+ attr_instance_var :date, :id
3
+
4
+ def initialize(date)
5
+ super date
6
+ end
7
+
8
+ def event?(date)
9
+ self.date == date
10
+ end
11
+ 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
@@ -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: []