postfix_admin 0.1.2 → 0.1.3

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: 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: