butler 1.8.2 → 1.8.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.
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: []