month 0.1.2 → 1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c7a5b582cedcab3ae50a07ede99a2036cdf836d6
4
+ data.tar.gz: 74a2c8bfc2bf430a86cf9b1edadb26d20f047db8
5
+ SHA512:
6
+ metadata.gz: 2a262762f6b7699fc8031a4d4d304b85751682d7d5efa3e769961c379cf306b6ffeaeb1518067100befe4c3a7998bb1846f005a992a5b1ff22918377fdb55462
7
+ data.tar.gz: d069fd96c3e81f3e4b19d9e851103db1199d42ca100733b323b0ea680cf948bf985a412356d7f03a150f8b0d3da752e24dffae611525e1dff481ff5d9a19e970
@@ -0,0 +1,130 @@
1
+ month
2
+ =====
3
+
4
+
5
+ A little library for working with months.
6
+
7
+
8
+ Feature tour
9
+ ------------
10
+
11
+ You can create a new Month object by passing the year and the month number
12
+ as arguments to the constructor:
13
+
14
+ ```ruby
15
+ Month.new(2014, 1) # January 2014
16
+ ```
17
+
18
+ Alternatively you can use the Month method to cast various date/time
19
+ objects to Month objects:
20
+
21
+ ```ruby
22
+ Month(Date.new(2014, 1, 31)) # January 2014
23
+
24
+ Month(Time.at(1234567890)) # February 2009
25
+ ```
26
+
27
+ The method will idempotently return Month objects as-is:
28
+
29
+ ```ruby
30
+ Month(Month.new(2014, 1)) # January 2014, same object
31
+ ```
32
+
33
+ Use the Month.parse method to parse a YYYY-MM formatted string:
34
+
35
+ ```ruby
36
+ Month.parse('2014-01') # January 2014
37
+ ```
38
+
39
+ The #year attribute will return the year of the month:
40
+
41
+ ```ruby
42
+ Month.new(2014, 1).year # 2014
43
+ ```
44
+
45
+ The #number attribute will return the number of the month:
46
+
47
+ ```ruby
48
+ Month.new(2014, 1).number # 1
49
+ ```
50
+
51
+ The #name method will return the name of the month as a symbol:
52
+
53
+ ```ruby
54
+ Month.new(2014, 1).name # :January
55
+ ```
56
+
57
+ Alternatively you can use predicate methods to test for a given month:
58
+
59
+ ```ruby
60
+ Month.new(2014, 1).january? # true
61
+
62
+ Month.new(2014, 2).january? # false
63
+ ```
64
+
65
+ The #to_s method will return a YYYY-MM formatted string representation
66
+ of the month:
67
+
68
+ ```ruby
69
+ Month.new(2014, 1).to_s # "2014-01"
70
+ ```
71
+
72
+ You can add/subtract an integer number of months:
73
+
74
+ ```ruby
75
+ Month.new(2014, 1) + 1 # February 2014
76
+
77
+ Month.new(2014, 1) - 1 # December 2013
78
+ ```
79
+
80
+ The #step method iterates between 2 months, similar to Date#step:
81
+
82
+ ```ruby
83
+ Month.new(2014, 1).step(Month.new(2014, 12)) do |month|
84
+ ...
85
+ end
86
+ ```
87
+
88
+ The #include? method can be used to test if the month includes a date:
89
+
90
+ ```ruby
91
+ Month.new(2014, 1).include?(Date.new(2014, 1, 31)) # true
92
+ ```
93
+
94
+ The #dates method returns a range containing the dates in the month:
95
+
96
+ ```ruby
97
+ Month.new(2014, 1).dates # Range containing 31 Date objects
98
+ ```
99
+
100
+ The #length method returns the number of days in the month:
101
+
102
+ ```ruby
103
+ Month.new(2014, 1).length # 31
104
+ ```
105
+
106
+ Month objects can be used in case expressions.
107
+
108
+ Month objects can be used as hash keys.
109
+
110
+ Month objects can be used in ranges.
111
+
112
+ Month objects are comparable.
113
+
114
+
115
+ Bonus Extras
116
+ ------------
117
+
118
+ The Month::Methods module provides methods for constructing Month objects
119
+ and Date objects in a manner that closely resembles written english:
120
+
121
+ ```ruby
122
+ include Month::Methods
123
+
124
+ month = January 2014
125
+
126
+ date = January 15, 2014
127
+ ```
128
+
129
+ It is not included by default, you can either include it within your
130
+ own modules/classes or globally within your application/script.
@@ -1,98 +1,160 @@
1
- # Month represents a specific month in time. With the exception of
2
- # Month.month_names (which returns a zero-based array), every usage of the
3
- # month value assumes that 1 equals January and 12 equals December.
4
- #
5
- # The Rubyforge project page can be viewed at
6
- # http://rubyforge.org/projects/month.
1
+ require 'date'
2
+
3
+ class Month
4
+ NAMES = {
5
+ 1 => :January,
6
+ 2 => :February,
7
+ 3 => :March,
8
+ 4 => :April,
9
+ 5 => :May,
10
+ 6 => :June,
11
+ 7 => :July,
12
+ 8 => :August,
13
+ 9 => :September,
14
+ 10 => :October,
15
+ 11 => :November,
16
+ 12 => :December
17
+ }
18
+
19
+ def initialize(year, number)
20
+ unless NAMES.has_key?(number)
21
+ raise ArgumentError, 'invalid month number'
22
+ end
23
+
24
+ @year, @number = year, number
25
+ end
26
+
27
+ attr_reader :year, :number
28
+
29
+ def to_s
30
+ "#@year-#{@number.to_s.rjust(2, '0')}"
31
+ end
32
+
33
+ def name
34
+ NAMES.fetch(@number)
35
+ end
36
+
37
+ NAMES.each do |number, name|
38
+ define_method(:"#{name.downcase}?") do
39
+ @number == number
40
+ end
41
+ end
42
+
43
+ def hash
44
+ [@year, @number].hash
45
+ end
46
+
47
+ def eql?(object)
48
+ object.class == self.class && object.hash == self.hash
49
+ end
50
+
51
+ def <=>(month)
52
+ if @year == month.year
53
+ @number <=> month.number
54
+ else
55
+ @year <=> month.year
56
+ end
57
+ end
58
+
59
+ include Comparable
60
+
61
+ def next
62
+ if @number == 12
63
+ self.class.new(@year + 1, 1)
64
+ else
65
+ self.class.new(@year, @number + 1)
66
+ end
67
+ end
68
+
69
+ alias_method :succ, :next
70
+
71
+ def step(limit)
72
+ unless block_given?
73
+ return enum_for(:step, limit)
74
+ end
75
+
76
+ month = self
77
+
78
+ until month > limit
79
+ yield month
80
+
81
+ month = month.succ
82
+ end
83
+ end
84
+
85
+ def +(number)
86
+ a, b = (@number + number).divmod(12)
87
+
88
+ self.class.new(@year + a, b)
89
+ end
90
+
91
+ def -(number)
92
+ if @number > number
93
+ self.class.new(@year, @number - number)
94
+ elsif @number < number
95
+ a, b = (@number - number).divmod(12)
96
+
97
+ self.class.new(@year + a, b)
98
+ else
99
+ self.class.new(@year - 1, 12)
100
+ end
101
+ end
102
+
103
+ def include?(date)
104
+ @year == date.year && @number == date.month
105
+ end
106
+
107
+ alias_method :===, :include?
108
+
109
+ def start_date
110
+ Date.new(@year, @number, 1)
111
+ end
112
+
113
+ def end_date
114
+ Date.new(@year, @number, -1)
115
+ end
116
+
117
+ def dates
118
+ start_date .. end_date
119
+ end
120
+
121
+ def length
122
+ end_date.mday
123
+ end
124
+ end
125
+
126
+ def Month.parse(string)
127
+ if string =~ /\A(\d{4})-(\d{2})\z/
128
+ Month.new($1.to_i, $2.to_i)
129
+ else
130
+ raise ArgumentError, 'invalid month'
131
+ end
132
+ end
133
+
134
+ def Month(object)
135
+ case object
136
+ when Month
137
+ object
138
+ when Integer
139
+ Month(Time.at(object))
140
+ else
141
+ Month.new(object.year, object.month)
142
+ end
143
+ end
144
+
7
145
  class Month
