schedule-cli 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
- - ">="
|