postfix_admin 0.1.2 → 0.1.3

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: afa77157060260499b49c44b35270deaf01ffde5
4
- data.tar.gz: 00bc7f9dfb7e8b6b628b9dbe0b3660b6f6d52828
3
+ metadata.gz: 59fef8b37f476a21d64574f49a2175c75ea36e36
4
+ data.tar.gz: 402c21e2842ad6eab990ecfed2bd6ea98c3b4c4a
5
5
  SHA512:
6
- metadata.gz: 3a82010397e072cfd3ab056a908b943ebc5f0aff711977944768e32fdf60ae7dd81651416a08e97fcd27114ed230ffacb9ebb3e1c4790719c1a3ecf801ef8bf2
7
- data.tar.gz: 89bea8924bb55e225d4b286c28f10c97e5a8218481896fab6c6c8e2359171dc5391d334ad44bec814bc9214d76f1a50c7b459e2589194aaa0322a9a3f947b964
6
+ metadata.gz: 3e2312e795f876059fe65f7907bc19a2d45c9619e713756a19a3a363cd827bc26c4d31f9207b0c66d8965e70686d718d34ae4a75f4f9bac2297c4ef0aeaa00f8
7
+ data.tar.gz: eee17cbc79654a56a6fefd9eea01daf7340a62108c60c2b11000527ed6b704608f5546e3bc1ecd53527e3823f095b13fa9b20e182253ae703b65ef83030ff4d1
@@ -63,6 +63,7 @@ module PostfixAdmin
63
63
  puts "Mailboxes : %4d / %4s" % [domain.mailboxes.count, max_str(domain.maxmailboxes)]
64
64
  puts "Aliases : %4d / %4s" % [domain.num_total_aliases, max_str(domain.maxaliases)]
65
65
  puts "Max Quota : %4d MB" % domain.maxquota
66
+ puts "Active : %3s" % domain.active_str
66
67
  else
67
68
  puts "Domains : %4d" % Domain.all_without_special_domain.count
68
69
  puts "Admins : %4d" % Admin.count
@@ -101,6 +102,8 @@ module PostfixAdmin
101
102
  report("Admin") do
102
103
  puts "Name : %s" % admin.username
103
104
  puts "Password : %s" % admin.password
105
+ puts "Domains : %s" % (admin.super_admin? ? "ALL" : admin.domains.count)
106
+ puts "Role : %s" % (admin.super_admin? ? "Super admin" : "Admin")
104
107
  puts "Active : %s" % admin.active_str
105
108
  end
106
109
  end
@@ -137,18 +140,6 @@ module PostfixAdmin
137
140
  puts_registered(domain_name, "a domain")
138
141
  end
139
142
 
140
- def super_admin(user_name, disable)
141
- admin_check(user_name)
142
-
143
- if disable
144
- Admin.find(user_name).super_admin = false
145
- puts "Successfully disabled super admin flag of #{user_name}"
146
- else
147
- Admin.find(user_name).super_admin = true
148
- puts "Successfully enabled super admin flag of #{user_name}"
149
- end
150
- end
151
-
152
143
  def change_admin_password(user_name, password)
153
144
  change_password(Admin, user_name, password)
154
145
  end
@@ -157,12 +148,24 @@ module PostfixAdmin
157
148
  change_password(Mailbox, user_name, password)
158
149
  end
159
150
 
151
+ def edit_admin(admin_name, options)
152
+ admin_check(admin_name)
153
+ admin = Admin.find(admin_name)
154
+ admin.super_admin = options[:super] unless options[:super].nil?
155
+ admin.active = options[:active] unless options[:active].nil?
156
+ admin.save or raise "Could not save Admin"
157
+
158
+ puts "Successfully updated #{admin_name}"
159
+ show_admin_details(admin_name)
160
+ end
161
+
160
162
  def edit_domain(domain_name, options)
161
163
  domain_check(domain_name)
162
164
  domain = Domain.find(domain_name)
163
165
  domain.maxaliases = options[:aliases] if options[:aliases]
