fat_period 1.5.0 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe15db09e24f9ddf7264fdf8862ea51bacb0fb88da8b21727c44ce0c0a4f930c
4
- data.tar.gz: 0ea19cc89dfa940268938ccf2d8f3abd949e2c1a405d158410c0f928c8c6d64a
3
+ metadata.gz: 875ad1917477c27f17278fb0d5aad18423f4dcf52f32c9957651c829a1164f4b
4
+ data.tar.gz: 1495e04adb60e49dfc26f1b94c9699a129f30b7a15c36e9fa82d0e68d87ed183
5
5
  SHA512:
6
- metadata.gz: e4270dcbd82522aeb3781205e4598b52f15cc2c3b352709b500ffb6db6cd80a5691416d3a3abed2cf132fc0de8d5b05a14e934d14100c984293893cc4b3de378
7
- data.tar.gz: 82458a341811b97e30393360fc81b02acad7d4b8446ce616b7c84d237e11ec037fa85790d241c02c9874924733ac0895fd648f7b0ec3d83f8de04ccd9eaf1372
6
+ metadata.gz: f7e5ece151032b3ce11aad94225ef649c9e217a2d9239406f3ef030b335169cc33a130ff860b11b65a2e9d90ab4d9f900eb6df713f904beb9d841a7068ebcb96
7
+ data.tar.gz: 91a94d16666150d0eba4cd4bd5cb24813150d714f2e534a15746bd70119e87996d39940d8da40c5ab7589707975fe53f60a53cd4ae7d9bd58254b710d7d3c4ee
data/.envrc CHANGED
@@ -1 +1,7 @@
1
1
  PATH_add .bundle/bin
2
+ PATH_add ./scripts
3
+ # Ensure that we use the development DB when in the src dir.
4
+ export DB=development
5
+ export COMPOSE_FILE=.devcontainer/docker-compose.yml
6
+ export COMPOSE_PROJECT_NAME=byr
7
+ export BOOTSNAP_CACHE_DIR=tmp/cache
@@ -0,0 +1,48 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ push:
5
+ branches: [ "master" ]
6
+ pull_request:
7
+ branches: [ "master" ]
8
+
9
+ jobs:
10
+ build:
11
+ name: Build + Publish
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ contents: read
15
+ packages: write
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - name: Set up Ruby 2.6
20
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
21
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
22
+ # uses: ruby/setup-ruby@v1
23
+ uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
24
+ with:
25
+ ruby-version: 2.6.x
26
+
27
+ - name: Publish to GPR
28
+ run: |
29
+ mkdir -p $HOME/.gem
30
+ touch $HOME/.gem/credentials
31
+ chmod 0600 $HOME/.gem/credentials
32
+ printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
33
+ gem build *.gemspec
34
+ gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
35
+ env:
36
+ GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
37
+ OWNER: ${{ github.repository_owner }}
38
+
39
+ - name: Publish to RubyGems
40
+ run: |
41
+ mkdir -p $HOME/.gem
42
+ touch $HOME/.gem/credentials
43
+ chmod 0600 $HOME/.gem/credentials
44
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
45
+ gem build *.gemspec
46
+ gem push *.gem
47
+ env:
48
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
data/Gemfile CHANGED
@@ -2,3 +2,15 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in fat_period.gemspec
4
4
  gemspec
5
+
6
+ gem 'bundler'
7
+ gem 'debug'
8
+ gem 'pry'
9
+ gem 'pry-doc'
10
+ gem 'rake'
11
+ gem 'rspec'
12
+ gem 'rubocop'
13
+ gem 'rubocop-rspec'
14
+ gem 'rubocop-performance'
15
+ gem 'rubocop-rake'
16
+ gem 'rubocop-shopify'
data/Rakefile CHANGED
@@ -1,6 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
+ require 'rubocop/rake_task'
5
+
6
+ RuboCop::RakeTask.new
4
7
  RSpec::Core::RakeTask.new(:spec)
5
8
 
6
- task :default => :spec
9
+ task :default => [:spec, :rubocop]
data/fat_period.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'fat_period/version'
@@ -9,10 +10,10 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['Daniel E. Doherty']
10
11
  spec.email = ['ded@ddoherty.net']
11
12
 
12
- spec.summary = %q{Implements a Period class as a Range of Dates.}
13
+ spec.summary = 'Implements a Period class as a Range of Dates.'
13
14
  spec.homepage = 'https://github.com/ddoherty03/fat_period'
