rounders 0.4.5 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3f98ea110319ff6380381b95442bc577a96b72e
4
- data.tar.gz: 0d800983e0a9a89bc3124e31c9297e99ba055826
3
+ metadata.gz: 2752f8f6df411ccdfab763a40e5d70a47b982bf2
4
+ data.tar.gz: e2bb3706d4475de78b346fb3a2a28f31e2ab5200
5
5
  SHA512:
6
- metadata.gz: bb16c6501200a51082357a7319459dc40b82da04e87ef1579c3184ddeb44f564aa41b39af41421d419ba1e19cea9dc9ca1425e052c54aa37161e928dad2ea1ed
7
- data.tar.gz: 8dd5e40604b54f1a26d11e0e18fa6eae03a92b23794a366339624fb43b0f27b14c8534fc15cb258049bc2292c74b047fe713aaa6b6778b2b49ef4c719b938d12
6
+ metadata.gz: 7e32a9c7aedd35edc6ff2ff06659ee73dd9cf9d2e03664679fc47ccb4b93e48ed26e9714b39784b96cc071b2afe6e9aeb806ef30a6a9225c3f06be1e09cb6d09
7
+ data.tar.gz: 3c8400e29ca690eebfaabe32d2d036946a0efaebd6adc05409d4f4acad86833aa0835a3670b0f53f1b1d9c7161c8d0100c30d396b61be4797256d34e11a8c30b
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  AllCops:
3
+ TargetRubyVersion: 2.3.4
3
4
  Exclude:
4
5
  - 'vendor/**/*'
5
6
  - 'spec/fixtures/**/*'
data/.travis.yml CHANGED
@@ -1,9 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.3
4
- - 2.4.0
3
+ - 2.3.4
4
+ - 2.4.1
5
5
  before_install:
6
- - gem install bundler -v 1.13.1
6
+ - gem install bundler -v 1.15.1
7
7
  - gem update --system
8
8
  env:
9
9
  - CI=true
@@ -5,11 +5,12 @@ module Rounders
5
5
  package_name 'rounders'
6
6
 
7
7
  desc 'start', 'Start the Rounders'
8
- method_option aliases: '-s'
9
- option :dotenv
8
+ option aliases: '-s'
9
+ method_option :dotenv, type: :boolean, default: false
10
+ method_option :daemon, type: :boolean, default: false
11
+ method_option :pid, type: :string
10
12
  def start
11
- rounder = Rounders::Rounder.new
12
- rounder.dotenv if options[:dotenv]
13
+ rounder = Rounders::Rounder.new(options)
13
14
  rounder.start
14
15
  end
15
16
 
@@ -0,0 +1,15 @@
1
+ require 'logger'
2
+
3
+ module Rounders
4
+ module Logger
5
+ class << self
6
+ def get_logger(level = :info, formatter = nil, io: STDERR)
7
+ logger = ::Logger.new(io)
8
+ logger.progname = 'rounders'
9
+ logger.level = level || :info
10
+ logger.formatter = formatter if formatter
11
+ logger
12
+ end
13
+ end
14
+ end
15
+ end
data/lib/rounders/mail.rb CHANGED
@@ -39,6 +39,7 @@ module Rounders
39
39
  :mime_parameters,
40
40
  :mime_type,
41
41
  :mime_version,
42
+ :multipart?,
42
43
  :multipart_report?,
43
44
  :part,
44
45
  :parts,
@@ -52,5 +53,19 @@ module Rounders
52
53
  def initialize(mail)
53
54
  @mail = mail
54
55
  end
56
+
57
+ private
58
+
59
+ def respond_to_missing?(method, *args, &block)
60
+ mail.respond_to?(method, *args, &block)
61
+ end
62
+
63
+ def method_missing(method, *args, &block)
64
+ if mail.respond_to?(method)
65
+ mail.public_send(method, *args, &block)
66
+ else
67
+ super
68
+ end
69
+ end
55
70
  end
56
71
  end
@@ -8,8 +8,11 @@ module Rounders
8
8
  end
9
9
 
10
10
  def match(mail)
11
- return if mail.body.nil?
12
- mail.body.to_s.force_encoding('UTF-8').match(pattern)
11
+ if mail.multipart?
12
+ mail.text_part.decoded.match(pattern)
13
+ else
14
+ mail.decoded.match(pattern)
15
+ end
13
16
  end
14
17
  end
15
18
  end
@@ -0,0 +1,20 @@
1
+ module Rounders
2
+ module Matchers
3
+ class Filename < Rounders::Matchers::Matcher
4
+ attr_reader :pattern
5
+
6
+ def initialize(pattern)
7
+ @pattern = pattern
8
+ end
9
+
10
+ def match(message)
11
+ return if message.attachment?
12
+ matches = message.attachments.map do |attachment|
13
+ match = attachment.filename.match(pattern)
14
+ match.nil? ? nil : attachment
15
+ end
16
+ matches.compact
17
+ end
18
+ end
19
+ end
20
+ end
@@ -29,10 +29,10 @@ module Rounders
29
29
  def load_plugins
30
30
  Pathname.glob("#{load_path}/*.rb").each do |plugin|
31
31
  begin
32
- puts "load #{plugin.expand_path}"
32
+ Rounders.logger.info "load #{plugin.expand_path}"
33
33
  require_relative plugin.expand_path
34
34
  rescue => e
35
- puts e
35
+ Rounders.logger.error e
36
36
  end
