remember_the_meeting 0.0.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.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/bin/remember_the_meeting +5 -0
- data/config/exchange.yml +3 -0
- data/lib/remember_the_meeting/calendar_item_patch.rb +18 -0
- data/lib/remember_the_meeting/platform.rb +5 -0
- data/lib/remember_the_meeting/version.rb +3 -0
- data/lib/remember_the_meeting.rb +76 -0
- data/remember_the_meeting.gemspec +30 -0
- metadata +161 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Remember The Meeting
|
|
2
|
+
====================
|
|
3
|
+
|
|
4
|
+
This gem is will connect to your calendar on Microsoft Exchange server and make sure you don't miss any appointments.
|
|
5
|
+
|
|
6
|
+
Prerequisites
|
|
7
|
+
-------------
|
|
8
|
+
|
|
9
|
+
On Mac, growl and growl gem need to be installed. On linux, libnotify-bin is the only dependency.
|
|
10
|
+
|
|
11
|
+
Installation
|
|
12
|
+
------------
|
|
13
|
+
|
|
14
|
+
```gem install remember_the_meeting```
|
|
15
|
+
|
|
16
|
+
Configuration
|
|
17
|
+
-------------
|
|
18
|
+
|
|
19
|
+
```export EDITOR=vim```
|
|
20
|
+
|
|
21
|
+
or mate, gedit or whatever. Then run:
|
|
22
|
+
|
|
23
|
+
```remember_the_meeting config```
|
|
24
|
+
|
|
25
|
+
to configure the connection. Finally, run:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
remember_the_meeting
|
|
29
|
+
```
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/config/exchange.yml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Viewpoint::EWS::CalendarItem.class_eval do
|
|
2
|
+
def start_time
|
|
3
|
+
@start_time ||= Time.parse(self.start.to_s)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def end_time
|
|
7
|
+
@end_time ||= Time.parse(self.end.to_s)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def start_time_formatted
|
|
11
|
+
start_time.strftime('%H:%M')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def end_time_formatted
|
|
15
|
+
end_time.strftime('%H:%M')
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'remember_the_meeting', 'version')
|
|
2
|
+
require File.join(File.dirname(__FILE__), 'remember_the_meeting', 'platform')
|
|
3
|
+
include Platform
|
|
4
|
+
|
|
5
|
+
require 'viewpoint'
|
|
6
|
+
require 'yaml'
|
|
7
|
+
require 'growl' unless linux?
|
|
8
|
+
|
|
9
|
+
require File.join(File.dirname(__FILE__), 'remember_the_meeting', 'calendar_item_patch')
|
|
10
|
+
|
|
11
|
+
module RememberTheMeeting
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
include Platform
|
|
15
|
+
|
|
16
|
+
def notify(subject, start_time, end_time, location)
|
|
17
|
+
message = "#{start_time}-#{end_time}\n#{location}"
|
|
18
|
+
if linux?
|
|
19
|
+
system "notify-send \"#{subject}\" \"#{message}\""
|
|
20
|
+
else
|
|
21
|
+
Growl.notify(message, {:title => subject, :sticky => true})
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def setup
|
|
26
|
+
Viewpoint::EWS::EWS.endpoint = config['server']
|
|
27
|
+
Viewpoint::EWS::EWS.set_auth(config['user'], config['pass'])
|
|
28
|
+
@cal = Viewpoint::EWS::CalendarFolder.get_folder :calendar
|
|
29
|
+
@cal.subscribe
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def configure
|
|
33
|
+
system "#{editor} #{config_filepath}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def editor
|
|
37
|
+
editor = `echo $EDITOR`.chomp
|
|
38
|
+
editor.blank? ? 'vim' : editor
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def config
|
|
42
|
+
YAML.load(File.read(config_filepath))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def config_filepath
|
|
46
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'exchange.yml'))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def start
|
|
50
|
+
loop do
|
|
51
|
+
items = @cal.todays_items
|
|
52
|
+
|
|
53
|
+
# d1 = DateTime.parse('2011-09-24')
|
|
54
|
+
# d2 = DateTime.parse('2011-09-30')
|
|
55
|
+
# items = @cal.items_between(d1, d2)
|
|
56
|
+
|
|
57
|
+
now = Time.now
|
|
58
|
+
in_15_minutes = Time.now + 60 * 15
|
|
59
|
+
upcoming = items.select {|item| item.start_time > now && item.start_time < in_15_minutes }
|
|
60
|
+
upcoming.each do |appointment|
|
|
61
|
+
start_time = appointment.start_time_formatted
|
|
62
|
+
end_time = appointment.end_time_formatted
|
|
63
|
+
subject = appointment.subject
|
|
64
|
+
location = appointment.location
|
|
65
|
+
notify(subject, start_time, end_time, location)
|
|
66
|
+
end
|
|
67
|
+
sleep(300)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def enable!
|
|
72
|
+
setup
|
|
73
|
+
start
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "remember_the_meeting/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "remember_the_meeting"
|
|
7
|
+
s.version = RememberTheMeeting::VERSION
|
|
8
|
+
s.authors = ["Milan Dobrota"]
|
|
9
|
+
s.email = ["milan@milandobrota.com"]
|
|
10
|
+
s.homepage = ""
|
|
11
|
+
s.summary = %q{Gem that integrates against Exchange server and notifies you 15 minutes before meetings.}
|
|
12
|
+
s.description = %q{Gem that integrates against Exchange server and notifies you 15 minutes before meetings. Linux and OSX. }
|
|
13
|
+
|
|
14
|
+
s.rubyforge_project = "remember_the_meeting"
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split("\n")
|
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
# specify any dependencies here; for example:
|
|
22
|
+
# s.add_development_dependency "rspec"
|
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
|
24
|
+
s.add_runtime_dependency 'nokogiri'
|
|
25
|
+
s.add_runtime_dependency 'handsoap'
|
|
26
|
+
s.add_runtime_dependency 'httpclient'
|
|
27
|
+
s.add_runtime_dependency 'rubyntlm'
|
|
28
|
+
s.add_runtime_dependency 'icalendar'
|
|
29
|
+
s.add_runtime_dependency 'viewpoint'
|
|
30
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: remember_the_meeting
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 29
|
|
5
|
+
prerelease: false
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 0
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.0.1
|
|
11
|
+
platform: ruby
|
|
12
|
+
authors:
|
|
13
|
+
- Milan Dobrota
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2011-09-25 00:00:00 -05:00
|
|
19
|
+
default_executable:
|
|
20
|
+
dependencies:
|
|
21
|
+
- !ruby/object:Gem::Dependency
|
|
22
|
+
name: nokogiri
|
|
23
|
+
prerelease: false
|
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
hash: 3
|
|
30
|
+
segments:
|
|
31
|
+
- 0
|
|
32
|
+
version: "0"
|
|
33
|
+
type: :runtime
|
|
34
|
+
version_requirements: *id001
|
|
35
|
+
- !ruby/object:Gem::Dependency
|
|
36
|
+
name: handsoap
|
|
37
|
+
prerelease: false
|
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
hash: 3
|
|
44
|
+
segments:
|
|
45
|
+
- 0
|
|
46
|
+
version: "0"
|
|
47
|
+
type: :runtime
|
|
48
|
+
version_requirements: *id002
|
|
49
|
+
- !ruby/object:Gem::Dependency
|
|
50
|
+
name: httpclient
|
|
51
|
+
prerelease: false
|
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
53
|
+
none: false
|
|
54
|
+
requirements:
|
|
55
|
+
- - ">="
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
hash: 3
|
|
58
|
+
segments:
|
|
59
|
+
- 0
|
|
60
|
+
version: "0"
|
|
61
|
+
type: :runtime
|
|
62
|
+
version_requirements: *id003
|
|
63
|
+
- !ruby/object:Gem::Dependency
|
|
64
|
+
name: rubyntlm
|
|
65
|
+
prerelease: false
|
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
67
|
+
none: false
|
|
68
|
+
requirements:
|
|
69
|
+
- - ">="
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
hash: 3
|
|
72
|
+
segments:
|
|
73
|
+
- 0
|
|
74
|
+
version: "0"
|
|
75
|
+
type: :runtime
|
|
76
|
+
version_requirements: *id004
|
|
77
|
+
- !ruby/object:Gem::Dependency
|
|
78
|
+
name: icalendar
|
|
79
|
+
prerelease: false
|
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
82
|
+
requirements:
|
|
83
|
+
- - ">="
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
hash: 3
|
|
86
|
+
segments:
|
|
87
|
+
- 0
|
|
88
|
+
version: "0"
|
|
89
|
+
type: :runtime
|
|
90
|
+
version_requirements: *id005
|
|
91
|
+
- !ruby/object:Gem::Dependency
|
|
92
|
+
name: viewpoint
|
|
93
|
+
prerelease: false
|
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
95
|
+
none: false
|
|
96
|
+
requirements:
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
hash: 3
|
|
100
|
+
segments:
|
|
101
|
+
- 0
|
|
102
|
+
version: "0"
|
|
103
|
+
type: :runtime
|
|
104
|
+
version_requirements: *id006
|
|
105
|
+
description: "Gem that integrates against Exchange server and notifies you 15 minutes before meetings. Linux and OSX. "
|
|
106
|
+
email:
|
|
107
|
+
- milan@milandobrota.com
|
|
108
|
+
executables:
|
|
109
|
+
- remember_the_meeting
|
|
110
|
+
extensions: []
|
|
111
|
+
|
|
112
|
+
extra_rdoc_files: []
|
|
113
|
+
|
|
114
|
+
files:
|
|
115
|
+
- .gitignore
|
|
116
|
+
- Gemfile
|
|
117
|
+
- README.md
|
|
118
|
+
- Rakefile
|
|
119
|
+
- bin/remember_the_meeting
|
|
120
|
+
- config/exchange.yml
|
|
121
|
+
- lib/remember_the_meeting.rb
|
|
122
|
+
- lib/remember_the_meeting/calendar_item_patch.rb
|
|
123
|
+
- lib/remember_the_meeting/platform.rb
|
|
124
|
+
- lib/remember_the_meeting/version.rb
|
|
125
|
+
- remember_the_meeting.gemspec
|
|
126
|
+
has_rdoc: true
|
|
127
|
+
homepage: ""
|
|
128
|
+
licenses: []
|
|
129
|
+
|
|
130
|
+
post_install_message:
|
|
131
|
+
rdoc_options: []
|
|
132
|
+
|
|
133
|
+
require_paths:
|
|
134
|
+
- lib
|
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
|
+
none: false
|
|
137
|
+
requirements:
|
|
138
|
+
- - ">="
|
|
139
|
+
- !ruby/object:Gem::Version
|
|
140
|
+
hash: 3
|
|
141
|
+
segments:
|
|
142
|
+
- 0
|
|
143
|
+
version: "0"
|
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
|
+
none: false
|
|
146
|
+
requirements:
|
|
147
|
+
- - ">="
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
hash: 3
|
|
150
|
+
segments:
|
|
151
|
+
- 0
|
|
152
|
+
version: "0"
|
|
153
|
+
requirements: []
|
|
154
|
+
|
|
155
|
+
rubyforge_project: remember_the_meeting
|
|
156
|
+
rubygems_version: 1.3.7
|
|
157
|
+
signing_key:
|
|
158
|
+
specification_version: 3
|
|
159
|
+
summary: Gem that integrates against Exchange server and notifies you 15 minutes before meetings.
|
|
160
|
+
test_files: []
|
|
161
|
+
|