14
15
 
15
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ spec.files = %x(git ls-files -z).split("\x0").reject do |f|
16
17
  f.match(%r{^(test|spec|features)/})
17
18
  end
18
19
  # Don't install any executables.
@@ -20,13 +21,5 @@ Gem::Specification.new do |spec|
20
21
  # spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
22
  spec.require_paths = ['lib']
22
23
 
23
- spec.add_development_dependency 'bundler'
24
- spec.add_development_dependency 'rake'
25
- spec.add_development_dependency 'rspec'
26
- spec.add_development_dependency 'debug', '>= 1.0.0'
27
- spec.add_development_dependency 'pry'
28
- spec.add_development_dependency 'pry-doc'
29
- spec.add_development_dependency 'simplecov'
30
-
31
- spec.add_runtime_dependency 'fat_core', '>= 5.1.0'
24
+ spec.add_dependency 'fat_core', '>= 5.4'
32
25
  end
@@ -1,5 +1,3 @@
1
- require 'date'
2
-
3
1
  module FatPeriod
4
2
  # An extension of Date for methods useful with respect to FatPeriod::Periods.
5
3
  module Date
@@ -20,53 +18,6 @@ module FatPeriod
20
18
  require 'fat_period'
21
19
  Period.new(beginning_of_chunk(chunk), end_of_chunk(chunk))
22
20
  end
23
-
24
- # Return a period representing a chunk containing a given Date.
25
- def day_containing
26
- Period.new(self, self)
27
- end
28
-
29
- def week_containing
30
- Period.new(self.beginning_of_week, self.end_of_week)
31
- end
32
-
33
- def biweek_containing
34
- Period.new(self.beginning_of_biweek, self.end_of_biweek)
35
- end
36
-
37
- def semimonth_containing
38
- Period.new(self.beginning_of_semimonth, self.end_of_semimonth)
39
- end
40
-
41
- def month_containing
42
- Period.new(self.beginning_of_month, self.end_of_month)
43
- end
44
-
45
- def bimonth_containing
46
- Period.new(self.beginning_of_bimonth, self.end_of_bimonth)
47
- end
48
-
49
- def quarter_containing
50
- Period.new(self.beginning_of_quarter, self.end_of_quarter)
51
- end
52
-
53
- def half_containing
54
- Period.new(self.beginning_of_half, self.end_of_half)
55
- end
56
-
57
- def year_containing
58
- Period.new(self.beginning_of_year, self.end_of_year)
59
- end
60
-
61
- def chunk_containing(chunk)
62
- raise ArgumentError, 'chunk is nil' unless chunk
63
-
64
- chunk = chunk.to_sym
65
- raise ArgumentError, "unknown chunk name: #{chunk}" unless CHUNKS.include?(chunk)
66
-
67
- method = "#{chunk}_containing".to_sym
68
- send(method, self)
69
- end
70
21
  end
71
22
  end
72
23
 
@@ -1,6 +1,5 @@
1
+ require 'active_support'
1
2
  require 'fat_core/date'
2
- require 'fat_core/range'
3
- require 'fat_core/string'
4
3
 
5
4
  # The Period class represents a range of Dates and supports a variety of
6
5
  # operations on those ranges.
@@ -27,8 +26,8 @@ class Period
27
26
  # @raise [ArgumentError] if first date is later than last date
28
27
  # @return [Period]
29
28
  def initialize(first, last)
30
- @first = Date.ensure(first).freeze
31
- @last = Date.ensure(last).freeze
29
+ @first = Date.ensure_date(first).freeze
30
+ @last = Date.ensure_date(last).freeze
32
31
  freeze
33
32
 
34
33
  raise ArgumentError, "Period's first date is later than its last date" if @first > @last
@@ -36,9 +35,6 @@ class Period
36
35
 
37
36
  # These need to come after initialize is defined
38
37
 
39
- # Period from commercial beginning of time to today
40
- TO_DATE = Period.new(Date::BOT, Date.current)
41
-
42
38
  # Period from commercial beginning of time to commercial end of time.
43
39
  FOREVER = Period.new(Date::BOT, Date::EOT)
44
40
 
@@ -68,59 +64,72 @@ class Period
68
64
  Period.new(first, second) if first && second
69
65
  end
