fat_period 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
-