8
- Version = '0.1.2'
9
-
10
- # Returns an array of the full names of months (in English). Note that
11
- # "January" is the 0th element, and "December" is the 11th element.
12
- def Month.month_names
13
- [ "January", "February", "March", "April", "May", "June", "July",
14
- "August", "September", "October", "November", "December" ]
15
- end
16
-
17
- include Comparable
18
-
19
- attr_reader :month, :year
20
-
21
- # A new month can be set to a specific +month+ and +year+, or you can call
22
- # Month.new with no arguments to receive the current month.
23
- def initialize( year = nil, month = nil )
24
- require 'date'
25
- if month.nil? || year.nil?
26
- date = Date.today
27
- month = date.mon unless month
28
- year = date.year unless year
29
- end
30
- fail "invalid month" if month < 1 || month > 12
31
- @month = month
32
- @year = year
33
- end
34
-
35
- # Returns a new Month that is +amountToAdd+ months later.
36
- def +( amountToAdd )
37
- ( fullYears, remainingMonths ) = amountToAdd.divmod( 12 )
38
- resultYear = @year + fullYears
39
- resultMonth = @month + remainingMonths
40
- if resultMonth > 12
41
- resultMonth -= 12
42
- resultYear += 1
43
- end
44
- Month.new( resultYear, resultMonth )
45
- end
46
-
47
- # Returns a new Month that is +amountToSubtract+ months earlier.
48
- def -(amountToSubtract)
49
- self + (-amountToSubtract)
50
- end
51
-
52
- # Compare this Month to another Month.
53
- def <=>(anOther)
54
- if @year == anOther.year
55
- @month <=> anOther.month
56
- else
57
- @year <=> anOther.year
58
- end
59
- end
60
-
61
- # Returns the last Date of the month.
62
- def end_date
63
- self.next.start_date - 1
64
- end
65
-
66
- # Is this Month equal to +anOther+? +anOther+ must be another Month of the
67
- # same value.
68
- def eql?(anOther)
69
- self == anOther
70
- end
71
-
72
- # Calculate a hash value for this Month.
73
- def hash
74
- "#{@year}#{@month}".to_i
75
- end
76
-
77
- # Returns the next Month.
78
- def next
79
- self + 1
80
- end
81
-
82
- alias_method :succ, :next
83
-
84
- # Returns the previous Month.
85
- def prev
86
- self - 1
87
- end
88
-
89
- # Returns the first Date of the month.
90
- def start_date
91
- Date.new( @year, @month, 1 )
92
- end
93
-
94
- # Returns a string of the format "January 2001".
95
- def to_s
96
- Month.month_names[@month-1][0..2] + " " + @year.to_s
97
- end
146
+ module Methods
147
+ NAMES.each do |number, name|
148
+ define_method(name) do |*args|
149
+ case args.length
150
+ when 1
151
+ Month.new(args.first, number)
152
+ when 2
153
+ Date.new(args[1], number, args[0])
154
+ else
155
+ raise ArgumentError, 'too many arguments'
156
+ end
157
+ end
158
+ end
159
+ end
98
160
  end
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'month'
3
+ s.version = '1.0.0'
4
+ s.platform = Gem::Platform::RUBY
5
+ s.authors = ['Tim Craft']
6
+ s.email = ['mail@timcraft.com']
7
+ s.homepage = 'http://github.com/timcraft/month'
8
+ s.description = 'A little library for working with months'
9
+ s.summary = 'See description'
10
+ s.files = Dir.glob('{lib,spec}/**/*') + %w(README.md month.gemspec)
11
+ s.add_development_dependency('rake', '~> 10.0')
12
+ s.add_development_dependency('minitest', '~> 5.0')
13
+ s.require_path = 'lib'
14
+ end
@@ -0,0 +1,238 @@
1
+ require 'minitest/autorun'
2
+
3
+ require_relative '../lib/month'
4
+
5
+ describe 'Month' do
6
+ it 'raises an exception when initialized with an invalid number' do
7
+ proc { Month.new(2014, 0) }.must_raise(ArgumentError)
8
+ proc { Month.new(2014, 100) }.must_raise(ArgumentError)
9
+ end
10
+
11
+ describe 'year method' do
12
+ it 'returns the integer year of the month' do
13
+ Month.new(2014, 1).year.must_equal(2014)
14
+ end
15
+ end
16
+
17
+ describe 'number method' do
18
+ it 'returns the integer number of the month' do
19
+ Month.new(2014, 1).number.must_equal(1)
20
+ end
21
+ end
22
+
23
+ describe 'to_s method' do
24
+ it 'returns a string containing the year and zero padded number of the month' do
25
+ Month.new(2014, 1).to_s.must_equal('2014-01')
26
+ end
27
+ end
28
+
29
+ describe 'name method' do
30
+ it 'returns the name of the month' do
31
+ Month.new(2014, 1).name.must_equal(:January)
32
+ end
33
+ end
34
+
35
+ describe 'january predicate method' do
36
+ it 'returns true if the month is january' do
37
+ Month.new(2014, 1).january?.must_equal(true)
38
+ end
39
+
40
+ it 'returns false otherwise' do
41
+ Month.new(2014, 2).january?.must_equal(false)
42
+ end
43
+ end
44
+
45
+ describe 'february predicate method' do
46
+ it 'returns true if the month is february' do
47
+ Month.new(2014, 2).february?.must_equal(true)
48
+ end
49
+
50
+ it 'returns false otherwise' do
51
+ Month.new(2014, 1).february?.must_equal(false)
52
+ end
53
+ end
54
+
55
+ it 'supports being used as a hash key' do
56
+ hash, n = Hash.new(0), 10
57
+
58
+ n.times { hash[Month.new(2014, 1)] += 1 }
59
+
60
+ hash.count.must_equal(1)
61
+ hash[Month.new(2014, 1)].must_equal(n)
62
+ end
63
+
64
+ it 'supports comparison between month objects' do
65
+ Month.new(2014, 1).must_be_kind_of(Comparable)
66
+
67
+ (Month.new(2014, 1) == Month.new(2014, 1)).must_equal(true)
68
+ (Month.new(2014, 1) == Month.new(2014, 2)).must_equal(false)
69
+
70
+ (Month.new(2014, 1) < Month.new(2014, 2)).must_equal(true)
71
+ (Month.new(2014, 2) > Month.new(2014, 1)).must_equal(true)
72
+ end
73
+
74
+ it 'supports being used in a range' do
75
+ range = Month.new(2014, 1) .. Month.new(2014, 4)
76
+
77
+ range.map(&:number).must_equal([1, 2, 3, 4])
78
+ end
79
+
80
+ describe 'next method' do
81
+ it 'returns a month object denoting the next month' do
82
+ Month.new(2014, 1).next.must_equal(Month.new(2014, 2))
83
+ Month.new(2014, 12).next.must_equal(Month.new(2015, 1))
84
+ end
85
+ end
86
+
87
+ describe 'succ method' do
88
+ it 'returns a month object denoting the next month' do
89
+ Month.new(2014, 1).succ.must_equal(Month.new(2014, 2))
90
+ Month.new(2014, 12).succ.must_equal(Month.new(2015, 1))
91
+ end
92
+ end
93
+
94
+ describe 'step method' do
95
+ it 'calls the block for every month until the given limit' do
96
+ months = []
97
+
98
+ Month.new(2014, 1).step(Month.new(2014, 3)) { |month| months << month }
99
+
100
+ months.must_equal([Month.new(2014, 1), Month.new(2014, 2), Month.new(2014, 3)])
101
+ end
102
+
103
+ it 'returns an enumerator if no block was given' do
104
+ months = Month.new(2014, 1).step(Month.new(2014, 3))
105
+
106
+ months.must_be_instance_of(Enumerator)
107
+
108
+ months.next.must_equal(Month.new(2014, 1))
109
+ months.next.must_equal(Month.new(2014, 2))
110
+ months.next.must_equal(Month.new(2014, 3))
111
+ end
112
+ end
113
+
114
+ describe 'addition' do
115
+ it 'returns a month object denoting the given number of months after self' do
116
+ (Month.new(2014, 1) + 1).must_equal(Month.new(2014, 2))
117
+ (Month.new(2014, 1) + 12).must_equal(Month.new(2015, 1))
118
+ (Month.new(2014, 1) + 18).must_equal(Month.new(2015, 7))
119
+ end
120
+ end
121
+
122
+ describe 'subtraction' do
123
+ it 'returns a month object denoting the given number of months before self' do
124
+ (Month.new(2014, 2) - 1).must_equal(Month.new(2014, 1))
125
+ (Month.new(2014, 1) - 1).must_equal(Month.new(2013, 12))
126
+ (Month.new(2014, 1) - 12).must_equal(Month.new(2013, 1))
127
+ (Month.new(2014, 1) - 18).must_equal(Month.new(2012, 7))
128
+ end
129
+ end
130
+
131
+ describe 'include predicate method' do
132
+ it 'returns true if the month includes the given date' do
133
+ Month.new(2014, 1).include?(Date.new(2014, 1, 1)).must_equal(true)
134
+ end
135
+
136
+ it 'returns false otherwise' do
137
+ Month.new(2014, 1).include?(Date.new(2014, 2, 1)).must_equal(false)
138
+ end
139
+ end
140
+
141
+ describe 'case equals method' do
142
+ it 'returns true if the month includes the given date' do
143
+ (Month.new(2014, 1) === Date.new(2014, 1, 1)).must_equal(true)
144
+ end
145
+
146
+ it 'returns false otherwise' do
147
+ (Month.new(2014, 1) === Date.new(2014, 2, 1)).must_equal(false)
148
+ end
149
+ end
150
+
151
+ describe 'start_date method' do
152
+ it 'returns a date object denoting the first day of the month' do
153
+ Month.new(2014, 1).start_date.must_equal(Date.new(2014, 1, 1))
154
+ end
155
+ end
156
+
157
+ describe 'end_date method' do
158
+ it 'returns a date object denoting the last day of the month' do
159
+ Month.new(2014, 1).end_date.must_equal(Date.new(2014, 1, 31))
160
+ end
161
+ end
162
+
163
+ describe 'dates method' do
164
+ it 'returns the range of dates in the month' do
165
+ dates = Month.new(2014, 1).dates
166
+ dates.must_be_instance_of(Range)
167
+ dates.count.must_equal(31)
168
+ dates.all? { |date| Date === date }.must_equal(true)
169
+ dates.first.must_equal(Date.new(2014, 1, 1))
170
+ dates.last.must_equal(Date.new(2014, 1, 31))
171
+ end
172
+ end
173
+
174
+ describe 'length method' do
175
+ it 'returns the integer number of days in the month' do
176
+ Month.new(2014, 1).length.must_equal(31)
177
+ Month.new(2014, 2).length.must_equal(28)
178
+ end
179
+ end
180
+ end
181
+
182
+ describe 'Month parse method' do
183
+ it 'returns the month corresponding to the given string representation' do
184
+ Month.parse('2014-01').must_equal(Month.new(2014, 1))
185
+ end
186
+
187
+ it 'raises an exception if the format of the string is not as expected' do
188
+ proc { Month.parse('January 2014') }.must_raise(ArgumentError)
189
+ end
190
+ end
191
+
192
+ describe 'Month method' do
193
+ it 'returns the month of the given date object' do
194
+ Month(Date.new(2014, 1, 1)).must_equal(Month.new(2014, 1))
195
+ end
196
+
197
+ it 'returns the month of the given time object' do
198
+ Month(Time.at(1234567890)).must_equal(Month.new(2009, 2))
199
+ end
200
+
201
+ it 'returns the month of the given datetime object' do
202
+ Month(DateTime.parse('2001-02-03T04:05:06+07:00')).must_equal(Month.new(2001, 2))
203
+ end
204
+
205
+ it 'returns the month of the given integer unix timestamp' do
206
+ Month(1234567890).must_equal(Month.new(2009, 2))
207
+ end
208
+
209
+ it 'idempotently returns the given month' do
210
+ month = Month.new(2014, 1)
211
+
212
+ Month(month).object_id.must_equal(month.object_id)
213
+ end
214
+ end
215
+
216
+ describe 'A method defined in Month::Methods' do
217
+ include Month::Methods
218
+
219
+ it 'returns a month object denoting that month in the given year' do
220
+ month = January 2014
221
+ month.must_equal(Month.new(2014, 1))
222
+
223
+ month = February 2014
224
+ month.must_equal(Month.new(2014, 2))
225
+ end
226
+
227
+ it 'returns a date object when given two arguments' do
228
+ date = January 31, 2014
229
+ date.must_equal(Date.new(2014, 1, 31))
230
+
231
+ date = February 28, 2014
232
+ date.must_equal(Date.new(2014, 2, 28))
233
+ end
234
+
235
+ it 'raises an exception if given too many arguments' do
236
+ proc { January 1, 2, 3 }.must_raise(ArgumentError)
237
+ end
238
+ end
metadata CHANGED
@@ -1,63 +1,75 @@
1
- --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
1
+ --- !ruby/object:Gem::Specification
4
2
  name: month
