mailhandler 1.0.20 → 1.0.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ad403b028e0aaa2b38fe06175974beff76015b8
4
- data.tar.gz: d3c7387992cb45fdad2d4e2d8de4bbffb9f77edd
3
+ metadata.gz: aed334966f4daa868a8533ea9e16b841b68f02b6
4
+ data.tar.gz: 69bc39be92c6408806830d8afead62ebd08080da
5
5
  SHA512:
6
- metadata.gz: 76bf22bb22a36ee53fd8a67356b9192f0e6ecb491816b55fbfaab48bbd4bbdbc1d85f4e0374852e6a65960badc025101cb17121995acdbf049c5cc5329bf2c31
7
- data.tar.gz: 097b7e17cef92ecefdfd69b431efcb71ce3d76fc269bbac299c8d4ef370910119e0c3688b190ee891888ffde76ceebd22d91b46a20b73fbba4b8f6a1d7405efa
6
+ metadata.gz: 793f2480e28e3a8c9487cd7bdd3b5dade4d40d72306d5056438227711703a538635a11c72ff162578630d699d3ed4da51822ca30bfdd1f10b69e7024f52e2f5c
7
+ data.tar.gz: 60ea9caf4a6fe6be1efd66a1267cf05b54318a7a341f32aea1f23a0d8ea3971a443dbcc7d06aa4b6cd992f0acdba495ee53a7db65f11def31acdbeb68e044e3d
@@ -49,7 +49,8 @@ module MailHandler
49
49
  :since,
50
50
  :by_recipient,
51
51
  :count,
52
- :archive
52
+ :archive,
53
+ :fast_check
53
54
 
54
55
  ]
55
56
 
@@ -1,3 +1,5 @@
1
+ require 'fileutils'
2
+
1
3
  # Base filtering class, which is used for reading list of all files based on passed pattern.
2
4
  # Patterns to be used can be checked here: http://ruby-doc.org/core-1.9.3/Dir.html
3
5
 
@@ -0,0 +1,85 @@
1
+ require_relative '../base'
2
+ require_relative '../../../errors'
3
+
4
+ module MailHandler
5
+
6
+ module Receiving
7
+
8
+ class FileList
9
+
10
+ module Filter
11
+
12
+ class Base
13
+
14
+ attr_accessor :files, :fast_check
15
+
16
+ def initialize(files)
17
+
18
+ @files=files
19
+
20
+ end
21
+
22
+ def get
23
+
24
+ files.select { |file| ignore_exception { meets_expectation?(file) } }
25
+
26
+ end
27
+
28
+ protected
29
+
30
+ def meet_expectation?(file)
31
+
32
+ raise MailHandler::InterfaceError, 'Interface not implemented.'
33
+
34
+ end
35
+
36
+ def read_file(file)
37
+
38
+ File.read(file)
39
+
40
+ end
41
+
42
+ private
43
+
44
+ def ignore_exception
45
+
46
+ begin
47
+
48
+ yield
49
+
50
+ rescue
51
+
52
+ false
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
60
+ class ByDate < Base
61
+
62
+ def initialize(files, date)
63
+
64
+ super(files)
65
+ @date = date
66
+
67
+ end
68
+
69
+ private
70
+
71
+ def meets_expectation?(file)
72
+
73
+ (File.exists? file)? (File.ctime file) > @date : false
74
+
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,130 @@
1
+ require 'mail'
2
+ require_relative 'base'
3
+
4
+ module MailHandler
5
+
6
+ module Receiving
7
+
8
+ class FileList
9
+
10
+ module Filter
11
+
12
+ # filtering file content by its email properties
13
+ class Email < Base
14
+
15
+ def initialize(files)
16
+
17
+ @fast_check=true
18
+ super(files)
19
+
20
+ end
21
+
22
+ protected
23
+
24
+ def read_email_from_file(file)
25
+
26
+ Mail.read(file)
27
+
28
+ end
29
+
30
+ def meets_expectation?(file)
31
+
32
+ # fast content checks search for content by file reading
33
+ # slow content checks search for content by reconstructing email from file and then searching for content
34
+ (fast_check)? check_content_fast(file) : check_content_slow(file)
35
+
36
+ end
37
+
38
+ def check_content_fast(file)
39
+
40
+ raise MailHandler::InterfaceError, 'Interface not implemented.'
41
+
42
+ end
43
+
44
+ def check_content_slow(file)
45
+
46
+ raise MailHandler::InterfaceError, 'Interface not implemented.'
47
+
48
+ end
49
+
50
+ end
51
+
52
+ class ByEmailContent < Email
53
+
54
+ def initialize(files, content)
55
+
56
+ super(files)
57
+ @content = content
58
+
59
+ end
60
+
61
+ private
62
+
63
+ def check_content_fast(file)
64
+
65
+ read_file(file).include? @content
66
+
67
+ end
68
+
69
+ def check_content_slow(file)
70
+
71
+ email = read_email_from_file(file)
72
+
73
+ if email.multipart?
74
+
75
+ email.text_part.decoded.include?(@content) || email.html_part.decoded.include?(@content)
76
+
77
+ else
78
+
79
+ email.decoded.include? @content
80
+
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+
87
+ class ByEmailSubject < ByEmailContent
88
+
89
+ private
90
+
91
+ def check_content_fast(file)
92
+
93
+ read_file(file).include? @content
94
+
95
+ end
96
+
97
+ def check_content_slow(file)
98
+
99
+ read_email_from_file(file).subject.to_s.include? @content
100
+
101
+ end
102
+
103
+ end
104
+
105
+ class ByEmailRecipient < Email
106
+
107
+ def initialize(files, recipient)
108
+
109
+ super(files)
110
+ @recipient = recipient
111
+
112
+ end
113
+
114
+ private
115
+
116
+ def meets_expectation?(file)
117
+
118
+ read_email_from_file(file)[@recipient.keys.first].to_s.include? @recipient.values.first
119
+
120
+ end
121
+
122
+ end
123
+
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
130
+ end
@@ -1,7 +1,9 @@
1
1
  require 'mail'
