active_period 6.2.0 → 7.0.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: dba2a2ea208d8904f845e463f8f82f96590dce4f2ad10557a77f30bc9065380d
4
- data.tar.gz: 869c18ddc605ccc8fa4cd23da17bfad196e4cdc92de3c1fed5f378d66c2351cc
3
+ metadata.gz: f52b743020890ffb49224e7b0dd129901233a4d1cdd639d412a88872c66b97d0
4
+ data.tar.gz: 0eb862ce0e5aa128ce81fd93e28dd887c64f0f70ec000c9dd7988e281288be39
5
5
  SHA512:
6
- metadata.gz: b0287446e67fa3f801b70fcfe6fbf1190a9ac2f3957dc3ffd3cb499046e9f3ae8910ca01d5aa6142a0816012bc0db8505f93fccf432d7e1b7f4b624edcd112e2
7
- data.tar.gz: aa43b0db9103fb16e82b84ea29c62783d100b83b742f89393f2aaca73348da6d0aaeef6ee9623252e55e7f7dd4c721bcdba0fdaff9e74d11cbe50c50d7ff356a
6
+ metadata.gz: bce08f3f5b1b10347469b43a832d525bec3a470b09e798539f84bc80b4aca768898734565acadf5600670fcbb9e7a3e6a427b9c4fcbccc402e5b5c0109a05a62
7
+ data.tar.gz: 5e3dcdb1f0328b1baf28ad298e951d893c9e9102faa703890ba47f3c6983947c666dad61e810364ff2bb2b4648542be859d7bfee5f081472da4bb7d3293da07a
data/Gemfile.lock CHANGED
@@ -1,26 +1,65 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_period (6.2.0)
5
- activesupport (~> 5)
4
+ active_period (7.0.0)
5
+ activesupport (~> 7, >= 5)
6
6
  i18n (~> 1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (5.2.5)
11
+ activesupport (7.0.2.2)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
- i18n (>= 0.7, < 2)
14
- minitest (~> 5.1)
15
- tzinfo (~> 1.1)
16
- concurrent-ruby (1.1.8)
17
- i18n (1.8.10)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
16
+ builder (3.2.4)
17
+ concurrent-ruby (1.1.9)
18
+ cucumber (7.0.0)
19
+ builder (~> 3.2, >= 3.2.4)
20
+ cucumber-core (~> 10.0, >= 10.0.1)
21
+ cucumber-create-meta (~> 6.0, >= 6.0.1)
22
+ cucumber-cucumber-expressions (~> 12.1, >= 12.1.1)
23
+ cucumber-gherkin (~> 20.0, >= 20.0.1)
24
+ cucumber-html-formatter (~> 16.0, >= 16.0.1)
25
+ cucumber-messages (~> 17.0, >= 17.0.1)
26
+ cucumber-wire (~> 6.0, >= 6.0.1)
27
+ diff-lcs (~> 1.4, >= 1.4.4)
28
+ mime-types (~> 3.3, >= 3.3.1)
29
+ multi_test (~> 0.1, >= 0.1.2)
30
+ sys-uname (~> 1.2, >= 1.2.2)
31
+ cucumber-core (10.0.1)
32
+ cucumber-gherkin (~> 20.0, >= 20.0.1)
33
+ cucumber-messages (~> 17.0, >= 17.0.1)
34
+ cucumber-tag-expressions (~> 3.0, >= 3.0.1)
35
+ cucumber-create-meta (6.0.1)
36
+ cucumber-messages (~> 17.0, >= 17.0.1)
37
+ sys-uname (~> 1.2, >= 1.2.2)
38
+ cucumber-cucumber-expressions (12.1.1)
39
+ cucumber-gherkin (20.0.1)
40
+ cucumber-messages (~> 17.0, >= 17.0.1)
41
+ cucumber-html-formatter (16.0.1)
42
+ cucumber-messages (~> 17.0, >= 17.0.1)
43
+ cucumber-messages (17.0.1)
44
+ cucumber-tag-expressions (3.0.1)
45
+ cucumber-wire (6.0.1)
46
+ cucumber-core (~> 10.0, >= 10.0.1)
47
+ cucumber-cucumber-expressions (~> 12.1, >= 12.1.1)
48
+ cucumber-messages (~> 17.0, >= 17.0.1)
49
+ diff-lcs (1.4.4)
50
+ ffi (1.15.3)
51
+ i18n (1.10.0)
18
52
  concurrent-ruby (~> 1.0)
19
- minitest (5.14.4)
53
+ mime-types (3.3.1)
54
+ mime-types-data (~> 3.2015)
55
+ mime-types-data (3.2021.0704)
56
+ minitest (5.15.0)
57
+ multi_test (0.1.2)
20
58
  rake (10.5.0)
21
- thread_safe (0.3.6)
22
- tzinfo (1.2.9)
23
- thread_safe (~> 0.1)
59
+ sys-uname (1.2.2)
60
+ ffi (~> 1.1)
61
+ tzinfo (2.0.4)
62
+ concurrent-ruby (~> 1.0)
24
63
 
25
64
  PLATFORMS
26
65
  ruby
@@ -28,6 +67,7 @@ PLATFORMS
28
67
  DEPENDENCIES
29
68
  active_period!
30
69
  bundler (~> 2.0)
70
+ cucumber
31
71
  rake (~> 10.0)
32
72
 
33
73
  BUNDLED WITH
data/README.md CHANGED
@@ -51,6 +51,9 @@ Period.new(..Time.now).months.reverse_each # => Enumerable
51
51
  # Write a date for me (I18n supported)
52
52
  Period.new('20/01/2017'...'20/01/2021').to_s
53
53
  => "From the 20 January 2017 to the 20 January 2021 excluded"
54
+
55
+ # Get all US holidays in the next week (see holiday's section below)
56
+ Period.next_week.holidays(:us)
54
57
  ```
55
58
 
56
59
  ## Detailed view
@@ -311,7 +314,7 @@ For a FreePeriod or if you need to print the start and the end of your period di
311
314
  ## The tricky case of Weeks
312
315
 
313
316
  Weeks are implemented following the [ISO 8601](https://en.wikipedia.org/wiki/ISO_week_date)
314
- So `Period.this_month.weeks.first` doesn't necessarily include the first days of the month
317
+ So `Period.this_month.weeks.first` doesn't necessarily include the first days of the month
315
318
  Also a **StandardPeriod** and a **FreePeriod** covering the same range of time, may not includes the same `Weeks`
316
319
 
317
320
  ## TimeZone
@@ -333,30 +336,31 @@ require 'holidays'
333
336
  # Get all worldwide holidays in the current month
334
337
  Period.this_month.holidays
335
338
 
336
- # Get all US holidays in the current month
337
- Period.this_month.holidays(:us)
339
+ # Get all US holidays in the next week
340
+ Period.next_week.holidays(:us)
338
341
 
339
- # Get all US and CA holidays in the current month
340
- Period.this_month.holidays(:us, :ca)
342
+ # Get all US and CA holidays in the prev quarter
343
+ Period.prev_quarter.holidays(:us, :ca)
341
344
 
342
345
  # First up coming `FR` holiday
343
- holiday = Period.new(Time.now..).holidays(:fr).first
344
- # return the next holiday within the same options of the original `.holidays` collection
346
+ holiday = (Time.now..).to_period.holidays(:fr).first
347
+ # return the next holiday with same options as the original `.holidays` collection
345
348
  holiday.next
346
- # return the previous holiday within the same options of the original `.holidays` collection
349
+ # return the previous holiday with same options as the original `.holidays` collection
347
350
  holiday.prev
348
351
  ```
349
352
 
350
- :warning: If you call a `holidays` related method without the [gem holidays](https://github.com/holidays/holidays) in your project you will raise a `RuntimeError`
353
+ :warning: If you call a `holidays` related method without the [gem holidays](https://github.com/holidays/holidays) in your project
354
+ You will raise a `RuntimeError`
351
355
  ```ruby
352
356
  Period.this_month.holidays
353
357
  #=> RuntimeError (The gem "holidays" is needed for this feature to work)
354
358
  ```
355
359
 
356
- ## Planned updates
360
+ ## Planned updates & Idea
357
361
 
358
362
  - [ ] ActiveRecord Serializer (maybe)
359
- - [ ] Holidays support (gem Holidays) -> COMING SOON
363
+ - [ ] Dedicated Exception for each possible error
360
364
 
361
365
  ## Bug reports
362
366
 
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
 
10
10
  spec.summary = 'Manage time ranges without brain damage.'
11
11
  # spec.description = "Period.new('01/01/2020'..Time.now)"
12
- spec.homepage = "https://github.com/billaul/period"
12
+ spec.homepage = "https://github.com/billaul/active_period"
13
13
  spec.license = 'MIT'
14
14
 
15
15
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -37,8 +37,11 @@ Gem::Specification.new do |spec|
37
37
  spec.require_paths = %w[lib config]
38
38
 
39
39
  spec.required_ruby_version = '>= 2.7'
40
- spec.add_runtime_dependency 'activesupport', '~> 5'
40
+
41
+ spec.add_runtime_dependency 'activesupport', '>= 5', '~> 7'
41
42
  spec.add_runtime_dependency 'i18n', '~> 1'
43
+
42
44
  spec.add_development_dependency 'bundler', '~> 2.0'
43
45
  spec.add_development_dependency 'rake', '~> 10.0'
46
+ spec.add_development_dependency 'cucumber'
44
47
  end
@@ -1,5 +1,5 @@
1
1
  module ActivePeriod
2
2
 
3
- VERSION = '6.2.0'.freeze
3
+ VERSION = '7.0.0'.freeze
4
4
 
5
5
  end
data/lib/active_period.rb CHANGED
@@ -23,6 +23,8 @@ require_relative 'active_period/year.rb'
23
23
  require_relative 'active_period/holiday.rb'
24
24
  require_relative 'period.rb'
25
25
 
26
+ # TODO find a way to cleanup this require_relative mess ><
27
+
26
28
  module ActivePeriod
27
29
 
28
30
  end
data/lib/period.rb CHANGED
@@ -1,34 +1,43 @@
1
+ # This module is intended to hide the complexity of ActivePeriod
2
+ # And permit the user to write less and doing more
1
3
  module Period
2
- def self.new(*args)
3
- ActivePeriod::FreePeriod.new(*args)
4
+
5
+ # Shorthand to ActivePeriod::FreePeriod.new
6
+ def self.new(range, allow_beginless: true, allow_endless: true)
7
+ ActivePeriod::FreePeriod.new(range, allow_beginless: allow_beginless, allow_endless: allow_endless)
4
8
  end
5
9
 
10
+ # Shorthand ActivePeriod::FreePeriod.new(range, allow_beginless: false, allow_endless: false)
6
11
  def self.bounded(range)
7
12
  ActivePeriod::FreePeriod.new(range, allow_beginless: false, allow_endless: false)
8
13
  end
9
14
 
15
+ # env_time provide a Fallback if the project dont specify any Time.zone
10
16
  def self.env_time
11
17
  (Time.zone || Time)
12
18
  end
13
19
 
20
+ # Dynamic definition of `.(last|this|next)_(day|week|month|quarter|year)`
21
+ # and `.yesterday` `.today` `.tomorrow`
22
+ # TODO implement (last|next)_holiday
14
23
  class << self
15
- %i[day week month quarter year].each do |period|
16
- define_method "last_#{period}" do
17
- date = env_time.now.send(period == :day ? 'yesterday' : "last_#{period}")
18
- Object.const_get("ActivePeriod::#{period.capitalize}").new(date)
24
+ %i[day week month quarter year].each do |standard_period|
25
+ define_method "last_#{standard_period}" do
26
+ date = env_time.now.send(standard_period == :day ? 'yesterday' : "last_#{standard_period}")
27
+ Object.const_get("ActivePeriod::#{standard_period.capitalize}").new(date)
19
28
  end
20
29
 
21
- define_method "this_#{period}" do
22
- Object.const_get("ActivePeriod::#{period.capitalize}").new(env_time.now)
30
+ define_method "this_#{standard_period}" do
31
+ Object.const_get("ActivePeriod::#{standard_period.capitalize}").new(env_time.now)
23
32
  end
24
33
 
25
- define_method "next_#{period}" do
26
- date = env_time.now.send(period == :day ? 'tomorrow' : "next_#{period}")
27
- Object.const_get("ActivePeriod::#{period.capitalize}").new(date)
34
+ define_method "next_#{standard_period}" do
35
+ date = env_time.now.send(standard_period == :day ? 'tomorrow' : "next_#{standard_period}")
36
+ Object.const_get("ActivePeriod::#{standard_period.capitalize}").new(date)
28
37
  end
29
38
 
30
- define_method period.to_s do |range|
31
- Object.const_get("ActivePeriod::#{period.capitalize}").new(range)
39
+ define_method standard_period.to_s do |range|
40
+ Object.const_get("ActivePeriod::#{standard_period.capitalize}").new(range)
32
41
  end
33
42
  end
34
43
 
@@ -36,6 +45,10 @@ module Period
36
45
  alias tomorrow next_day
37
46
  alias today this_day
38
47
 
48
+ # Experimental non-documented feature
49
+ # Inpired form ActiveRecord dynamic find_by_x like User.find_by_name
50
+ # Example: Period.last_3_weeks_from_now == Period.mew(2.weeks.ago.beginning_of_week..Time.now.end_of_week)
51
+ # Note : Maybe it should return a collection of StandardPeriod
39
52
  def method_missing(method_name, *arguments, &block)
40
53
  super unless method_name.match?(/(last|next)_\d+_(day|week|month|quarter|year)s?(_from_now)?/)
41
54
  last_next, count, klass = method_name.to_s.split('_')
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_period
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.0
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - billau_l
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-03 00:00:00.000000000 Z
11
+ date: 2022-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '5'
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '7'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '5'
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '7'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: i18n
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +72,20 @@ dependencies:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
74
  version: '10.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: cucumber
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
69
89
  description:
70
90
  email:
71
91
  executables: []
@@ -115,14 +135,14 @@ files:
115
135
  - lib/numeric.rb
116
136
  - lib/period.rb
117
137
  - lib/range.rb
118
- homepage: https://github.com/billaul/period
138
+ homepage: https://github.com/billaul/active_period
119
139
  licenses:
120
140
  - MIT
121
141
  metadata:
122
- bug_tracker_uri: https://github.com/billaul/period/issues
123
- homepage_uri: https://github.com/billaul/period
124
- documentation_uri: https://github.com/billaul/period
125
- source_code_uri: https://github.com/billaul/period
142
+ bug_tracker_uri: https://github.com/billaul/active_period/issues
143
+ homepage_uri: https://github.com/billaul/active_period
144
+ documentation_uri: https://github.com/billaul/active_period
145
+ source_code_uri: https://github.com/billaul/active_period
126
146
  post_install_message:
127
147
  rdoc_options: []
128
148
  require_paths: