olm 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (9) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +34 -0
  3. data/LICENSE +21 -0
  4. data/README.md +4 -0
  5. data/lib/olm/app.rb +115 -0
  6. data/lib/olm.rb +35 -0
  7. data/olm.el +334 -0
  8. data/olm.gemspec +23 -0
  9. metadata +80 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 77901d067605eff56e7e15a667f55f05a4197121
4
+ data.tar.gz: 80565d0c2965b67bd6cbc088ff206f4cfa88e83e
5
+ SHA512:
6
+ metadata.gz: 009f350ea5b13ab5b8efe2bc16f2a7f630563fbbf1428e17794aab0962edfce028b7cf1cf9027434119971d26fe0f8e3330c5b5150f0ab15b1eb28cafd93a038
7
+ data.tar.gz: 187eaa27cdc99f9cbe60ddd474e76b2ea0e5ab1698bff4d2a43d6354cabf027e66ba5d469855e8d2ff52226ce6896bf975e7291d7c2f65b7085a6de960009f22
data/.gitignore ADDED
@@ -0,0 +1,34 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ # Gemfile.lock
30
+ # .ruby-version
31
+ # .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Takahiro Noda
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ olm
2
+ ===
3
+
4
+ TBA
data/lib/olm/app.rb ADDED
@@ -0,0 +1,115 @@
1
+ require 'win32ole'
2
+ require 'singleton'
3
+ require 'nkf'
4
+
5
+ module Olm
6
+ class App
7
+ include Singleton
8
+
9
+ def initialize
10
+ @app = WIN32OLE.connect("Outlook.Application")
11
+ @ns = @app.Session
12
+ @enc = @ns.Folders.GetFirst.Name.encoding
13
+ const_load(self.class)
14
+ end
15
+
16
+ def ls(folder_id = nil)
17
+ f = folder_id ? @ns.GetFolderFromID(folder_id) : default_folder
18
+ res = "#{f.Items.Count}\n"
19
+ f.Items.each do |m|
20
+ entry_id = m.EntryID
21
+ received_at = m.ReceivedTime.to_s.split(' ').first
22
+ from = m.SenderName
23
+ subject = m.Subject
24
+ flag = m.IsMarkedAsTask ? '!' : ' '
25
+ res << sprintf("%s %s %-12.12s %-20.20s %s\n",
26
+ entry_id, flag, received_at, u(from), u(subject))
27
+ end
28
+ res
29
+ end
30
+
31
+ def send_and_receive
32
+ @ns.SendAndReceive(false)
33
+ end
34
+
35
+ def message(entry_id)
36
+ m = @ns.GetItemFromID(entry_id)
37
+ res = ''
38
+ res << sprintf("From: %s\n", m.SenderName)
39
+ res << sprintf("To: %s\n", m.To)
40
+ res << sprintf("Cc: %s\n", m.CC) if m.CC.to_s.length > 0
41
+ res << sprintf("Subject: %s\n", m.Subject)
42
+ res << sprintf("ReceivedAt: %s\n", m.ReceivedTime)
43
+ res << sprintf("---- \n")
44
+ if m.BodyFormat != OlFormatPlain
45
+ m2 = m.Copy
46
+ m2.BodyFormat = OlFormatPlain
47
+ res << m2.Body
48
+ m2.Move(@ns.GetDefaultFolder(OlFolderDeletedItems))
49
+ else
50
+ res << m.Body
51
+ end
52
+ NKF.nkf('-w -Lu', res)
53
+ end
54
+
55
+ def toggle_task_flag(entry_id)
56
+ m = @ns.GetItemFromID(entry_id)
57
+ if m.IsMarkedAsTask
58
+ m.ClearTaskFlag()
59
+ else
60
+ m.MarkAsTask(OlMarkNoDate)
61
+ end
62
+ m.Save
63
+ end
64
+
65
+ def mark_as_read(entry_id)
66
+ m = @ns.GetItemFromID(entry_id)
67
+ m.UnRead = false
68
+ m.Save
69
+ end
70
+
71
+ def create_message(io)
72
+ x = {:body => ''}
73
+ header = true
74
+ io.each_line do |line|
75
+ line.chomp!
76
+ if header
77
+ if line.empty? || /^---- / =~ line
78
+ header = false
79
+ else
80
+ next unless /^(.*?): (.*)/ =~ line
81
+ x[$1] = $2
82
+ p $1, $2
83
+ end
84
+ else
85
+ x[:body] << line
86
+ x[:body] << "\n"
87
+ p x[:body]
88
+ end
89
+ end
90
+ m = @app.CreateItem(OlMailItem)
91
+ m.BodyFormat = OlFormatPlain
92
+ m.To = x['To'] if x['To']
93
+ m.CC = x['Cc'] if x['Cc']
94
+ m.BCC = x['Bcc'] if x['Bcc']
95
+ m.Subject = NKF.nkf('-s', x['Subject']) if x['Subject']
96
+ m.Body = NKF.nkf('-s', x[:body]) if x[:body]
97
+ m
98
+ end
99
+
100
+
101
+ private
102
+
103
+ def const_load(klass)
104
+ WIN32OLE.const_load(@app, klass)
105
+ end
106
+
107
+ def default_folder
108
+ @ns.GetDefaultFolder(OlFolderInbox)
109
+ end
110
+
111
+ def u(str)
112
+ str.encode(Encoding::UTF_8)
113
+ end
114
+ end
115
+ end
data/lib/olm.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'olm/app'
2
+
3
+ module Olm
4
+ VERSION = '0.0.1'
5
+
6
+ extend self
7
+
8
+ def ls(folder_id = nil)
9
+ puts Olm::App.instance.ls(folder_id)
10
+ end
11
+
12
+ def send_and_receive
13
+ Olm::App.instance.send_and_receive
14
+ end
15
+
16
+ def message(entry_id)
17
+ puts Olm::App.instance.message(entry_id)
18
+ end
19
+
20
+ def toggle_task_flag(entry_id)
21
+ Olm::App.instance.toggle_task_flag(entry_id)
22
+ end
23
+
24
+ def mark_as_read(entry_id)
25
+ Olm::App.instance.mark_as_read(entry_id)
26
+ end
27
+
28
+ def save_message
29
+ Olm::App.instance.create_message(ARGF).Save
30
+ end
31
+
32
+ def send_message
33
+ Olm::App.instance.create_message(ARGF).Send
34
+ end
35
+ end
data/olm.el ADDED
@@ -0,0 +1,334 @@
1
+ (require 'dash)
2
+
3
+ (defvar olm-folder-id nil)
4
+ (defvar olm-default-bcc nil)
5
+
6
+ (defun olm
7
+ ()
8
+ (interactive)
9
+ (olm-scan))
10
+
11
+ (defun olm-scan
12
+ ()
13
+ (interactive)
14
+ (let* ((ret (olm-ls))
15
+ (lbuf (olm-buf-ls))
16
+ (n (with-current-buffer lbuf
17
+ (goto-char (point-min))
18
+ (let ((point (point)))
19
+ (forward-word)
20
+ (string-to-int (buffer-substring point (point))))))
21
+ (sbuf (let ((buf (olm-buf-summary)))
22
+ (with-current-buffer buf
23
+ (setq-local buffer-read-only nil)
24
+ (erase-buffer))
25
+ buf))
26
+ (ibuf (let ((buf (olm-buf-entry-ids)))
27
+ (with-current-buffer buf
28
+ (erase-buffer))
29
+ buf)))
30
+ (with-current-buffer lbuf
31
+ (--dotimes n
32
+ (progn
33
+ (forward-line)
34
+ (let* ((p0 (point))
35
+ (p1 (progn
36
+ (forward-word)
37
+ (point)))
38
+ (entry-id (buffer-substring p0 p1))
39
+ (item-line (buffer-substring p1 (line-end-position))))
40
+ (with-current-buffer sbuf
41
+ (insert item-line "\n"))
42
+ (with-current-buffer ibuf
43
+ (insert entry-id "\n"))))))
44
+ (with-current-buffer sbuf
45
+ (olm-summary-mode))
46
+ (switch-to-buffer sbuf)))
47
+
48
+ ;;; A helper function invoked by olm-scan
49
+ (defun olm-ls
50
+ ()
51
+ (with-current-buffer (olm-buf-ls)
52
+ (setq-local buffer-read-only nil)
53
+ (erase-buffer)
54
+ (let ((command (if olm-folder-id
55
+ (concat "Olm.ls '" olm-folder-id "'")
56
+ "Olm.ls")))
57
+ (olm-do-command command t))))
58
+
59
+
60
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
61
+ ;;;
62
+ ;;; gereral helper functions
63
+ ;;;
64
+ (defun olm-do-command
65
+ (command &optional buf)
66
+ (let ((buf (or buf (get-buffer-create "*Messages*"))))
67
+ (call-process "ruby" nil buf nil
68
+ "-r" "rubygems" "-r" "olm" "-e" command)))
69
+
70
+ (defun olm-sync
71
+ ()
72
+ (interactive)
73
+ (with-current-buffer (get-buffer-create "*olm-sync*")
74
+ (message "Olm: synchronizing all objects ...")
75
+ (olm-do-command "Olm.send_and_receive" t)
76
+ (message "Olm: synchronizing all objects ...")
77
+ (sit-for 1)
78
+ (let ((w 3))
79
+ (--dotimes w
80
+ (progn
81
+ (message (number-to-string (- w it)))
82
+ (sit-for 1))))
83
+ (message "done.")))
84
+
85
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
86
+ ;;;
87
+ ;;; buffers
88
+ ;;;
89
+ (defun olm-buf-ls
90
+ ()
91
+ (get-buffer-create "*olm-ls*"))
92
+
93
+ (defun olm-buf-summary
94
+ ()
95
+ (get-buffer-create "*olm-summary*"))
96
+
97
+ (defun olm-buf-entry-ids
98
+ ()
99
+ (get-buffer-create "*olm-entry-ids*"))
100
+
101
+ (defun olm-buf-message
102
+ ()
103
+ (let ((buf (get-buffer-create "*olm-message*")))
104
+ (with-current-buffer buf
105
+ (setq-local buffer-read-only nil)
106
+ (erase-buffer))
107
+ buf))
108
+
109
+ (defun olm-buf-draft
110
+ ()
111
+ (let ((buf (get-buffer-create "*olm-draft*")))
112
+ (with-current-buffer buf
113
+ (setq-local buffer-read-only nil)
114
+ (erase-buffer)
115
+ (insert "To: \n")
116
+ (insert "Cc: \n")
117
+ (when olm-default-bcc
118
+ (insert "Bcc: " olm-default-bcc "\n"))
119
+ (insert "Subject: \n")
120
+ (insert "---- \n"))
121
+ buf))
122
+
123
+
124
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
125
+ ;;;
126
+ ;;; olm-message
127
+ ;;;
128
+ (defvar olm-message-mode-map nil)
129
+ (defvar olm-message-mode-hook nil)
130
+
131
+ (defun olm-message-mode
132
+ ()
133
+ (interactive)
134
+ (setq major-mode 'olm-summary-mode)
135
+ (setq mode-name "Olm Message")
136
+ (font-lock-mode 1)
137
+ (setq-local buffer-read-only t)
138
+ (setq-local line-move-ignore-invisible t)
139
+ (run-hooks 'olm-message-mode-hook))
140
+
141
+ (defun olm-message-mode-keyword
142
+ ()
143
+ (font-lock-add-keywords
144
+ nil
145
+ '(("^From:" . font-lock-keyword-face)
146
+ ("^To:" . font-lock-keyword-face)
147
+ ("^Cc:" . font-lock-keyword-face)
148
+ ("^Subject:" . font-lock-keyword-face)
149
+ ("^ReceivedAt:" . font-lock-keyword-face)
150
+ ("^> .*$" . font-lock-comment-face)
151
+ ("^From: \\(.*\\)$" 1 font-lock-warning-face)
152
+ ("^To: \\(.*\\)$" 1 font-lock-negation-char-face)
153
+ ("^Cc: \\(.*\\)$" 1 font-lock-constant-face)
154
+ ("^Subject: \\(.*\\)$" 1 font-lock-variable-name-face)
155
+ ("^ReceivedAt: \\(.*\\)$" 1 font-lock-type-face))))
156
+
157
+ (add-hook 'olm-message-mode-hook 'olm-message-mode-keyword)
158
+
159
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
160
+ ;;;
161
+ ;;; olm-summary
162
+ ;;;
163
+ (defvar olm-summary-mode-map nil)
164
+ (defvar olm-summary-mode-hook nil)
165
+ (defvar olm-summary-scroll-lines 12)
166
+
167
+ (unless olm-summary-mode-map
168
+ (setq olm-summary-mode-map (make-sparse-keymap))
169
+ (define-key olm-summary-mode-map "s" 'olm-scan)
170
+ (define-key olm-summary-mode-map "i" 'olm-summary-inc)
171
+ (define-key olm-summary-mode-map "q" 'olm-summary-quit)
172
+ (define-key olm-summary-mode-map "." 'olm-summary-open-message)
173
+ (define-key olm-summary-mode-map " " 'olm-summary-scroll-message-forward)
174
+ (define-key olm-summary-mode-map [backspace] 'olm-summary-scroll-message-backward)
175
+ (define-key olm-summary-mode-map "p" 'olm-summary-display-up)
176
+ (define-key olm-summary-mode-map "n" 'olm-summary-display-down)
177
+ (define-key olm-summary-mode-map "!" 'olm-summary-toggle-flag)
178
+ (define-key olm-summary-mode-map "w" 'olm-summary-write))
179
+
180
+ (defun olm-summary-inc
181
+ ()
182
+ (interactive)
183
+ (olm-sync)
184
+ (olm-scan))
185
+
186
+ (defun olm-summary-quit
187
+ ()
188
+ (interactive)
189
+ (delete-other-windows-vertically)
190
+ (quit-window))
191
+
192
+ (defun olm-summary-mode
193
+ ()
194
+ (interactive)
195
+ (use-local-map olm-summary-mode-map)
196
+ (setq major-mode 'olm-summary-mode)
197
+ (setq mode-name "Olm Summary")
198
+ (setq-local buffer-read-only t)
199
+ (setq-local truncate-lines t)
200
+ (setq-local line-move-ignore-invisible t)
201
+ (run-hooks 'olm-summary-mode-hook))
202
+
203
+ (defun olm-summary-open-message
204
+ ()
205
+ (interactive)
206
+ (delete-other-windows-vertically)
207
+ (let* ((ln0 (line-number-at-pos))
208
+ (msg-window (split-window-below 10))
209
+ (mbuf (olm-buf-message))
210
+ (entry-id (progn
211
+ (goto-line ln0)
212
+ (olm-mail-item-entry-id-at))))
213
+ (with-current-buffer mbuf
214
+ (setq-local buffer-file-coding-system 'utf-8-dos))
215
+ (olm-do-command (concat "Olm.message '" entry-id "'") mbuf)
216
+ (with-current-buffer mbuf
217
+ (olm-message-mode)
218
+ (goto-char (point-min)))
219
+ (set-window-buffer msg-window mbuf)
220
+ (olm-summary-mark-message-as-read)))
221
+
222
+ (defun olm-summary-mark-message-as-read
223
+ ()
224
+ (interactive)
225
+ (olm-do-command (concat "Olm.mark_as_read '"
226
+ (olm-mail-item-entry-id-at)
227
+ "'")))
228
+
229
+ (defun olm-summary-scroll-message-forward
230
+ ()
231
+ (interactive)
232
+ (recenter)
233
+ (scroll-other-window olm-summary-scroll-lines))
234
+
235
+ (defun olm-summary-scroll-message-backward
236
+ ()
237
+ (interactive)
238
+ (recenter)
239
+ (scroll-other-window (- olm-summary-scroll-lines)))
240
+
241
+ (defun olm-summary-display-up
242
+ ()
243
+ (interactive)
244
+ (forward-line -1)
245
+ (recenter)
246
+ (olm-summary-open-message))
247
+
248
+ (defun olm-summary-display-down
249
+ ()
250
+ (interactive)
251
+ (forward-line 1)
252
+ (recenter)
253
+ (olm-summary-open-message))
254
+
255
+ (defun olm-summary-toggle-flag
256
+ ()
257
+ (interactive)
258
+ (let ((n (line-number-at-pos)))
259
+ (olm-do-command (concat "Olm.toggle_task_flag '"
260
+ (olm-mail-item-entry-id-at)
261
+ "'"))
262
+ (olm-scan)
263
+ (goto-line n)))
264
+
265
+ (defun olm-summary-write
266
+ ()
267
+ (interactive)
268
+ (delete-other-windows-vertically)
269
+ (let ((buf (olm-buf-draft)))
270
+ (with-current-buffer buf
271
+ (olm-draft-mode))
272
+ (switch-to-buffer buf)))
273
+
274
+
275
+ ;;; A helper function for olm-summary-mode functions.
276
+ (defun olm-mail-item-entry-id-at
277
+ ()
278
+ (interactive)
279
+ (let ((n (line-number-at-pos)))
280
+ (with-current-buffer (olm-buf-entry-ids)
281
+ (goto-line n)
282
+ (buffer-substring (line-beginning-position) (line-end-position)))))
283
+
284
+
285
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
286
+ ;;;
287
+ ;;; olm-draft
288
+ ;;;
289
+ (defvar olm-draft-mode-map nil)
290
+ (defvar olm-draft-mode-hook nil)
291
+
292
+ (unless olm-draft-mode-map
293
+ (setq olm-draft-mode-map (make-sparse-keymap))
294
+ (define-key olm-draft-mode-map "\C-c\C-q" 'olm-draft-kill)
295
+ (define-key olm-draft-mode-map "\C-c\C-c" 'olm-draft-send-message)
296
+ (define-key olm-draft-mode-map "\C-c\C-s" 'olm-draft-save-message))
297
+
298
+ (defun olm-draft-mode
299
+ ()
300
+ (interactive)
301
+ (setq major-mode 'olm-draft-mode)
302
+ (setq mode-name "Olm Draft")
303
+ (setq-local line-move-ignore-invisible t)
304
+ (font-lock-mode 1)
305
+ (use-local-map olm-draft-mode-map)
306
+ (run-hooks 'olm-draft-mode-hook))
307
+
308
+ (add-hook 'olm-draft-mode-hook 'olm-message-mode-keyword)
309
+
310
+ (defun olm-draft-kill
311
+ ()
312
+ (interactive)
313
+ (kill-buffer)
314
+ (olm-scan))
315
+
316
+ (defun olm-draft-do-message
317
+ (command)
318
+ (call-process-region (point-min) (point-max)
319
+ "ruby" nil (get-buffer-create "*Messages*") nil
320
+ "-r" "rubygems" "-r" "olm" "-e" command))
321
+
322
+ (defun olm-draft-save-message
323
+ ()
324
+ (interactive)
325
+ (message "Olm: saving message ...")
326
+ (olm-draft-do-message "Olm.save_message")
327
+ (olm-draft-kill))
328
+
329
+ (defun olm-draft-send-message
330
+ ()
331
+ (interactive)
332
+ (message "Olm: sending message ...")
333
+ (olm-draft-do-message "Olm.send_message")
334
+ (olm-draft-kill))
data/olm.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'olm'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "olm"
9
+ spec.version = Olm::VERSION
10
+ spec.authors = ["Takahiro Noda"]
11
+ spec.email = ["takahiro.noda+rubygems@gmail.com"]
12
+ spec.summary = %q{A glue library to manipulate MS Outlook Mail.}
13
+ spec.description = %q{Olm is designed for reading and writing Outlook mail using the win32ole library and against Outlook 2007.}
14
+ spec.homepage = "https://github.com/tnoda/olm"
15
+ spec.license = "MIT"
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: olm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Takahiro Noda
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Olm is designed for reading and writing Outlook mail using the win32ole
42
+ library and against Outlook 2007.
43
+ email:
44
+ - takahiro.noda+rubygems@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - LICENSE
51
+ - README.md
52
+ - lib/olm.rb
53
+ - lib/olm/app.rb
54
+ - olm.el
55
+ - olm.gemspec
56
+ homepage: https://github.com/tnoda/olm
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.0.14
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: A glue library to manipulate MS Outlook Mail.
80
+ test_files: []