164
166
  domain.maxmailboxes = options[:mailboxes] if options[:mailboxes]
165
167
  domain.maxquota = options[:maxquota] if options[:maxquota]
168
+ domain.active = options[:active] unless options[:active].nil?
166
169
  domain.save or raise "Could not save Domain"
167
170
 
168
171
  puts "Successfully updated #{domain_name}"
@@ -277,6 +280,7 @@ module PostfixAdmin
277
280
  mailbox = Mailbox.find(address)
278
281
  mailbox.name = options[:name] if options[:name]
279
282
  mailbox.quota = options[:quota] * KB_TO_MB if options[:quota]
283
+ mailbox.active = options[:active] unless options[:active].nil?
280
284
  mailbox.save or raise "Could not save Mailbox"
281
285
 
282
286
  puts "Successfully updated #{address}"
@@ -30,12 +30,6 @@ module PostfixAdmin
30
30
  runner{ @cli.setup_domain(domain_name, password) }
31
31
  end
32
32
 
33
- desc "super_admin admin@example.com", "Enable super admin flag of an admin"
34
- method_option :disable, :type => :boolean, :aliases => "-d", :desc => "Disable super admin flag"
35
- def super_admin(user_name)
36
- runner{ @cli.super_admin(user_name, options[:disable]) }
37
- end
38
-
39
33
  desc "admin_passwd admin@example.com new_password", "Change password of admin"
40
34
  def admin_passwd(user_name, password)
41
35
  runner{ @cli.change_admin_password(user_name, password) }
@@ -55,6 +49,7 @@ module PostfixAdmin
55
49
  method_option :aliases, :type => :numeric, :aliases => "-a", :desc => "Edit aliases limitation"
56
50
  method_option :mailboxes, :type => :numeric, :aliases => "-m", :desc => "Edit mailboxes limitation"
57
51
  method_option :maxquota, :type => :numeric, :aliases => "-q", :desc => "Edit max quota limitation"
52
+ method_option :active, type: :boolean, desc: "Update active status"
58
53
  def edit_domain(domain_name)
59
54
  runner do
60
55
  if options.size == 0
@@ -103,6 +98,7 @@ module PostfixAdmin
103
98
  desc "edit_account user@example.com", "Edit an account"
104
99
  method_option :quota, :type => :numeric, :aliases => "-q", :desc => "quota limitation"
105
100
  method_option :name, :type => :string, :aliases => "-n", :desc => "full name"
101
+ method_option :active, type: :boolean, desc: "Update active status"
106
102
  def edit_account(address)
107
103
  runner do
108
104
  if options.size == 0
@@ -119,6 +115,20 @@ module PostfixAdmin
119
115
  end
120
116
  end
121
117
 
118
+ desc "edit_admin admin@example.com", "Edit an admin user"
119
+ method_option :active, type: :boolean, desc: "Update active status"
120
+ method_option :super, type: :boolean, desc: "Update super admin status"
121
+ def edit_admin(user_name)
122
+ runner do
123
+ if options.size == 0
124
+ warn "Use one or more options."
125
+ help('edit_admin')
126
+ else
127
+ @cli.edit_admin(user_name, options)
128
+ end
129
+ end
130
+ end
131
+
122
132
  desc "add_admin admin@example.com password", "Add an admin user"
123
133
  method_option :super, :type => :boolean, :aliases => "-S", :desc => "register as a super admin"
124
134
  method_option :scheme, :type => :string, :aliases => "-s", :desc => "password scheme"
@@ -1,3 +1,3 @@
1
1
  module PostfixAdmin
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../lib/postfix_admin/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.add_dependency 'thor'
4
+ gem.add_dependency 'thor', '~> 0.19.1'
5
5
  gem.add_dependency 'data_mapper'
6
6
  gem.add_dependency 'do_mysql', '>= 0.10.17'
7
7
  gem.add_dependency 'dm-mysql-adapter'
