butler 1.8.2 → 1.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/Rakefile +1 -1
  2. data/bin/botcontrol +1 -1
  3. data/data/butler/dialogs/create_config.rb +2 -2
  4. data/data/butler/dialogs/quickcreate.rb +6 -4
  5. data/data/butler/dialogs/uninstall.rb +4 -3
  6. data/data/butler/plugins/core/access.rb +10 -10
  7. data/data/butler/plugins/dev/bleakhouse.rb +19 -8
  8. data/data/butler/plugins/operator/deop.rb +10 -1
  9. data/data/butler/plugins/operator/devoice.rb +9 -0
  10. data/data/butler/plugins/operator/limit.rb +12 -0
  11. data/data/butler/plugins/operator/op.rb +9 -0
  12. data/data/butler/plugins/operator/voice.rb +10 -0
  13. data/data/butler/plugins/util/calculator.rb +11 -0
  14. data/data/butler/services/org.rubyforge.butler/calculator/1/calculator.rb +68 -0
  15. data/data/butler/services/org.rubyforge.butler/log/1/service.rb +198 -0
  16. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/acknowledge.yaml +8 -0
  17. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/gratitude.yaml +3 -0
  18. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/hello.yaml +6 -0
  19. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/ignorance.yaml +7 -0
  20. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/ignorance_about.yaml +3 -0
  21. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/insult.yaml +3 -0
  22. data/data/butler/services/org.rubyforge.butler/strings/1/data/en/rejection.yaml +12 -0
  23. data/data/butler/services/org.rubyforge.butler/strings/1/service.rb +50 -0
  24. data/lib/access.rb +6 -3
  25. data/lib/access/privilege.rb +9 -78
  26. data/lib/access/privilegelist.rb +75 -0
  27. data/lib/access/role.rb +14 -94
  28. data/lib/access/role/base.rb +40 -0
  29. data/lib/access/rolelist.rb +99 -0
  30. data/lib/access/savable.rb +6 -3
  31. data/lib/access/user.rb +21 -19
  32. data/lib/access/version.rb +17 -0
  33. data/lib/access/yamlbase.rb +64 -48
  34. data/lib/butler.rb +1 -0
  35. data/lib/butler/bot.rb +8 -2
  36. data/lib/butler/control.rb +3 -1
  37. data/lib/butler/initialvalues.rb +1 -1
  38. data/lib/butler/irc/client.rb +6 -0
  39. data/lib/butler/irc/message.rb +14 -9
  40. data/lib/butler/irc/parser.rb +8 -5
  41. data/lib/butler/irc/parser/generic.rb +33 -1
  42. data/lib/butler/irc/parser/rfc2812.rb +5 -2
  43. data/lib/butler/plugin.rb +22 -2
  44. data/lib/butler/plugins.rb +2 -7
  45. data/lib/butler/service.rb +73 -0
  46. data/lib/butler/services.rb +65 -0
  47. data/lib/butler/version.rb +1 -1
  48. data/lib/ruby/array/random.rb +17 -0
  49. data/lib/ruby/string/camelcase.rb +14 -0
  50. data/test/test_access.rb +164 -59
  51. data/test/test_access/privilege/banners.statistics.yaml +3 -0
  52. data/test/test_access/privilege/banners.yaml +3 -0
  53. data/test/test_access/privilege/news.create.yaml +3 -0
  54. data/test/test_access/privilege/news.delete.yaml +3 -0
  55. data/test/test_access/privilege/news.edit.yaml +3 -0
  56. data/test/test_access/privilege/news.read.yaml +3 -0
  57. data/test/test_access/privilege/news.yaml +3 -0
  58. data/test/test_access/privilege/paid_content.yaml +3 -0
  59. data/test/test_access/privilege/statistics.ftp.yaml +3 -0
  60. data/test/test_access/privilege/statistics.web.yaml +3 -0
  61. data/test/test_access/privilege/statistics.yaml +3 -0
  62. data/test/test_access/role/chiefeditor.yaml +7 -0
  63. data/test/test_access/role/editor.yaml +9 -0
  64. data/test/test_access/user/test.yaml +12 -0
  65. metadata +51 -5
  66. data/data/butler/plugins/core/user.rb +0 -166
  67. data/data/butler/plugins/dev/onhandlers.rb +0 -93
  68. data/data/butler/plugins/service/log.rb +0 -183
