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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42782ff951ba926c55abecb022b485b9714a73a10b88d8edaf76fbc756cde429
4
- data.tar.gz: b8e2f32fca289565b1852c6575da834936e24ce0be208610f5a504f19cb607ba
3
+ metadata.gz: 27845260a0b3a6e6dd6b06a498c510b452ae0a69b0b14ef524e0c94c9abea2d6
4
+ data.tar.gz: a87f684a45f6621007e489fa6d51653bc5a1a28f22fc2dc437c0261b63832746
5
5
  SHA512:
6
- metadata.gz: da46ba9b924e8315b27a49d896dc744f3237e4c7389cecbbbfdb97116a84235f61e2c944f99c9df5cb4d5459a215829f2ed4b0f1933cd3169cefe9d0b2b95cbb
7
- data.tar.gz: ef0a550eb9c6805ddc53cbfd874b7993d80f29c25fa1cba91cc6b7c71f2d465f29c108543efa04e40d53a895c0ae3f186f6e8dff8760ab43351050766ffb4589
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.0)
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
- (dt.hour > day_start || (dt.hour == day_start && !dt.minute.zero?)) && (dt.hour < day_end || (dt.hour == day_end && dt.minute.zero?))
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
 
@@ -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 get_events_for_date(date)
96
- @options[:calendars].flat_map do |calendar|
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: date.beginning_of_day.iso8601,
101
- time_max: date.end_of_day.iso8601,
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 "#{config}" if options.debug?
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')}"
@@ -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
- align_to: 15,
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)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schedule
4
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
5
5
  end
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.0
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-03 00:00:00.000000000 Z
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: thor
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: chronic
140
+ name: thor
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="