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,246 +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_Set_Permit < Test::Unit::TestCase
9
-
10
- class Runo::Workflow::Test_set_permit < Runo::Workflow
11
- DEFAULT_SUB_ITEMS = {
12
- '_owner' => {:klass => 'meta-owner'},
13
- }
14
- PERM = {
15
- :create => 0b11110,
16
- :read => 0b11100,
17
- :update => 0b11100,
18
- :delete => 0b11100,
19
- }
20
- end
21
-
22
- def setup
23
- @sd = Runo::Set::Dynamic.new(
24
- :workflow => 'test_set_permit',
25
- :item_arg => {
26
- :item => {'foo' => {:klass => 'text'}}
27
- }
28
- ).load(
29
- '20100228_0001' => {'_owner' => 'frank', 'foo' => 'abc'},
30
- '20100228_0002' => {'_owner' => 'carl', 'foo' => 'def'}
31
- )
32
- @sd[:owner] = 'frank'
33
- @sd.send(:item_instance, '_0001') # create a new pending item
34
- end
35
-
36
- def teardown
37
- end
38
-
39
- def test_permit_get_by_frank
40
- Runo.client = 'frank'
41
- assert_equal(
42
- 0b00110,
43
- @sd[:roles],
44
- 'frank should be the owner of the set and a logged-in user'
45
- )
46
- assert(
47
- @sd.send(
48
- :'permit_get?',
49
- {
50
- :action => :update,
51
- :conds => {:id => '20100228_0001'},
52
- }
53
- ),
54
- 'Set#permit_get? should allow frank to get an update form of his own item'
55
- )
56
- assert(
57
- @sd.send(
58
- :'permit_get?',
59
- {
60
- :action => :update,
61
- }
62
- ),
63
- 'Set#permit_get? should allow frank to get an update form of any items in his set'
64
- )
65
-
66
- assert(
67
- @sd.send(
68
- :'permit_get?',
69
- {
70
- :action => :update,
71
- :conds => {:id => '_0001'},
72
- }
73
- ),
74
- 'Set#permit_get? should allow frank to get an update form of a new pending item'
75
- )
76
- assert(
77
- @sd.item('_0001').send(
78
- :'permit_get?',
79
- {
80
- :action => :update,
81
- }
82
- ),
83
- 'frank should be allowed to get a sub-item of the pending item'
84
- )
85
- end
86
-
87
- def test_permit_get_by_carl
88
- Runo.client = 'carl'
89
- assert_equal(
90
- 0b00010,
91
- @sd[:roles],
92
- 'carl should be a logged-in user'
93
- )
94
- assert(
95
- !@sd.send(
96
- :'permit_get?',
97
- {
98
- :action => :update,
99
- :conds => {:id => '20100228_0001'},
100
- }
101
- ),
102
- "Set#permit_get? should not allow carl to get an update form of frank's item"
103
- )
104
- assert(
105
- !@sd.item('20100228_0001').send(
106
- :'permit_get?',
107
- {
108
- :action => :update,
109
- }
110
- ),
111
- "carl should not be allowed to get a sub-item of frank's item"
112
- )
113
- assert(
114
- @sd.send(
115
- :'permit_get?',
116
- {
117
- :action => :update,
118
- :conds => {:id => '20100228_0002'},
119
- }
120
- ),
121
- 'Set#permit_get? should allow carl to get an update form of his own item'
122
- )
123
-
124
- assert(
125
- @sd.send(
126
- :'permit_get?',
127
- {
128
- :action => :update,
129
- :conds => {:id => '_0001'},
130
- }
131
- ),
132
- 'Set#permit_get? should allow carl to get an update form of a new pending item'
133
- )
134
- assert(
135
- @sd.item('_0001').send(
136
- :'permit_get?',
137
- {
138
- :action => :update,
139
- }
140
- ),
141
- 'carl should be allowed to get a sub-item of the pending item'
142
- )
143
- end
144
-
145
- def test_permit_post_by_frank
146
- Runo.client = 'frank'
147
- assert_equal(
148
- 0b00110,
149
- @sd[:roles],
150
- 'frank should be the owner of the set and a logged-in user'
151
- )
152
- assert(
153
- @sd.send(
154
- :'permit_post?',
155
- :update,
156
- {
157
- :action => :update,
158
- '20100228_0001' => {},
159
- }
160
- ),
161
- 'Set#permit_post? should allow frank to update his own item'
162
- )
163
- assert(
164
- @sd.send(
165
- :'permit_post?',
166
- :update,
167
- {
168
- :action => :update,
169
- '20100228_0002' => {},
170
- }
171
- ),
172
- 'Set#permit_post? should allow frank to update any item in his set'
173
- )
174
- assert(
175
- @sd.send(
176
- :'permit_post?',
177
- :update,
178
- {
179
- :action => :update,
180
- '_0001' => {'foo' => 'FOO'},
181
- }
182
- ),
183
- 'Set#permit_post? should allow frank to create/update a new item'
184
- )
185
- end
186
-
187
- def test_permit_post_by_carl
188
- Runo.client = 'carl'
189
- assert_equal(
190
- 0b00010,
191
- @sd[:roles],
192
- 'carl should be a logged-in user'
193
- )
194
- assert(
195
- !@sd.send(
196
- :'permit_post?',
197
- :update,
198
- {
199
- :action => :update,
200
- '20100228_0001' => {},
201
- }
202
- ),
203
- "Set#permit_post? should not allow carl to update frank's item"
204
- )
205
- assert(
206
- !@sd.item('20100228_0001').send(
207
- :'permit_post?',
208
- :update,
209
- {'foo' => 'updated'}
210
- ),
211
- "carl should not be allowed to post a sub-item of frank's item"
212
- )
213
-
214
- assert(
215
- @sd.send(
216
- :'permit_post?',
217
- :update,
218
- {
219
- :action => :update,
220
- '20100228_0002' => {},
221
- }
222
- ),
223
- 'Set#permit_post? should allow carl to update his own item'
224
- )
225
- assert(
226
- @sd.send(
227
- :'permit_post?',
228
- :update,
229
- {
230
- :action => :update,
231
- '_0001' => {'foo' => 'FOO'},
232
- }
233
- ),
234
- 'Set#permit_post? should allow carl to create/update a new item'
235
- )
236
- assert(
237
- @sd.item('_0001').send(
238
- :'permit_post?',
239
- :update,
240
- {'foo' => 'updated'}
241
- ),
242
- 'carl should be allowed to post a sub-item of the new item'
243
- )
244
- end
245
-
246
- end
@@ -1,468 +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_Set_Static < Test::Unit::TestCase
9
-
10
- def setup
11
- end
12
-
13
- def teardown
14
- end
15
-
16
- def test_initialize
17
- ss = Runo::Set::Static.new(:html => <<'_html')
18
- <html>
19
- <h1>$(title text 32)</h1>
20
- <ul id="foo" class="app-blog">
21
- <li title="Diary">
22
- $(subject text 64)
23
- $(body textarea 72*10)
24
- <ul><li>qux</li></ul>
25
- </li>
26
- </ul>
27
- </html>
28
- _html
29
- assert_equal(
30
- {
31
- 'title' => {:klass => 'text', :tokens => ['32']},
32
- 'foo' => {
33
- :klass => 'set-dynamic',
34
- :workflow => 'blog',
35
- :tmpl => {
36
- :index => <<'_tmpl'.chomp,
37
- <ul id="@(name)" class="app-blog">
38
- $() </ul>
39
- $(.navi)$(.submit)$(.action_create)
40
- _tmpl
41
- },
42
- :item => {
43
- 'default' => {
44
- :label => 'Diary',
45
- :tmpl => {
46
- :index => <<'_tmpl',
47
- <li title="">
48
- $(.a_update)$(subject)</a>
49
- $(body)$(.hidden)
50
- <ul><li>qux</li></ul>
51
- </li>
52
- _tmpl
53
- },
54
- :item => {
55
- 'body' => {
56
- :width => 72,
57
- :height => 10,
58
- :klass => 'textarea',
59
- },
60
- 'subject' => {
61
- :klass => 'text',
62
- :tokens => ['64'],
63
- },
64
- },
65
- },
66
- },
67
- },
68
- },
69
- ss[:item],
70
- 'Set::Static#initialize should load @meta'
71
- )
72
- end
73
-
74
- def test_meta_href
75
- Runo.current[:uri] = nil
76
-
77
- ss = Runo::Set::Static::Folder.root.item('foo','main','20091120_0001','replies','20091201_0001')
78
- assert_equal(
79
- '/foo/20091120_0001/replies/id=20091201_0001/',
80
- ss[:href],
81
- 'Set::Static#meta_href should return parent[:href] + an id cond'
82
- )
83
- end
84
-
85
- def test_empty?
86
- ss = Runo::Set::Static.new(:html => <<'_html')
87
- <html>
88
- <h1>$(title = text 32)</h1>
89
- </html>
90
- _html
91
- ss.load 'title' => 'foo'
92
- assert(
93
- !ss.empty?,
94
- 'Set::Static#empty? should return false if any item has a value'
95
- )
96
-
97
- ss.load 'title' => nil
98
- assert(
99
- ss.empty?,
100
- 'Set::Static#empty? should return true if the all items do not have a value'
101
- )
102
-
103
- ss.load 'title' => ''
104
- assert(
105
- ss.empty?,
106
- 'Set::Static#empty? should return true if the all items do not have a value'
107
- )
108
- end
109
-
110
- def test_item
111
- ss = Runo::Set::Static.new(:html => <<'_html')
112
- <html>
113
- <h1>$(title = text 32)</h1>
114
- <ul id="main" class="app-attachment">
115
- <li>hi</li>
116
- </ul>
117
- </html>
118
- _html
119
- title = ss.item('title')
120
- assert_instance_of(
121
- Runo::Text,
122
- title,
123
- 'Set::Static#item() should return the child item on the fly'
124
- )
125
- assert_equal(
126
- title.object_id,
127
- ss.item('title').object_id,
128
- 'Set::Static#item() should cache the loaded items'
129
- )
130
- assert_equal(
131
- 32,
132
- title[:size],
133
- 'Set::Static#item() should load the metas of child items'
134
- )
135
-
136
- main = ss.item('main')
137
- assert_instance_of(
138
- Runo::Set::Static::Dynamic,
139
- main,
140
- 'Set::Static#item() should return the child item on the fly'
141
- )
142
- assert_equal(
143
- main.object_id,
144
- ss.item('main').object_id,
145
- 'Set::Static#item() should cache the loaded items'
146
- )
147
- assert_equal(
148
- {
149
- 'default' => {
150
- :label => nil,
151
- :tmpl => {:index => " <li>hi</li>\n"},
152
- :item => {},
153
- },
154
- },
155
- main[:item],
156
- 'Set::Static#item() should load the metas of child items'
157
- )
158
-
159
- assert_nil(
160
- ss.item('non-existent'),
161
- 'Set::Static#item should return nil when the item is not in the storage'
162
- )
163
- assert_nil(
164
- ss.item(''),
165
- 'Set::Static#item should return nil when the item is not in the storage'
166
- )
167
- end
168
-
169
- def test_val
170
- ss = Runo::Set::Static.new(:html => <<'_html')
171
- <li>
172
- $(name text): $(comment text)
173
- </li>
174
- _html
175
- ss.item('name').load 'foo'
176
- assert_equal(
177
- {'name' => 'foo'},
178
- ss.val,
179
- 'Set::Static#val should not include the value of the empty item'
180
- )
181
- ss.item('comment').load 'bar'
182
- assert_equal(
183
- {'name' => 'foo', 'comment' => 'bar'},
184
- ss.val,
185
- 'Set::Static#val should not include the value of the empty item'
186
- )
187
- end
188
-
189
- def test_get
190
- ss = Runo::Set::Static.new(:html => <<'_html')
191
- <li>
192
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
193
- </li>
194
- _html
195
- ss.load_default
196
- assert_equal(
197
- <<'_html',
198
- <li>
199
- nobody: peek a boo
200
- </li>
201
- _html
202
- ss.get,
203
- 'Set::Static#get should return the html by [:tmpl]'
204
- )
205
-
206
- comment = ss.item('comment')
207
- def comment._g_foo(arg)
208
- 'foo foo'
209
- end
210
- assert_equal('foo foo', ss.item('comment').get(:action => 'foo'))
211
- assert_equal(
212
- <<'_html',
213
- <li>
214
- nobody: foo foo
215
- </li>
216
- _html
217
- ss.get(:action => 'foo'),
218
- 'Set::Static#get should pass :action to the child items'
219
- )
220
- end
221
-
222
- def test_get_by_tmpl
223
- ss = Runo::Set::Static.new(:html => '$(foo text)')
224
- ss.item('foo').load 'hello'
225
- assert_equal(
226
- 'foo hello foo',
227
- ss.send(:_get_by_tmpl, {}, 'foo $() foo'),
228
- 'Set#_get_by_tmpl should replace %() with @val'
229
- )
230
-
231
- ss[:baz] = 1234
232
- assert_equal(
233
- 'foo 1234 foo',
234
- ss.send(:_get_by_tmpl, {}, 'foo @(baz) foo'),
235
- 'Set#_get_by_tmpl should replace @(...) with @meta[...]'
236
- )
237
-
238
- assert_equal(
239
- 'foo baz foo',
240
- ss.send(:_get_by_tmpl, {}, 'foo _(baz) foo'),
241
- 'Set#_get_by_tmpl should evaluate _(...)'
242
- )
243
- end
244
-
245
- def test_get_tmpl_non_existing_meta
246
- ss = Runo::Set::Static.new(:html => '')
247
- assert_equal(
248
- 'foo @(foo-bar) foo',
249
- ss.send(:_get_by_tmpl, {}, 'foo @(foo-bar) foo'),
250
- 'Set#_get_by_tmpl should keep @() of non-existing item as is'
251
- )
252
- assert_equal(
253
- 'foo foo',
254
- ss.send(:_get_by_tmpl, {}, 'foo @(bar) foo'),
255
- 'Set#_get_by_tmpl should evaluate non-existing @()'
256
- )
257
- end
258
-
259
- def test_get_tmpl_non_existing_item
260
- ss = Runo::Set::Static.new(:html => '')
261
- assert_equal(
262
- 'foo $(foo) foo',
263
- ss.send(:_get_by_tmpl, {}, 'foo $(foo) foo'),
264
- 'Set#_get_by_tmpl should keep non-existing $() as is'
265
- )
266
- end
267
-
268
- def test_recursive_tmpl
269
- ss = Runo::Set::Static.new(:html => <<'_html')
270
- <li>$()</li>
271
- _html
272
- assert_nothing_raised(
273
- 'Set::Static#get should avoid recursive reference to [:tmpl]'
274
- ) {
275
- ss.get
276
- }
277
- end
278
-
279
- def test_g_a_update
280
- ss = Runo::Set::Static.new(:html => '$(.a_update)', :parent => Runo::Set::Static.new)
281
-
282
- def ss.permit_get?(arg)
283
- true
284
- end
285
- assert_equal(
286
- '<a href="/update.html">',
287
- ss.get(:action => :read),
288
- 'Set#_g_a_update should return href if the orig_action is :read and :update is permmited'
289
- )
290
- assert_equal(
291
- '<a>',
292
- ss.get(:action => :update),
293
- 'Set#_g_a_update should omit href if the orig_action is not :read'
294
- )
295
-
296
- def ss.permit_get?(arg)
297
- true if arg[:action] == :read
298
- end
299
- def ss.permit?(action)
300
- true if action == :read
301
- end
302
- assert_equal(
303
- '<a>',
304
- ss.get(:action => :read),
305
- 'Set#_g_a_update should omit href unless :update is permmited'
306
- )
307
-
308
- def ss.permit_get?(arg)
309
- true unless arg[:action] == :update
310
- end
311
- def ss.permit?(action)
312
- true unless action == :update
313
- end
314
- assert_equal(
315
- '<a href="/preview_delete.html">',
316
- ss.get(:action => :read),
317
- 'Set#_g_a_update should return href to :preview_delete if only :delete is permmited'
318
- )
319
- end
320
-
321
- def test_post
322
- ss = Runo::Set::Static.new(:html => <<'_html')
323
- <li>
324
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
325
- </li>
326
- _html
327
- ss.post(:create, 'name' => 'carl')
328
- assert_equal(
329
- :create,
330
- ss.action,
331
- 'Set::Static#post should set @action'
332
- )
333
-
334
- ss.commit
335
- assert_equal(
336
- :create,
337
- ss.result,
338
- 'Set::Static#commit should set @result'
339
- )
340
-
341
- ss.post(:update, 'name' => 'carl')
342
- assert_nil(
343
- ss.result,
344
- 'Set::Static#post should reset @result'
345
- )
346
- end
347
-
348
- def test_load_default
349
- ss = Runo::Set::Static.new(:html => <<'_html')
350
- <li>
351
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
352
- </li>
353
- _html
354
- ss.load_default
355
- assert_equal(
356
- 'nobody',
357
- ss.item('name').val,
358
- 'Set::Static#load_default should load all the child items with their [:default]'
359
- )
360
- assert_equal(
361
- 'peek a boo',
362
- ss.item('comment').val,
363
- 'Set::Static#load_default should load all the child items with their [:default]'
364
- )
365
- end
366
-
367
- def test_load
368
- ss = Runo::Set::Static.new(:html => <<'_html')
369
- <li>
370
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
371
- </li>
372
- _html
373
- ss.load('name' => 'carl')
374
- assert_equal(
375
- {'name' => 'carl'},
376
- ss.val,
377
- 'Set::Static#load should not touch the item for which value is not given'
378
- )
379
- ss.load('name' => 'frank', 'comment' => 'cut the schmuck some slack.')
380
- assert_equal(
381
- {'name' => 'frank', 'comment' => 'cut the schmuck some slack.'},
382
- ss.val,
383
- 'Set::Static#load should load the items at once'
384
- )
385
- ss.load('name' => 'carl')
386
- assert_equal(
387
- {'name' => 'carl', 'comment' => 'cut the schmuck some slack.'},
388
- ss.val,
389
- 'Set::Static#load should not touch the item for which value is not given'
390
- )
391
- end
392
-
393
- def test_create
394
- ss = Runo::Set::Static.new(:html => <<'_html')
395
- <li>
396
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
397
- </li>
398
- _html
399
- ss.create('name' => 'carl')
400
- assert_equal(
401
- {'name' => 'carl'},
402
- ss.val,
403
- 'Set::Static#create should not touch the item for which value is not given'
404
- )
405
- end
406
-
407
- def test_update
408
- ss = Runo::Set::Static.new(:html => <<'_html')
409
- <li>
410
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
411
- </li>
412
- _html
413
- ss.update('name' => 'carl')
414
- assert_equal(
415
- {'name' => 'carl'},
416
- ss.val,
417
- 'Set::Static#update should not touch the item for which value is not given'
418
- )
419
- ss.update('name' => 'frank', 'comment' => 'cut the schmuck some slack.')
420
- assert_equal(
421
- {'name' => 'frank', 'comment' => 'cut the schmuck some slack.'},
422
- ss.val,
423
- 'Set::Static#udpate should load the items at once'
424
- )
425
- ss.update('name' => 'carl')
426
- assert_equal(
427
- {'name' => 'carl', 'comment' => 'cut the schmuck some slack.'},
428
- ss.val,
429
- 'Set::Static#update should not touch the item for which value is not given'
430
- )
431
-
432
- assert_nil(
433
- ss.result,
434
- 'Set::Static#result should return nil before the commit'
435
- )
436
- ss.commit
437
- assert_equal(
438
- {
439
- 'name' => ss.item('name'),
440
- 'comment' => ss.item('comment'),
441
- },
442
- ss.result,
443
- 'Set::Static#result should return a hash of the committed items when :update'
444
- )
445
- end
446
-
447
- def test_delete
448
- ss = Runo::Set::Static.new(:html => <<'_html')
449
- <li>
450
- $(name = text 32 :'nobody'): $(comment = text 128 :'peek a boo')
451
- </li>
452
- _html
453
- ss.item('name').load 'foo'
454
-
455
- ss.delete
456
- assert_equal(
457
- :delete,
458
- ss.action,
459
- 'Set::Static#delete should set @action'
460
- )
461
- assert_equal(
462
- {'name' => 'foo'},
463
- ss.val,
464
- 'Set::Static#delete should not touch any item'
465
- )
466
- end
467
-
468
- end