runo 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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,88 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009-2010 Akira FUNAI
5
-
6
- class Runo::Set::Dynamic
7
-
8
- private
9
-
10
- def _g_navi(arg)
11
- arg[:navi] ||= @storage.navi(arg[:conds] || {})
12
- return unless (arg[:orig_action] == :read) && (arg[:navi][:prev] || arg[:navi][:next])
13
-
14
- div = my[:tmpl][:navi] || '<div class="navi">$(.navi_prev) | $(.navi_p)$(.navi_next)</div>'
15
- div.gsub(/\$\(\.(navi_prev|navi_next|navi_p|uri_prev|uri_next)\)/) {
16
- __send__("_g_#{$1}", arg)
17
- }
18
- end
19
-
20
- def _g_navi_prev(arg)
21
- button = my[:tmpl][:navi_prev] || _('prev')
22
- (uri = _g_uri_prev(arg)) ? "<a href=\"#{my[:path]}/#{uri}\">#{button}</a>" : button
23
- end
24
-
25
- def _g_navi_next(arg)
26
- button = my[:tmpl][:navi_next] || _('next')
27
- (uri = _g_uri_next(arg)) ? "<a href=\"#{my[:path]}/#{uri}\">#{button}</a>" : button
28
- end
29
-
30
- def _g_navi_p(arg)
31
- uris = _uri_p(arg)
32
- return unless uris && uris.size > 1
33
-
34
- item_tmpl = nil
35
- div = my[:tmpl][:navi_p] || '<span class="item">$() </span> | '
36
- div = Runo::Parser.gsub_block(div, 'item') {|open, inner, close|
37
- item_tmpl = open + inner + close
38
- '$(.items)'
39
- }
40
- div.gsub('$(.items)') {
41
- uris.collect {|uri|
42
- p = uri[/p=(\d+)/, 1] || '1'
43
- if arg[:conds][:p] == p
44
- item_tmpl.gsub('$()', p)
45
- else
46
- item_tmpl.gsub('$()', "<a href=\"#{my[:path]}/#{uri}\">#{p}</a>")
47
- end
48
- }.join
49
- }
50
- end
51
-
52
- def _g_uri_prev(arg)
53
- arg[:navi] ||= @storage.navi(arg[:conds] || {})
54
- Runo::Path.path_of(arg[:navi][:prev]) + _uri_action(arg) if arg[:navi][:prev]
55
- end
56
-
57
- def _g_uri_next(arg)
58
- arg[:navi] ||= @storage.navi(arg[:conds] || {})
59
- Runo::Path.path_of(arg[:navi][:next]) + _uri_action(arg) if arg[:navi][:next]
60
- end
61
-
62
- def _uri_p(arg)
63
- arg[:navi] ||= @storage.navi(arg[:conds] || {})
64
- if arg[:navi][:sibs] && arg[:navi][:sibs].keys.first == :p
65
- base_conds = arg[:conds].dup
66
- base_conds.delete :p
67
- conds = arg[:navi][:sibs].values.first
68
- if p = arg[:conds][:p]
69
- range = ['1', conds.last] + Array((p.to_i - 5)..(p.to_i + 5)).collect {|i| i.to_s }
70
- conds = conds & range
71
- end
72
- conds.collect {|cond|
73
- Runo::Path.path_of(base_conds.merge(:p => cond)) + _uri_action(arg)
74
- }
75
- end
76
- end
77
-
78
- def _uri_action(arg)
79
- if [nil, default_action].include?(arg[:orig_action]) && !arg[:sub_action]
80
- ''
81
- elsif arg[:sub_action]
82
- "#{arg[:orig_action]}_#{arg[:sub_action]}.html"
83
- else
84
- "#{arg[:orig_action]}.html"
85
- end
86
- end
87
-
88
- end
@@ -1,49 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009-2010 Akira FUNAI
5
-
6
- class Runo::Set::Dynamic
7
-
8
- private
9
-
10
- def _g_submit(arg)
11
- <<_html
12
- <div class="submit">
13
- #{_g_submit_commit arg}#{_g_submit_preview arg}#{_g_submit_preview_delete arg}</div>
14
- _html
15
- end
16
-
17
- def _g_submit_commit(arg)
18
- if collect_item(arg[:conds]).all? {|i| i[:id] =~ Runo::REX::ID_NEW }
19
- action = :create
20
- elsif arg[:orig_action] == :preview
21
- action = arg[:sub_action]
22
- else
23
- action = arg[:orig_action]
24
- end
25
- <<_html unless my[:preview] == :mandatory && arg[:orig_action] != :preview
26
- <input name="#{my[:short_name]}.status-public" type="submit" value="#{_ action.to_s}" />
27
- _html
28
- end
29
-
30
- def _g_submit_preview(arg)
31
- label = _ 'preview'
32
- <<_html if my[:preview] && arg[:orig_action] != :preview
33
- <input name="#{my[:short_name]}.action-preview_#{arg[:orig_action]}" type="submit" value="#{label}" />
34
- _html
35
- end
36
-
37
- def _g_submit_preview_delete(arg)
38
- if (
39
- permit_get?(arg.merge(:action => :delete)) &&
40
- collect_item(arg[:conds]).find {|item| item[:id] !~ Runo::REX::ID_NEW } &&
41
- arg[:orig_action] != :preview
42
- )
43
- <<_html
44
- <input name="#{my[:short_name]}.action-preview_delete" type="submit" value="#{_ 'delete...'}" />
45
- _html
46
- end
47
- end
48
-
49
- end
@@ -1,77 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009-2010 Akira FUNAI
5
-
6
- class Runo::Set::Dynamic
7
-
8
- private
9
-
10
- def _g_view_ym(arg)
11
- return unless permit? :read
12
-
13
- uris = _uri_ym arg
14
- return unless uris && uris.size > 1
15
-
16
- year_tmpl = month_tmpl = nil
17
- div = my[:tmpl][:view_ym] || <<'_tmpl'
18
- <div class="view_ym">
19
- <span class="y">
20
- $(.y) |
21
- <span class="m">$()</span>
22
- <br/>
23
- </span>
24
- </div>
25
- _tmpl
26
- div = Runo::Parser.gsub_block(div, 'y') {|open, inner, close|
27
- inner = Runo::Parser.gsub_block(inner, 'm') {|*t|
28
- month_tmpl = t.join
29
- '$(.months)'
30
- }
31
- year_tmpl = open + inner + close
32
- '$(.years)'
33
- }
34
- years = uris.inject({}) {|y, u|
35
- year = u[/(\d{4})\d\d\/$/, 1]
36
- y[year] ||= []
37
- y[year] << u
38
- y
39
- }
40
- p = (my[:order] =~ /^-/) ? 'p=last/' : ''
41
- div.gsub('$(.years)') {
42
- years.keys.sort.collect {|year|
43
- year_tmpl.gsub('$(.y)', year).gsub('$(.months)') {
44
- years[year].collect {|uri|
45
- d = uri[/(\d{6})\//, 1]
46
- y = d[/^\d{4}/]
47
- m = d[/\d\d$/]
48
- month_tmpl.gsub(/\$\((?:\.(ym|m))?\)/) {
49
- label = ($1 == 'ym') ? _label_ym(y, m) : _label_m(m)
50
- (arg[:conds][:d] == d) ?
51
- "<span class=\"current\">#{label}</span>" :
52
- "<a href=\"#{my[:path]}/#{uri}#{p}\">#{label}</a>"
53
- }
54
- }.join
55
- }
56
- }.join
57
- }
58
- end
59
-
60
- def _uri_ym(arg)
61
- @storage.__send__(:_sibs_d, :d => '000000').collect {|ym|
62
- Runo::Path.path_of :d => ym
63
- }
64
- end
65
-
66
- def _label_ym(y, m)
67
- _('%{year}/%{month}') % {
68
- :year => y,
69
- :month => _label_m(m)
70
- }
71
- end
72
-
73
- def _label_m(m)
74
- _ Date::ABBR_MONTHNAMES[m.to_i]
75
- end
76
-
77
- end
@@ -1,89 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009 Akira FUNAI
5
-
6
- class Runo::Workflow
7
-
8
- include Runo::I18n
9
-
10
- DEFAULT_META = {
11
- :item_label => Runo::I18n.n_('item', 'items', 1),
12
- }
13
- DEFAULT_SUB_ITEMS = {}
14
-
15
- ROLE_ADMIN = 0b10000
16
- ROLE_GROUP = 0b01000
17
- ROLE_OWNER = 0b00100
18
- ROLE_USER = 0b00010
19
- ROLE_NONE = 0b00001
20
-
21
- PERM = {
22
- :create => 0b11111,
23
- :read => 0b11111,
24
- :update => 0b11111,
25
- :delete => 0b11111,
26
- }
27
-
28
- def self.instance(sd)
29
- klass = sd[:workflow].to_s.capitalize
30
- if klass != ''
31
- self.const_get(klass).new sd
32
- else
33
- self.new sd
34
- end
35
- end
36
-
37
- def self.roles(roles)
38
- %w(admin group owner user none).select {|r|
39
- roles & const_get("ROLE_#{r.upcase}") > 0
40
- }.collect{|r| Runo::I18n._ r }
41
- end
42
-
43
- attr_reader :sd
44
-
45
- def initialize(sd)
46
- @sd = sd
47
- end
48
-
49
- def default_sub_items
50
- self.class.const_get :DEFAULT_SUB_ITEMS
51
- end
52
-
53
- def permit?(roles, action)
54
- case action
55
- when :login, :done, :message
56
- true
57
- when :preview
58
- # TODO: permit?(roles, action, sub_action = nil)
59
- (roles & self.class.const_get(:PERM)[:read].to_i) > 0
60
- else
61
- (roles & self.class.const_get(:PERM)[action].to_i) > 0
62
- end
63
- end
64
-
65
- def _get(arg)
66
- @sd.instance_eval {
67
- if arg[:action] == :create
68
- item_instance '_001'
69
- _get_by_tmpl({:action => :create, :conds => {:id => '_001'}}, my[:tmpl][:index])
70
- end
71
- }
72
- end
73
-
74
- def _hide?(arg)
75
- (arg[:p_action] && arg[:p_action] != :read) ||
76
- (arg[:orig_action] == :read && arg[:action] == :submit)
77
- end
78
-
79
- def before_commit
80
- end
81
-
82
- def after_commit
83
- end
84
-
85
- def next_action(base)
86
- (!base.result || base.result.values.all? {|item| item.permit? :read }) ? :read_detail : :done
87
- end
88
-
89
- end
@@ -1,50 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009 Akira FUNAI
5
-
6
- class Runo::Workflow::Attachment < Runo::Workflow
7
-
8
- DEFAULT_META = {
9
- :p_size => 0,
10
- :item_label => Runo::I18n.n_('attachment', 'attachments', 1),
11
- }
12
-
13
- PERM = {
14
- :create => 0b00000,
15
- :read => 0b00000,
16
- :update => 0b00000,
17
- :delete => 0b00000,
18
- }
19
-
20
- def permit?(roles, action)
21
- (action == :login) ||
22
- (@sd[:parent] && @sd[:parent].permit?(action))
23
- end
24
-
25
- def _get(arg)
26
- @sd.instance_eval {
27
- if arg[:action] == :create || arg[:action] == :update
28
- new_item = item_instance '_001'
29
-
30
- item_outs = _g_default(arg) {|item, item_arg|
31
- action = item[:id][Runo::REX::ID_NEW] ? :create : :delete
32
- button_tmpl = my[:tmpl][:"submit_#{action}"] || <<_html.chomp
33
- <input type="submit" name="@(short_name).action-#{action}" value="#{_ action.to_s}" />
34
- _html
35
- button = item.send(:_get_by_tmpl, {}, button_tmpl)
36
- item_arg[:action] = :create if action == :create
37
- item_tmpl = item[:tmpl][:index].sub(/[\w\W]*\$\(.*?\)/, "\\&#{button}")
38
- item.send(:_get_by_tmpl, item_arg, item_tmpl)
39
- }
40
- tmpl = my[:tmpl][:index].gsub('$()', item_outs)
41
- _get_by_tmpl({:p_action => arg[:p_action], :action => :update}, tmpl)
42
- end
43
- }
44
- end
45
-
46
- def _hide?(arg)
47
- arg[:action] == :submit
48
- end
49
-
50
- end
@@ -1,28 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009 Akira FUNAI
5
-
6
- class Runo::Workflow::Blog < Runo::Workflow
7
-
8
- DEFAULT_META = {
9
- :p_size => 10,
10
- :conds => {:d => '999999', :p => 'last'},
11
- :order => '-id',
12
- :item_label => Runo::I18n.n_('entry', 'entries', 1),
13
- }
14
-
15
- DEFAULT_SUB_ITEMS = {
16
- '_owner' => {:klass => 'meta-owner'},
17
- '_group' => {:klass => 'meta-group'},
18
- '_timestamp' => {:klass => 'meta-timestamp'},
19
- }
20
-
21
- PERM = {
22
- :create => 0b11000,
23
- :read => 0b11111,
24
- :update => 0b10100,
25
- :delete => 0b10100,
26
- }
27
-
28
- end
@@ -1,23 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009 Akira FUNAI
5
-
6
- class Runo::Workflow::Contact < Runo::Workflow
7
-
8
- DEFAULT_META = {
9
- :p_size => 10,
10
- :conds => {:p => 'last'},
11
- :item_label => Runo::I18n.n_('item', 'items', 1),
12
- }
13
-
14
- DEFAULT_SUB_ITEMS = {}
15
-
16
- PERM = {
17
- :create => 0b00011,
18
- :read => 0b11000,
19
- :update => 0b00000,
20
- :delete => 0b11000,
21
- }
22
-
23
- end
@@ -1,26 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009-2010 Akira FUNAI
5
-
6
- class Runo::Workflow::Forum < Runo::Workflow
7
-
8
- DEFAULT_META = {
9
- :conds => {:p => 'last'},
10
- :p_size => 10,
11
- :item_label => Runo::I18n.n_('post', 'posts', 1),
12
- }
13
-
14
- DEFAULT_SUB_ITEMS = {
15
- '_owner' => {:klass => 'meta-owner'},
16
- '_timestamp' => {:klass => 'meta-timestamp'},
17
- }
18
-
19
- PERM = {
20
- :create => 0b11110,
21
- :read => 0b11111,
22
- :update => 0b11000,
23
- :delete => 0b11000,
24
- }
25
-
26
- end
@@ -1,39 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- # Author:: Akira FUNAI
4
- # Copyright:: Copyright (c) 2009-2010 Akira FUNAI
5
-
6
- class Runo::Workflow::Register < Runo::Workflow
7
-
8
- DEFAULT_META = {
9
- :p_size => 0,
10
- :conds => {:p => '1'},
11
- :order => 'id',
12
- :item_label => Runo::I18n.n_('item', 'items', 1),
13
- }
14
-
15
- DEFAULT_SUB_ITEMS = {
16
- '_owner' => {:klass => 'meta-owner'},
17
- '_timestamp' => {:klass => 'meta-timestamp'},
18
- }
19
-
20
- PERM = {
21
- :create => 0b11001,
22
- :read => 0b11100,
23
- :update => 0b11100,
24
- :delete => 0b11100,
25
- }
26
-
27
- def before_commit
28
- @sd.send(:pending_items).each {|id, item|
29
- if id =~ Runo::REX::ID_NEW
30
- item.item('_owner').instance_variable_set(:@val, item.item('_id').val)
31
- end
32
- }
33
- end
34
-
35
- def next_action(base)
36
- (Runo.client == 'nobody') ? :done : super
37
- end
38
-
39
- end