2
2
  require_relative 'base.rb'
3
3
  require_relative '../errors'
4
- require_relative 'filelist/filter.rb'
4
+ require_relative 'filelist/base.rb'
5
+ require_relative 'filelist/filter/base.rb'
6
+ require_relative 'filelist/filter/email.rb'
5
7
 
6
8
  module MailHandler
7
9
 
@@ -64,15 +66,26 @@ module MailHandler
64
66
  def find_files(options)
65
67
 
66
68
  file_list = FileList.new
67
- files = file_list.get(search_pattern)
69
+ files = filter_files(file_list.get(search_pattern), options)
70
+ file_list.sort(files)
71
+
72
+ end
73
+
74
+ def filter_files(files, options)
68
75
 
69
76
  options.each do |key, value|
70
77
 
71
- files = FILE_SEARCH_CLASSES[key].new(files, value).get if FILE_SEARCH_CLASSES[key] != nil
78
+ if FILE_SEARCH_CLASSES[key] != nil
79
+
80
+ filter = FILE_SEARCH_CLASSES[key].new(files, value)
81
+ filter.fast_check = options[:fast_check] unless options[:fast_check].nil?
82
+ files = filter.get
83
+
84
+ end
72
85
 
73
86
  end
74
87
 
75
- file_list.sort(files)
88
+ files
76
89
 
77
90
  end
78
91
 
@@ -1,5 +1,5 @@
1
1
  module MailHandler
2
2
 
3
- VERSION = '1.0.20'
3
+ VERSION = '1.0.21'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailhandler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.20
4
+ version: 1.0.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Balos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-01 00:00:00.000000000 Z
11
+ date: 2016-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mail
@@ -63,7 +63,8 @@ files:
63
63
  - lib/mailhandler/receiver.rb
64
64
  - lib/mailhandler/receiving/base.rb
65
65
  - lib/mailhandler/receiving/filelist/base.rb
66
- - lib/mailhandler/receiving/filelist/filter.rb
66
+ - lib/mailhandler/receiving/filelist/filter/base.rb
67
+ - lib/mailhandler/receiving/filelist/filter/email.rb
67
68
  - lib/mailhandler/receiving/folder.rb
68
69
  - lib/mailhandler/receiving/imap.rb
69
70
  - lib/mailhandler/receiving/notification/console.rb
@@ -1,147 +0,0 @@
1
- require 'fileutils'
2
- require_relative 'base'
3
-
4
- module MailHandler
5
-
6
- module Receiving
7
-
8
- class FileList
9
-
10
- module Filter
11
-
12
- class Base
13
-
14
- attr_accessor :files
15
-
16
- def initialize(files)
17
-
18
- @files=files
19
-
20
- end
21
-
22
- def get
23
-
24
- files.select { |file| ignore_exception { meets_expectation?(file) } }
25
-
26
- end
27
-
28
- protected
29
-
30
- def meet_expectation?(file)
31
-
32
- raise StandardError, 'Needs to be implemented.'
33
-
34
- end
35
-
36
- def read_file(file)
37
-
38
- # TODO: add UTF support
39
- # string need to be read and converted
40
- # read_email(file_content).subject.include?(@content) - 10x slower, use something else for reading
41
- # Mail::Encodings.unquote_and_convert_to(content, "UTF-8") - 6x slower
42
- File.read(file)
43
-
44
- end
45
-
46
- private
47
-
48
- def ignore_exception
49
-
50
- begin
51
-
52
- yield
53
-
54
- rescue
55
-
56
- false
57
-
58
- end
59
-
60
- end
61
-
62
- end
63
-
64
- class ByDate < Base
65
-
66
- def initialize(files, date)
67
-
68
- super(files)
69
- @date = date
70
-
71
- end
72
-
73
- private
74
-
75
- def meets_expectation?(file)
76
-
77
- (File.exists? file)? (File.ctime file) > @date : false
78
-
79
- end
80
-
81
- end
82
-
83
- class Email < Base
84
-
85
- def initialize(files)
86
-
87
- super(files)
88
-
89
- end
90
-
91
- protected
92
-
93
- def read_email_from_file(file)
94
-
95
- Mail.read(file)
96
-
97
- end
98
-
99
- end
100
-
101
- class ByEmailContent < Email
102
-
103
- def initialize(files, content)
104
-
105
- super(files)
106
- @content = content
107
-
108
- end
109
-
110
- protected
111
-
112
- def meets_expectation?(file)
113
-
114
- read_file(file).include? @content
115
-
116
- end
117
-
118
- end
119
-
120
- class ByEmailSubject < ByEmailContent ; end
121
-
122
- class ByEmailRecipient < Email
123
-
124
- def initialize(files, recipient)
125
-
126
- super(files)
127
- @recipient = recipient
128
-
129
- end
130
-
131
- private
132
-
133
- def meets_expectation?(file)
134
-
135
- read_email_from_file(file)[@recipient.keys.first].to_s.include? @recipient.values.first
136
-
137
- end
138
-
139
- end
140
-
141
- end
142
-
143
- end
144
-
145
- end
146
-
147
- end