@@ -0,0 +1,17 @@
1
+ class Array
2
+ # Get a random element of this array
3
+ # With an argument it gets you n elements without no index used more than once
4
+ def random(n=nil)
5
+ unless n then
6
+ at(rand(length))
7
+ else
8
+ raise ArgumentError unless Integer === n and n.between?(0,length)
9
+ ary = dup
10
+ n.times { |i|
11
+ r = rand(n-i)+i
12
+ ary[r], ary[i] = ary[i], ary[r]
13
+ }
14
+ ary.first(n)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ #--
2
+ # Copyright 2007 by Stefan Rusterholz.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+
8
+
9
+ class String
10
+ # CamelCase a string, e.g. "foo_bar" becomes "FooBar"
11
+ def camelcase
12
+ scan(/[^_]+/).map { |s| s.capitalize }.join("")
13
+ end
14
+ end
data/test/test_access.rb CHANGED
@@ -1,16 +1,26 @@
1
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)+'/../lib')) if __FILE__ == $0
2
+
1
3
  require 'access'
2
4
  require 'fileutils'
3
5
  require 'test/unit'
4
6
 
5
7
  class TestAccess < Test::Unit::TestCase
6
- TestDir = "test_access"
8
+ TestDir = File.expand_path(File.dirname(__FILE__)+"/test_access")
7
9
  def setup
8
10
  #raise "#{TestDir} already exists, aborting test" if File.exist?(TestDir)
9
11
  _teardown if File.exist?(TestDir)
10
- Dir.mkdir(TestDir)
11
- Dir.mkdir("#{TestDir}/user")
12
- Dir.mkdir("#{TestDir}/role")
13
- Dir.mkdir("#{TestDir}/privilege")
12
+ %W[
13
+ #{TestDir}
14
+ #{TestDir}/user
15
+ #{TestDir}/role
16
+ #{TestDir}/privilege
17
+ ].each { |dir|
18
+ Dir.mkdir(dir)
19
+ }
20
+ end
21
+
22
+ def teardown
23
+ # _teardown
14
24
  end
15
25
 
16
26
  def _teardown
@@ -24,78 +34,173 @@ class TestAccess < Test::Unit::TestCase
24
34
  Access::YAMLBase.new(Access::Privilege::Base, "#{TestDir}/privilege")
25
35
  #:channel => Access::YAMLBase.new("#{TestDir}/channel", Access::Location)
26
36
  )
37
+
38
+ # no user may yet exist
27
39
  assert(!access.user.exists?("test"))
40
+
41
+ # create a user
28
42
  access.user.create("test", "pass")
29
43
  assert(access.user.exists?("test"))
30
44
 
31
- %w(news news/read news/create news/edit news/delete banners banners/statistics
32
- statistics statistics/web statistics/ftp paid_content).each { |priv|
33
- assert(!access.privilege.exists?(priv))
34
- access.privilege.create(priv, "test-privilege #{priv}")
35
- assert(access.privilege.exists?(priv))
36
- }
37
-
38
- access.role.create("editor", "testrole description", %w(news/create news/edit statistics))
39
- access.role.create("chiefeditor", "testrole description 2", %w(news), %w(editor))
40
-
45
+ # login
46
+ user = access.login("test", "wrongpass")
47
+ assert(!user)
41
48
  user = access.login("test", "pass")
42
49
  assert(user)
43
50
  assert(user.logged?)
51
+
52
+ # test setting of being set to active
44
53
  assert(!user.active?)
45
54
  assert(user.inactive?)
46
55
  user.active = true
47
56
  assert(user.active?)
48
57
  assert(!user.inactive?)
