mailman 0.6.0 → 0.7.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cdeb5aa44e41f7d2b6d9b4652ab467d26a160699
4
+ data.tar.gz: 4ee7a90bc537c2f38b300227c50e0f0780dd956b
5
+ SHA512:
6
+ metadata.gz: 569481ea8e5df1b94f809c93af6071303c4c22093c3fcaf4721c0924b8c6d719320c4853a8dd93ca243877f14f2aa1da843f050080a04155e4708febb64eeeb9
7
+ data.tar.gz: 78382077fab9d79e6088d85e693f99ff59b8a58b5e9d5d7ec64bd30aa02a7986924f4f2a3535e602fc5735cc0185b0601e596f569b5b6da69d8d16adc9b1bcf1
@@ -0,0 +1,108 @@
1
+ ## 0.7.0 (August 11, 2013)
2
+
3
+ Features
4
+
5
+ - Configurable POP3 open_timeout and read_timeout values
6
+ - Middleware support
7
+ - CLI runner tool
8
+ - Multiple configurations
9
+
10
+
11
+ ## 0.6.0 (January 12, 2013)
12
+
13
+ Features
14
+
15
+ - IMAP: Mark messages as seen instead of deleting them (see [5b6aef0](https://github.com/titanous/mailman/commit/5b6aef0163f0f28c790abf3083cbda7cbc9cc13f) for details on how revert to the previous behaviour)
16
+
17
+ Bugfixes
18
+
19
+ - IMAP: Don't only process recent messages
20
+
21
+
22
+ ## 0.5.4 (January 3, 2013)
23
+
24
+ Bufixes
25
+
26
+ - Fix multipart message matching
27
+ - Fix Rails environment require
28
+ - Speed up maildir processing
29
+
30
+
31
+ ## 0.5.3 (August 30, 2012)
32
+
33
+ Features
34
+
35
+ - Add `watch_maildir` config flag that allows a single run against a maildir
36
+ - Add IMAP SSL and non-inbox folder support
37
+
38
+
39
+ ## 0.5.2 (June 13, 2012)
40
+
41
+ Bugfixes
42
+
43
+ - Clear the params hash after each message
44
+ - Allow setting config.rails\_root to false
45
+
46
+
47
+ ## 0.5.1 (May 9, 2012)
48
+
49
+ Bugfixes
50
+
51
+ - Check maildir on startup to catch any pre-existing messages
52
+ - Rescue errors while processing messages so that the app doesn't die
53
+
54
+
55
+ ## 0.5.0 (April 24, 2012)
56
+
57
+ Features
58
+
59
+ - IMAP support
60
+ - Graceful death
61
+
62
+ Bugfixes
63
+
64
+ - Check all new messages in Maildir when a file changes
65
+ - Don't move message from new to current in Maildir if process failed
66
+ - Avoid require listen if not use
67
+ - Avoid failing if POP3::Connection raises an exception
68
+ - Check multipart bodies properly
69
+ - Use listen gem instead of fssm
70
+ - Don't die if the Rails environment is already loaded
71
+
72
+
73
+ ## 0.4.0 (October 3, 2010)
74
+
75
+ Features
76
+
77
+ - The `ignore_stdin` config option has been added
78
+
79
+ Bugfixes
80
+
81
+ - Fix a Mail/ActiveSupport dependency issue with i18n
82
+
83
+
84
+ ## 0.3.0 (September 2, 2010)
85
+
86
+ Features
87
+
88
+ - The `CC` condition has been added
89
+ - The router can route to class instance methods as well as blocks
90
+ - SSL is now supported by the POP3 receiver
91
+
92
+ Bugfixes
93
+
94
+ - Fix a bug where messages were not being deleted properly by the POP3
95
+ polling loop
96
+ - Fix empty `To` fields crashing apps
97
+
98
+
99
+ ## 0.2.0 (July 28, 2010
100
+
101
+ Features
102
+
103
+ - Add `Application.run` instead of Application.new().run
104
+
105
+
106
+ ## 0.1.0 (July 27, 2010)
107
+
108
+ Initial release.
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2010-2012 Jonathan Rudenberg
3
+ Copyright (c) 2010-2013 Jonathan Rudenberg
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -21,41 +21,13 @@ See the [User Guide](https://github.com/titanous/mailman/blob/master/USER_GUIDE.
21
21
 
22
22
  ## Compatibility
23
23
 
24
- Tested on Ruby 1.8.7, 1.9.2, 1.9.3, REE, JRuby 1.7, and Rubinius.
25
-
26
- ### Dependencies
27
-
28
- * mail >= 2.0.3
29
- * activesupport >= 2.3.4
30
- * listen >= 0.4.1
31
- * maildir >= 0.5.0
32
- * i18n >= 0.4.1
24
+ Tested on Ruby 2.0, 1.9.3, JRuby, and Rubinius.
33
25
 
34
26
  ## Thanks
35
27
 
36
- This project was sponsored by the [Ruby Summer of Code](http://rubysoc.org),
37
- and my mentor was [Steven Soroka](http://github.com/ssoroka).
38
-
39
- ### Contributors
40
-
41
- - [Nicolas Aguttes](http://github.com/tranquiliste)
42
- - [Nathan Broadbent](https://github.com/ndbroadbent)
43
- - [John Cant](https://github.com/johncant)
44
- - [Tim Carey-Smith](http://github.com/halorgium)
45
- - [Dan Cheail](https://github.com/DanCheail)
46
- - [Francis Chong](https://github.com/siuying)
47
- - [Kevin Glowacz](https://github.com/kjg)
48
- - [Cyril Mougel](http://github.com/shingara)
49
- - [Brian Palmer](https://github.com/codekitchen)
50
- - [Phillip Ridlen](https://github.com/philtr)
51
- - [Daniel Schierbeck](http://github.com/dasch)
52
- - [Steven Soroka](http://github.com/ssoroka)
53
- - [Ryan Stawarz](https://github.com/rstawarz)
54
- - [Benjamin Waldher](https://github.com/lgbr)
55
- - [Ian White](http://github.com/ianwhite)
56
- - [Andreas Wolff](https://github.com/rubyphunk)
57
-
28
+ This project was originally sponsored by Ruby Summer of Code (2010), and
29
+ mentored by [Steven Soroka](http://github.com/ssoroka).
58
30
 
59
31
  ## Copyright
60
32
 
61
- Copyright (c) 2010-2012 Jonathan Rudenberg. See LICENSE for details.
33
+ Copyright (c) 2010-2013 Jonathan Rudenberg. See LICENSE for details.
@@ -269,3 +269,29 @@ interfere with running Mailman with cron or as a daemon.
269
269
  (Control-C) and allow the mail receiver to finish its current
270
270
  iteration before exiting. Note that this currently only works
271
271
  with POP3 receivers.
272
+
273
+ ### Middleware
274
+
275
+ `Mailman.config.middleware` gives you access to the Mailman middleware stack.
276
+ Middleware allows you to execute code before and after each message is
277
+ processed. Middleware is super useful for things like error handling and any
278
+ other actions you need to do before/after each message is processed.
279
+
280
+ Here's an example of some simple error logging middleware:
281
+
282
+ ```ruby
283
+ # Define the middleware
284
+ class ErrorLoggingMiddleware
285
+ def call(mail)
286
+ begin
287
+ yield
288
+ rescue
289
+ puts "There was an error processing this message! #{mail.subject}"
290
+ raise
291
+ end
292
+ end
293
+ end
294
+
295
+ # Add it to the Mailman middleware stack
296
+ Mailman.config.middleware.add ErrorLoggingMiddleware
297
+ ```
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'mailman/cli'
4
+ require 'optparse'
5
+
6
+ $:.<< '.'
7
+
8
+ options = {}
9
+
10
+ ARGV.options do |opts|
11
+ opts.on('-c', '--config=val', String) { |config_file| options[:config_file] = config_file }
12
+ opts.on('-p', '--pidfile=val', String) { |pid_file| options[:pid_file] = pid_file }
13
+ opts.on('-e', '--environment=val', String) { |environment| options[:environment] = environment }
14
+
15
+ opts.parse!
16
+ end
17
+
18
+ begin
19
+ Mailman::CLI.new(options).run
20
+ rescue => e
21
+ STDERR.puts e
22
+ STDERR.puts e.backtrace.join("\n")
23
+
24
+ exit 1
25
+ end
@@ -9,7 +9,7 @@ require 'mailman/version'
9
9
 
10
10
  module Mailman
11
11
 
12
- [:Application, :Router, :Configuration, :Receiver, :MessageProcessor].each do |constant|
12
+ [:Application, :Router, :Configuration, :Receiver, :MessageProcessor, :Middleware].each do |constant|
13
13
  autoload constant, "mailman/#{constant.to_s.underscore}"
14
14
  end
15
15
 
@@ -2,8 +2,12 @@ module Mailman
2
2
  # The main application class. Pass a block to {#new} to create a new app.
3
3
  class Application
4
4
 
5
- def self.run(&block)
6
- app = new(&block)
5
+ def self.run(config=nil, &block)
6
+ if config
7
+ app = new(config, &block)
8
+ else
9
+ app = new(&block)
10
+ end
7
11
  app.run
8
12
  app
9
13
  end
@@ -14,25 +18,29 @@ module Mailman
14
18
  # @return [MessageProcessor] the app's message processor
15
19
  attr_reader :processor
16
20
 
21
+ # @return [Config] the apps's configuration
22
+ attr_reader :config
23
+
17
24
  # Creates a new router, and sets up any routes passed in the block.
18
25
  # @param [Hash] options the application options
19
26
  # @option options [true,false] :graceful_death catch interrupt signal and don't die until end of poll
20
27
  # @param [Proc] block a block with routes
21
28
 
22
- def initialize(&block)
29
+ def initialize(config=:default, &block)
23
30
  @router = Mailman::Router.new
24
- @processor = MessageProcessor.new(:router => @router)
31
+ @config = select_config(config)
32
+ @processor = MessageProcessor.new(:router => @router, :config => @config)
25
33
 
26
- if Mailman.config.maildir
34
+ if self.config.maildir
27
35
  require 'maildir'
28
- @maildir = Maildir.new(Mailman.config.maildir)
36
+ @maildir = Maildir.new(self.config.maildir)
29
37
  end
30
38
 
31
39
  instance_eval(&block) if block_given?
32
40
  end
33
41
 
34
42
  def polling?
35
- Mailman.config.poll_interval > 0 && !@polling_interrupt
43
+ config.poll_interval > 0 && !@polling_interrupt
36
44
  end
37
45
 
38
46
  # Sets the block to run if no routes match a message.
@@ -44,47 +52,47 @@ module Mailman
44
52
  def run
45
53
  Mailman.logger.info "Mailman v#{Mailman::VERSION} started"
46
54
 
47
- if Mailman.config.rails_root
48
- rails_env = File.join(Mailman.config.rails_root, 'config', 'environment.rb')
55
+ if config.rails_root
56
+ rails_env = File.join(config.rails_root, 'config', 'environment.rb')
49
57
  if File.exist?(rails_env) && !(defined?(Rails) && Rails.env)
50
- Mailman.logger.info "Rails root found in #{Mailman.config.rails_root}, requiring environment..."
58
+ Mailman.logger.info "Rails root found in #{config.rails_root}, requiring environment..."
51
59
  require rails_env
52
60
  end
53
61
  end
54
62
 
55
- if Mailman.config.graceful_death
63
+ if config.graceful_death
56
64
  # When user presses CTRL-C, finish processing current message before exiting
57
65
  Signal.trap("INT") { @polling_interrupt = true }
58
66
  end
59
67
 
60
68
  # STDIN
61
- if !Mailman.config.ignore_stdin && $stdin.fcntl(Fcntl::F_GETFL, 0) == 0
69
+ if !config.ignore_stdin && $stdin.fcntl(Fcntl::F_GETFL, 0) == 0
62
70
  Mailman.logger.debug "Processing message from STDIN."
63
71
  @processor.process($stdin.read)
64
72
 
65
73
  # IMAP
66
- elsif Mailman.config.imap
67
- options = {:processor => @processor}.merge(Mailman.config.imap)
74
+ elsif config.imap
75
+ options = {:processor => @processor}.merge(config.imap)
68
76
  Mailman.logger.info "IMAP receiver enabled (#{options[:username]}@#{options[:server]})."
69
77
  polling_loop Receiver::IMAP.new(options)
70
78
 
71
79
  # POP3
72
- elsif Mailman.config.pop3
73
- options = {:processor => @processor}.merge(Mailman.config.pop3)
80
+ elsif config.pop3
81
+ options = {:processor => @processor}.merge(config.pop3)
74
82
  Mailman.logger.info "POP3 receiver enabled (#{options[:username]}@#{options[:server]})."
75
83
  polling_loop Receiver::POP3.new(options)
76
84
 
77
85
  # Maildir
78
- elsif Mailman.config.maildir
86
+ elsif config.maildir
79
87
 
80
- Mailman.logger.info "Maildir receiver enabled (#{Mailman.config.maildir})."
88
+ Mailman.logger.info "Maildir receiver enabled (#{config.maildir})."
81
89
 
82
90
  Mailman.logger.debug "Processing new message queue..."
83
91
  @maildir.list(:new).each do |message|
84
92
  @processor.process_maildir_message(message)
85
93
  end
86
94
 
87
- if Mailman.config.watch_maildir
95
+ if config.watch_maildir
88
96
  require 'listen'
89
97
  Mailman.logger.debug "Monitoring the Maildir for new messages..."
90
98
 
@@ -103,10 +111,17 @@ module Mailman
103
111
 
104
112
  private
105
113
 
114
+ def select_config(new_config)
115
+ return Mailman.config if new_config == :default
116
+ return new_config if new_config.is_a?(Configuration)
117
+ return Configuration.from_hash(new_config) if new_config.is_a?(Hash)
118
+ return Configuration.new
119
+ end
120
+
106
121
  # Run the polling loop for the email inbox connection
107
122
  def polling_loop(connection)
108
123
  if polling?
109
- polling_msg = "Polling enabled. Checking every #{Mailman.config.poll_interval} seconds."
124
+ polling_msg = "Polling enabled. Checking every #{config.poll_interval} seconds."
110
125
  else
111
126
  polling_msg = "Polling disabled. Checking for messages once."
112
127
  end
@@ -122,7 +137,7 @@ module Mailman
122
137
  end
123
138
 
124
139
  break unless polling?
125
- sleep Mailman.config.poll_interval
140
+ sleep config.poll_interval
126
141
  end
127
142
  end
128
143
 
@@ -0,0 +1,39 @@
1
+ require 'mailman'
2
+
3
+ module Mailman
4
+ class CLI
5
+ class ConfigNotDefined < StandardError; end
6
+
7
+ def initialize(options = {})
8
+ @config_file = options[:config_file]
9
+ @pid_file = options[:pid_file]
10
+ @environment = options[:environment]
11
+ end
12
+
13
+ def run
14
+ set_environment
15
+ record_pid_file
16
+ load_config
17
+ end
18
+
19
+ def set_environment
20
+ ENV['RACK_ENV'] = ENV['RAILS_ENV'] = @environment
21
+ end
22
+
23
+ def load_config
24
+ if @config_file
25
+ require @config_file
26
+ else
27
+ raise ConfigNotDefined.new
28
+ end
29
+ end
30
+
31
+ def record_pid_file
32
+ if @pid_file
33
+ File.open(@pid_file, 'w') do |f|
34
+ f.puts Process.pid
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -31,6 +31,10 @@ module Mailman
31
31
  # connections.
32
32
  attr_accessor :graceful_death
33
33
 
34
+ def middleware
35
+ @middleware ||= Mailman::Middleware.new
36
+ end
37
+
34
38
  def logger
35
39
  @logger ||= Logger.new(STDOUT)
36
40
  end
@@ -47,5 +51,13 @@ module Mailman
47
51
  @rails_root.nil? ? '.' : @rails_root
48
52
  end
49
53
 
54
+ def self.from_hash(options)
55
+ config = self.new
56
+ options.each do |key, value|
57
+ config.send "#{key}=", value
58
+ end
59
+ config
60
+ end
61
+
50
62
  end
51
63
  end
@@ -7,6 +7,7 @@ module Mailman
7
7
  # messages to
8
8
  def initialize(options)
9
9
  @router = options[:router]
10
+ @config = options[:config]
10
11
  end
11
12
 
12
13
  # Converts a raw email into a +Mail::Message+ instance, and passes it to the
@@ -16,7 +17,11 @@ module Mailman
16
17
  mail = Mail.new(message)
17
18
  from = mail.from.nil? ? "unknown" : mail.from.first
18
19
  Mailman.logger.info "Got new message from '#{from}' with subject '#{mail.subject}'."
19
- @router.route(mail)
20
+
21
+ # Run any middlewares before routing the message
22
+ @config.middleware.run(mail) do
23
+ @router.route(mail)
24
+ end
20
25
  end
21
26
 
22
27
  # Processes a +Maildir::Message+ instance.
@@ -0,0 +1,47 @@
1
+ module Mailman
2
+ class Middleware
3
+ attr_reader :entries
4
+
5
+ def initialize
6
+ @entries = []
7
+ yield self if block_given?
8
+ end
9
+
10
+ def add(klass)
11
+ entries << klass
12
+ end
13
+
14
+ def remove(klass)
15
+ entries.delete(klass)
16
+ end
17
+
18
+ def insert_before(oldklass, newklass)
19
+ idx = entries.index(oldklass) || 0
20
+ entries.insert(idx, newklass)
21
+ end
22
+
23
+ def insert_after(oldklass, newklass)
24
+ idx = entries.rindex(oldklass) || entries.count - 1
25
+ entries.insert(idx+1, newklass)
26
+ end
27
+
28
+ def run(*args, &final_action)
29
+ final_return = nil
30
+ stack = @entries.map {|m| m.new}
31
+ traverse_stack = lambda do
32
+ if stack.empty?
33
+ final_return = final_action.call
34
+ else
35
+ stack.shift.call(*args, &traverse_stack)
36
+ end
37
+ end
38
+ traverse_stack.call
39
+
40
+ final_return
41
+ end
42
+
43
+ def each(&block)
44
+ entries.each(&block)
45
+ end
46
+ end
47
+ end
@@ -36,7 +36,7 @@ module Mailman
36
36
  # Connects to the IMAP server.
37
37
  def connect
38
38
  if @connection.nil? or @connection.disconnected?
39
- @connection = Net::IMAP.new(@server, @port, @ssl)
39
+ @connection = Net::IMAP.new(@server, port: @port, ssl: @ssl)
40
40
  @connection.login(@username, @password)
41
41
  end
42
42
  @connection.select(@folder)
@@ -22,6 +22,8 @@ module Mailman
22
22
  @password = options[:password]
23
23
  @connection = Net::POP3.new(options[:server], options[:port])
24
24
  @connection.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if options[:ssl]
25
+ @connection.open_timeout = options[:open_timeout] if options[:open_timeout]
26
+ @connection.read_timeout = options[:read_timeout] if options[:read_timeout]
25
27
  end
26
28
 
27
29
  # Connects to the POP3 server.
@@ -1,3 +1,3 @@
1
1
  module Mailman
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
metadata CHANGED
@@ -1,100 +1,88 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
5
- prerelease:
4
+ version: 0.7.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jonathan Rudenberg
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-13 00:00:00.000000000 Z
11
+ date: 2013-08-11 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.0.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.0.3
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 2.3.4
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
40
  version: 2.3.4
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: listen
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: 0.4.1
54
48
  type: :runtime
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: 0.4.1
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: maildir
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.5.0
70
62
  type: :runtime
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.5.0
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: i18n
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.4.1
86
76
  type: :runtime
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.4.1
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
@@ -102,7 +90,6 @@ dependencies:
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
@@ -111,13 +98,17 @@ description: Mailman makes it easy to process incoming emails with a simple rout
111
98
  DSL
112
99
  email:
113
100
  - jonathan@titanous.com
114
- executables: []
101
+ executables:
102
+ - mailman
115
103
  extensions: []
116
104
  extra_rdoc_files: []
117
105
  files:
106
+ - bin/mailman
118
107
  - lib/mailman/application.rb
108
+ - lib/mailman/cli.rb
119
109
  - lib/mailman/configuration.rb
120
110
  - lib/mailman/message_processor.rb
111
+ - lib/mailman/middleware.rb
121
112
  - lib/mailman/receiver/imap.rb
122
113
  - lib/mailman/receiver/pop3.rb
123
114
  - lib/mailman/receiver.rb
@@ -134,28 +125,28 @@ files:
134
125
  - LICENSE
135
126
  - README.md
136
127
  - USER_GUIDE.md
137
- homepage: http://mailmanrb.com
128
+ - CHANGELOG.md
129
+ homepage: https://github.com/titanous/mailman
138
130
  licenses: []
131
+ metadata: {}
139
132
  post_install_message:
140
133
  rdoc_options: []
141
134
  require_paths:
142
135
  - lib
143
136
  required_ruby_version: !ruby/object:Gem::Requirement
144
- none: false
145
137
  requirements:
146
- - - ! '>='
138
+ - - '>='
147
139
  - !ruby/object:Gem::Version
148
140
  version: '0'
149
141
  required_rubygems_version: !ruby/object:Gem::Requirement
150
- none: false
151
142
  requirements:
152
- - - ! '>='
143
+ - - '>='
153
144
  - !ruby/object:Gem::Version
154
145
  version: '0'
155
146
  requirements: []
156
147
  rubyforge_project: mailman
157
- rubygems_version: 1.8.23
148
+ rubygems_version: 2.0.3
158
149
  signing_key:
159
- specification_version: 3
150
+ specification_version: 4
160
151
  summary: A incoming email processing microframework
161
152
  test_files: []