data/spec/cli_spec.rb CHANGED
@@ -103,22 +103,6 @@ describe PostfixAdmin::CLI do
103
103
  lambda { @cli.show_alias('unknown.example.com') }.should raise_error Error
104
104
  end
105
105
 
106
- describe "#super_admin" do
107
- it "enables super admin flag of an admin" do
108
- lambda{ @cli.super_admin('admin@example.com', false) }.should_not raise_error
109
- Admin.find('admin@example.com').super_admin?.should be true
110
- end
111
-
112
- it "disable super admin flag of an admin" do
113
- lambda{ @cli.super_admin('all@example.com', true) }.should_not raise_error
114
- Admin.find('all@example.com').super_admin?.should be false
115
- end
116
-
117
- it "can not user for unknown admin" do
118
- lambda{ @cli.super_admin('unknown_admin@example.com', false) }.should raise_error Error
119
- end
120
- end
121
-
122
106
  it "#change_admin_password" do
123
107
  lambda { @cli.change_admin_password('admin@example.com', 'new_password') }.should_not raise_error
124
108
  Admin.find('admin@example.com').password.should == CRAM_MD5_NEW_PASS
@@ -229,18 +213,21 @@ describe PostfixAdmin::CLI do
229
213
 
230
214
  describe "#edit_domain" do
231
215
  it "can update domain limitations" do
232
- lambda{ @cli.edit_domain('example.com', {:aliases => 40, :mailboxes => 40, :maxquota => 400}) }.should_not raise_error
216
+ lambda{ @cli.edit_domain('example.com', {aliases: 40, mailboxes: 40, maxquota: 400, active: false}) }.should_not raise_error
233
217
  domain = Domain.find('example.com')
234
218
  domain.maxaliases.should == 40
235
219
  domain.maxmailboxes.should == 40
236
220
  domain.maxquota.should == 400
221
+ expect(domain.active).to be false
237
222
  end
238
223
  end
239
224
 
240
225
  describe "#edit_account" do
241
226
  it "can update account" do
242
- lambda { @cli.edit_account('user@example.com', {:quota => 50}) }.should_not raise_error
243
- Mailbox.find('user@example.com').quota.should == 50 * KB_TO_MB
227
+ lambda { @cli.edit_account('user@example.com', {quota: 50, active: false}) }.should_not raise_error
228
+ mailbox = Mailbox.find('user@example.com')
229
+ mailbox.quota.should == 50 * KB_TO_MB
230
+ expect(mailbox.active).to be false
244
231
  end
245
232
 
246
233
  it "raise error when unknown account" do
@@ -248,6 +235,15 @@ describe PostfixAdmin::CLI do
248
235
  end
249
236
  end
250
237
 
238
+ describe "#edit_admin" do
239
+ it "can update admin" do
240
+ expect { @cli.edit_admin('admin@example.com', {super: true, active: false}) }.not_to raise_error
241
+ admin = Admin.find('admin@example.com')
242
+ expect(admin.super_admin?).to be true
243
+ expect(admin.active).to be false
244
+ end
245
+ end
246
+
251
247
  describe "#delete_domain" do
252
248
  it "can delete exist domain" do
253
249
  lambda { @cli.delete_domain('example.com') }.should_not raise_error
data/spec/runner_spec.rb CHANGED
@@ -66,31 +66,17 @@ describe PostfixAdmin::Runner do
66
66
  capture(:stdout){ Runner.start(['delete_domain', 'example.net']) }.should =~ EX_DELETED
67
67
  end
68
68
 
69
- describe "super_admin" do
70
- it "can enable super admin flag of an admin" do
71
- capture(:stdout){ Runner.start(['super', 'admin@example.com']) }.should =~ /Successfully enabled/
72
- end
73
-
74
- it "can disable super admin flag of an admin (--disable)" do
75
- capture(:stdout){ Runner.start(['super', 'admin@example.com', '--disable']) }.should =~ /Successfully disabled/
76
- end
77
-
78
- it "can use -d option as --disable" do
79
- capture(:stdout){ Runner.start(['super', 'admin@example.com', '-d']) }.should =~ /Successfully disabled/
80
- end
81
- end
82
-
83
69
  describe "admin_passwd" do