49
- user = access.user["test", true]
50
- assert(user)
51
- assert(user.active?)
52
- assert(!user.inactive?)
53
- assert(!user.logged?)
54
58
 
55
- assert(!user.privileged?("foo"))
56
- assert(!user.privileged?("foo/bar"))
57
- assert(!user.privileged?("foo/baz"))
58
- assert(!user.privileged?("bar"))
59
- assert(!user.privileged?("bar/foo"))
60
- assert(!user.privileged?("baz"))
61
-
62
- assert(!user.authorized?("foo"))
63
- assert(!user.authorized?("foo/bar"))
64
- assert(!user.authorized?("foo/baz"))
65
- assert(!user.authorized?("bar"))
66
- assert(!user.authorized?("bar/foo"))
67
- assert(!user.authorized?("baz"))
68
-
69
- user.privileges.add(%w(banners statistics/web paid_content))
59
+ # we do not have any role or privilege
60
+ assert(!user.privileged?("news"))
61
+ assert(!user.authorized?("news"))
62
+
63
+ # add some privileges
64
+ %w(
65
+ news
66
+ news/read
67
+ news/create
68
+ news/edit
69
+ news/delete
70
+ banners
71
+ banners/statistics
72
+ statistics
73
+ statistics/web
74
+ statistics/ftp
75
+ paid_content
76
+ ).each { |priv|
77
+ assert(!access.privilege.exists?(priv))
78
+ access.privilege.create(priv, "test-privilege #{priv}")
79
+ assert(access.privilege.exists?(priv))
80
+ }
81
+
82
+ # we have not yet added those privileges so still should not have them
83
+ assert(!user.privileged?("news"))
84
+ assert(!user.privileged?("news/read"))
85
+ assert(!user.privileged?("banners"))
86
+ assert(!user.privileged?("statistics"))
87
+ assert(!user.privileged?("statistics/web"))
88
+ assert(!user.privileged?("paid_content"))
89
+
90
+ assert(!user.authorized?("news"))
91
+ assert(!user.authorized?("news/read"))
92
+ assert(!user.authorized?("banners"))
93
+ assert(!user.authorized?("statistics"))
94
+ assert(!user.authorized?("statistics/web"))
95
+ assert(!user.authorized?("paid_content"))
96
+
97
+ # add the privileges to the user
98
+ %w[banners statistics/web paid_content news].each { |priv|
99
+ user.privileges.add_oid(priv)
100
+ }
101
+
102
+ # now we should have them
103
+ assert(user.privileged?("news"))
104
+ assert(user.privileged?("news/read"))
105
+ assert(user.privileged?("banners"))
106
+ assert(!user.privileged?("statistics"))
107
+ assert(user.privileged?("statistics/web"))
108
+ assert(user.privileged?("paid_content"))
109
+
110
+ assert(user.authorized?("news"))
111
+ assert(user.authorized?("news/read"))
112
+ assert(user.authorized?("banners"))
113
+ assert(!user.authorized?("statistics"))
114
+ assert(user.authorized?("statistics/web"))
115
+ assert(user.authorized?("paid_content"))
116
+
117
+ # news was an 'accident', let's remove it
118
+ user.privileges.remove_oid("news")
70
119
 
120
+ # now we should have them
121
+ assert(!user.privileged?("news"))
122
+ assert(!user.privileged?("news/read"))
71
123
  assert(user.privileged?("banners"))
72
- assert(user.privileged?("banners/statistics"))
124
+ assert(!user.privileged?("statistics"))
73
125
  assert(user.privileged?("statistics/web"))
