fat_period 1.3.0 → 1.4.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: cb2c6b600f446fa2bff8080b8056a32ceb3fda88be68c03db076591753c4992e
4
- data.tar.gz: f4d65daa079f338c2a1a7ab5a0d326ae9af884d819a72077f1f24e8128ed70de
3
+ metadata.gz: 8592241a9f75949afa4df46469ff74029aa57ad67ac46234717aa751ba4cfef8
4
+ data.tar.gz: 26658db3f5a219236ae9bc9132cafa58850051fdf5d67c389c51306bcd4cd748
5
5
  SHA512:
6
- metadata.gz: 3059659aed2c2000401a6fceca177b9b7ea633adaaa1012bcb20db1069845bdc7dff35b97a53289a498399d1bc2217ceffd06c4dae94377ce7a47710c71ab2af
7
- data.tar.gz: ab0e1a8aebca6fc8acf0e952e9a48956767b03e7cd9071d6487b52e0a544519e6801b927ae3b2f5021e1fc3ac8aeb95114488192fcd343b265b235efc38a6784
6
+ metadata.gz: 48f7404be05db83ec57ceb7c2b4e75f584920422067bfc1600163cc58253db0ff3856201df4b6265145a5cbceee534e9d380b1ee44953fbb5fad0ffc772fa0df
7
+ data.tar.gz: 2ac2dcdb14642e774826f18b6ba7a5bd157fc067bc55495480b7ac91e7e95a21a30217725c4decf5e333e2b8b2cef581df72ee76afa5d18c459b510134c322b1
data/.simplecov ADDED
@@ -0,0 +1,18 @@
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
data/fat_period.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'debug', '>= 1.0.0'
27
27
  spec.add_development_dependency 'pry'
28
28
  spec.add_development_dependency 'pry-doc'
29
+ spec.add_development_dependency 'simplecov'
29
30
 
30
31
  spec.add_runtime_dependency 'fat_core', '>= 4.8.3'
31
32
  end
@@ -20,6 +20,53 @@ module FatPeriod
20
20
  require 'fat_period'
21
21
  Period.new(beginning_of_chunk(chunk), end_of_chunk(chunk))
22
22
  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
23
70
  end
24
71
  end
25
72
 
@@ -31,9 +31,7 @@ class Period
31
31
  @last = Date.ensure_date(last).freeze
32
32
  freeze
33
33
 
34
- return unless @first > @last
35
-
36
- raise ArgumentError, "Period's first date is later than its last date"
34
+ raise ArgumentError, "Period's first date is later than its last date" if @first > @last
37
35
  end
38
36
 
39
37
  # These need to come after initialize is defined
@@ -72,11 +70,13 @@ class Period
72
70
 
73
71
  PHRASE_RE = %r{\A
74
72
  # One or both of from and to parts
75
- ((from\s+(?<from_part>[-_a-z0-9]+)\s*)?
73
+ (((from)?\s+(?<from_part>[-_a-z0-9]+)\s*)?
76
74
  (to\s+(?<to_part>[-_a-z0-9]+))?)
77
75
  # Wholly optional chunk part
78
76
  (\s+per\s+(?<chunk_part>\w+))?\z}xi
79
77
 
78
+ private_constant :PHRASE_RE
79
+
80
80
  # Return an array of periods, either a single period as in `Period.parse`
81
81
  # from a String phrase in which a `from spec` is introduced with 'from' and,
82
82
  # optionally, a `to spec` is introduced with 'to', or a number of periods if
@@ -99,8 +99,7 @@ class Period
99
99
  #
100
100
  # @param phrase [String] with 'from <spec> to <spec> [per <chunk>]'
101
101
  # @return [Array<Period>] translated from phrase
102
- def self.parse_phrase(phrase,
103
- partial_first: false, partial_last: false, round_up_last: false)
102
+ def self.parse_phrase(phrase, partial_first: false, partial_last: false, round_up_last: false)
104
103
  phrase = phrase.downcase.clean
105
104
  mm = phrase.match(PHRASE_RE)
106
105
  raise ArgumentError, "invalid period phrase: `#{phrase}`" unless mm
@@ -234,10 +233,15 @@ class Period
234
233
 
235
234
  # Yield each day in this Period.
236
235
  def each
237
- d = first
238
- while d <= last
239
- yield d
240
- d += 1.day
236
+ if block_given?
237
+ d = first
238
+ while d <= last
239
+ yield d
240
+ d += 1.day
241
+ end
242
+ self
243
+ else
244
+ to_enum(:each)
241
245
  end
242
246
  end
243
247
 
@@ -318,6 +322,8 @@ class Period
318
322
  half: (180..183), year: (365..366)
319
323
  }.freeze
320
324
 
325
+ private_constant :CHUNK_ORDER, :CHUNK_RANGE
326
+
321
327
  def self.chunk_cmp(chunk1, chunk2)
322
328
  CHUNK_ORDER[chunk1] <=> CHUNK_ORDER[chunk2]
323
329
  end
@@ -1,3 +1,3 @@
1
1
  module FatPeriod
2
- VERSION = '1.3.0'.freeze
2
+ VERSION = '1.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fat_period
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel E. Doherty
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-08 00:00:00.000000000 Z
11
+ date: 2023-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
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'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: fat_core
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +122,7 @@ dependencies:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: 4.8.3
111
- description:
125
+ description:
112
126
  email:
113
127
  - ded-law@ddoherty.net
114
128
  executables: []
@@ -117,6 +131,7 @@ extra_rdoc_files: []
117
131
  files:
118
132
  - ".gitignore"
119
133
  - ".rspec"
134
+ - ".simplecov"
120
135
  - ".travis.yml"
121
136
  - Gemfile
122
137
  - LICENSE.txt
@@ -132,7 +147,7 @@ files:
132
147
  homepage: https://github.com/ddoherty03/fat_period
133
148
  licenses: []
134
149
  metadata: {}
135
- post_install_message:
150
+ post_install_message:
136
151
  rdoc_options: []
137
152
  require_paths:
138
153
  - lib
@@ -147,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
162
  - !ruby/object:Gem::Version
148
163
  version: '0'
149
164
  requirements: []
150
- rubygems_version: 3.3.3
151
- signing_key:
165
+ rubygems_version: 3.4.14
166
+ signing_key:
152
167
  specification_version: 4
153
168
  summary: Implements a Period class as a Range of Dates.
154
169
  test_files: []