84
70
  it "can change password of an admin" do
85
71
  capture(:stdout){ Runner.start(['admin_passwd', 'admin@example.com', 'new_password']) }.should =~ /successfully changed/
86
72
  end
87
73
 
88
74
  it "can not use too short password (< 5)" do
89
- capture(:stderr){ Runner.start(['admin_passwd', 'admin@example.com', '124']) }.should =~ /too short/
75
+ exit_capture{ Runner.start(['admin_passwd', 'admin@example.com', '124']) }.should =~ /too short/
90
76
  end
91
77
 
92
78
  it "can not use for unknown admin" do
93
- capture(:stderr){ Runner.start(['admin_passwd', 'unknown@example.com', 'new_password']) }.should =~ /Could not find/
79
+ exit_capture{ Runner.start(['admin_passwd', 'unknown@example.com', 'new_password']) }.should =~ /Could not find/
94
80
  end
95
81
  end
96
82
 
@@ -101,11 +87,11 @@ describe PostfixAdmin::Runner do
101
87
  end
102
88
 
103
89
  it "can not use too short password (< 5)" do
104
- capture(:stderr){ Runner.start(['account_passwd', 'user@example.com', '1234']) }.should =~ /too short/
90
+ exit_capture{ Runner.start(['account_passwd', 'user@example.com', '1234']) }.should =~ /too short/
105
91
  end
106
92
 
107
93
  it "can not use for unknown account" do
108
- capture(:stderr){ Runner.start(['account_passwd', 'unknown@example.com', 'new_password']) }.should =~ /Could not find/
94
+ exit_capture{ Runner.start(['account_passwd', 'unknown@example.com', 'new_password']) }.should =~ /Could not find/
109
95
  end
110
96
  end
111
97
 
@@ -116,11 +102,11 @@ describe PostfixAdmin::Runner do
116
102
  end
117
103
 
118
104
  it "can not delete mailbox alias." do
119
- capture(:stderr){ Runner.start(['delete_alias', 'user@example.com']) }.should =~ /Can not delete mailbox/
105
+ exit_capture{ Runner.start(['delete_alias', 'user@example.com']) }.should =~ /Can not delete mailbox/
120
106
  end
121
107
 
122
108
  it "can not add an alias for existed mailbox" do
123
- capture(:stderr){ Runner.start(['add_alias', 'user@example.com', 'goto@example.jp']) }.should =~ /mailbox user@example.com is already registered!/
109
+ exit_capture{ Runner.start(['add_alias', 'user@example.com', 'goto@example.jp']) }.should =~ /mailbox user@example.com is already registered!/
124
110
  end
125
111
  end
126
112
 
@@ -135,7 +121,7 @@ describe PostfixAdmin::Runner do
135
121
 
136
122
  describe "scheme option" do
137
123
  it "--scheme does not show error" do
138
- capture(:stderr){ Runner.start(@args + ['--scheme', 'CRAM-MD5']) }.should == ""
124
+ exit_capture{ Runner.start(@args + ['--scheme', 'CRAM-MD5']) }.should == ""
139
125
  Admin.find('admin@example.jp').password.should == CRAM_MD5_PASS
140
126
  end
141
127
 
@@ -144,7 +130,7 @@ describe PostfixAdmin::Runner do
144
130
  end
145
131
 
146
132
  it "-s does not show error" do
147
- capture(:stderr){ Runner.start(@args + ['-s', 'CRAM-MD5']) }.should == ""
133
+ exit_capture{ Runner.start(@args + ['-s', 'CRAM-MD5']) }.should == ""
148
134
  end
149
135
 
150
136
  it "-s can resister admin" do
@@ -152,7 +138,7 @@ describe PostfixAdmin::Runner do
152
138
  end
153
139
 
154
140
  it "-s require argument" do
