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,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