olm 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.
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: []