155
- capture(:stderr){ Runner.start(@args + ['-s']) }.should =~ /Specify password scheme/
141
+ exit_capture{ Runner.start(@args + ['-s']) }.should =~ /Specify password scheme/
156
142
  end
157
143
  end
158
144
 
@@ -169,13 +155,36 @@ describe PostfixAdmin::Runner do
169
155
  end
170
156
  end
171
157
 
158
+ describe "edit_admin" do
159
+ it "when no options, shows usage" do
160
+ expect(capture(:stderr){ Runner.start(['edit_admin', 'admin@example.com']) }).to match /Use one or more options/
161
+ end
162
+
163
+ it "can update active status" do
164
+ output = capture(:stdout){ Runner.start(['edit_admin', 'admin@example.com', '--no-active']) }
165
+ expect(output).to match EX_UPDATED
166
+ expect(output).to match /Active.+NO/
167
+ expect(output).to match /Role.+Admin/
168
+ end
169
+
170
+ it "can update super admin status" do
171
+ output = capture(:stdout){ Runner.start(['edit_admin', 'admin@example.com', '--super']) }
172
+ expect(output).to match EX_UPDATED
173
+ expect(output).to match /Domains.+ALL/
174
+ expect(output).to match /Active.+YES/
175
+ expect(output).to match /Role.+Super admin/
176
+ end
177
+ end
178
+
172
179
  describe "edit_domain" do
173
180
  it "when no options, shows usage" do
174
- capture(:stderr){ Runner.start(['edit_domain', 'example.com']) }.should =~ /Use one or more options/
181
+ exit_capture{ Runner.start(['edit_domain', 'example.com']) }.should =~ /Use one or more options/
175
182
  end
176
183
 
177
184
  it "can edit limitations of domain" do
178
- capture(:stdout){ Runner.start(['edit_domain', 'example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400']) }.should =~ EX_UPDATED
185
+ output = capture(:stdout){ Runner.start(['edit_domain', 'example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400', '--no-active']) }
186
+ expect(output).to match EX_UPDATED
187
+ expect(output).to match /Active.+NO/
179
188
  end
180
189
 
181
190
  it "aliases options -a, -m, -q" do
@@ -183,7 +192,7 @@ describe PostfixAdmin::Runner do
183
192
  end
184
193
 
185
194
  it "can not use unknown domain" do
186
- capture(:stderr){ Runner.start(['edit_domain', 'unknown.example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400'])}.should =~ /Could not find/
195
+ exit_capture{ Runner.start(['edit_domain', 'unknown.example.com', '--aliases', '40', '--mailboxes', '40', '--maxquota', '400'])}.should =~ /Could not find/
187
196
  end
188
197
  end
189
198
 
@@ -193,13 +202,14 @@ describe PostfixAdmin::Runner do
193
202
  end
194
203
 
195
204
  it "when no options, shows usage" do
196
- capture(:stderr){ Runner.start(@args) }.should =~ /Use one or more options/
205
+ exit_capture{ Runner.start(@args) }.should =~ /Use one or more options/
197
206
  end
198
207
 
199
208
  it "can edit quota limitation" do
200
- output = capture(:stdout){ Runner.start(@args + ['--quota', '50'])}
201
- output.should =~ EX_UPDATED
202
- output.should =~ /Quota/
209
+ output = capture(:stdout){ Runner.start(@args + ['--quota', '50', '--no-active'])}
210
+ expect(output).to match EX_UPDATED
211
+ expect(output).to match /Quota/
212
+ expect(output).to match /Active.+NO/
203
213
  end
204
214
 
205
215
  it "can use alias -q option" do
@@ -207,7 +217,7 @@ describe PostfixAdmin::Runner do
207
217
  end
208
218
 
209
219
  it "-q option require an argment" do
210
- capture(:stderr){ Runner.start(@args + ['-q'])}.should_not == ""
220
+ exit_capture{ Runner.start(@args + ['-q'])}.should_not == ""
211
221
  end
212
222
 
213
223
  it "can update name using --name option" do
@@ -226,7 +236,7 @@ describe PostfixAdmin::Runner do
226
236
  end
