mailmanager 1.0.12 → 1.0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Changelog +5 -1
- data/Gemfile.lock +5 -3
- data/Rakefile +11 -0
- data/lib/mailmanager/lib.rb +20 -0
- data/lib/mailmanager/list.rb +21 -0
- data/lib/mailmanager/listproxy.py +27 -17
- data/lib/mailmanager/version.rb +1 -1
- data/mailmanager.gemspec +1 -0
- data/spec/lib/mailmanager/lib_spec.rb +6 -0
- data/tasks/hudson.rake +15 -0
- metadata +17 -3
data/.gitignore
CHANGED
data/Changelog
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
Current version is 1.0.
|
1
|
+
Current version is 1.0.13
|
2
|
+
|
3
|
+
changes since 1.0.12
|
4
|
+
- added list description= setter method to List class
|
5
|
+
- added subject_prefix & subject_prefix= methods to List class
|
2
6
|
|
3
7
|
changes since 1.0.11
|
4
8
|
- should now be compatible with Python 2.4+ (was 2.6+); 2.4 requires simplejson
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mailmanager (1.0.
|
4
|
+
mailmanager (1.0.13)
|
5
5
|
json (~> 1.4.6)
|
6
6
|
open4 (~> 1.0.1)
|
7
7
|
|
@@ -10,6 +10,9 @@ GEM
|
|
10
10
|
specs:
|
11
11
|
ZenTest (4.4.2)
|
12
12
|
archive-tar-minitar (0.5.2)
|
13
|
+
builder (3.0.0)
|
14
|
+
ci_reporter (1.6.4)
|
15
|
+
builder (>= 2.1.2)
|
13
16
|
columnize (0.3.2)
|
14
17
|
diff-lcs (1.1.2)
|
15
18
|
json (1.4.6)
|
@@ -40,8 +43,7 @@ PLATFORMS
|
|
40
43
|
|
41
44
|
DEPENDENCIES
|
42
45
|
ZenTest (~> 4.4.2)
|
43
|
-
|
46
|
+
ci_reporter
|
44
47
|
mailmanager!
|
45
|
-
open4 (~> 1.0.1)
|
46
48
|
rspec (~> 2.4.0)
|
47
49
|
ruby-debug19
|
data/Rakefile
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
APP_ROOT = File.expand_path( File.dirname(__FILE__) )
|
1
2
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
2
3
|
require 'mailmanager/version'
|
3
4
|
require 'rake'
|
4
5
|
require 'rake/rdoctask'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
# load all .rake files in the tasks dir
|
9
|
+
Dir["#{APP_ROOT}/tasks/**/*.rake"].each { |task| load task }
|
5
10
|
|
6
11
|
desc "Build gem locally"
|
7
12
|
task :build do
|
@@ -25,7 +30,13 @@ task :release => :build do
|
|
25
30
|
system "gem push pkg/mailmanager-#{MailManager::VERSION}.gem"
|
26
31
|
end
|
27
32
|
|
33
|
+
desc "Generate rdoc html"
|
28
34
|
Rake::RDocTask.new do |rd|
|
29
35
|
rd.main = "lib/mailmanager.rb"
|
30
36
|
rd.rdoc_files.include("lib/**/*.rb")
|
31
37
|
end
|
38
|
+
|
39
|
+
desc "Run all specs"
|
40
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
41
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
42
|
+
end
|
data/lib/mailmanager/lib.rb
CHANGED
@@ -99,6 +99,8 @@ module MailManager
|
|
99
99
|
command(cmd, params)
|
100
100
|
end
|
101
101
|
|
102
|
+
# TODO: DRY this up!
|
103
|
+
|
102
104
|
def web_page_url(list)
|
103
105
|
cmd = :withlist
|
104
106
|
out = command(cmd, :name => list.name, :wlcmd => 'web_page_url')
|
@@ -117,6 +119,24 @@ module MailManager
|
|
117
119
|
parse_json_output(out)
|
118
120
|
end
|
119
121
|
|
122
|
+
def subject_prefix(list)
|
123
|
+
cmd = :withlist
|
124
|
+
out = command(cmd, :name => list.name, :wlcmd => :subject_prefix)
|
125
|
+
parse_json_output(out)
|
126
|
+
end
|
127
|
+
|
128
|
+
def set_description(list, desc)
|
129
|
+
cmd = :withlist
|
130
|
+
out = command(cmd, :name => list.name, :wlcmd => :description, :arg => desc)
|
131
|
+
parse_json_output(out)
|
132
|
+
end
|
133
|
+
|
134
|
+
def set_subject_prefix(list, sp)
|
135
|
+
cmd = :withlist
|
136
|
+
out = command(cmd, :name => list.name, :wlcmd => :subject_prefix, :arg => sp)
|
137
|
+
parse_json_output(out)
|
138
|
+
end
|
139
|
+
|
120
140
|
def command(cmd, opts = {})
|
121
141
|
mailman_cmd = "#{mailmanager.root}/bin/#{cmd.to_s} "
|
122
142
|
# delete opts as we handle them explicitly
|
data/lib/mailmanager/list.rb
CHANGED
@@ -118,16 +118,37 @@ EOF
|
|
118
118
|
"#{root}listinfo/#{name}"
|
119
119
|
end
|
120
120
|
|
121
|
+
# Returns the request email address for the list
|
121
122
|
def request_email
|
122
123
|
result = lib.request_email(self)
|
123
124
|
result['return']
|
124
125
|
end
|
125
126
|
|
127
|
+
# Returns the list description
|
126
128
|
def description
|
127
129
|
result = lib.description(self)
|
128
130
|
result['return']
|
129
131
|
end
|
130
132
|
|
133
|
+
# Sets the list description to a new value
|
134
|
+
def description=(desc)
|
135
|
+
result = lib.set_description(self, desc)
|
136
|
+
result['result'].to_sym
|
137
|
+
end
|
138
|
+
|
139
|
+
# Returns the list's subject prefix
|
140
|
+
def subject_prefix
|
141
|
+
result = lib.subject_prefix(self)
|
142
|
+
result['return']
|
143
|
+
end
|
144
|
+
|
145
|
+
# Sets the list's subject prefix to a new value. Remember to leave a space
|
146
|
+
# at the end (assuming you want one, and you probably do).
|
147
|
+
def subject_prefix=(sp)
|
148
|
+
result = lib.set_subject_prefix(self, sp)
|
149
|
+
result['result'].to_sym
|
150
|
+
end
|
151
|
+
|
131
152
|
private
|
132
153
|
|
133
154
|
def add_member_using(method, email, name)
|
@@ -1,16 +1,16 @@
|
|
1
1
|
try:
|
2
|
-
|
2
|
+
import json
|
3
3
|
except ImportError:
|
4
|
-
|
4
|
+
import simplejson as json
|
5
5
|
from email.Utils import parseaddr
|
6
6
|
try:
|
7
|
-
|
7
|
+
from collections import Callable
|
8
8
|
except ImportError:
|
9
|
-
|
10
|
-
|
9
|
+
def iscallable(attr):
|
10
|
+
return callable(attr)
|
11
11
|
else:
|
12
|
-
|
13
|
-
|
12
|
+
def iscallable(attr):
|
13
|
+
return isinstance(attr, Callable)
|
14
14
|
from Mailman import MailList
|
15
15
|
from Mailman import Errors
|
16
16
|
|
@@ -29,34 +29,44 @@ def userdesc_for(member):
|
|
29
29
|
userdesc.fullname, userdesc.address = parseaddr(member)
|
30
30
|
return userdesc
|
31
31
|
|
32
|
-
def unwindattrs(obj,
|
33
|
-
if not
|
34
|
-
attr = getattr(obj,
|
32
|
+
def unwindattrs(obj, attrname, *args):
|
33
|
+
if not attrname.count('.'):
|
34
|
+
attr = getattr(obj, attrname)
|
35
35
|
if iscallable(attr):
|
36
36
|
return attr(*args)
|
37
37
|
else:
|
38
|
-
|
38
|
+
if len(args) > 0:
|
39
|
+
# must be a setter
|
40
|
+
setattr(obj, attrname, args[0])
|
41
|
+
else:
|
42
|
+
# must be a getter
|
43
|
+
return attr
|
39
44
|
else:
|
40
|
-
attr,
|
45
|
+
attr, nextattrname = attrname.split('.', 1)
|
41
46
|
nextobj = getattr(obj, attr)
|
42
|
-
return unwindattrs(nextobj,
|
47
|
+
return unwindattrs(nextobj, nextattrname, *args)
|
43
48
|
|
44
49
|
needs_userdesc = dict(AddMember=True, ApprovedAddMember=True)
|
45
50
|
needs_save = dict(AddMember=True, ApprovedAddMember=True,
|
46
51
|
DeleteMember=True, ApprovedDeleteMember=True,
|
47
52
|
moderator_append=True, moderator_remove=True)
|
53
|
+
needs_save_with_arg = dict(description=True, subject_prefix=True)
|
48
54
|
|
49
55
|
def command(mlist, cmd, *args):
|
50
56
|
result = {}
|
51
57
|
try:
|
52
|
-
if needs_save.get(cmd.replace('.','_'), False)
|
53
|
-
|
58
|
+
if (needs_save.get(cmd.replace('.','_'), False) or
|
59
|
+
(needs_save_with_arg.get(cmd.replace('.','_'), False) and
|
60
|
+
len(args) > 0)):
|
61
|
+
mlist.Lock()
|
54
62
|
if needs_userdesc.get(cmd, False):
|
55
63
|
result['return'] = unwindattrs(mlist, cmd, userdesc_for(args[0]))
|
56
64
|
else:
|
57
65
|
result['return'] = unwindattrs(mlist, cmd, *args)
|
58
|
-
if needs_save.get(cmd.replace('.','_'), False)
|
59
|
-
|
66
|
+
if (needs_save.get(cmd.replace('.','_'), False) or
|
67
|
+
(needs_save_with_arg.get(cmd.replace('.','_'), False) and
|
68
|
+
len(args) > 0)):
|
69
|
+
mlist.Save()
|
60
70
|
except TypeError, err:
|
61
71
|
error_msg = '%s' % err
|
62
72
|
print json.dumps({'error': error_msg})
|
data/lib/mailmanager/version.rb
CHANGED
data/mailmanager.gemspec
CHANGED
@@ -184,6 +184,12 @@ EOF
|
|
184
184
|
test_lib_attr(:description, "this is a mailing list")
|
185
185
|
end
|
186
186
|
end
|
187
|
+
|
188
|
+
describe "#subject_prefix" do
|
189
|
+
it "should ask Mailman for the list's subject prefix" do
|
190
|
+
test_lib_attr(:subject_prefix, "[Foo] ")
|
191
|
+
end
|
192
|
+
end
|
187
193
|
end
|
188
194
|
|
189
195
|
def test_lib_getter(lib_method, return_value, *args)
|
data/tasks/hudson.rake
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
if ENV['RUBY_ENV'] == 'test'
|
2
|
+
|
3
|
+
namespace :hudson do
|
4
|
+
task :spec => ["hudson:setup:rspec", 'rake:spec']
|
5
|
+
|
6
|
+
namespace :setup do
|
7
|
+
task :pre_ci do
|
8
|
+
ENV["CI_REPORTS"] = 'results/rspec/'
|
9
|
+
gem 'ci_reporter'
|
10
|
+
require 'ci/reporter/rake/rspec'
|
11
|
+
end
|
12
|
+
task :rspec => [:pre_ci, "ci:setup:rspec"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 13
|
9
|
+
version: 1.0.13
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Wes Morgan
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-27 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -90,6 +90,19 @@ dependencies:
|
|
90
90
|
version: "0"
|
91
91
|
type: :development
|
92
92
|
version_requirements: *id005
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: ci_reporter
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
version: "0"
|
104
|
+
type: :development
|
105
|
+
version_requirements: *id006
|
93
106
|
description: Ruby wrapper library for GNU Mailman's admin functions
|
94
107
|
email: MorganW@dnc.org
|
95
108
|
executables: []
|
@@ -118,6 +131,7 @@ files:
|
|
118
131
|
- spec/lib/mailmanager/list_spec.rb
|
119
132
|
- spec/lib/mailmanager_spec.rb
|
120
133
|
- spec/spec_helper.rb
|
134
|
+
- tasks/hudson.rake
|
121
135
|
has_rdoc: true
|
122
136
|
homepage: http://github.com/dnclabs/mailmanager
|
123
137
|
licenses: []
|