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.
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', '~> 1.14'
24
- spec.add_development_dependency 'rake', '~> 10.0'
25
- spec.add_development_dependency 'rspec', '~> 3.0'
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', '~> 4.0', '>= 4.1'
30
+ spec.add_runtime_dependency 'fat_core'
31
31
  end
@@ -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 => ex
36
- if ex.message =~ /invalid date/
37
- raise ArgumentError, "you gave an invalid date '#{first}'"
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 => ex
52
- if ex.message =~ /invalid date/
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
- if @first > @last
62
- raise ArgumentError, "Period's first date is later than its last date"
63
- end
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
- :day, :week, :biweek, :semimonth, :month, :bimonth,
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
- return [self]
512
- else
513
- raise ArgumentError, "any #{size} is longer than this period's #{length} days"
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
@@ -1,3 +1,3 @@
1
1
  module FatPeriod
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
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.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: 2017-05-23 00:00:00.000000000 Z
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: '1.14'
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: '1.14'
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: '10.0'
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: '10.0'
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: '3.0'
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: '3.0'
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: '4.1'
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: '4.1'
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
- - README.md
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
- rubyforge_project:
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
-