periodoxical 0.1.1 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e68e36720b518a871efe0ea34eb09f94b99880f5ebda37f5123469839b8a6b94
4
- data.tar.gz: 7dd9b4f9e7439c6875dc689bd08fc4b3e145f81a886eaaa5b8f5c879f1839377
3
+ metadata.gz: 86a786f06e166368721d1f0f17d9c702bfc23950f66482f4c2da80fde583d9a5
4
+ data.tar.gz: 65bae069f30ee999ccc99353d03149db0e3414adbb1257b1c163e2d7cfaa5e01
5
5
  SHA512:
6
- metadata.gz: 8f5fd0e511bc2363d7487247b4fe528b5c8bd2e8b05d590b35ecf3d0726cda68b673f6f69dcb5c1e9d66b27998fb702161f8925afbc474e00df19ac13c105d6f
7
- data.tar.gz: f8fc94f6e17ddeba3815c6f5baf4dc1881dd4c0fd8cfd6bf1e5e756cc393499da79c8d11f72b37fd1f3797d18c9bd1e62b95699b2c62ba3b61de524ce91f3308
6
+ metadata.gz: e9f76a36b7a77e326ab999adbda7d59f24f84383f198c260e99b76cfb7c9fe069c10fa3ff46c61c53491e4d6b96f8c23b8378471cd7494cce21e78dbfface58e
7
+ data.tar.gz: 3ad7d053bb777bf3f3dbf403a787447dc77eeab162d185a6e3de79c21a68d468ac30365aa2ad3d5db65525a2678f78e3f0c5e50e728b22cc521c205445696056
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- periodoxical (0.1.0)
5
- tzinfo (>= 2.0.0)
4
+ periodoxical (0.2.2)
5
+ tzinfo (~> 2.0, >= 2.0.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -24,7 +24,7 @@ GEM
24
24
  pry-stack_explorer (0.6.1)
25
25
  binding_of_caller (~> 1.0)
26
26
  pry (~> 0.13)
27
- rake (10.5.0)
27
+ rake (12.3.3)
28
28
  rspec (3.13.0)
29
29
  rspec-core (~> 3.13.0)
30
30
  rspec-expectations (~> 3.13.0)
@@ -47,9 +47,9 @@ PLATFORMS
47
47
  DEPENDENCIES
48
48
  bundler (~> 2.4)
49
49
  periodoxical!
50
- pry-byebug
51
- pry-stack_explorer
52
- rake (~> 10.0)
50
+ pry-byebug (~> 3.10)
51
+ pry-stack_explorer (~> 0.6)
52
+ rake (~> 12.3.3)
53
53
  rspec (~> 3.0)
54
54
 
55
55
  BUNDLED WITH
data/README.md CHANGED
@@ -23,11 +23,9 @@ Or install it yourself as:
23
23
 
24
24
  ## Usage
25
25
 
26
- ```rb
27
- # generates 9:00AM - 10:30AM and 2:00PM - 2:30PM time blocks
28
- # on Mondays, Wednesdays, and Thursdays, between the dates of
29
- # May 23, 2024 and June 24, 2024
26
+ Generates datetimes blocks of 9:00AM - 10:30AM and 2:00PM - 2:30PM, on Mondays, Wednesdays, and Thursdays, between the dates of May 23, 2024 and June 24, 2024
30
27
 
28
+ ```rb
31
29
  Periodoxical.generate(
32
30
  time_zone: 'America/Los_Angeles',
33
31
  days_of_week: %w[mon wed thu],
@@ -47,24 +45,41 @@ Periodoxical.generate(
47
45
  # returns an array of hashes, each with a :start, :end
48
46
  #=>
49
47
  [
48
+ {
49
+ start: #<DateTime: 2024-05-23T16:00:00+00:00>,
50
+ end: #<DateTime: 2024-05-24T05:30:00+00:00>,
51
+ },
52
+ {
53
+ start: #<DateTime: 2024-05-23T21:00:00+00:00>,
54
+ end: #<DateTime: 2024-05-23T21:30:00+00:00>,
55
+ },
56
+ {
57
+ start: #<DateTime: 2024-05-27T16:00:00+00:00>,
58
+ end: #<DateTime: 2024-05-28T05:30:00+00:00>
59
+ },
60
+ ...
61
+ ]
62
+ ```
63
+
64
+ Generate the next 10 datetime blocks of 3:00PM - 4:30PM, on Sundays, after May 30, 2024
65
+
66
+ ```rb
67
+ Periodoxical.generate(
68
+ time_zone: 'America/Los_Angeles',
69
+ days_of_week: %w[mon wed thu],
70
+ time_blocks: [
50
71
  {
51
- :start=>#<DateTime: 2024-05-23T16:00:00+00:00>,
52
- :end=>#<DateTime: 2024-05-23T16:00:00+00:00>
53
- },
54
- {
55
- :start=>#<DateTime: 2024-05-23T16:00:00+00:00>,
56
- :end=>#<DateTime: 2024-05-23T16:00:00+00:00>
72
+ start_time: '9:00AM',
73
+ end_time: '10:30AM'
57
74
  },
58
75
  {
59
- :start=>#<DateTime: 2024-05-30T16:00:00+00:00>,
60
- :end=>#<DateTime: 2024-05-30T16:00:00+00:00>
61
- },
62
- { :start=>#<DateTime: 2024-05-30T16:00:00+00:00>,
63
- :end=>#<DateTime: 2024-05-30T16:00:00+00:00>
64
- },
65
-
66
- ...
67
- ]
76
+ start_time: '2:00PM',
77
+ end_time: '2:30PM'
78
+ }
79
+ ],
80
+ start_date: Date.parse('2024-05-23'),
81
+ limit: 10
82
+ )
68
83
  ```
69
84
 
70
85
  ## Development
@@ -1,3 +1,3 @@
1
1
  module Periodoxical
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.2"
3
3
  end
data/lib/periodoxical.rb CHANGED
@@ -17,6 +17,17 @@ module Periodoxical
17
17
  # TZInfo::DataTimezone#name from the tzinfo gem (https://github.com/tzinfo/tzinfo)
18
18
  # @param [Date] start_date
19
19
  # @param [Date] end_date
20
+ # @param [Array<Hash>] time_blocks
21
+ # Ex: [
22
+ # {
23
+ # start_time: '9:00AM',
24
+ # end_time: '10:30PM'
25
+ # },
26
+ # {
27
+ # start_time: '2:00PM',
28
+ # end_time: '2:30PM'
29
+ # }
30
+ # ]
20
31
  # @param [Array<String>, nil] days_of_week
21
32
  # Days of the week to generate the times for, if nil, then times are generated
22
33
  # for every day.
@@ -31,7 +42,7 @@ module Periodoxical
31
42
  # fri: { start_time: '7:00PM', end_time: '9:00PM' },
32
43
  # }
33
44
  def initialize(time_zone: 'Etc/UTC', days_of_week: nil,
34
- start_date:, end_date:, time_blocks: nil, day_of_week_hours: nil, limit: nil)
45
+ start_date:, end_date: nil, time_blocks: nil, day_of_week_hours: nil, limit: nil)
35
46
  @time_zone = TZInfo::Timezone.get(time_zone)
36
47
  @days_of_week = days_of_week
37
48
  @time_blocks = time_blocks
@@ -58,21 +69,32 @@ module Periodoxical
58
69
  private
59
70
 
60
71
  def generate_from_days_of_week_time_blocks
61
- times = []
72
+ times_output = []
62
73
  current_date = @start_date
63
- while current_date <= @end_date
74
+ current_count = 0
75
+ keep_generating = true
76
+ while keep_generating
64
77
  day_of_week = day_of_week_long_to_short(current_date.strftime("%A"))
65
78
  if @days_of_week.include?(day_of_week)
66
79
  @time_blocks.each do |tb|
67
- times << {
80
+ times_output << {
68
81
  start: time_str_to_object(current_date, tb[:start_time]),
69
- end: time_str_to_object(current_date, tb[:end_date])
82
+ end: time_str_to_object(current_date, tb[:end_time])
70
83
  }
84
+ current_count = current_count + 1
85
+ if @limit && current_count == @limit
86
+ keep_generating = false
87
+ break
88
+ end
71
89
  end
72
90
  end
73
91
  current_date = current_date + 1
92
+
93
+ if @end_date && (current_date > @end_date)
94
+ keep_generating = false
95
+ end
74
96
  end
75
- times
97
+ times_output
76
98
  end
77
99
 
78
100
  def validate!
@@ -93,13 +115,24 @@ module Periodoxical
93
115
  end
94
116
  end
95
117
 
96
- unless (@days_of_week && @start_time && @end_time) || (@day_of_week_hours)
118
+ unless (@days_of_week && @time_blocks) || (@day_of_week_hours)
119
+ raise "Need to provide either `days_of_week` and `time_blocks` or `day_of_week_hours`"
120
+ end
121
+
122
+ unless( @limit || @end_date)
123
+ raise "Either `limit` or `end_date` must be provided"
97
124
  end
98
125
  end
99
126
 
100
127
  def day_of_week_long_to_short(dow)
101
128
  {
102
- "Thursday" => "thu"
129
+ "Monday" => "mon",
130
+ "Tuesday" => "tue",
131
+ "Wednesday" => "wed",
132
+ "Thursday" => "thu",
133
+ "Friday" => "fri",
134
+ "Saturday" => "sat",
135
+ "Sunday" => "sun",
103
136
  }[dow]
104
137
  end
105
138
 
@@ -107,7 +140,7 @@ module Periodoxical
107
140
  # Ex: '9:00AM'
108
141
  # @param [Date] date
109
142
  def time_str_to_object(date, time_str)
110
- time = Time.strptime("9:00AM", "%I:%M%p")
143
+ time = Time.strptime(time_str, "%I:%M%p")
111
144
  date_time = DateTime.new(
112
145
  date.year,
113
146
  date.month,
data/periodoxical.gemspec CHANGED
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
37
37
  spec.add_dependency 'tzinfo', '~> 2.0', '>= 2.0.0'
38
38
 
39
39
  spec.add_development_dependency "bundler", "~> 2.4"
40
- spec.add_development_dependency "rake", "~> 10.0"
40
+ spec.add_development_dependency "rake", "~> 12.3.3"
41
41
  spec.add_development_dependency "rspec", "~> 3.0"
42
42
  spec.add_development_dependency "pry-byebug", "~> 3.10"
43
43
  spec.add_development_dependency "pry-stack_explorer", "~> 0.6"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: periodoxical
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Li
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '10.0'
53
+ version: 12.3.3
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '10.0'
60
+ version: 12.3.3
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
63
  requirement: !ruby/object:Gem::Requirement