rmoriz-smartmonth 1.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.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Panoctagon, inc. (Derek Perez | www.derekperez.com)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,30 @@
1
+ SmartMonth is a "bodysnatcher" plugin that takes boring Date month fixnums and replaces them with a rich toolkit of functionality. You can use SmartMonth to:
2
+
3
+ - Determine the first tuesday of any month in any year.
4
+ - Determine all of the fridays of any month in any year.
5
+ - Iterate through all the days of a month.
6
+ - Determine how many days of the month there are.
7
+ - Determine the first and last days of the month.
8
+ - And other fun date/month related things!
9
+
10
+ This is designed to be an extension of not only Time.now.month, but adds a new Month class to the ruby object model.
11
+
12
+ Keep in mind, this is 1.0, and may break things that rely on Time.now.month being a Fixnum. I've tried to fix this by making sure #to_i works as expected, but it may be an issue, handle with care.
13
+
14
+ Examples:
15
+
16
+ Time.now.month.every_tuesday #=> [array of tuesdays for the current month]
17
+ Month.april.first_wednesday #=> Date object corresponding to the first wednesday of april.
18
+ Month.may.every_monday_and_friday #=> {:monday=>[...],:friday=>[...]}
19
+ Month.june(2012).last_monday #=> Date object corresponding to the last monday in june 2012.
20
+
21
+ # iterator:
22
+ Month.june(2004).each do |day|
23
+ day.to_s #=> name of day (Saturday, Sunday, etc.)
24
+ day.to_i #=> value between 1 and the last day of the month corresponding.
25
+ end
26
+
27
+ Check the included documentation (rdoc) or our documentation site (http://code.panoctagon.com/projects/smartmonth)
28
+ for more info on usage!
29
+
30
+ Copyright (c) 2008 Panoctagon, inc (Derek Perez | www.derekperez.com), released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the smart_month plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the smart_month plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'SmartMonth'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
data/init.rb ADDED
@@ -0,0 +1,5 @@
1
+ class ::Time
2
+ def month
3
+ return Month.new(self.mon,self.year)
4
+ end
5
+ end
data/lib/month.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'date'
2
+
3
+ class Month
4
+ # gather the modules
5
+ include SmartMonth::Calculations
6
+ include SmartMonth::Collection
7
+ include SmartMonth::Math
8
+ include SmartMonth::Util
9
+ include SmartMonth::Magic
10
+ # abstraction that returns an array of months.
11
+ NAMES = Date::MONTHNAMES
12
+ # abstraction that returns an array of day names.
13
+ DAYS = Date::DAYNAMES
14
+ # constructor, takes 2 optional arguments, if you don't provide them, it will default to
15
+ # the current month and year.
16
+ def initialize(month = Time.now.mon, year = Time.now.year)
17
+ @date = Date.new(year,( month.is_a?(Integer) ? month : Month::NAMES.index(month.to_s.capitalize) ) ,1)
18
+ end
19
+ end
@@ -0,0 +1,80 @@
1
+ module SmartMonth
2
+ # Responsible for all core month/week calculations.
3
+ module Calculations
4
+ # returns the first date of the day requested.
5
+ # if no day is defined, it returns the very first day of the month.
6
+ def first(day = nil)
7
+ (day.nil?) ? @date : nth_weekday(day,1)
8
+ end
9
+
10
+ # returns the second date of the day requested.
11
+ def second(day)
12
+ nth_weekday(day,2)
13
+ end
14
+
15
+ # returns the third date of the day requested.
16
+ def third(day)
17
+ nth_weekday(day,3)
18
+ end
19
+
20
+ # returns the fourth (or potentially last), date of the day requested.
21
+ def fourth(day)
22
+ nth_weekday(day,4) || self.last(day)
23
+ end
24
+
25
+ # returns last date of the day requested.
26
+ # if no day is defined, it returns the very last day of the month.
27
+ def last(day = nil)
28
+ (day.nil?) ? Date.new(@date.year,@date.month,-1) : every(day).last
29
+ end
30
+
31
+ # returns an array of dates of the day requested.
32
+ # if an array of dates are passed in, a hash of day names containing
33
+ # the corresponding date are returned.
34
+ def every(*days)
35
+ days = [days].flatten
36
+ if days.size == 1
37
+ dates = []
38
+ (1..5).each do |week|
39
+ dates << nth_weekday(days.first,week)
40
+ end
41
+ dates.compact!
42
+ else
43
+ dates = {}
44
+ days.each do |day|
45
+ day = day.to_sym
46
+ dates[day] = []
47
+ (1..5).each do |week|
48
+ dates[day] << nth_weekday(day,week)
49
+ end
50
+ dates[day].compact!
51
+ end
52
+ end
53
+ dates
54
+ end
55
+
56
+ # returns the total number of days in month.
57
+ def size
58
+ self.last.day.to_i
59
+ end
60
+ alias_method :length, :size
61
+
62
+ private
63
+
64
+ # this is the heart of the calculations module.
65
+ def nth_weekday(day,limit = 0)
66
+ raise RuntimeError, "#{day} is not a valid day of the week" unless Month::DAYS.collect{|d| d.downcase}.include?(day.to_s)
67
+ limit -= 1 # make more sense to humans
68
+ requested_weekday = Month::DAYS.collect{|d| d.downcase}.index(day.to_s)
69
+ iter_date = Date.new(@date.year,@date.month,1)
70
+ # find the first day that works
71
+ until iter_date.wday == requested_weekday
72
+ iter_date +=1
73
+ end
74
+ # then add a multipler based on the limit
75
+ iter_date = iter_date + (limit*7)
76
+ # if the date we've iterated to doesn't exist in this month, send out a nil.
77
+ return iter_date unless iter_date.month != @date.month
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,67 @@
1
+ module SmartMonth
2
+ # Responsible for all collection-based functionality.
3
+ module Collection
4
+ # this is a helper class that is used primarily by Month#each.
5
+ # should not be used standalone for any reason, really.
6
+ class Day
7
+ def initialize(date)
8
+ @date = date
9
+ end
10
+ # returns the date numeric of the day (in regards to the month it resides in).
11
+ def to_i
12
+ @date.day
13
+ end
14
+ # returns the string value of the weekday.
15
+ def to_s
16
+ Month::DAYS[@date.wday]
17
+ end
18
+ end
19
+
20
+ # allows for increment by copy
21
+ def next
22
+ if @date.month + 1 > 12
23
+ Month.new(1,@date.year+1)
24
+ else
25
+ Month.new(@date.month+1,@date.year)
26
+ end
27
+ end
28
+
29
+ # allows for in place incrementing by 1
30
+ def next!
31
+ if @date.month + 1 > 12
32
+ @date = Date.new(@date.year+1,@date.month,1)
33
+ else
34
+ @date = Date.new(@date.year,@date.month+1,1)
35
+ end
36
+ end
37
+
38
+ # allows for deincrement by copy
39
+ def previous
40
+ if @date.month - 1 == 0
41
+ Month.new(12,@date.year-1)
42
+ else
43
+ Month.new(@date.month-1,@date.year)
44
+ end
45
+ end
46
+ alias_method :prev, :previous
47
+
48
+ # allows for in place deincrementing by 1
49
+ def previous!
50
+ if @date.month - 1 == 0
51
+ @date = Date.new(@date.year-1,12,1)
52
+ else
53
+ @date = Date.new(@date.year,@date.month-1,1)
54
+ end
55
+ end
56
+ alias_method :prev!, :previous!
57
+
58
+ # allows us to iterate internally on the days of a given month.
59
+ # It also uses the helpful Day class that provides some fun methods. (see SmartMonth::Collection::Day)
60
+ def each(&block)
61
+ (1..self.last.day).each do |e|
62
+ block.call(Day.new(Date.new(@date.year,@date.month,e)))
63
+ end
64
+ return self
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,35 @@
1
+ module SmartMonth
2
+ # Magic is responsible for the rails-like dynamic "magic finders".
3
+ module Magic
4
+
5
+ # extends the Month class with the Month factory
6
+ def self.included(base)
7
+ base.extend MonthFactory
8
+ end
9
+
10
+ # This module allows your code to ignore the class instantiation, simply do Month.june!
11
+ module MonthFactory
12
+ # singleton month factory
13
+ def method_missing(meth,*args)
14
+ return new(meth.to_s.capitalize, (args.first || Time.now.year)) if Month::NAMES.include? meth.to_s.capitalize
15
+ end
16
+
17
+ # this allows you to essentially treat the month as a hash or array object to construct new months.
18
+ def [](month)
19
+ new(month)
20
+ end
21
+ end
22
+
23
+ # nice catchall to allow rails-esque APIs if you choose to.
24
+ def method_missing(meth)
25
+ raw = meth.to_s.split("_")
26
+ func = raw.slice!(0)
27
+ if func == "every"
28
+ args = raw.select { |a| a != "and" }
29
+ self.send(func,args)
30
+ else
31
+ self.send(func,raw) if %w(first second third fourth last).include? func
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ module SmartMonth
2
+ # Responsible for all math related functionality.
3
+ module Math
4
+ # adds a number to the month value and returns a Fixnum.
5
+ def +(int)
6
+ self.to_i + int
7
+ end
8
+
9
+ # subtracts a number to the month value and returns a Fixnum.
10
+ def -(int)
11
+ self.to_i - int
12
+ end
13
+
14
+ # multiplies a number to the month value and returns a Fixnum.
15
+ def *(int)
16
+ self.to_i * int
17
+ end
18
+
19
+ # divides a number to the month value and returns a Fixnum.
20
+ def /(int)
21
+ self.to_i / int
22
+ end
23
+
24
+ # exponents a number to the month value and returns a Fixnum.
25
+ def **(int)
26
+ self.to_i ** int
27
+ end
28
+
29
+ # modulos a number to the month value and returns a Fixnum.
30
+ def %(int)
31
+ self.to_i % int
32
+ end
33
+
34
+ # compares the current month to another month.
35
+ def ==(month)
36
+ self.inspect! == month.inspect!
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ module SmartMonth
2
+ # Responsible for odds and ends.
3
+ module Util
4
+ # returns the month as a string.
5
+ def inspect
6
+ "#{self.to_s}"
7
+ end
8
+
9
+ # returns the year of the current month.
10
+ def year
11
+ @date.year
12
+ end
13
+
14
+ # returns the month and the year as a string.
15
+ def inspect!
16
+ "#{self.to_s} #{@date.year}"
17
+ end
18
+
19
+ # returns the month as a string.
20
+ def to_s
21
+ Month::NAMES[@date.month]
22
+ end
23
+
24
+ # returns the month as a fixnum.
25
+ def to_i
26
+ Month::NAMES.index(self.to_s)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,60 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "smartmonth"
3
+ s.version = "1.0"
4
+ s.date = "2008-08-21"
5
+ s.summary = "Making months smarter in Ruby (and Rails)."
6
+ s.email = "roland@moriz.de"
7
+ s.homepage = "http://github.com/rmoriz/smartmonth/tree/master"
8
+ s.has_rdoc = true
9
+ s.authors = ['Derek Perez']
10
+ s.files = [
11
+ "init.rb",
12
+ "lib/month.rb",
13
+ "lib/smart_month",
14
+ "lib/smart_month/calculations.rb",
15
+ "lib/smart_month/collection.rb",
16
+ "lib/smart_month/magic.rb",
17
+ "lib/smart_month/math.rb",
18
+ "lib/smart_month/util.rb",
19
+ "MIT-LICENSE",
20
+ "Rakefile",
21
+ # "rdoc/classes/Month.html",
22
+ # "rdoc/classes/SmartMonth",
23
+ # "rdoc/classes/SmartMonth/Calculations.html",
24
+ # "rdoc/classes/SmartMonth/Collection",
25
+ # "rdoc/classes/SmartMonth/Collection/Day.html",
26
+ # "rdoc/classes/SmartMonth/Collection.html",
27
+ # "rdoc/classes/SmartMonth/Magic",
28
+ # "rdoc/classes/SmartMonth/Magic/MonthFactory.html",
29
+ # "rdoc/classes/SmartMonth/Magic.html",
30
+ # "rdoc/classes/SmartMonth/Math.html",
31
+ # "rdoc/classes/SmartMonth/Util.html",
32
+ # "rdoc/classes/SmartMonth.html",
33
+ # "rdoc/created.rid",
34
+ # "rdoc/files/lib/month_rb.html",
35
+ # "rdoc/files/lib/smart_month",
36
+ # "rdoc/files/lib/smart_month/calculations_rb.html",
37
+ # "rdoc/files/lib/smart_month/collection_rb.html",
38
+ # "rdoc/files/lib/smart_month/magic_rb.html",
39
+ # "rdoc/files/lib/smart_month/math_rb.html",
40
+ # "rdoc/files/lib/smart_month/util_rb.html",
41
+ # "rdoc/files/README.html",
42
+ # "rdoc/fr_class_index.html",
43
+ # "rdoc/fr_file_index.html",
44
+ # "rdoc/fr_method_index.html",
45
+ # "rdoc/index.html",
46
+ # "rdoc/rdoc-style.css",
47
+ "README",
48
+ "smartmonth.gemspec",
49
+ "tasks/smart_month_tasks.rake",
50
+ "test/test_helper.rb",
51
+ "test/unit/smart_month_test.rb",
52
+ ]
53
+ s.test_files = [
54
+ "test/test_helper.rb",
55
+ "test/unit/smart_month_test.rb",
56
+ ]
57
+ s.rdoc_options = ["--main", "README"]
58
+ s.extra_rdoc_files = ["README", "MIT-LICENSE"]
59
+ end
60
+
File without changes
@@ -0,0 +1,26 @@
1
+ ENV['RAILS_ENV'] ||= 'development'
2
+ require File.dirname(__FILE__) + '/../../../../config/environment.rb' # this sucks
3
+
4
+ # Load the testing framework
5
+ require 'test_help'
6
+ silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
7
+
8
+ # Run the migrations
9
+ ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
10
+
11
+ # Setup the fixtures path
12
+ Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
13
+ $LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
14
+
15
+ class Test::Unit::TestCase #:nodoc:
16
+ def create_fixtures(*table_names)
17
+ if block_given?
18
+ Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
19
+ else
20
+ Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
21
+ end
22
+ end
23
+
24
+ self.use_transactional_fixtures = true
25
+ self.use_instantiated_fixtures = false
26
+ end
@@ -0,0 +1,189 @@
1
+ require "test/unit"
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require "date"
4
+
5
+ class SmartMonthTest < Test::Unit::TestCase
6
+
7
+ # SmartMonth::Calcuations
8
+
9
+ # Tested By: Derek Perez
10
+ def test_should_return_first_day_of_month
11
+ # test an ambiguous first, no weekday defined.
12
+ assert_equal Month.april(2008).first, Date.new(2008,4,1)
13
+ # test a specific first weekday.
14
+ assert_equal Month.march(2002).first(:tuesday), Date.new(2002,3,5)
15
+ end
16
+
17
+ # Tested By: Derek Perez
18
+ def test_should_return_second_day_of_month
19
+ assert_equal Month.june(2007).second(:friday), Date.new(2007,6,8)
20
+ end
21
+
22
+ # Tested By: Derek Perez
23
+ def test_should_return_third_day_of_month
24
+ assert_equal Month.august(2008).third(:wednesday), Date.new(2008,8,20)
25
+ end
26
+
27
+ # Tested By: Derek Perez
28
+ def test_should_return_last_day_of_month
29
+ # test an ambiguous last, no weekday defined.
30
+ assert_equal Month.december.last, Date.new(2008,12,31)
31
+ # test a specific last weekday.
32
+ assert_equal Month.september(2004).last(:friday), Date.new(2004,9,24)
33
+ # test a specific ambiguous, fourth, no weekday defined.
34
+ assert_equal Month.june(2004).fourth(:friday), Date.new(2004,6,25)
35
+ end
36
+
37
+ # Tested By: Derek Perez
38
+ def test_should_return_fourth_and_last_day_of_month
39
+ assert_equal Month.june(2004).fourth(:friday), Month.june(2004).last(:friday)
40
+ end
41
+
42
+ # Tested By: Derek Perez
43
+ def test_should_return_every_day_of_month
44
+ assertion = Month.april(2003).every(:tuesday)
45
+ assert_equal assertion.size, 5
46
+ assert_equal assertion, [Date.new(2003,4,1),Date.new(2003,4,8),Date.new(2003,4,15),Date.new(2003,4,22),Date.new(2003,4,29)]
47
+ end
48
+
49
+ # Tested By: Derek Perez
50
+ def test_should_retun_every_set_of_days_of_month
51
+ assertion = Month.august(2006).every(:monday,:wednesday)
52
+ # verify
53
+ assert assertion.is_a?(Hash)
54
+ # monday assertions
55
+ assert_equal assertion[:monday].size, 4
56
+ assert_equal assertion[:monday], [Date.new(2006,8,7),Date.new(2006,8,14),Date.new(2006,8,21),Date.new(2006,8,28)]
57
+ # wednesday assertions
58
+ assert_equal assertion[:wednesday].size, 5
59
+ assert_equal assertion[:wednesday],
60
+ [Date.new(2006,8,2),Date.new(2006,8,9),Date.new(2006,8,16),Date.new(2006,8,23),Date.new(2006,8,30)]
61
+
62
+ end
63
+
64
+ # Tested By: Derek Perez
65
+ def test_should_return_total_days_of_month
66
+ assert_equal Month.april(2004).size, 30
67
+ assert_equal Month.april(2004).length, 30 # alternate access
68
+ end
69
+
70
+ # SmartMonth::Collection
71
+
72
+ # Tested By: Derek Perez
73
+ def test_should_return_next_month
74
+ # default by copy
75
+ assert_equal Month.april.next, Month.may
76
+ # alternate approach
77
+ month = Month.april
78
+ month.next!
79
+ assert month, Month.may
80
+ end
81
+
82
+ # Tested By: Derek Perez
83
+ def test_should_return_previous_month
84
+ # default by copy
85
+ assert_equal Month.may.previous, Month.april
86
+ # alternate approach (by copy)
87
+ assert_equal Month.june.prev, Month.may
88
+ # alternate approach (by ref)
89
+ month = Month.august
90
+ month.previous!
91
+ assert_equal month, Month.july
92
+ # alternate approach (by copy)
93
+ month = Month.july
94
+ month.prev!
95
+ assert_equal month, Month.june
96
+ end
97
+
98
+ # Tested By: Derek Perez
99
+ def test_should_iterate_through_each_day_of_month
100
+ counter = 0
101
+ Month.april(2009).each do |day|
102
+ counter += 1
103
+ assert Month::DAYS.include?(day.to_s)
104
+ assert (1..31).include?(day.to_i)
105
+ end
106
+ assert_equal counter, Month.april.size
107
+ end
108
+
109
+ # SmartMonth::Magic
110
+
111
+ # Tested By: Derek Perez
112
+ def test_should_create_month_through_class_factory
113
+ assert_equal Month.april, Month.new("April")
114
+ assert_equal Month.march, Month.new(3)
115
+ assert_equal Month.june(2010), Month.new("June",2010)
116
+ end
117
+
118
+ # Tested By: Derek Perez
119
+ def test_should_magically_determine_function_execution
120
+ assert_equal Month.march.first(:tuesday), Month.march.first_tuesday
121
+ assert_equal Month.may.every_thursday, Month.may.every(:thursday)
122
+ assert_equal Month.june.every_tuesday_and_friday, Month.june.every(:tuesday,:friday)
123
+ end
124
+
125
+ # Tested By: Derek Perez
126
+ def test_should_return_month_as_array_index
127
+ assert_equal Month[3], Month.march
128
+ end
129
+
130
+ # Tested By: Derek Perez
131
+ def test_should_return_month_as_hash_key
132
+ assert_equal Month[:june], Month.june
133
+ assert_equal Month["april"], Month.april # alternate
134
+ end
135
+
136
+ # SmartMonth::Math
137
+
138
+ # Tested By: Derek Perez
139
+ def test_should_add_month_and_fixnum
140
+ assert_equal (Month.march + 2), 5
141
+ end
142
+
143
+ # Tested By: Derek Perez
144
+ def text_should_subtract_month_and_fixnum
145
+ assert_equal (Month.june - 4), 2
146
+ end
147
+
148
+ # Tested By: Derek Perez
149
+ def test_should_divide_month_and_fixnum
150
+ assert_equal (Month.december / 2), 6
151
+ end
152
+
153
+ # Tested By: Derek Perez
154
+ def test_should_exponent_month_and_fixnum
155
+ assert_equal (Month.may ** 2), 25
156
+ end
157
+
158
+ # Tested By: Derek Perez
159
+ def test_should_modulo_month_and_fixnum
160
+ assert_equal (Month.june % 7), 6
161
+ end
162
+
163
+ #SmartMonth::Util
164
+
165
+ def test_should_return_year_of_month
166
+ assert_equal Month.march(2004).year, 2004
167
+ end
168
+
169
+ # Tested By: Derek Perez
170
+ def test_should_inspect_month_as_string
171
+ assert_equal Month.march.inspect, "March"
172
+ end
173
+
174
+ # Tested By: Derek Perez
175
+ def test_should_inspect_month_and_year_as_string
176
+ assert_equal Month.july(2012).inspect!, "July 2012"
177
+ end
178
+
179
+ # Tested By: Derek Perez
180
+ def test_should_convert_month_to_string
181
+ assert_equal Month.march.to_s, "March"
182
+ end
183
+
184
+ # Tested By: Derek Perez
185
+ def test_should_convert_month_to_fixnum
186
+ assert_equal Month.june.to_i, 6
187
+ end
188
+
189
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rmoriz-smartmonth
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.0"
5
+ platform: ruby
6
+ authors:
7
+ - Derek Perez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-21 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: roland@moriz.de
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - MIT-LICENSE
25
+ files:
26
+ - init.rb
27
+ - lib/month.rb
28
+ - lib/smart_month
29
+ - lib/smart_month/calculations.rb
30
+ - lib/smart_month/collection.rb
31
+ - lib/smart_month/magic.rb
32
+ - lib/smart_month/math.rb
33
+ - lib/smart_month/util.rb
34
+ - MIT-LICENSE
35
+ - Rakefile
36
+ - README
37
+ - smartmonth.gemspec
38
+ - tasks/smart_month_tasks.rake
39
+ - test/test_helper.rb
40
+ - test/unit/smart_month_test.rb
41
+ has_rdoc: true
42
+ homepage: http://github.com/rmoriz/smartmonth/tree/master
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --main
46
+ - README
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.2.0
65
+ signing_key:
66
+ specification_version: 2
67
+ summary: Making months smarter in Ruby (and Rails).
68
+ test_files:
69
+ - test/test_helper.rb
70
+ - test/unit/smart_month_test.rb