37
37
  end
38
38
  end
@@ -5,7 +5,7 @@ module Rounders
5
5
  setting :options, {}
6
6
  setting :mail_server_setting
7
7
  DEFAULT_FIND_OPTION = {
8
- keys: %w(NOT SEEN)
8
+ keys: %w[NOT SEEN]
9
9
  }.freeze
10
10
 
11
11
  def initialize(client: nil, options: {})
@@ -3,8 +3,10 @@ module Rounders
3
3
  DEFAULT_ENV = 'development'.freeze
4
4
  DEFAULT_INTERVAL = 10
5
5
 
6
- def dotenv
7
- Dotenv.load
6
+ attr_reader :options
7
+
8
+ def initialize(options = {})
9
+ @options = options
8
10
  end
9
11
 
10
12
  def start
@@ -17,10 +19,18 @@ module Rounders
17
19
  def bundle
18
20
  ::Bundler.require(:default, env)
19
21
  rescue ::Bundler::GemfileNotFound => e
20
- puts e
22
+ Rounders.logger.error e
21
23
  exit
22
24
  end
23
25
 
26
+ def daemon
27
+ Process.daemon(true, false) if options[:daemon]
28
+ end
29
+
30
+ def dotenv
31
+ Dotenv.load if options[:dotenv]
32
+ end
33
+
24
34
  def env
25
35
  ENV['ROUNDERS_ENV'] || DEFAULT_ENV
26
36
  end
@@ -42,6 +52,13 @@ module Rounders
42
52
  end
43
53
  end
44
54
 
55
+ def pid
56
+ path = options[:pid]
57
+ return if path.nil?
58
+ File.open(path, 'w') { |f| f.write(Process.pid) }
59
+ at_exit { File.unlink(path) }
60
+ end
61
+
45
62
  def round
46
63
  handle receive_mail
47
64
  end
@@ -51,6 +68,9 @@ module Rounders
51
68
  end
52
69
 
53
70
  def setup
71
+ daemon
72
+ dotenv
73
+ pid
54
74
  bundle
55
75
  load_config
56
76
  Rounders::Plugins::PluginLoader.load_plugins
@@ -1,3 +1,3 @@
1
1
  module Rounders
2
- VERSION = '0.4.5'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
data/lib/rounders.rb CHANGED
@@ -1,10 +1,23 @@
1
1
  require 'rounders/version'
2
2
 
3
+ require 'thor'
4
+ require 'thor/group'
5
+ require 'dry-configurable'
6
+ require 'forwardable'
7
+ require 'mail'
8
+ require 'dotenv'
9
+
10
+ require 'rounders/logger'
11
+ require 'rounders/util'
12
+
3
13
  module Rounders
4
14
  # Your code goes here...
5
15
  CONFIG_DIR_PATH = File.join(Dir.pwd, 'config').freeze
6
16
  APP_PATH = File.join(Dir.pwd, 'app').freeze
17
+
7
18
  class << self
19
+ attr_accessor :logger
20
+
8
21
  def handlers
9
22
  @_handlers ||= []
10
23
  end
@@ -21,16 +34,10 @@ module Rounders
21
34
  !Pathname(Rounders::APP_PATH).exist?
22
35
  end
23
36
  end
24
- end
25
37
 
26
- require 'thor'
27
- require 'thor/group'
28
- require 'dry-configurable'
29
- require 'forwardable'
30
- require 'mail'
31
- require 'dotenv'
38
+ self.logger = Logger.get_logger
39
+ end
32
40
 
33
- require 'rounders/util'
34
41
  require 'rounders/mail'
35
42
  require 'rounders/plugins/plugin_loader'
36
43
  require 'rounders/plugins/pluggable'
@@ -39,6 +46,7 @@ require 'rounders/matchers/subject'
39
46
  require 'rounders/matchers/body'
40
47
  require 'rounders/matchers/cc'
41
48
  require 'rounders/matchers/from'
49
+ require 'rounders/matchers/filename'
42
50
  require 'rounders/matchers/to'
43
51
  require 'rounders/handlers/handler'
44
52
  require 'rounders/commander'
data/rounders.gemspec CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency 'bundler', '~> 1.11'
23
- spec.add_development_dependency 'rake', '~> 11.2'
22
+ spec.add_development_dependency 'bundler'
23
+ spec.add_development_dependency 'rake'
24
24
  spec.add_development_dependency 'rspec', '~> 3.0'
25
25
  spec.add_development_dependency 'simplecov'
26
26
  spec.add_development_dependency 'coveralls'
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rounders
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - akira.takahashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-26 00:00:00.000000000 Z
11
+ date: 2017-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '11.2'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '11.2'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -287,9 +287,11 @@ files:
287
287
  - lib/rounders/generators/receiver/receiver_generator.rb
288
288
  - lib/rounders/generators/receiver/templates/%underscored_name%_receiver.rb.tt
289
289
  - lib/rounders/handlers/handler.rb
290
+ - lib/rounders/logger.rb
290
291
  - lib/rounders/mail.rb
291
292
  - lib/rounders/matchers/body.rb
292
293
  - lib/rounders/matchers/cc.rb
294
+ - lib/rounders/matchers/filename.rb
293
295
  - lib/rounders/matchers/from.rb
294
296
  - lib/rounders/matchers/matcher.rb
295
297
  - lib/rounders/matchers/subject.rb