227
237
 
228
238
  it "-n option require an argument" do
229
- capture(:stderr){ Runner.start(@args + ['-n'])}.should_not == ""
239
+ exit_capture{ Runner.start(@args + ['-n'])}.should_not == ""
230
240
  end
231
241
  end
232
242
 
@@ -265,15 +275,15 @@ describe PostfixAdmin::Runner do
265
275
 
266
276
  describe "name option" do
267
277
  it "--name options does not raise error" do
268
- capture(:stderr){ Runner.start(@args + ['--name', @name]) }.should == ""
278
+ exit_capture{ Runner.start(@args + ['--name', @name]) }.should == ""
269
279
  end
270
280
 
271
281
  it "-n options does not raise error" do
272
- capture(:stderr){ Runner.start(@args + ['-n', @name]) }.should == ""
282
+ exit_capture{ Runner.start(@args + ['-n', @name]) }.should == ""
273
283
  end
274
284
 
275
285
  it "require an argument" do
276
- capture(:stderr){ Runner.start(@args + ['-n']) }.should_not == ""
286
+ exit_capture{ Runner.start(@args + ['-n']) }.should_not == ""
277
287
  end
278
288
 
279
289
  it "can change full name" do
@@ -282,14 +292,14 @@ describe PostfixAdmin::Runner do
282
292
  end
283
293
 
284
294
  it "can use Japanese" do
285
- capture(:stderr){ Runner.start(@args + ['-n', '黒川 仁']) }.should == ""
295
+ exit_capture{ Runner.start(@args + ['-n', '黒川 仁']) }.should == ""
286
296
  Mailbox.find(@user).name.should == '黒川 仁'
287
297
  end
288
298
  end
289
299
 
290
300
  describe "scheme" do
291
301
  it "--scheme require argument" do
292
- capture(:stderr){ Runner.start(@args + ['--scheme']) }.should =~ /Specify password scheme/
302
+ exit_capture{ Runner.start(@args + ['--scheme']) }.should =~ /Specify password scheme/
293
303
  end
294
304
 
295
305
  it "can use CRAM-MD5 using --scheme" do
@@ -323,7 +333,7 @@ describe PostfixAdmin::Runner do
323
333
 
324
334
  describe "dump" do
325
335
  it "does not raise error" do
326
- capture(:stderr){ Runner.start(['dump']) }.should == ""
336
+ exit_capture{ Runner.start(['dump']) }.should == ""
327
337
  end
328
338
 
329
339
  it "all data" do
data/spec/spec_helper.rb CHANGED
@@ -164,8 +164,13 @@ RSpec.configure do |config|
164
164
  begin
165
165
  stream = stream.to_s
166
166
  eval "$#{stream} = StringIO.new"
167
+ $stderr = StringIO.new if stream != "stderr"
167
168
  yield
168
169
  result = eval("$#{stream}").string
170
+ rescue SystemExit => e
171
+ message = $stderr.string
172
+ message += e.message
173
+ raise message
169
174
  ensure
170
175
  eval("$#{stream} = #{stream.upcase}")
171
176
  end
@@ -173,6 +178,17 @@ RSpec.configure do |config|
173
178
  result
174
179
  end
175
180
 
181
+ def exit_capture
182
+ begin
183
+ $stderr = StringIO.new
184
+ yield
185
+ rescue SystemExit => e
186
+ ensure
187
+ result = $stderr.string
188
+ end
189
+ result
190
+ end
191
+
176
192
  def source_root
177
193
  File.join(File.dirname(__FILE__), 'fixtures')
178
194
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postfix_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hitoshi Kurokawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-13 00:00:00.000000000 Z
11
+ date: 2016-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.19.1
20
20
  type: :runtime
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: '0'
26
+ version: 0.19.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: data_mapper
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -174,3 +174,4 @@ test_files:
174
174
  - spec/runner_spec.rb
175
175
  - spec/spec_helper.rb
176
176
  - spec/tmp/.gitkeep
177
+ has_rdoc: