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 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: []