fat_period 1.0.0 → 1.0.2
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 +5 -5
- data/.travis.yml +5 -2
- data/LICENSE.txt +22 -0
- data/README.org +2196 -0
- data/fat_period.gemspec +4 -4
- data/lib/fat_period/period.rb +27 -23
- data/lib/fat_period/version.rb +1 -1
- metadata +19 -25
- data/README.md +0 -36
data/fat_period.gemspec
CHANGED
@@ -20,12 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
# spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_development_dependency 'bundler'
|
24
|
-
spec.add_development_dependency 'rake'
|
25
|
-
spec.add_development_dependency 'rspec'
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
26
|
spec.add_development_dependency 'pry'
|
27
27
|
spec.add_development_dependency 'pry-doc'
|
28
28
|
spec.add_development_dependency 'pry-byebug'
|
29
29
|
|
30
|
-
spec.add_runtime_dependency 'fat_core'
|
30
|
+
spec.add_runtime_dependency 'fat_core'
|
31
31
|
end
|
data/lib/fat_period/period.rb
CHANGED
@@ -4,6 +4,8 @@ require 'fat_core/date'
|
|
4
4
|
require 'fat_core/range'
|
5
5
|
require 'fat_core/string'
|
6
6
|
|
7
|
+
# The Period class represents a range of Dates and supports a variety of
|
8
|
+
# operations on those ranges.
|
7
9
|
class Period
|
8
10
|
# Return the first Date of the Period
|
9
11
|
#
|
@@ -32,12 +34,12 @@ class Period
|
|
32
34
|
elsif first.respond_to?(:to_s)
|
33
35
|
begin
|
34
36
|
@first = Date.parse(first.to_s)
|
35
|
-
rescue ArgumentError =>
|
36
|
-
if
|
37
|
-
raise ArgumentError, "
|
38
|
-
else
|
39
|
-
raise
|
37
|
+
rescue ArgumentError => e
|
38
|
+
if e.message =~ /invalid date/
|
39
|
+
raise ArgumentError, "invalid date '#{first}'"
|
40
40
|
end
|
41
|
+
|
42
|
+
raise
|
41
43
|
end
|
42
44
|
else
|
43
45
|
raise ArgumentError, 'use Date or String to initialize Period'
|
@@ -48,19 +50,19 @@ class Period
|
|
48
50
|
elsif last.respond_to?(:to_s)
|
49
51
|
begin
|
50
52
|
@last = Date.parse(last.to_s)
|
51
|
-
rescue ArgumentError =>
|
52
|
-
if
|
53
|
+
rescue ArgumentError => e
|
54
|
+
if e.message =~ /invalid date/
|
53
55
|
raise ArgumentError, "you gave an invalid date '#{last}'"
|
54
|
-
else
|
55
|
-
raise
|
56
56
|
end
|
57
|
+
|
58
|
+
raise
|
57
59
|
end
|
58
60
|
else
|
59
61
|
raise ArgumentError, 'use Date or String to initialize Period'
|
60
62
|
end
|
61
|
-
|
62
|
-
|
63
|
-
|
63
|
+
return unless @first > @last
|
64
|
+
|
65
|
+
raise ArgumentError, "Period's first date is later than its last date"
|
64
66
|
end
|
65
67
|
|
66
68
|
# These need to come after initialize is defined
|
@@ -126,7 +128,6 @@ class Period
|
|
126
128
|
"#{first.iso}--#{last.iso}"
|
127
129
|
end
|
128
130
|
|
129
|
-
|
130
131
|
include Comparable
|
131
132
|
|
132
133
|
# @group Comparison
|
@@ -140,6 +141,7 @@ class Period
|
|
140
141
|
# other; 1 if self > other
|
141
142
|
def <=>(other)
|
142
143
|
return nil unless other.is_a?(Period)
|
144
|
+
|
143
145
|
[first, last] <=> [other.first, other.last]
|
144
146
|
end
|
145
147
|
|
@@ -155,6 +157,7 @@ class Period
|
|
155
157
|
def contains?(date)
|
156
158
|
date = date.to_date if date.respond_to?(:to_date)
|
157
159
|
raise ArgumentError, 'argument must be a Date' unless date.is_a?(Date)
|
160
|
+
|
158
161
|
to_range.cover?(date)
|
159
162
|
end
|
160
163
|
alias === contains?
|
@@ -222,6 +225,7 @@ class Period
|
|
222
225
|
# @return [Period] from beginning of `from` to end of `to`
|
223
226
|
def self.parse(from, to = nil)
|
224
227
|
raise ArgumentError, 'Period.parse missing argument' unless from
|
228
|
+
|
225
229
|
to ||= from
|
226
230
|
first = Date.parse_spec(from, :from)
|
227
231
|
second = Date.parse_spec(to, :to)
|
@@ -290,17 +294,15 @@ class Period
|
|
290
294
|
|
291
295
|
# An Array of the valid Symbols for calendar chunks plus the Symbol :irregular
|
292
296
|
# for other periods.
|
293
|
-
CHUNKS = [
|
294
|
-
|
295
|
-
:quarter, :half, :year, :irregular
|
296
|
-
]
|
297
|
+
CHUNKS = %i[day week biweek semimonth month bimonth quarter
|
298
|
+
half year irregular].freeze
|
297
299
|
|
298
300
|
# An Array of Ranges for the number of days that can be covered by each chunk.
|
299
301
|
CHUNK_RANGE = {
|
300
302
|
day: (1..1), week: (7..7), biweek: (14..14), semimonth: (15..16),
|
301
303
|
month: (28..31), bimonth: (59..62), quarter: (90..92),
|
302
304
|
half: (180..183), year: (365..366)
|
303
|
-
}
|
305
|
+
}.freeze
|
304
306
|
|
305
307
|
# Return the chunk symbol represented by this period if it covers a single
|
306
308
|
# calendar period; otherwise return :irregular.
|
@@ -506,13 +508,14 @@ class Period
|
|
506
508
|
unless CHUNKS.include?(size)
|
507
509
|
raise ArgumentError, "unknown chunk size '#{size}'"
|
508
510
|
end
|
511
|
+
|
509
512
|
if CHUNK_RANGE[size].first > length
|
510
|
-
if partial_first || partial_last
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
end
|
513
|
+
return [self] if partial_first || partial_last
|
514
|
+
|
515
|
+
msg = "any #{size} is longer than this period's #{length} days"
|
516
|
+
raise ArgumentError, msg
|
515
517
|
end
|
518
|
+
|
516
519
|
result = []
|
517
520
|
chunk_start = first.dup
|
518
521
|
while chunk_start <= last
|
@@ -669,6 +672,7 @@ class Period
|
|
669
672
|
def union(other)
|
670
673
|
result = to_range.union(other.to_range)
|
671
674
|
return nil if result.nil?
|
675
|
+
|
672
676
|
Period.new(result.first, result.last)
|
673
677
|
end
|
674
678
|
alias + union
|
data/lib/fat_period/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fat_period
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel E. Doherty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,22 +98,16 @@ dependencies:
|
|
98
98
|
name: fat_core
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '4.0'
|
104
101
|
- - ">="
|
105
102
|
- !ruby/object:Gem::Version
|
106
|
-
version: '
|
103
|
+
version: '0'
|
107
104
|
type: :runtime
|
108
105
|
prerelease: false
|
109
106
|
version_requirements: !ruby/object:Gem::Requirement
|
110
107
|
requirements:
|
111
|
-
- - "~>"
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: '4.0'
|
114
108
|
- - ">="
|
115
109
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
110
|
+
version: '0'
|
117
111
|
description:
|
118
112
|
email:
|
119
113
|
- ded-law@ddoherty.net
|
@@ -125,7 +119,8 @@ files:
|
|
125
119
|
- ".rspec"
|
126
120
|
- ".travis.yml"
|
127
121
|
- Gemfile
|
128
|
-
-
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.org
|
129
124
|
- Rakefile
|
130
125
|
- bin/console
|
131
126
|
- bin/setup
|
@@ -152,8 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
147
|
- !ruby/object:Gem::Version
|
153
148
|
version: '0'
|
154
149
|
requirements: []
|
155
|
-
|
156
|
-
rubygems_version: 2.5.2
|
150
|
+
rubygems_version: 3.1.2
|
157
151
|
signing_key:
|
158
152
|
specification_version: 4
|
159
153
|
summary: Implements a Period class as a Range of Dates.
|
data/README.md
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# FatPeriod
|
2
|
-
|
3
|
-
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/fat_period`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
6
|
-
|
7
|
-
## Installation
|
8
|
-
|
9
|
-
Add this line to your application's Gemfile:
|
10
|
-
|
11
|
-
```ruby
|
12
|
-
gem 'fat_period'
|
13
|
-
```
|
14
|
-
|
15
|
-
And then execute:
|
16
|
-
|
17
|
-
$ bundle
|
18
|
-
|
19
|
-
Or install it yourself as:
|
20
|
-
|
21
|
-
$ gem install fat_period
|
22
|
-
|
23
|
-
## Usage
|
24
|
-
|
25
|
-
TODO: Write usage instructions here
|
26
|
-
|
27
|
-
## Development
|
28
|
-
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
-
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
-
|
33
|
-
## Contributing
|
34
|
-
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/Daniel E. Doherty/fat_period.
|
36
|
-
|