runo 0.2.1 → 0.2.2

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 (151) hide show
  1. data/README.rdoc +1 -118
  2. data/bin/runo +4 -29
  3. data/lib/dummy.rb +0 -0
  4. metadata +12 -278
  5. data/lib/_error.rb +0 -14
  6. data/lib/_field.rb +0 -260
  7. data/lib/_i18n.rb +0 -144
  8. data/lib/_parser.rb +0 -256
  9. data/lib/_path.rb +0 -86
  10. data/lib/_storage/_storage.rb +0 -215
  11. data/lib/_storage/file.rb +0 -201
  12. data/lib/_storage/sequel.rb +0 -174
  13. data/lib/_storage/temp.rb +0 -73
  14. data/lib/_widget/action_create.rb +0 -23
  15. data/lib/_widget/action_login.rb +0 -22
  16. data/lib/_widget/action_signup.rb +0 -16
  17. data/lib/_widget/action_update.rb +0 -16
  18. data/lib/_widget/crumb.rb +0 -24
  19. data/lib/_widget/done.rb +0 -16
  20. data/lib/_widget/login.rb +0 -25
  21. data/lib/_widget/me.rb +0 -31
  22. data/lib/_widget/message.rb +0 -51
  23. data/lib/_widget/navi.rb +0 -88
  24. data/lib/_widget/submit.rb +0 -49
  25. data/lib/_widget/view_ym.rb +0 -77
  26. data/lib/_workflow/_workflow.rb +0 -89
  27. data/lib/_workflow/attachment.rb +0 -50
  28. data/lib/_workflow/blog.rb +0 -28
  29. data/lib/_workflow/contact.rb +0 -23
  30. data/lib/_workflow/forum.rb +0 -26
  31. data/lib/_workflow/register.rb +0 -39
  32. data/lib/meta/_meta.rb +0 -20
  33. data/lib/meta/group.rb +0 -19
  34. data/lib/meta/id.rb +0 -59
  35. data/lib/meta/owner.rb +0 -21
  36. data/lib/meta/timestamp.rb +0 -118
  37. data/lib/runo.rb +0 -396
  38. data/lib/scalar/checkbox.rb +0 -68
  39. data/lib/scalar/file.rb +0 -144
  40. data/lib/scalar/img.rb +0 -112
  41. data/lib/scalar/password.rb +0 -58
  42. data/lib/scalar/radio.rb +0 -47
  43. data/lib/scalar/select.rb +0 -47
  44. data/lib/scalar/text.rb +0 -38
  45. data/lib/scalar/textarea.rb +0 -35
  46. data/lib/scalar/textarea_pre.rb +0 -14
  47. data/lib/scalar/textarea_wiki.rb +0 -173
  48. data/lib/set/_set.rb +0 -196
  49. data/lib/set/dynamic.rb +0 -177
  50. data/lib/set/static.rb +0 -102
  51. data/lib/set/static_folder.rb +0 -96
  52. data/locale/en/index.po +0 -242
  53. data/locale/index.pot +0 -243
  54. data/locale/ja/index.po +0 -242
  55. data/locale/lazy_parser.rb +0 -54
  56. data/skel/config.ru +0 -27
  57. data/skel/skin/_users/00000000_frank-avatar.jpg +0 -0
  58. data/skel/skin/_users/00000000_frank-avatar_small.jpg +0 -0
  59. data/skel/skin/_users/00000000_frank.yaml +0 -12
  60. data/skel/skin/_users/00000000_root-avatar.jpg +0 -0
  61. data/skel/skin/_users/00000000_root-avatar_small.jpg +0 -0
  62. data/skel/skin/_users/00000000_root.yaml +0 -11
  63. data/skel/skin/_users/css/users.css +0 -21
  64. data/skel/skin/_users/css/users.less +0 -25
  65. data/skel/skin/_users/done.html +0 -42
  66. data/skel/skin/_users/index.html +0 -46
  67. data/skel/skin/_users/index.yaml +0 -3
  68. data/skel/skin/_users/summary.html +0 -40
  69. data/skel/skin/css/base.css +0 -93
  70. data/skel/skin/css/base.less +0 -139
  71. data/skel/skin/css/coax.css +0 -199
  72. data/skel/skin/css/coax.less +0 -244
  73. data/skel/skin/examples/blog/20091214_0001.yaml +0 -8
  74. data/skel/skin/examples/blog/20100630_0001.yaml +0 -8
  75. data/skel/skin/examples/blog/20100630_0002.yaml +0 -14
  76. data/skel/skin/examples/blog/20100701_0001.yaml +0 -8
  77. data/skel/skin/examples/blog/20100701_0002-a-20100701_0001-f.jpg +0 -0
  78. data/skel/skin/examples/blog/20100701_0002-a-20100701_0001-f_small.jpg +0 -0
  79. data/skel/skin/examples/blog/20100701_0002.yaml +0 -19
  80. data/skel/skin/examples/blog/frank/20100701_0001.yaml +0 -10
  81. data/skel/skin/examples/blog/frank/index.yaml +0 -4
  82. data/skel/skin/examples/blog/index.html +0 -51
  83. data/skel/skin/examples/blog/rss.xml +0 -18
  84. data/skel/skin/examples/contact/20100701_0001-file.txt +0 -1
  85. data/skel/skin/examples/contact/20100701_0001.yaml +0 -15
  86. data/skel/skin/examples/contact/20100701_0002.yaml +0 -8
  87. data/skel/skin/examples/contact/20100701_0003.yaml +0 -9
  88. data/skel/skin/examples/contact/index.html +0 -47
  89. data/skel/skin/examples/contact/js/contact.js +0 -13
  90. data/skel/skin/examples/contact/summary.html +0 -54
  91. data/skel/skin/examples/forum/20100701_0001.yaml +0 -41
  92. data/skel/skin/examples/forum/20100701_0002.yaml +0 -25
  93. data/skel/skin/examples/forum/index.html +0 -68
  94. data/skel/skin/examples/forum/summary.html +0 -47
  95. data/skel/skin/examples/index.html +0 -73
  96. data/skel/skin/index.html +0 -39
  97. data/skel/skin/js/base.js +0 -50
  98. data/t/locale/de/index.po +0 -19
  99. data/t/locale/en-GB/index.po +0 -25
  100. data/t/locale/ja/index.po +0 -30
  101. data/t/skin/_users/00000000_test.yaml +0 -3
  102. data/t/skin/_users/index.html +0 -13
  103. data/t/skin/foo/20091120_0001.yaml +0 -7
  104. data/t/skin/foo/bar/20091120_0001.yaml +0 -5
  105. data/t/skin/foo/bar/index.yaml +0 -5
  106. data/t/skin/foo/baz/css/baz.css +0 -1
  107. data/t/skin/foo/css/foo.css +0 -1
  108. data/t/skin/foo/index.html +0 -14
  109. data/t/skin/foo/index.yaml +0 -7
  110. data/t/skin/foo/not_css/foo.css +0 -1
  111. data/t/skin/foo/qux/index.html +0 -8
  112. data/t/skin/foo/qux/moo/index.html +0 -6
  113. data/t/skin/foo/sub-20100306_0001.yaml +0 -3
  114. data/t/skin/index.yaml +0 -3
  115. data/t/skin/t_attachment/index.html +0 -13
  116. data/t/skin/t_contact/done.html +0 -6
  117. data/t/skin/t_contact/index.html +0 -9
  118. data/t/skin/t_file/index.html +0 -16
  119. data/t/skin/t_img/index.html +0 -14
  120. data/t/skin/t_img/test.jpg +0 -0
  121. data/t/skin/t_select/index.html +0 -9
  122. data/t/skin/t_store/index.html +0 -9
  123. data/t/skin/t_summary/20100326_0001.yaml +0 -3
  124. data/t/skin/t_summary/create.html +0 -9
  125. data/t/skin/t_summary/index.html +0 -9
  126. data/t/skin/t_summary/summary.html +0 -9
  127. data/t/t.rb +0 -27
  128. data/t/test_checkbox.rb +0 -273
  129. data/t/test_field.rb +0 -330
  130. data/t/test_file.rb +0 -900
  131. data/t/test_id.rb +0 -215
  132. data/t/test_img.rb +0 -328
  133. data/t/test_meta.rb +0 -57
  134. data/t/test_parser.rb +0 -1516
  135. data/t/test_password.rb +0 -188
  136. data/t/test_radio.rb +0 -226
  137. data/t/test_role.rb +0 -249
  138. data/t/test_runo.rb +0 -768
  139. data/t/test_runo_call.rb +0 -1281
  140. data/t/test_runo_i18n.rb +0 -325
  141. data/t/test_select.rb +0 -182
  142. data/t/test_set_complex.rb +0 -527
  143. data/t/test_set_dynamic.rb +0 -1504
  144. data/t/test_set_folder.rb +0 -515
  145. data/t/test_set_permit.rb +0 -246
  146. data/t/test_set_static.rb +0 -468
  147. data/t/test_storage.rb +0 -915
  148. data/t/test_text.rb +0 -125
  149. data/t/test_textarea.rb +0 -138
  150. data/t/test_timestamp.rb +0 -473
  151. data/t/test_workflow.rb +0 -367