126
+ assert(user.privileged?("paid_content"))
127
+
128
+ assert(!user.authorized?("news"))
129
+ assert(!user.authorized?("news/read"))
130
+ assert(user.authorized?("banners"))
131
+ assert(!user.authorized?("statistics"))
132
+ assert(user.authorized?("statistics/web"))
133
+ assert(user.authorized?("paid_content"))
134
+
135
+ # add some roles
136
+ access.role.create("editor", "testrole description 1", %w(news/create news/edit statistics))
137
+ access.role.create("chiefeditor", "testrole description 2", %w(news), %w(editor))
138
+
139
+ # add some roles to our user
140
+ user.roles.add_oid("editor")
141
+
142
+ # we should now have the associated privileges
143
+ assert(!user.privileged?("news"))
144
+ assert(user.privileged?("news/edit"))
145
+ assert(user.privileged?("news/create"))
146
+ assert(user.privileged?("banners"))
147
+ assert(user.privileged?("statistics"))
148
+ assert(user.privileged?("statistics/web"))
149
+ assert(user.privileged?("paid_content"))
150
+
151
+ assert(!user.authorized?("news"))
152
+ assert(user.authorized?("news/edit"))
153
+ assert(user.authorized?("news/create"))
154
+ assert(user.authorized?("banners"))
155
+ assert(user.authorized?("statistics"))
156
+ assert(user.authorized?("statistics/web"))
157
+ assert(user.authorized?("paid_content"))
158
+
159
+ # remove the role again
160
+ user.roles.remove_oid("editor")
161
+
162
+ # we should no longer have the associated privileges
163
+ assert(!user.privileged?("news"))
164
+ assert(!user.privileged?("news/edit"))
165
+ assert(!user.privileged?("news/create"))
166
+ assert(user.privileged?("banners"))
74
167
  assert(!user.privileged?("statistics"))
75
- assert(user.privileged?("bar/foo"))
76
- assert(user.privileged?("baz"))
77
-
78
- assert(!user.authorized?("foo"))
79
- assert(!user.authorized?("foo/bar"))
80
- assert(!user.authorized?("foo/baz"))
81
- assert(!user.authorized?("bar"))
82
- assert(!user.authorized?("bar/foo"))
83
- assert(!user.authorized?("baz"))
168
+ assert(user.privileged?("statistics/web"))
169
+ assert(user.privileged?("paid_content"))
170
+
171
+ assert(!user.authorized?("news"))
172
+ assert(!user.authorized?("news/edit"))
173
+ assert(!user.authorized?("news/create"))
174
+ assert(user.authorized?("banners"))
175
+ assert(!user.authorized?("statistics"))
176
+ assert(user.authorized?("statistics/web"))
177
+ assert(user.authorized?("paid_content"))
178
+
179
+ # add it back again to see if reloading works
180
+ user.roles.add_oid("editor")
181
+ access = Access.new(
182
+ Access::YAMLBase.new(Access::User::Base, "#{TestDir}/user"),
183
+ Access::YAMLBase.new(Access::Role::Base, "#{TestDir}/role"),
184
+ Access::YAMLBase.new(Access::Privilege::Base, "#{TestDir}/privilege")
185
+ #:channel => Access::YAMLBase.new("#{TestDir}/channel", Access::Location)
186
+ )
84
187
 
85
- user = access.login("test", "pass")
188
+ assert(access.user.exists?("test"))
189
+ assert(user = access.login("test", "pass"))
190
+ assert(!user.privileged?("news"))
191
+ assert(user.privileged?("news/edit"))
192
+ assert(user.privileged?("news/create"))
193
+ assert(user.privileged?("banners"))
194
+ assert(user.privileged?("statistics"))
195
+ assert(user.privileged?("statistics/web"))
196
+ assert(user.privileged?("paid_content"))
86
197
 
87
- assert(user.privileged?("foo"))
88
- assert(user.privileged?("foo/bar"))
89
- assert(user.privileged?("foo/baz"))
90
- assert(!user.privileged?("bar"))
91
- assert(user.privileged?("bar/foo"))
92
- assert(user.privileged?("baz"))
93
-
94
- assert(user.authorized?("foo"))
95
- assert(user.authorized?("foo/bar"))
96
- assert(user.authorized?("foo/baz"))
97
- assert(!user.authorized?("bar"))
98
- assert(user.authorized?("bar/foo"))
99
- assert(user.authorized?("baz"))
198
+ assert(!user.authorized?("news"))
199
+ assert(user.authorized?("news/edit"))
200
+ assert(user.authorized?("news/create"))
201
+ assert(user.authorized?("banners"))
202
+ assert(user.authorized?("statistics"))
203
+ assert(user.authorized?("statistics/web"))
204
+ assert(user.authorized?("paid_content"))
100
205
  end
101
206
  end
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege banners/statistics
3
+ :oid: banners/statistics
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege banners
3
+ :oid: banners
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege news/create
3
+ :oid: news/create
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege news/delete
3
+ :oid: news/delete
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege news/edit
3
+ :oid: news/edit
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege news/read
3
+ :oid: news/read
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege news
3
+ :oid: news
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege paid_content
3
+ :oid: paid_content
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege statistics/ftp
3
+ :oid: statistics/ftp
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege statistics/web
3
+ :oid: statistics/web
@@ -0,0 +1,3 @@
1
+ ---
2
+ :description: test-privilege statistics
3
+ :oid: statistics
@@ -0,0 +1,7 @@
1
+ ---
2
+ :description: testrole description 2
3
+ :oid: chiefeditor
4
+ :roles:
5
+ - editor
6
+ :privileges:
7
+ news:
@@ -0,0 +1,9 @@
1
+ ---
2
+ :description: testrole description 1
3
+ :oid: editor
4
+ :roles: []
5
+
6
+ :privileges:
7
+ news/create:
8
+ statistics:
9
+ news/edit:
@@ -0,0 +1,12 @@
1
+ ---
2
+ :oid: test
3
+ :roles:
4
+ - editor
5
+ :privileges:
6
+ banners:
7
+ statistics/web:
8
+ paid_content:
9
+ :credentials: 2F3BC18C0D3E6B1B8A445075535D26E9
10
+ :active: true
11
+ :meta:
12
+ :admin: false
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: butler
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.8.2
7
- date: 2007-11-28 00:00:00 +01:00
6
+ version: 1.8.3
7
+ date: 2007-12-06 00:00:00 +01:00
8
8
  summary: Butler - the IRC bot with class
9
9
  require_paths:
10
10
  - lib
@@ -79,12 +79,10 @@ files:
79
79
  - data/butler/plugins/core/access.rb
80
80
  - data/butler/plugins/core/logout.rb
81
81
  - data/butler/plugins/core/plugins.rb
82
- - data/butler/plugins/core/user.rb
83
82
  - data/butler/plugins/dev
84
83
  - data/butler/plugins/dev/bleakhouse.rb
85
84
  - data/butler/plugins/dev/eval.rb
86
85
  - data/butler/plugins/dev/nometa.rb
87
- - data/butler/plugins/dev/onhandlers.rb
88
86
  - data/butler/plugins/dev/raw.rb
89
87
  - data/butler/plugins/dev/rawlog.rb
90
88
  - data/butler/plugins/games
@@ -112,13 +110,33 @@ files:
112
110
  - data/butler/plugins/service
113
111
  - data/butler/plugins/service/clones.rb
114
112
  - data/butler/plugins/service/define.rb
115
- - data/butler/plugins/service/log.rb
116
113
  - data/butler/plugins/service/more.rb
117
114
  - data/butler/plugins/service/svn.rb
118
115
  - data/butler/plugins/util
116
+ - data/butler/plugins/util/calculator.rb
119
117
  - data/butler/plugins/util/cycle.rb
120
118
  - data/butler/plugins/util/load.rb
121
119
  - data/butler/plugins/util/pong.rb
120
+ - data/butler/services
121
+ - data/butler/services/org.rubyforge.butler
122
+ - data/butler/services/org.rubyforge.butler/calculator
123
+ - data/butler/services/org.rubyforge.butler/calculator/1
124
+ - data/butler/services/org.rubyforge.butler/calculator/1/calculator.rb
125
+ - data/butler/services/org.rubyforge.butler/log
126
+ - data/butler/services/org.rubyforge.butler/log/1
127
+ - data/butler/services/org.rubyforge.butler/log/1/service.rb
128
+ - data/butler/services/org.rubyforge.butler/strings
129
+ - data/butler/services/org.rubyforge.butler/strings/1
130
+ - data/butler/services/org.rubyforge.butler/strings/1/data
131
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en
132
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/acknowledge.yaml
133
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/gratitude.yaml
134
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/hello.yaml
135
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/ignorance.yaml
136
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/ignorance_about.yaml
137
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/insult.yaml
138
+ - data/butler/services/org.rubyforge.butler/strings/1/data/en/rejection.yaml
139
+ - data/butler/services/org.rubyforge.butler/strings/1/service.rb
122
140
  - data/butler/strings