5
- version: !ruby/object:Gem::Version
6
- version: 0.1.2
7
- date: 2007-11-02 00:00:00 -04:00
8
- summary: Ruby Month is a utility class for representing months in Ruby. It handles addition, previous and next months, end and start dates, month names (in English), and a few other handy things.
9
- require_paths:
10
- - lib
11
- email: sera@fhwang.net
12
- homepage: http://month.rubyforge.org/
13
- rubyforge_project: month
14
- description: Ruby Month is a utility class for representing months in Ruby. It handles addition, previous and next months, end and start dates, month names (in English), and a few other handy things.
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tim Craft
15
8
  autorequire:
16
- default_executable:
17
9
  bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
25
- platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
- authors:
30
- - Francis Hwang
31
- files:
32
- - Manifest.txt
33
- - README.txt
34
- - changelog.txt
35
- - install.rb
36
- - lib/month.rb
37
- - rakefile
38
- - test/ts_month.rb
39
- test_files: []
40
-
41
- rdoc_options:
42
- - --main
43
- - README.txt
44
- extra_rdoc_files:
45
- - Manifest.txt
46
- - README.txt
47
- - changelog.txt
10
+ cert_chain: []
11
+ date: 2014-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ description: A little library for working with months
42
+ email:
43
+ - mail@timcraft.com
48
44
  executables: []