@@ -1,367 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009 Akira FUNAI
5
-
6
- require "#{::File.dirname __FILE__}/t"
7
-
8
- class TC_Workflow < Test::Unit::TestCase
9
-
10
- class Runo::Workflow::Foo < Runo::Workflow
11
- PERM = {
12
- :create => 0b11000,
13
- :read => 0b11110,
14
- :update => 0b10100,
15
- :delete => 0b11000,
16
- }
17
- end
18
-
19
- def setup
20
- end
21
-
22
- def teardown
23
- end
24
-
25
- def test_instance
26
- sd = Runo::Set::Dynamic.new
27
- assert_instance_of(
28
- Runo::Workflow,
29
- Runo::Workflow.instance(sd),
30
- 'Runo::Workflow.instance should return a Workflow instance if sd[:workflow] is nil'
31
- )
32
- sd = Runo::Set::Static::Folder.root.item('foo', 'main')
33
- assert_instance_of(
34
- Runo::Workflow::Blog,
35
- Runo::Workflow.instance(sd),
36
- 'Runo::Workflow.instance should return a instance according to sd[:workflow]'
37
- )
38
-
39
- assert_equal(
40
- sd,
41
- Runo::Workflow.instance(sd).sd,
42
- 'Runo::Workflow.instance should set @sd'
43
- )
44
- end
45
-
46
- def test_roles
47
- assert_equal(
48
- %w(none),
49
- Runo::Workflow.roles(0b00001),
50
- 'Runo::Workflow.roles should return a human-readable string of the given roles'
51
- )
52
- assert_equal(
53
- %w(owner),
54
- Runo::Workflow.roles(0b00100),
55
- 'Runo::Workflow.roles should return a human-readable string of the given roles'
56
- )
57
- assert_equal(
58
- %w(admin),
59
- Runo::Workflow.roles(0b10000),
60
- 'Runo::Workflow.roles should return a human-readable string of the given roles'
61
- )
62
- assert_equal(
63
- %w(admin owner user),
64
- Runo::Workflow.roles(0b10110),
65
- 'Runo::Workflow.roles should return a human-readable string of the given roles'
66
- )
67
- end
68
-
69
- def test_wf_permit_guest?
70
- wf = Runo::Workflow::Foo.new(nil)
71
- assert(
72
- !wf.send(:'permit?', Runo::Workflow::ROLE_USER, :create),
73
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
74
- )
75
- assert(
76
- wf.send(:'permit?', Runo::Workflow::ROLE_USER, :read),
77
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
78
- )
79
- assert(
80
- !wf.send(:'permit?', Runo::Workflow::ROLE_USER, :update),
81
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
82
- )
83
- assert(
84
- !wf.send(:'permit?', Runo::Workflow::ROLE_USER, :delete),
85
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
86
- )
87
- end
88
-
89
- def test_wf_permit_owner?
90
- wf = Runo::Workflow::Foo.new(nil)
91
- assert(
92
- !wf.send(:'permit?', Runo::Workflow::ROLE_OWNER, :create),
93
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
94
- )
95
- assert(
96
- wf.send(:'permit?', Runo::Workflow::ROLE_OWNER, :read),
97
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
98
- )
99
- assert(
100
- wf.send(:'permit?', Runo::Workflow::ROLE_OWNER, :update),
101
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
102
- )
103
- assert(
104
- !wf.send(:'permit?', Runo::Workflow::ROLE_OWNER, :delete),
105
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
106
- )
107
- end
108
-
109
- def test_wf_permit_group?
110
- wf = Runo::Workflow::Foo.new(nil)
111
- assert(
112
- wf.send(:'permit?', Runo::Workflow::ROLE_GROUP, :create),
113
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
114
- )
115
- assert(
116
- wf.send(:'permit?', Runo::Workflow::ROLE_GROUP, :read),
117
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
118
- )
119
- assert(
120
- !wf.send(:'permit?', Runo::Workflow::ROLE_GROUP, :update),
121
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
122
- )
123
- assert(
124
- wf.send(:'permit?', Runo::Workflow::ROLE_GROUP, :delete),
125
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
126
- )
127
- end
128
-
129
- def test_wf_permit_admin?
130
- wf = Runo::Workflow::Foo.new(nil)
131
- assert(
132
- wf.send(:'permit?', Runo::Workflow::ROLE_ADMIN, :create),
133
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
134
- )
135
- assert(
136
- wf.send(:'permit?', Runo::Workflow::ROLE_ADMIN, :read),
137
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
138
- )
139
- assert(
140
- wf.send(:'permit?', Runo::Workflow::ROLE_ADMIN, :update),
141
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
142
- )
143
- assert(
144
- wf.send(:'permit?', Runo::Workflow::ROLE_ADMIN, :delete),
145
- 'Set::Workflow#permit? should return whether it permits the client the action or not'
146
- )
147
- end
148
-
149
- def test_wf_permit_login_action?
150
- wf = Runo::Workflow::Foo.new(nil)
151
- assert(
152
- wf.send(:'permit?', Runo::Workflow::ROLE_USER, :login),
153
- 'Set::Workflow#permit? should always permit :login'
154
- )
155
- assert(
156
- wf.send(:'permit?', Runo::Workflow::ROLE_OWNER, :login),
157
- 'Set::Workflow#permit? should always permit :login'
158
- )
159
- assert(
160
- wf.send(:'permit?', Runo::Workflow::ROLE_GROUP, :login),
161
- 'Set::Workflow#permit? should always permit :login'
162
- )
163
- assert(
164
- wf.send(:'permit?', Runo::Workflow::ROLE_ADMIN, :login),
165
- 'Set::Workflow#permit? should always permit :login'
166
- )
167
- end
168
-
169
- def test_wf_permit_abnormal_action?
170
- wf = Runo::Workflow::Foo.new(nil)
171
- assert(
172
- !wf.send(:'permit?', Runo::Workflow::ROLE_ADMIN, :'non-exist'),
173
- 'Set::Workflow#permit? should always return false for non-exist actions'
174
- )
175
- end
176
-
177
- def test_permit_nobody?
178
- sd = Runo::Set::Static::Folder.root.item('foo', 'bar', 'main')
179
- Runo.client = nil
180
- assert(
181
- !sd.permit?(:create),
182
- "'nobody' should not create"
183
- )
184
- assert(
185
- sd.item('20091120_0001').permit?(:read),
186
- "'nobody' should be able to read the item"
187
- )
188
- assert(
189
- !sd.item('20091120_0001').permit?(:update),
190
- "'nobody' should not update carl's item"
191
- )
192
- assert(
193
- !sd.item('20091120_0001').permit?(:delete),
194
- "'nobody' should not delete carl's item"
195
- )
196
- end
197
-
198
- def test_permit_don?
199
- sd = Runo::Set::Static::Folder.root.item('foo', 'bar', 'main')
200
- Runo.client = 'don' # don belongs to the group of foo/bar/
201
- assert(
202
- sd.permit?(:create),
203
- 'don should be able to create'
204
- )
205
- assert(
206
- sd.item('20091120_0001').permit?(:read),
207
- 'don should be able to read the item'
208
- )
209
- assert(
210
- !sd.item('20091120_0001').permit?(:update),
211
- "don should not update carl's item"
212
- )
213
- assert(
214
- !sd.item('20091120_0001').permit?(:delete),
215
- "don should not delete carl's item"
216
- )
217
- end
218
-
219
- def test_permit_carl?
220
- sd = Runo::Set::Static::Folder.root.item('foo', 'bar', 'main')
221
- Runo.client = 'carl' # carl belongs to the group of foo/bar/, and the owner of the item #0001
222
- assert(
223
- sd.permit?(:create),
224
- 'carl should be able to create'
225
- )
226
- assert(
227
- sd.item('20091120_0001').permit?(:read),
228
- 'carl should be able to read the item'
229
- )
230
- assert(
231
- sd.item('20091120_0001').permit?(:update),
232
- "carl should be able to update his own item"
233
- )
234
- assert(
235
- sd.item('20091120_0001').permit?(:delete),
236
- "carl should be able to delete his own item"
237
- )
238
- end
239
-
240
- def test_permit_frank?
241
- sd = Runo::Set::Static::Folder.root.item('foo', 'bar', 'main')
242
- Runo.client = 'frank' # frank is an admin of foo/bar/
243
- assert(
244
- sd.permit?(:create),
245
- 'frank should be able to create'
246
- )
247
- assert(
248
- sd.item('20091120_0001').permit?(:read),
249
- 'frank should be able to read the item'
250
- )
251
- assert(
252
- sd.item('20091120_0001').permit?(:update),
253
- "frank should be able to update his own item"
254
- )
255
- assert(
256
- sd.item('20091120_0001').permit?(:delete),
257
- "frank should be able to delete his own item"
258
- )
259
- end
260
-
261
- def test_permit_abnormal_action?
262
- sd = Runo::Set::Static::Folder.root.item('foo', 'bar', 'main')
263
- Runo.client = 'frank'
264
- assert(
265
- !sd.permit?(:'****'),
266
- 'frank should not **** on the stage'
267
- )
268
- end
269
-
270
- class Runo::Workflow::Test_default_action < Runo::Workflow
271
- DEFAULT_SUB_ITEMS = {
272
- '_owner' => {:klass => 'meta-owner'},
273
- '_group' => {:klass => 'meta-group'},
274
- }
275
- PERM = {
276
- :create => 0b11000,
277
- :read => 0b10000,
278
- :update => 0b11100,
279
- :foo => 0b11110,
280
- }
281
- end
282
- def test_default_action
283
- sd = Runo::Set::Dynamic.new(
284
- :workflow => 'test_default_action',
285
- :group => ['roy']
286
- )
287
- def sd.meta_admins
288
- ['frank']
289
- end
290
- sd.load(
291
- '20091122_0001' => {'_owner' => 'carl'},
292
- '20091122_0002' => {'_owner' => 'frank'}
293
- )
294
- assert_equal('carl', sd.item('20091122_0001')[:owner])
295
- assert_equal('frank', sd.item('20091122_0002')[:owner])
296
-
297
- Runo.client = nil
298
- assert_equal(
299
- nil,
300
- sd.default_action,
301
- 'Workflow#default_action should return a permitted action for the client'
302
- )
303
-
304
- Runo.client = 'carl' # carl is not the member of the group
305
- assert_equal(
306
- :foo,
307
- sd.default_action,
308
- 'Workflow#default_action should return a permitted action for the client'
309
- )
310
- assert_equal(
311
- :update,
312
- sd.item('20091122_0001').default_action,
313
- 'Workflow#default_action should see the given conds'
314
- )
315
-
316
- Runo.client = 'roy' # roy belongs to the group
317
- assert_equal(
318
- :create,
319
- sd.default_action,
320
- 'Workflow#default_action should return a permitted action for the client'
321
- )
322
-
323
- Runo.client = 'frank' # frank is the admin
324
- assert_equal(
325
- :read,
326
- sd.default_action,
327
- 'Workflow#default_action should return a permitted action for the client'
328
- )
329
- end
330
-
331
- class Runo::Workflow::Test_default_sub_items < Runo::Workflow
332
- DEFAULT_SUB_ITEMS = {
333
- '_timestamp' => {:klass => 'meta-timestamp'},
334
- }
335
- end
336
- def test_default_sub_items
337
- sd = Runo::Set::Dynamic.new(
338
- :workflow => 'test_default_sub_items'
339
- )
340
- assert_equal(
341
- {'_timestamp' => {:klass => 'meta-timestamp'}},
342
- sd[:item]['default'][:item],
343
- 'Workflow#default_sub_items should supply DEFAULT_SUB_ITEMS to sd[:item][*]'
344
- )
345
-
346
- sd = Runo::Set::Dynamic.new(
347
- :workflow => 'test_default_sub_items',
348
- :item => {
349
- 'default' => {
350
- :item => {
351
- '_timestamp' => {:klass => 'meta-timestamp', :can_update => true},
352
- 'foo' => {:klass => 'text'},
353
- },
354
- },
355
- }
356
- )
357
- assert_equal(
358
- {
359
- '_timestamp' => {:klass => 'meta-timestamp', :can_update => true},
360
- 'foo' => {:klass => 'text'},
361
- },
362
- sd[:item]['default'][:item],
363
- 'Workflow#default_sub_items should be overriden by sd[:item]'
364
- )
365
- end
366
-
367
- end