123
141
  - data/butler/strings/random
124
142
  - data/butler/strings/random/acknowledge.en.yaml
@@ -133,9 +151,14 @@ files:
133
151
  - lib/access
134
152
  - lib/access/admin.rb
135
153
  - lib/access/privilege.rb
154
+ - lib/access/privilegelist.rb
155
+ - lib/access/role
156
+ - lib/access/role/base.rb
136
157
  - lib/access/role.rb
158
+ - lib/access/rolelist.rb
137
159
  - lib/access/savable.rb
138
160
  - lib/access/user.rb
161
+ - lib/access/version.rb
139
162
  - lib/access/yamlbase.rb
140
163
  - lib/access.rb
141
164
  - lib/butler
@@ -174,6 +197,8 @@ files:
174
197
  - lib/butler/plugin/trigger.rb
175
198
  - lib/butler/plugin.rb
176
199
  - lib/butler/plugins.rb
200
+ - lib/butler/service.rb
201
+ - lib/butler/services.rb
177
202
  - lib/butler/session.rb
178
203
  - lib/butler/version.rb
179
204
  - lib/butler.rb
@@ -210,6 +235,7 @@ files:
210
235
  - lib/ruby
211
236
  - lib/ruby/array
212
237
  - lib/ruby/array/columnize.rb
238
+ - lib/ruby/array/random.rb
213
239
  - lib/ruby/dir
214
240
  - lib/ruby/dir/mktree.rb
215
241
  - lib/ruby/enumerable
@@ -230,6 +256,7 @@ files:
230
256
  - lib/ruby/range/stepped.rb
231
257
  - lib/ruby/string
232
258
  - lib/ruby/string/arguments.rb
259
+ - lib/ruby/string/camelcase.rb
233
260
  - lib/ruby/string/chunks.rb
234
261
  - lib/ruby/string/post_arguments.rb
235
262
  - lib/ruby/string/unescaped.rb
@@ -243,6 +270,7 @@ files:
243
270
  - lib/string.rb
244
271
  - lib/templater.rb
245
272
  - lib/w3validator.rb
273
+ - test/access
246
274
  - test/butler
247
275
  - test/butler/plugin
248
276
  - test/butler/plugin/mapper.rb
@@ -259,6 +287,24 @@ files:
259
287
  - test/irc/serverlistings
260
288
  - test/irc/serverlistings/test_rpl_hiddenhost.txt
261
289
  - test/irc/users.rb
290
+ - test/test_access
291
+ - test/test_access/privilege
292
+ - test/test_access/privilege/banners.statistics.yaml
293
+ - test/test_access/privilege/banners.yaml
294
+ - test/test_access/privilege/news.create.yaml
295
+ - test/test_access/privilege/news.delete.yaml
296
+ - test/test_access/privilege/news.edit.yaml
297
+ - test/test_access/privilege/news.read.yaml
298
+ - test/test_access/privilege/news.yaml
299
+ - test/test_access/privilege/paid_content.yaml
300
+ - test/test_access/privilege/statistics.ftp.yaml
301
+ - test/test_access/privilege/statistics.web.yaml
302
+ - test/test_access/privilege/statistics.yaml
303
+ - test/test_access/role
304
+ - test/test_access/role/chiefeditor.yaml
305
+ - test/test_access/role/editor.yaml
306
+ - test/test_access/user
307
+ - test/test_access/user/test.yaml
262
308
  - test/test_access.rb
263
309
  - test/test_configuration.rb
264
310
  test_files: []