70
66
 
71
- PHRASE_RE = %r{\A
72
- # One or both of from and to parts
73
- (((from)?\s*(?<from_part>[-_a-z0-9]+)\s*)?
74
- (to\s+(?<to_part>[-_a-z0-9]+))?)
75
- # Wholly optional chunk part
76
- (\s+per\s+(?<chunk_part>\w+))?\z}xi
77
-
78
- private_constant :PHRASE_RE
67
+ # Return a Period either from a given String or other type that can
68
+ # reasonably converted to a Period.
69
+ #
70
+ # @example
71
+ # Period.ensure('2014-11').inspect #=> Period('2014-11-01..2014-11-30')
72
+ # pd = Period.parse('2011')
73
+ # Period.ensure(pd).inspect #=> Period('2011-01-01..2011-12-31')
74
+ #
75
+ # @param prd [String|Period] or any candidate for conversion to Period
76
+ # @return Period correspondign to prd parameter
77
+ def self.ensure(prd)
78
+ prd.to_period if prd.respond_to?(:to_period)
79
+ case prd
80
+ when String
81
+ if prd.match(/from|to/i)
82
+ Period.parse_phrase(prd).first
83
+ else
84
+ Period.parse(prd)
85
+ end
86
+ when Period
87
+ prd
88
+ end
89
+ end
79
90
 
80
- # Return an array of periods, either a single period as in `Period.parse`
81
- # from a String phrase in which a `from spec` is introduced with 'from' and,
82
- # optionally, a `to spec` is introduced with 'to', or a number of periods if
83
- # there is a 'per <chunk>' modifier. A phrase with only a `to spec` is
84
- # treated the same as one with only a from spec. If neither 'from' nor 'to'
85
- # appear in phrase, treat the whole string as a from spec.
91
+ # Return an Array of Periods from a String phrase in which the from spec is
92
+ # introduced with 'from' and, optionally, the to spec is introduced with
93
+ # 'to' and optionally a 'per' clause is introduced by 'per'. A phrase with
94
+ # only a to spec is treated the same as one with only a from spec. If
95
+ # neither 'from' nor 'to' appear in phrase, treat the string before any
96
+ # per-clause as a from spec.
86
97
  #
87
98
  # @example
88
99
  # Period.parse_phrase('from 2014-11 to 2015-3Q') #=> [Period('2014-11-01..2015-09-30')]
89
100
  # Period.parse_phrase('from 2014-11') #=> [Period('2014-11-01..2014-11-30')]
90
101
  # Period.parse_phrase('from 2015-3Q') #=> [Period('2015-09-01..2015-12-31')]
91
102
  # Period.parse_phrase('to 2015-3Q') #=> [Period('2015-09-01..2015-12-31')]
92
- # Period.parse_phrase('from 2015-3Q') #=> [Period('2015-09-01..2015-12-31')]
93
- # Period.parse_phrase('from 2015 per month') #=> [
94
- # Period('2015-01-01..2015-01-31'),
95
- # Period('2015-02-01..2015-02-28'),
96
- # ...
97
- # Period('2015-12-01..2015-12-31')
98
- # ]
99
- #
100
- # @param phrase [String] with 'from <spec> to <spec> [per <chunk>]'
101
- # @return [Array<Period>] translated from phrase
102
- def self.parse_phrase(phrase, partial_first: false, partial_last: false, round_up_last: false)
103
- phrase = phrase.downcase.clean
104
- mm = phrase.match(PHRASE_RE)
105
- raise ArgumentError, "invalid period phrase: `#{phrase}`" unless mm
106
-
107
- if mm[:from_part] && mm[:to_part].nil?
108
- from_part = mm[:from_part]
109
- to_part = nil
110
- elsif mm[:from_part].nil? && mm[:to_part]
111
- from_part = mm[:to_part]
112
- to_part = nil
103
+ # Period.parse_phrase('2015-3Q') #=> [Period('2015-09-01..2015-12-31')]
104
+ # Period.parse_phrase('to 2015-3Q per week') #=> [Period('2015-09-01..2015-09-04')...]
105
+ # Period.parse_phrase('2015-3Q per month') #=> [Period('2015-09-01..2015-09-30')...]
106
+ #
107
+ # @param phrase [String] with 'from <spec> [to <spec>] [per chunk]'
108
+ # @return [Period] translated from phrase
109
+ def self.parse_phrase(phrase, partial_first: true, partial_last: true, round_up_last: false)
110
+ phrase = phrase.clean
111
+ case phrase
112
+ when /\Afrom\s+([^\s]+)\s+to\s+([^\s]+)(\s+per\s+[^\s]+)?\z/i
113
+ from_phrase = $1
114
+ to_phrase = $2
115
+ when /\Afrom\s+([^\s]+)(\s+per\s+[^\s]+)?\z/, /\Ato\s+([^\s]+)(\s+per\s+[^\s]+)?\z/i
116
+ from_phrase = $1
117
+ to_phrase = nil
118
+ when /\A([^\s]+)(\s+per\s+[^\s]+)?\z/
119
+ from_phrase = $1
120
+ to_phrase = nil
113
121
  else
114
- from_part = mm[:from_part]
115
- to_part = mm[:to_part]
122
+ raise ArgumentError, "unintelligible period phrase: '#{phrase}''"
116
123
  end
124
+ # Return an Array of periods divided by chunks if any.
125
+ whole_period = parse(from_phrase, to_phrase)
126
+ if phrase =~ /per\s+(?<chunk>[a-z_]+)/i
127
+ chunk_size = Regexp.last_match[:chunk].downcase.to_sym
128
+ raise ArgumentError, "invalid chunk size #{chunk_size}" unless CHUNKS.include?(chunk_size)
117
129
 
118
- whole_period = parse(from_part, to_part)
119
- if mm[:chunk_part].nil?
120
- [whole_period]
130
+ whole_period.chunks(size: chunk_size, partial_first:, partial_last:, round_up_last:)
121
131
  else
122
- whole_period.chunks(size: mm[:chunk_part], partial_first: partial_first,
123
- partial_last: partial_last, round_up_last: round_up_last)
132
+ [whole_period]
124
133
  end
125
134
  end
126
135
 
@@ -166,31 +175,6 @@ class Period
166
175
  end
167
176
  end
168
177
 
169
- # Convert a string or Period into a Period object, if the string is parsable
170
- # as a period.
171
- #
172
- # @example
173
- # Period.ensure('2023-1q') #=> Period 2023-01-01..2023-03-31
174
- # pd = Period.new('2016-01-01', '2016-12-31')
175
- # Period.ensure(pd) #=> pd # No effect
176
- #
177
- # @return [Period] either parsed String or same Period
178
- def self.ensure(pd)
179
- case pd
180
- when Period
181
- pd
182
- when String
183
- if pd.match?(/\s*from/i)
184
- # Ignore any chunk modifier, 'per'
185
- Period.parse_phrase(pd).first
186
- else
187
- Period.parse(pd)
188
- end
189
- else
190
- raise UserError, "can't ensure `#{pd}` of #{pd.class} is a Period"
191
- end
192
- end
193
-
194
178
  # A concise way to print out Periods for inspection as
195
179
  # 'Period(YYYY-MM-DD..YYYY-MM-DD)'.
196
180
  #
@@ -216,7 +200,7 @@ class Period
216
200
  # @param other [Period] @return [Integer] -1 if self < other; 0 if self ==
217
201
  # other; 1 if self > other
218
202
  def <=>(other)
219
- return nil unless other.is_a?(Period)
203
+ return unless other.is_a?(Period)
220
204
 
221
205
  [first, last] <=> [other.first, other.last]
222
206
  end
@@ -235,7 +219,7 @@ class Period
235
219
  end
236
220
 
237
221
  def eql?(other)
238
- return nil unless other.is_a?(Period)
222
+ return false unless other.is_a?(Period)
239
223
 
240
224
  hash == other.hash
241
225
  end
@@ -250,7 +234,7 @@ class Period
250
234
 
251
235
  to_range.cover?(date)
252
236
  end
253
- alias === contains?
237
+ alias_method :===, :contains?
254
238
 
255
239
  include Enumerable
256
240
 
@@ -258,15 +242,10 @@ class Period
258
242
 
259
243
  # Yield each day in this Period.
260
244
  def each
261
- if block_given?
262
- d = first
263
- while d <= last
264
- yield d
265
- d += 1.day
266
- end
267
- self
268
- else
269
- to_enum(:each)
245
+ d = first
246
+ while d <= last
247
+ yield d
248
+ d += 1.day
270
249
  end
271
250
  end
272
251
 
@@ -284,8 +263,8 @@ class Period
284
263
  def size
285
264
  (last - first + 1).to_i
286
265
  end
287
- alias length size
288
- alias days size
266
+ alias_method :length, :size
267
+ alias_method :days, :size
289
268
 
290
269
  # Return the fractional number of months in the period. By default, use the
291
270
  # average number of days in a month, but allow the user to override the
@@ -331,8 +310,17 @@ class Period
331
310
 
332
311
  # An Array of the valid Symbols for calendar chunks plus the Symbol :irregular
333
312
  # for other periods.
334
- CHUNKS = %i[day week biweek semimonth month bimonth quarter
335
- half year irregular].freeze
313
+ CHUNKS = %i[
314
+ day
315
+ week
316
+ biweek
317
+ semimonth
318
+ month
319
+ bimonth
320
+ quarter
321
+ half
322
+ year
323
+ ].freeze
336
324
 
337
325
  CHUNK_ORDER = {}
338
326
  CHUNKS.each_with_index do |c, i|
@@ -342,13 +330,17 @@ class Period
342
330
 
343
331
  # An Array of Ranges for the number of days that can be covered by each chunk.
344
332
  CHUNK_RANGE = {
345
- day: (1..1), week: (7..7), biweek: (14..14), semimonth: (15..16),
346
- month: (28..31), bimonth: (59..62), quarter: (90..92),
347
- half: (180..183), year: (365..366)
333
+ day: (1..1),
334
+ week: (7..7),
335
+ biweek: (14..14),
336
+ semimonth: (15..16),
337
+ month: (28..31),
338
+ bimonth: (59..62),
339
+ quarter: (90..92),
340
+ half: (180..183),
341
+ year: (365..366)
348
342
  }.freeze
349
343
 
350
- private_constant :CHUNK_ORDER, :CHUNK_RANGE
351
-
352
344
  def self.chunk_cmp(chunk1, chunk2)
353
345
  CHUNK_ORDER[chunk1] <=> CHUNK_ORDER[chunk2]
354
346
  end
@@ -396,7 +388,7 @@ class Period
396
388
  chunk = chunk.to_sym
397
389
  raise ArgumentError, "unknown chunk name: #{chunk}" unless CHUNKS.include?(chunk)
398
390
 
399
- date = Date.ensure(date)
391
+ date = Date.ensure_date(date)
400
392
  method = "#{chunk}_containing".to_sym
401
393
  send(method, date)
402
394
  end
@@ -636,8 +628,8 @@ class Period
636
628
  # @param round_up_last [Boolean] allow the last period in the returned array
637
629
  # to extend beyond the end of self.
638
630
  # @return [Array<Period>] periods that subdivide self into chunks of size, `size`
639
- def chunks(size: :month, partial_first: false, partial_last: false,
640
- round_up_last: false)
631
+ def chunks(size: :month, partial_first: true, partial_last: true,
632
+ round_up_last: false)
641
633
  chunk_size = size.to_sym
642
634
  raise ArgumentError, "unknown chunk size '#{chunk_size}'" unless CHUNKS.include?(chunk_size)
643
635
 
@@ -661,7 +653,6 @@ class Period
661
653
  return result
662
654
  end
663
655
 
664
- # The first chunk
665
656
  chunk_start = first.dup
666
657
  chunk_end = chunk_start.end_of_chunk(chunk_size)
667
658
  if chunk_start.beginning_of_chunk?(chunk_size) || partial_first
@@ -670,16 +661,14 @@ class Period
670
661
  end
671
662
  chunk_start = chunk_end + 1.day
672
663
  chunk_end = chunk_start.end_of_chunk(chunk_size)
673
-
674
664
  # Add Whole chunks
675
665
  while chunk_end <= last
676
666
  result << Period.new(chunk_start, chunk_end)
677
667
  chunk_start = chunk_end + 1.day
678
668
  chunk_end = chunk_start.end_of_chunk(chunk_size)
679
669
  end
680
-
681
670
  # Possibly append the final chunk to result
682
- if chunk_start <= last
671
+ if chunk_start < last
683
672
  if round_up_last
684
673
  result << Period.new(chunk_start, chunk_end)
685
674
  elsif partial_last
@@ -772,8 +761,8 @@ class Period
772
761
  Period.new(result.first, result.last)
773
762
  end
