schedule-cli 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile.lock +3 -1
- data/lib/schedule/availability_range.rb +4 -2
- data/lib/schedule/calendar.rb +9 -7
- data/lib/schedule/cli.rb +4 -3
- data/lib/schedule/config.rb +3 -1
- data/lib/schedule/version.rb +1 -1
- data/schedule-cli.gemspec +2 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27845260a0b3a6e6dd6b06a498c510b452ae0a69b0b14ef524e0c94c9abea2d6
|
4
|
+
data.tar.gz: a87f684a45f6621007e489fa6d51653bc5a1a28f22fc2dc437c0261b63832746
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08667553ba38fde90bce29ea3609ebf2aece59680e18f3c4b1fd7b2af7b305c0baac5e89042b139b5740dc328e4eeb4d9d3070e15416231d2a40071ab54fd86c'
|
7
|
+
data.tar.gz: ecf30cfa524aee407cd0898e5b84f4339e2d10a356ac6eacffaa92e8b5af88159f8c45ca574fed0290413dc070f71b229af641b7472f6b9d5c1aec62451426cd
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
schedule-cli (0.1.
|
4
|
+
schedule-cli (0.1.1)
|
5
5
|
activesupport (~> 5.2)
|
6
6
|
chronic
|
7
7
|
google-api-client (~> 0.11)
|
8
8
|
launchy
|
9
9
|
nokogiri
|
10
|
+
parallel
|
10
11
|
thor
|
11
12
|
|
12
13
|
GEM
|
@@ -57,6 +58,7 @@ GEM
|
|
57
58
|
nokogiri (1.8.4)
|
58
59
|
mini_portile2 (~> 2.3.0)
|
59
60
|
os (1.0.0)
|
61
|
+
parallel (1.12.1)
|
60
62
|
public_suffix (3.0.2)
|
61
63
|
rake (10.5.0)
|
62
64
|
representable (3.0.4)
|
@@ -4,12 +4,14 @@ require 'active_support/core_ext/numeric/time'
|
|
4
4
|
|
5
5
|
module Schedule
|
6
6
|
class AvailabilityRange
|
7
|
-
def initialize(start, end_, day_start:, day_end:, granularity: 5.minutes)
|
7
|
+
def initialize(start, end_, day_start:, day_end:, min_delay:, granularity: 5.minutes)
|
8
8
|
@start = start
|
9
9
|
@granularity = granularity
|
10
10
|
@slots = Array.new(n_slots(start, end_)) do |i|
|
11
11
|
dt = slot_to_datetime(i)
|
12
|
-
(
|
12
|
+
((dt - DateTime.now).days >= min_delay.hours) &&
|
13
|
+
(dt.hour > day_start || (dt.hour == day_start && !dt.minute.zero?)) &&
|
14
|
+
(dt.hour < day_end || (dt.hour == day_end && dt.minute.zero?))
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
data/lib/schedule/calendar.rb
CHANGED
@@ -4,6 +4,7 @@ require 'active_support/core_ext/date'
|
|
4
4
|
require 'active_support/core_ext/numeric/time'
|
5
5
|
|
6
6
|
require 'launchy'
|
7
|
+
require 'parallel'
|
7
8
|
|
8
9
|
require 'google/apis/calendar_v3'
|
9
10
|
require 'googleauth'
|
@@ -33,6 +34,7 @@ module Schedule
|
|
33
34
|
range = AvailabilityRange.new(
|
34
35
|
start.beginning_of_day,
|
35
36
|
end_.end_of_day,
|
37
|
+
min_delay: @options[:min_delay],
|
36
38
|
day_start: @options[:day][:start],
|
37
39
|
day_end: @options[:day][:end],
|
38
40
|
)
|
@@ -69,7 +71,6 @@ module Schedule
|
|
69
71
|
end: Google::Apis::CalendarV3::EventDateTime.new(date: back_current.to_s),
|
70
72
|
)
|
71
73
|
else
|
72
|
-
events.concat get_events_for_date(back_current)
|
73
74
|
buffer_back += 1
|
74
75
|
end
|
75
76
|
end
|
@@ -84,23 +85,24 @@ module Schedule
|
|
84
85
|
end: Google::Apis::CalendarV3::EventDateTime.new(date: forward_current.to_s),
|
85
86
|
)
|
86
87
|
else
|
87
|
-
events.concat get_events_for_date(forward_current)
|
88
88
|
buffer_forward += 1
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
events.concat get_events_for_dates(back_current, forward_current)
|
93
|
+
|
92
94
|
[[back_current, forward_current], events.uniq]
|
93
95
|
end
|
94
96
|
|
95
|
-
def
|
96
|
-
@options[:calendars].
|
97
|
+
def get_events_for_dates(from, to)
|
98
|
+
Parallel.map(@options[:calendars], in_threads: @options[:calendars].length) do |calendar|
|
97
99
|
@service.list_events(
|
98
100
|
calendar,
|
99
101
|
single_events: true,
|
100
|
-
time_min:
|
101
|
-
time_max:
|
102
|
+
time_min: from.beginning_of_day.iso8601,
|
103
|
+
time_max: to.end_of_day.iso8601,
|
102
104
|
).items
|
103
|
-
end
|
105
|
+
end.flatten
|
104
106
|
end
|
105
107
|
|
106
108
|
def authorize!
|
data/lib/schedule/cli.rb
CHANGED
@@ -21,7 +21,7 @@ module Schedule
|
|
21
21
|
method_option :debug, type: :boolean, default: false
|
22
22
|
def availability(type = nil, *offset_string)
|
23
23
|
config = Config.values.slice(:calendars, :day).merge(Config.value(:defaults))
|
24
|
-
if /\A\d+\z/.match(type)
|
24
|
+
if /\A\d+\z/.match?(type)
|
25
25
|
config[:duration] = type.to_i
|
26
26
|
else
|
27
27
|
config.merge!(Config.value(:events, type&.to_sym) || {})
|
@@ -31,9 +31,9 @@ module Schedule
|
|
31
31
|
elsif config[:day_offset].is_a?(String)
|
32
32
|
config[:day_offset] = parse_offset config[:day_offset]
|
33
33
|
end
|
34
|
-
puts
|
34
|
+
puts config.to_s if options.debug?
|
35
35
|
slots = Schedule::Calendar.new(config).free_slots
|
36
|
-
print_with_options format_free_slots(slots)
|
36
|
+
print_with_options "#{format_free_slots(slots)}<br/>#{Config.value(:footer)}"
|
37
37
|
end
|
38
38
|
|
39
39
|
desc 'config', 'open config file in default editor'
|
@@ -59,6 +59,7 @@ module Schedule
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def format_free_slots(slots)
|
62
|
+
return "<b style='color: red;'>No free slots!</b>" unless slots.present?
|
62
63
|
dates = Hash.new { |h, k| h[k] = [] }
|
63
64
|
slots.each do |(s, e)|
|
64
65
|
dates[s.to_date] << "#{s.strftime('%-l:%M %p')} to #{e.strftime('%-l:%M %p')}"
|
data/lib/schedule/config.rb
CHANGED
@@ -13,15 +13,17 @@ module Schedule
|
|
13
13
|
end: 18,
|
14
14
|
},
|
15
15
|
defaults: {
|
16
|
+
align_to: 15,
|
16
17
|
day_offset: 'next weekday',
|
17
18
|
day_buffer: 1,
|
18
19
|
duration: 30,
|
19
|
-
|
20
|
+
min_delay: 4,
|
20
21
|
},
|
21
22
|
events: {
|
22
23
|
call: { duration: 30 },
|
23
24
|
coffee: { duration: 60 },
|
24
25
|
},
|
26
|
+
footer: nil,
|
25
27
|
}.freeze
|
26
28
|
|
27
29
|
def self.file(*args)
|
data/lib/schedule/version.rb
CHANGED
data/schedule-cli.gemspec
CHANGED
@@ -27,9 +27,10 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
28
28
|
|
29
29
|
spec.add_dependency 'activesupport', '~> 5.2'
|
30
|
+
spec.add_dependency 'chronic'
|
30
31
|
spec.add_dependency 'google-api-client', '~> 0.11'
|
31
32
|
spec.add_dependency 'launchy'
|
32
33
|
spec.add_dependency 'nokogiri'
|
34
|
+
spec.add_dependency 'parallel'
|
33
35
|
spec.add_dependency 'thor'
|
34
|
-
spec.add_dependency 'chronic'
|
35
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schedule-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yasyf Mohamedali
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '5.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: chronic
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: google-api-client
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +123,7 @@ dependencies:
|
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: parallel
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - ">="
|
@@ -123,7 +137,7 @@ dependencies:
|
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
140
|
+
name: thor
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - ">="
|