imap_guard 0.0.3 → 0.0.4
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 +7 -0
- data/.ruby-version +1 -1
- data/.travis.yml +3 -2
- data/README.md +14 -4
- data/examples/example.rb +43 -0
- data/imap_guard.gemspec +2 -1
- data/lib/imap_guard/guard.rb +19 -13
- data/lib/imap_guard/query.rb +50 -17
- data/lib/imap_guard/version.rb +1 -1
- data/spec/imap_guard/guard_spec.rb +4 -2
- data/spec/imap_guard/query_spec.rb +48 -4
- metadata +49 -62
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d95cc42f451c9e8d2230c9ed670c5b5cb5f42d20
|
4
|
+
data.tar.gz: 22a08ac744d604430aa795cf156f8b0ea899a9fc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9a7fe8edceec8be75626f91f69b8228bd1e2f4205d4fe52f742cf5bea0b828f79851e3ce9b843c1941eaefe63092541204c61f8c225bcbdcf54dfc3e7d29c1b7
|
7
|
+
data.tar.gz: 47a6ba91f840a30ad8164a84593f3fdbd91fdf5c46bd798a74f1af8926152b66e0c2af02ddfcebfc3f2166fe04dd6f843fe04cf6213266daba6822f4e79e7fc2
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
2.1.0
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# ImapGuard [](https://travis-ci.org/infertux/imap_guard) [](https://gemnasium.com/infertux/imap_guard) [](https://codeclimate.com/github/infertux/imap_guard)
|
2
2
|
|
3
|
-
A guard for your IMAP mailboxes
|
3
|
+
**A guard for your IMAP mailboxes.**
|
4
|
+
|
5
|
+
* [Source Code](https://github.com/infertux/imap_guard "Source Code on Github")
|
6
|
+
* [Bug Tracker](https://github.com/infertux/imap_guard/issues "Bug Tracker on Github")
|
7
|
+
* [API documentation](http://rubydoc.info/gems/imap_guard/frames "API Documentation on Rubydoc")
|
8
|
+
* [Rubygem](https://rubygems.org/gems/imap_guard "ImapGuard on Rubygems")
|
9
|
+
* [Continuous Integration](https://travis-ci.org/infertux/imap_guard "ImapGuard on Travis-CI")
|
10
|
+
* [Dependencies](https://gemnasium.com/infertux/imap_guard "ImapGuard dependencies on Gemnasium")
|
4
11
|
|
5
12
|
ImapGuard connects to your IMAP server and processes your emails.
|
6
13
|
You can finely pick them thanks to advanced search queries and Ruby blocks.
|
@@ -16,6 +23,9 @@ It can be used by a disposable script to clean things up or with a cron job to k
|
|
16
23
|
|
17
24
|
## Usage
|
18
25
|
|
26
|
+
Read below for detailed explanations.
|
27
|
+
If you prefer a quick overview, you can take a look at [this example](https://github.com/infertux/imap_guard/blob/master/examples/example.rb).
|
28
|
+
|
19
29
|
Example initialization:
|
20
30
|
|
21
31
|
```ruby
|
@@ -29,16 +39,16 @@ SETTINGS = {
|
|
29
39
|
read_only: true # don't perform any modification aka dry-run mode
|
30
40
|
}
|
31
41
|
|
32
|
-
guard =
|
42
|
+
guard = ImapGuard::Guard.new SETTINGS
|
33
43
|
guard.login # authenticate the user
|
34
44
|
guard.select 'INBOX.ops' # select the mailbox
|
35
45
|
```
|
36
46
|
|
37
47
|
IMAP search query syntax can be a bit tricky.
|
38
|
-
`
|
48
|
+
`ImapGuard::Query` can help you to build queries with a simple Ruby DSL:
|
39
49
|
|
40
50
|
```ruby
|
41
|
-
base_query =
|
51
|
+
base_query = ImapGuard::Query.new.unflagged.unanswered.seen.freeze
|
42
52
|
query = base_query.dup.before(7).subject("abc").from("root")
|
43
53
|
p query #=> ["UNFLAGGED", "UNANSWERED", "SEEN", "BEFORE", "13-Mar-2013", "SUBJECT", "abc", "FROM", "root"]
|
44
54
|
guard.delete query # will delete every emails which match this query
|
data/examples/example.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'imap_guard'
|
4
|
+
|
5
|
+
SETTINGS = {
|
6
|
+
host: 'imap.googlemail.com',
|
7
|
+
port: 993,
|
8
|
+
username: 'you@gmail.com',
|
9
|
+
password: 'your_pass',
|
10
|
+
}
|
11
|
+
|
12
|
+
settings = SETTINGS.merge({ read_only: false })
|
13
|
+
base_query = ImapGuard::Query.new.unflagged.unanswered.freeze
|
14
|
+
guard = ImapGuard::Guard.new settings
|
15
|
+
# guard.debug = ->(mail) { print "#{mail.subject}: " }
|
16
|
+
guard.login
|
17
|
+
|
18
|
+
guard.select 'INBOX'
|
19
|
+
|
20
|
+
# Github
|
21
|
+
%w(github.com notifications@travis-ci.org app@gemnasium.com).map do |from|
|
22
|
+
base_query.dup.from(from)
|
23
|
+
end.each do |query|
|
24
|
+
guard.move query, 'INBOX.Github'
|
25
|
+
end
|
26
|
+
|
27
|
+
# To Do
|
28
|
+
guard.move base_query.dup.from("me").to("me"), 'INBOX.TODO'
|
29
|
+
|
30
|
+
# Ops
|
31
|
+
guard.select 'INBOX.Ops'
|
32
|
+
query = base_query.dup.seen
|
33
|
+
guard.delete query.dup.subject("monit alert -- ").before(7)
|
34
|
+
guard.delete query.dup.subject("CRON-APT completed on ").before(3)
|
35
|
+
guard.delete query.dup.subject("Logwatch for ").before(7)
|
36
|
+
guard.select 'INBOX'
|
37
|
+
|
38
|
+
# Uni
|
39
|
+
guard.move base_query.dup.or.from("uni.tld").to("uni.tld"), 'INBOX.Uni'
|
40
|
+
|
41
|
+
# Bye!
|
42
|
+
guard.disconnect
|
43
|
+
|
data/imap_guard.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency 'mail', '~> 2.5.3'
|
22
|
-
spec.add_dependency '
|
22
|
+
spec.add_dependency 'term-ansicolor', '~> 1.2.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
spec.add_development_dependency 'rake'
|
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency 'rb-inotify'
|
30
30
|
spec.add_development_dependency 'cane'
|
31
31
|
spec.add_development_dependency 'yard'
|
32
|
+
spec.add_development_dependency 'redcarpet' # for yardoc
|
32
33
|
end
|
data/lib/imap_guard/guard.rb
CHANGED
@@ -1,18 +1,27 @@
|
|
1
1
|
require 'net/imap'
|
2
2
|
require 'ostruct'
|
3
3
|
require 'mail'
|
4
|
-
require '
|
4
|
+
require 'term/ansicolor'
|
5
|
+
String.send(:include, Term::ANSIColor)
|
6
|
+
Term::ANSIColor::coloring = STDOUT.isatty
|
5
7
|
|
6
|
-
module
|
8
|
+
module ImapGuard
|
7
9
|
# Guard allows you to process your mailboxes.
|
8
10
|
class Guard
|
9
|
-
#
|
11
|
+
# List of required settings
|
12
|
+
REQUIRED_SETTINGS = [:host, :port, :username, :password]
|
13
|
+
|
14
|
+
# List of optional settings
|
15
|
+
OPTIONAL_SETTINGS = [:read_only, :verbose]
|
16
|
+
|
17
|
+
# @return [Proc, nil] Matched emails are passed to this debug lambda if present
|
10
18
|
attr_accessor :debug
|
11
19
|
|
12
|
-
# @
|
20
|
+
# @note The settings are frozen
|
21
|
+
# @return [OpenStruct] ImapGuard settings
|
13
22
|
attr_reader :settings
|
14
23
|
|
15
|
-
# @return [String] Currently selected mailbox
|
24
|
+
# @return [String, nil] Currently selected mailbox
|
16
25
|
attr_reader :mailbox
|
17
26
|
|
18
27
|
def initialize settings
|
@@ -29,7 +38,6 @@ module IMAPGuard
|
|
29
38
|
end
|
30
39
|
|
31
40
|
# Selects a mailbox (folder)
|
32
|
-
# @see {settings.read_only}
|
33
41
|
# @return [void]
|
34
42
|
def select mailbox
|
35
43
|
if @settings.read_only
|
@@ -72,7 +80,7 @@ module IMAPGuard
|
|
72
80
|
process query, operation, &filter
|
73
81
|
end
|
74
82
|
|
75
|
-
# @return [Array] Sorted list of all mailboxes
|
83
|
+
# @return [Array<String>] Sorted list of all mailboxes
|
76
84
|
def list
|
77
85
|
@imap.list("", "*").map(&:name).sort
|
78
86
|
end
|
@@ -138,7 +146,7 @@ module IMAPGuard
|
|
138
146
|
|
139
147
|
def search query
|
140
148
|
unless [Array, String].any? { |type| query.is_a? type }
|
141
|
-
raise TypeError, "
|
149
|
+
raise TypeError, "Query must be either a string holding the entire search string, or a single-dimension array of search keywords and arguments."
|
142
150
|
end
|
143
151
|
|
144
152
|
messages = @imap.search query
|
@@ -161,16 +169,14 @@ module IMAPGuard
|
|
161
169
|
end
|
162
170
|
|
163
171
|
def settings= settings
|
164
|
-
|
165
|
-
missing = required - settings.keys
|
172
|
+
missing = REQUIRED_SETTINGS - settings.keys
|
166
173
|
raise ArgumentError, "Missing settings: #{missing}" unless missing.empty?
|
167
174
|
|
168
|
-
|
169
|
-
unknown = settings.keys - required - optional
|
175
|
+
unknown = settings.keys - REQUIRED_SETTINGS - OPTIONAL_SETTINGS
|
170
176
|
raise ArgumentError, "Unknown settings: #{unknown}" unless unknown.empty?
|
171
177
|
|
172
178
|
@settings = OpenStruct.new(settings).freeze
|
173
|
-
puts "DRY-RUN MODE ENABLED".yellow.bold.
|
179
|
+
puts "DRY-RUN MODE ENABLED".yellow.bold.negative if @settings.read_only
|
174
180
|
end
|
175
181
|
end
|
176
182
|
end
|
data/lib/imap_guard/query.rb
CHANGED
@@ -1,49 +1,82 @@
|
|
1
|
-
module
|
1
|
+
module ImapGuard
|
2
2
|
# Query is a neat DSL to help you generate IMAP search queries.
|
3
|
+
# @note All methods return self so they can be chained.
|
3
4
|
class Query < Array
|
4
|
-
# Messages that have the
|
5
|
-
# @return [
|
5
|
+
# Messages that have the +\Seen+ flag set.
|
6
|
+
# @return [self]
|
6
7
|
def seen
|
7
8
|
self << 'SEEN'
|
8
9
|
end
|
9
10
|
|
10
|
-
# Messages that do not have the
|
11
|
-
# @return [
|
11
|
+
# Messages that do not have the +\Answered+ flag set.
|
12
|
+
# @return [self]
|
12
13
|
def unanswered
|
13
14
|
self << 'UNANSWERED'
|
14
15
|
end
|
15
16
|
|
16
|
-
# Messages that do not have the
|
17
|
-
# @return [
|
17
|
+
# Messages that do not have the +\Flagged+ flag set.
|
18
|
+
# @return [self]
|
18
19
|
def unflagged
|
19
20
|
self << 'UNFLAGGED'
|
20
21
|
end
|
21
22
|
|
23
|
+
# Messages with the +\Deleted+ flag set.
|
24
|
+
# @return [self]
|
25
|
+
def deleted
|
26
|
+
self << 'DELETED'
|
27
|
+
end
|
28
|
+
|
22
29
|
# Messages that match either search key.
|
30
|
+
# @param search_key1 Optional search key to pass to +OR+
|
31
|
+
# @param search_key2 Optional search key to pass to +OR+
|
23
32
|
# @note Reverse polish notation is expected,
|
24
33
|
# i.e. OR <search-key1> <search-key2>
|
25
|
-
# @
|
26
|
-
|
34
|
+
# @example
|
35
|
+
# or.unanswered.unflagged #=> ["OR", "UNANSWERED", "UNFLAGGED"]
|
36
|
+
# or(:unanswered, :unflagged) #=> ["OR", "UNANSWERED", "UNFLAGGED"]
|
37
|
+
# @return [self]
|
38
|
+
def or search_key1 = nil, search_key2 = nil
|
27
39
|
self << 'OR'
|
40
|
+
|
41
|
+
if search_key1 and search_key2
|
42
|
+
send(search_key1)
|
43
|
+
send(search_key2)
|
44
|
+
elsif search_key1 or search_key2
|
45
|
+
raise ArgumentError, "You must give either zero or two arguments."
|
46
|
+
end
|
47
|
+
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
# Messages that do not match the specified search key.
|
52
|
+
# @param search_key Optional search key to pass to +NOT+
|
53
|
+
# @example
|
54
|
+
# not.deleted #=> ["NOT", "DELETED"]
|
55
|
+
# not(:deleted) #=> ["NOT", "DELETED"]
|
56
|
+
# @return [self]
|
57
|
+
def not search_key = nil
|
58
|
+
self << 'NOT'
|
59
|
+
send(search_key) if search_key
|
60
|
+
self
|
28
61
|
end
|
29
62
|
|
30
63
|
# Messages that contain the specified string in the envelope
|
31
64
|
# structure's SUBJECT field.
|
32
|
-
# @return [
|
65
|
+
# @return [self]
|
33
66
|
def subject string
|
34
67
|
self << 'SUBJECT' << string
|
35
68
|
end
|
36
69
|
|
37
70
|
# Messages that contain the specified string in the envelope
|
38
71
|
# structure's FROM field.
|
39
|
-
# @return [
|
72
|
+
# @return [self]
|
40
73
|
def from string
|
41
74
|
self << 'FROM' << string
|
42
75
|
end
|
43
76
|
|
44
77
|
# Messages that contain the specified string in the envelope
|
45
78
|
# structure's TO field.
|
46
|
-
# @return [
|
79
|
+
# @return [self]
|
47
80
|
def to string
|
48
81
|
self << 'TO' << string
|
49
82
|
end
|
@@ -51,10 +84,10 @@ module IMAPGuard
|
|
51
84
|
# Messages whose internal date (disregarding time and timezone)
|
52
85
|
# is earlier than the specified date.
|
53
86
|
# @param date Depending of its type:
|
54
|
-
# - String: uses it as is
|
55
|
-
# - Fixnum: _n_ days before today
|
56
|
-
# - Date: uses this date
|
57
|
-
# @return [
|
87
|
+
# - [String]: uses it as is
|
88
|
+
# - [Fixnum]: _n_ days before today
|
89
|
+
# - [Date]: uses this date
|
90
|
+
# @return [self]
|
58
91
|
def before date
|
59
92
|
case date
|
60
93
|
when String
|
@@ -64,7 +97,7 @@ module IMAPGuard
|
|
64
97
|
when Date
|
65
98
|
date = date.strftime '%e-%b-%Y'
|
66
99
|
else
|
67
|
-
raise ArgumentError, "#{date.inspect} is invalid"
|
100
|
+
raise ArgumentError, "#{date.inspect} is invalid."
|
68
101
|
end
|
69
102
|
|
70
103
|
self << 'BEFORE' << date
|
data/lib/imap_guard/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
module
|
3
|
+
module ImapGuard
|
4
4
|
describe Guard do
|
5
5
|
before do
|
6
6
|
$stdout = StringIO.new # mute stdout - comment to debug
|
@@ -216,9 +216,11 @@ module IMAPGuard
|
|
216
216
|
it "freezes the settings" do
|
217
217
|
guard = Guard.new(settings)
|
218
218
|
|
219
|
+
exception = (RUBY_VERSION >= "2.1.0" ? RuntimeError : TypeError)
|
220
|
+
|
219
221
|
expect {
|
220
222
|
guard.settings.host = 'example.net'
|
221
|
-
}.to raise_error(
|
223
|
+
}.to raise_error(exception, /frozen/)
|
222
224
|
end
|
223
225
|
|
224
226
|
it "raises ArgumentError if any required key is missing" do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
module
|
3
|
+
module ImapGuard
|
4
4
|
describe Query do
|
5
5
|
describe "#initialize" do
|
6
6
|
it { should be_empty }
|
@@ -27,10 +27,38 @@ module IMAPGuard
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
describe "#deleted" do
|
31
|
+
it "adds 'DELETED'" do
|
32
|
+
subject.deleted
|
33
|
+
subject.last.should eq 'DELETED'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
30
37
|
describe "#or" do
|
31
|
-
|
32
|
-
|
33
|
-
|
38
|
+
context "without a search key" do
|
39
|
+
it "adds 'OR'" do
|
40
|
+
subject.or
|
41
|
+
subject.last.should eq 'OR'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "with search keys" do
|
46
|
+
it "adds 'OR UNANSWERED UNFLAGGED '" do
|
47
|
+
subject.or(:unanswered, :unflagged)
|
48
|
+
subject.last(3).should eq ["OR", "UNANSWERED", "UNFLAGGED"]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with only one non-nil search key" do
|
53
|
+
it "raises ArgumentError" do
|
54
|
+
expect {
|
55
|
+
subject.or(:whatever)
|
56
|
+
}.to raise_error(ArgumentError)
|
57
|
+
|
58
|
+
expect {
|
59
|
+
subject.or(nil, :whatever)
|
60
|
+
}.to raise_error(ArgumentError)
|
61
|
+
end
|
34
62
|
end
|
35
63
|
end
|
36
64
|
|
@@ -55,6 +83,22 @@ module IMAPGuard
|
|
55
83
|
end
|
56
84
|
end
|
57
85
|
|
86
|
+
describe "#not" do
|
87
|
+
context "without a search key" do
|
88
|
+
it "adds 'NOT'" do
|
89
|
+
subject.not.deleted
|
90
|
+
subject.last(2).should eq ["NOT", "DELETED"]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "with a search key" do
|
95
|
+
it "adds 'NOT DELETED'" do
|
96
|
+
subject.not(:deleted)
|
97
|
+
subject.last(2).should eq ["NOT", "DELETED"]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
58
102
|
describe "#before" do
|
59
103
|
context "when I pass 'nil' as an argument" do
|
60
104
|
it "raises" do
|
metadata
CHANGED
@@ -1,174 +1,167 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imap_guard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Cédric Félizard
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: mail
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 2.5.3
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 2.5.3
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
28
|
+
name: term-ansicolor
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: 1.2.2
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: 1.2.2
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.3'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.3'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: rspec
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: guard-rspec
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - ">="
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: rb-inotify
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - ">="
|
132
116
|
- !ruby/object:Gem::Version
|
133
117
|
version: '0'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - ">="
|
140
123
|
- !ruby/object:Gem::Version
|
141
124
|
version: '0'
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: cane
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
|
-
- -
|
129
|
+
- - ">="
|
148
130
|
- !ruby/object:Gem::Version
|
149
131
|
version: '0'
|
150
132
|
type: :development
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
|
-
- -
|
136
|
+
- - ">="
|
156
137
|
- !ruby/object:Gem::Version
|
157
138
|
version: '0'
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: yard
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
|
-
- -
|
143
|
+
- - ">="
|
164
144
|
- !ruby/object:Gem::Version
|
165
145
|
version: '0'
|
166
146
|
type: :development
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
|
-
- -
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: redcarpet
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
172
165
|
- !ruby/object:Gem::Version
|
173
166
|
version: '0'
|
174
167
|
description: A guard for your IMAP server
|
@@ -178,15 +171,16 @@ executables: []
|
|
178
171
|
extensions: []
|
179
172
|
extra_rdoc_files: []
|
180
173
|
files:
|
181
|
-
- .gitignore
|
182
|
-
- .rspec
|
183
|
-
- .ruby-version
|
184
|
-
- .travis.yml
|
174
|
+
- ".gitignore"
|
175
|
+
- ".rspec"
|
176
|
+
- ".ruby-version"
|
177
|
+
- ".travis.yml"
|
185
178
|
- Gemfile
|
186
179
|
- Guardfile
|
187
180
|
- LICENSE.txt
|
188
181
|
- README.md
|
189
182
|
- Rakefile
|
183
|
+
- examples/example.rb
|
190
184
|
- imap_guard.gemspec
|
191
185
|
- lib/imap_guard.rb
|
192
186
|
- lib/imap_guard/guard.rb
|
@@ -198,33 +192,26 @@ files:
|
|
198
192
|
homepage: https://github.com/infertux/imap_guard
|
199
193
|
licenses:
|
200
194
|
- MIT
|
195
|
+
metadata: {}
|
201
196
|
post_install_message:
|
202
197
|
rdoc_options: []
|
203
198
|
require_paths:
|
204
199
|
- lib
|
205
200
|
required_ruby_version: !ruby/object:Gem::Requirement
|
206
|
-
none: false
|
207
201
|
requirements:
|
208
|
-
- -
|
202
|
+
- - ">="
|
209
203
|
- !ruby/object:Gem::Version
|
210
204
|
version: '0'
|
211
|
-
segments:
|
212
|
-
- 0
|
213
|
-
hash: 903698273
|
214
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
215
|
-
none: false
|
216
206
|
requirements:
|
217
|
-
- -
|
207
|
+
- - ">="
|
218
208
|
- !ruby/object:Gem::Version
|
219
209
|
version: '0'
|
220
|
-
segments:
|
221
|
-
- 0
|
222
|
-
hash: 903698273
|
223
210
|
requirements: []
|
224
211
|
rubyforge_project:
|
225
|
-
rubygems_version:
|
212
|
+
rubygems_version: 2.2.0
|
226
213
|
signing_key:
|
227
|
-
specification_version:
|
214
|
+
specification_version: 4
|
228
215
|
summary: A guard for your IMAP server
|
229
216
|
test_files:
|
230
217
|
- spec/imap_guard/guard_spec.rb
|