774
763
  end
775
- alias & intersection
776
- alias narrow_to intersection
764
+ alias_method :&, :intersection
765
+ alias_method :narrow_to, :intersection
777
766
 
778
767
  # Return the Period that is the union of self with `other` or nil if
779
768
  # they neither overlap nor are contiguous
@@ -790,11 +779,11 @@ class Period
790
779
  # @return [Period, nil] self union `other`?
791
780
  def union(other)
792
781
  result = to_range.union(other.to_range)
793
- return nil if result.nil?
782
+ return if result.nil?
794
783
 
795
784
  Period.new(result.first, result.last)
796
785
  end
797
- alias + union
786
+ alias_method :+, :union
798
787
 
799
788
  # Return an array of periods that are this period excluding any overlap with
800
789
  # other. If there is no overlap, return an array with a period equal to self
@@ -812,7 +801,7 @@ class Period
812
801
  ranges = to_range.difference(other.to_range)
813
802
  ranges.each.map { |r| Period.new(r.first, r.last) }
814
803
  end
815
- alias - difference
804
+ alias_method :-, :difference
816
805
 
817
806
  # Return whether this period overlaps the `other` period. To overlap, the
818
807
  # periods must have at least one day in common.
@@ -1,3 +1,3 @@
1
1
  module FatPeriod
2
- VERSION = '1.5.0'.freeze
2
+ VERSION = '2.1.0'.freeze
3
3
  end
data/lib/fat_period.rb CHANGED
@@ -1,3 +1,9 @@
1
+ require 'date'
2
+
1
3
  require 'fat_period/version'
2
4
  require 'fat_period/date'
3
5
  require 'fat_period/period'
6
+
7
+ require 'fat_core/date'
8
+ require 'fat_core/range'
9
+ require 'fat_core/string'
metadata CHANGED
@@ -1,127 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fat_period
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 2.1.0
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: 2024-09-08 00:00:00.000000000 Z
11
+ date: 2024-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: debug
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 1.0.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 1.0.0
69
- - !ruby/object:Gem::Dependency
70
- name: pry
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: pry-doc
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: simplecov
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
13
  - !ruby/object:Gem::Dependency
112
14
  name: fat_core
113
15
  requirement: !ruby/object:Gem::Requirement
114
16
  requirements:
115
17
  - - ">="
116
18
  - !ruby/object:Gem::Version
117
- version: 5.1.0
19
+ version: '5.4'
118
20
  type: :runtime
119
21
  prerelease: false
120
22
  version_requirements: !ruby/object:Gem::Requirement
121
23
  requirements:
122
24
  - - ">="
123
25
  - !ruby/object:Gem::Version
124
- version: 5.1.0
26
+ version: '5.4'
125
27
  description:
126
28
  email:
127
29
  - ded@ddoherty.net
@@ -130,10 +32,9 @@ extensions: []
130
32
  extra_rdoc_files: []
131
33
  files:
132
34
  - ".envrc"
35
+ - ".github/workflows/gem-push.yml"
133
36
  - ".gitignore"
134
37
  - ".rspec"
135
- - ".ruby-version"
136
- - ".simplecov"
137
38
  - ".travis.yml"
138
39
  - Gemfile
139
40
  - LICENSE.txt
@@ -164,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
65
  - !ruby/object:Gem::Version
165
66
  version: '0'
166
67
  requirements: []
167
- rubygems_version: 3.5.18
68
+ rubygems_version: 3.5.22
168
69
  signing_key:
169
70
  specification_version: 4
170
71
  summary: Implements a Period class as a Range of Dates.
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.2.2
data/.simplecov DELETED
@@ -1,18 +0,0 @@
1
- # -*- mode: ruby -*-
2
-
3
- SimpleCov.start do
4
- # any custom configs like groups and filters can be here at a central place
5
- add_filter '/spec/'
6
- add_filter '/tmp/'
7
- add_group "Models", "lib/fat_period"
8
- # add_group "Core Extension", "lib/ext"
9
- # After this many seconds between runs, old coverage stats are thrown out,
10
- # so 3600 => 1 hour
11
- merge_timeout 3600
12
- # Make this true to merge rspec and cucumber coverage together
13
- use_merging false
14
- command_name 'Rspec'
15
- nocov_token 'no_cover'
16
- # Branch coverage
17
- enable_coverage :branch
18
- end