49
-
50
45
  extensions: []
51
-
46
+ extra_rdoc_files: []
47
+ files:
48
+ - README.md
49
+ - lib/month.rb
50
+ - month.gemspec
51
+ - spec/month_spec.rb
52
+ homepage: http://github.com/timcraft/month
53
+ licenses: []
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
52
69
  requirements: []
53
-
54
- dependencies:
55
- - !ruby/object:Gem::Dependency
56
- name: hoe
57
- version_requirement:
58
- version_requirements: !ruby/object:Gem::Version::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 1.3.0
63
- version:
70
+ rubyforge_project:
71
+ rubygems_version: 2.2.2
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: See description
75
+ test_files: []
@@ -1,7 +0,0 @@
1
- Manifest.txt
2
- README.txt
3
- changelog.txt
4
- install.rb
5
- lib/month.rb
6
- rakefile
7
- test/ts_month.rb
data/README.txt DELETED
@@ -1,7 +0,0 @@
1
- Ruby Month is a utility class for representing months in Ruby. It handles addition, previous and next months, end and start dates, month names (in English), and a few other handy things.
2
-
3
- http://rubyforge.org/projects/month/
4
-
5
- INSTALLATION:
6
- As root, run "./install.rb", which will copy the Ruby files into the right
7
- subdirectory. You can run "./install.rb --help" for information.
@@ -1,9 +0,0 @@
1
- = 0.1.2 -- Nov 2 2007
2
- * added Month#succ.
3
-
4
- = 0.1.1 -- Jan 7 2007
5
- * added install.rb
6
- * added reference to Rubyforge project page to month.rb RDoc
7
-
8
- = 0.1.0 -- Jun 7 2005
9
- * Initial release.
data/install.rb DELETED
@@ -1,164 +0,0 @@
1
- #! /usr/bin/env ruby
2
- ################################################################################
3
- # #
4
- # Name: install.rb #
5
- # Author: Sean E Russell <ser@germane-software.com> #
6
- # Version: $Id: install.rb,v 1.1 2007/01/08 01:46:57 francis Exp $
7
- # Date: *2002-174 #
8
- # Description: #
9
- # This is a generic installation script for pure ruby sources. Features #
10
- # include: #
11
- # * Clean uninstall #
12
- # * Installation into an absolute path #
13
- # * Installation into a temp path (useful for systems like Portage) #
14
- # * Noop mode, for testing #
15
- # To set for a different system, change the SRC directory to point to the #
16
- # package name / source directory for the project. #
17
- # #
18
- ################################################################################
19
-
20
- # CHANGE THIS
21
- SRC = 'lib'
22
- MODULE_NAME = 'month'
23
- BIN = 'bin'
24
- # CHANGE NOTHING BELOW THIS LINE
25
-
26
- if $0 == __FILE__
27
- Dir.chdir ".." if Dir.pwd =~ /bin.?$/
28
-
29
- require 'getoptlong'
30
- require 'rbconfig'
31
- require 'ftools'
32
- require 'find'
33
-
34
- opts = GetoptLong.new( [ '--uninstall', '-u', GetoptLong::NO_ARGUMENT],
35
- [ '--destdir', '-d', GetoptLong::REQUIRED_ARGUMENT ],
36
- [ '--target', '-t', GetoptLong::REQUIRED_ARGUMENT ],
37
- [ '--help', '-h', GetoptLong::NO_ARGUMENT],
38
- [ '--noop', '-n', GetoptLong::NO_ARGUMENT])
39
-
40
-
41
- destdir = File.join Config::CONFIG['sitedir'],
42
- "#{Config::CONFIG['MAJOR']}.#{Config::CONFIG['MINOR']}"
43
- bindir = '/usr/local/bin'
44
-
45
- uninstall = false
46
- append = nil
47
- opts.each do |opt,arg|
48
- case opt
49
- when '--destdir'
50
- append = arg
51
- when '--uninstall'
52
- uninstall = true
53
- when '--target'
54
- destdir = arg
55
- when '--help'
56
- puts "Installs #{SRC}.\nUsage:\n\t#$0 [[-u] [-n] [-t <dir>|-d <dir>]|-h]"
57
- puts "\t-u --uninstall\tUninstalls the package"
58
- puts "\t-t --target\tInstalls the software at an absolute location, EG:"
59
- puts "\t #$0 -t /usr/local/lib/ruby"
60
- puts "\t will put the software directly underneath /usr/local/lib/ruby;"
61
- puts "\t IE, /usr/local/lib/ruby/#{SRC}"
62
- puts "\t-d --destdir\tInstalls the software at a relative location, EG:"
63
- puts "\t #$0 -d /tmp"
64
- puts "\t will put the software under tmp, using your ruby environment."
65
- puts "\t IE, /tmp/#{destdir}/#{SRC}"
66
- puts "\t-n --noop\tDon't actually do anything; just print out what it"
67
- puts "\t would do."
68
- exit 0
69
- when '--noop'
70
- NOOP = true
71
- end
72
- end
73
-
74
- destdir = File.join append, destdir if append
75
-
76
- def get_install_base( file )
77
- file_parts = file.split( File::SEPARATOR )
78
- file_parts.shift
79
- file_parts.join( File::SEPARATOR )
80
- end
81
-
82
- def install destdir, bindir
83
- puts "Installing in #{destdir}"
84
- begin
85
- Find.find(SRC) { |file|
86
- next if file =~ /CVS|\.svn/
87
- install_base = get_install_base( file )
88
- dst = File.join( destdir, install_base )
89
- if defined? NOOP
90
- puts ">> #{dst}" if file =~ /\.rb$/
91
- else
92
- File.makedirs( File.dirname(dst) )
93
- File.install(file, dst, 0644, true) if file =~ /\.rb$/
94
- end
95
- }
96
- rescue
97
- puts $!
98
- end
99
- puts "Installing binaries in #{ bindir }"
100
- begin
101
- Dir.entries( BIN ).each { |entry|
102
- src = File.join( BIN, entry )
103
- next unless FileTest.executable?( src ) && !FileTest.directory?( src )
104
- dst = File.join( bindir, entry )
105
- if defined? NOOP
106
- puts ">> #{ dst }"
107
- else
108
- File.install( src, dst, 0755, true )
109
- end
110
- }
111
- rescue
112
- puts $!
113
- end
114
- end
115
-
116
- def uninstall destdir, bindir
117
- puts "Uninstalling in #{destdir}"
118
- begin
119
- puts "Deleting:"
120
- dirs = []
121
- Find.find( destdir ) do |file|
122
- if file =~ /^#{ destdir }#{ File::SEPARATOR }#{ MODULE_NAME }/
123
- if defined? NOOP
124
- puts "-- #{file}" if File.file? file
125
- else
126
- File.rm_f file,true if File.file? file
127
- end
128
- dirs << file if File.directory? file
129
- end
130
- end
131
- dirs.sort { |x,y|
132
- y.length <=> x.length
133
- }.each { |d|
134
- if defined? NOOP
135
- puts "-- #{d}"
136
- else
137
- puts d
138
- Dir.delete d
139
- end
140
- }
141
- rescue
142
- end
143
- puts "Uninstalling binaries in #{ bindir }"
144
- begin
145
- Dir.entries( BIN ).each { |entry|
146
- orig = File.join( BIN, entry )
147
- next unless FileTest.executable?( orig ) && !FileTest.directory?( orig )
148
- to_uninstall = File.join( bindir, entry )
149
- if defined? NOOP
150
- puts "-- #{to_uninstall}" if File.file? to_uninstall
151
- else
152
- File.rm_f to_uninstall,true if File.file? to_uninstall
153
- end
154
- }
155
- rescue
156
- end
157
- end
158
-
159
- if uninstall
160
- uninstall destdir, bindir
161
- else
162
- install destdir, bindir
163
- end
164
- end
data/rakefile DELETED
@@ -1,44 +0,0 @@
1
- =begin
2
- $: << 'lib'
3
- require 'month'
4
-
5
- @@version_str = Month::Version
6
-
7
- def release_tag
8
- ( uber, major, minor ) = @@version_str.split( '.' ).collect! { |str|
9
- str.to_i
10
- }
11
- "rel-#{ uber }-#{ major }-#{ minor }"
12
- end
13
-
14
- def release_dir_name
15
- "month-#{ @@version_str }"
16
- end
17
-
18
- task :export_release do
19
- Dir.chdir('../releases')
20
- ext = "-d:ext:francis@rubyforge.org:/var/cvs/month"
21
- `cvs #{ ext } export -r #{ release_tag } -d #{ release_dir_name } month`
22
- `tar zcvf month-#{ @@version_str }.tar.gz #{ release_dir_name }`
23
- end
24
-
25
- task :update_docs do
26
- Dir.chdir( 'lib' )
27
- `rdoc --op ../docs/`
28
- end
29
- =end
30
-
31
- require 'hoe'
32
- $:.unshift 'lib'
33
- require 'month'
34
-
35
- Hoe.new("month", Month::Version) do |p|
36
- p.rubyforge_name = "month"
37
- p.author = 'Francis Hwang'
38
- p.description = p.paragraphs_of( 'README.txt', 0 ).first
39
- p.summary = p.paragraphs_of( 'README.txt', 0 ).first
40
- p.email = 'sera@fhwang.net'
41
- p.url = 'http://month.rubyforge.org/'
42
- p.changes = p.paragraphs_of( 'changelog.txt', 0 ).first
43
- end
44
-
@@ -1,68 +0,0 @@
1
- $: << 'lib'
2
- require 'month'
3
- require 'test/unit'
4
-
5
- class TestMonth < Test::Unit::TestCase
6
- def setup
7
- @jan2000 = Month.new 2000, 1
8
- @dec2000 = Month.new 2000, 12
9
- @jan2001 = Month.new 2001, 1
10
- end
11
-
12
- def test_arithmetic
13
- assert_equal( Month.new( 2000, 2 ), @jan2000 + 1 )
14
- assert_equal( Month.new( 2001, 1 ), @jan2000 + 12 )
15
- assert_equal( Month.new( 1999, 10 ), @jan2000 - 3 )
16
- assert_equal( Month.new( 1999, 10 ), @jan2000 + -3 )
17
- end
18
-
19
- def test_checks_month
20
- caught = false
21
- begin
22
- Month.new 1, 2000
23
- rescue
24
- caught = true
25
- end
26
- assert caught
27
- Month.new 2000, 1
28
- end
29
-
30
- def test_compare
31
- assert @jan2000 < @jan2001
32
- end
33
-
34
- def test_default_init_to_current_month
35
- month = Month.new
36
- date = Date.today
37
- assert_equal( date.mon, month.month )
38
- assert_equal( date.year, month.year )
39
- end
40
-
41
- def test_hashable
42
- newJan2000 = Month.new( 2000, 1 )
43
- assert_equal @jan2000, newJan2000
44
- assert_equal @jan2000.hash, newJan2000.hash
45
- assert( @jan2000.eql?( newJan2000 ) )
46
- normalHash = {}
47
- normalHash[@jan2000] = 'q'
48
- assert_equal 'q', normalHash[newJan2000]
49
- end
50
-
51
- def test_prev_next_succ
52
- assert_equal( @dec2000, @jan2001.prev )
53
- assert_equal( @jan2001, @dec2000.next )
54
- assert_equal( @jan2001, @dec2000.succ )
55
- assert_equal( @jan2000, @jan2000.prev.next )
56
- assert_equal( @jan2000, @jan2000.prev.succ )
57
- end
58
-
59
- def test_start_date_and_end_date
60
- assert_equal( Date.new( 2000, 12, 1 ), @dec2000.start_date )
61
- assert_equal( Date.new( 2000, 12, 31 ), @dec2000.end_date )
62
- assert_equal( Date.new( 1999, 2, 28 ), Month.new( 1999, 2 ).end_date )
63
- end
64
-
65
- def test_to_s
66
- assert_equal 'Jan 2000', @jan2000.to_s
67
- end
68
- end