ruby_mvc 0.0.1 → 0.0.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 (68) hide show
  1. data/README.md +14 -0
  2. data/lib/ruby_mvc.rb +3 -1
  3. data/lib/ruby_mvc/application.rb +52 -2
  4. data/lib/ruby_mvc/controllers.rb +28 -0
  5. data/lib/ruby_mvc/controllers/action.rb +93 -0
  6. data/lib/ruby_mvc/controllers/action_group.rb +70 -0
  7. data/lib/ruby_mvc/controllers/app_controller.rb +4 -2
  8. data/lib/ruby_mvc/controllers/rails_controller.rb +2 -0
  9. data/lib/ruby_mvc/models.rb +2 -0
  10. data/lib/ruby_mvc/models/ar_table_model.rb +133 -0
  11. data/lib/ruby_mvc/models/array_table_model.rb +81 -13
  12. data/lib/ruby_mvc/models/keyed_array_table_model.rb +1 -1
  13. data/lib/ruby_mvc/models/model.rb +129 -0
  14. data/lib/ruby_mvc/models/table_model.rb +107 -10
  15. data/lib/ruby_mvc/models/view_model_template.rb +140 -0
  16. data/lib/ruby_mvc/renderers.rb +1 -0
  17. data/lib/ruby_mvc/renderers/html4_table_model_renderer.rb +7 -6
  18. data/lib/ruby_mvc/renderers/hyperlink_cell_renderer.rb +47 -0
  19. data/lib/ruby_mvc/toolkit.rb +5 -1
  20. data/lib/ruby_mvc/toolkit/browser_history.rb +115 -0
  21. data/lib/ruby_mvc/toolkit/dialog.rb +12 -1
  22. data/lib/ruby_mvc/toolkit/frame.rb +3 -1
  23. data/lib/ruby_mvc/toolkit/grid_view.rb +46 -0
  24. data/lib/ruby_mvc/toolkit/messagebox.rb +32 -0
  25. data/lib/ruby_mvc/toolkit/peers/wxruby.rb +5 -0
  26. data/lib/ruby_mvc/toolkit/peers/wxruby/app.rb +23 -2
  27. data/lib/ruby_mvc/toolkit/peers/wxruby/common.rb +11 -1
  28. data/lib/ruby_mvc/toolkit/peers/wxruby/dialog.rb +82 -0
  29. data/lib/ruby_mvc/toolkit/peers/wxruby/form_builder.rb +108 -0
  30. data/lib/ruby_mvc/toolkit/peers/wxruby/frame.rb +85 -1
  31. data/lib/ruby_mvc/toolkit/peers/wxruby/grid_model.rb +79 -0
  32. data/lib/ruby_mvc/toolkit/peers/wxruby/grid_view.rb +117 -0
  33. data/lib/ruby_mvc/toolkit/peers/wxruby/messagebox.rb +58 -0
  34. data/lib/ruby_mvc/toolkit/peers/wxruby/web_view.rb +40 -10
  35. data/lib/ruby_mvc/toolkit/property_change_notifier.rb +46 -0
  36. data/lib/ruby_mvc/toolkit/signal_handler.rb +149 -0
  37. data/lib/ruby_mvc/toolkit/web_view.rb +1 -1
  38. data/lib/ruby_mvc/toolkit/widget.rb +13 -6
  39. data/lib/ruby_mvc/views.rb +8 -59
  40. data/lib/ruby_mvc/views/{ar_type_list.rb → ar_form_view.rb} +10 -13
  41. data/lib/ruby_mvc/views/ar_support.rb +29 -0
  42. data/lib/ruby_mvc/views/ar_type_editor.rb +17 -28
  43. data/lib/ruby_mvc/views/ar_web_model_view.rb +59 -0
  44. data/lib/ruby_mvc/views/ar_web_type_list.rb +44 -0
  45. data/lib/ruby_mvc/views/browser_view.rb +185 -0
  46. data/lib/ruby_mvc/views/form_view.rb +111 -0
  47. data/lib/ruby_mvc/views/grid_table_view.rb +96 -0
  48. data/lib/ruby_mvc/views/table_view.rb +0 -39
  49. data/lib/ruby_mvc/views/view.rb +121 -0
  50. data/lib/ruby_mvc/views/web_content_table_view.rb +40 -0
  51. data/lib/ruby_mvc/views/{web_view.rb → web_content_view.rb} +17 -28
  52. data/lib/ruby_mvc/views/web_model_view.rb +67 -0
  53. data/ruby_mvc.gemspec +1 -1
  54. data/sample/browser_view.rb +57 -0
  55. data/sample/form.rb +59 -0
  56. data/sample/form2.rb +63 -0
  57. data/sample/grid_table_view.rb +68 -0
  58. data/sample/grid_view.rb +44 -0
  59. data/sample/grid_view2.rb +57 -0
  60. data/sample/test.html +1 -0
  61. data/sample/test2.html +33 -0
  62. data/sample/web_view.rb +4 -0
  63. data/test/unit/models/test_array_table_model.rb +19 -3
  64. data/test/unit/models/test_keyed_array_table_model.rb +3 -2
  65. data/test/unit/models/test_model.rb +88 -0
  66. metadata +39 -20
  67. data/lib/ruby_mvc/toolkit/notification.rb +0 -202
  68. data/lib/ruby_mvc/views/ar_model_editor.rb +0 -84
@@ -23,10 +23,11 @@
23
23
  ######################################################################
24
24
  #++
25
25
 
26
+ $:.unshift File.join(File.dirname(__FILE__), "../../../lib")
26
27
  require 'testy'
27
- require 'shoes_mvc/models'
28
+ require 'ruby_mvc/models'
28
29
 
29
- include ShoesMVC::Models
30
+ include RubyMVC::Models
30
31
 
31
32
  Testy.testing "Core KeyedArrayTableModel tests" do
32
33
  test "Basic functionality" do |result|
@@ -0,0 +1,88 @@
1
+ #--
2
+ ######################################################################
3
+ #
4
+ # Copyright 2011 Andrew S. Townley
5
+ #
6
+ # Permission to use, copy, modify, and disribute this software for
7
+ # any purpose with or without fee is hereby granted, provided that
8
+ # the above copyright notices and this permission notice appear in
9
+ # all copies.
10
+ #
11
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL
12
+ # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14
+ # AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT OR
15
+ # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
16
+ # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
17
+ # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
18
+ # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
+ #
20
+ # File: test_model.rb
21
+ # Created: Sat 31 Dec 2011 16:07:07 CET
22
+ #
23
+ ######################################################################
24
+ #++
25
+
26
+ $:.unshift File.join(File.dirname(__FILE__), "../../../lib")
27
+
28
+ require 'testy'
29
+ require 'ruby_mvc'
30
+
31
+ include RubyMVC::Models
32
+
33
+ Testy.testing "Core Model tests" do
34
+ test "Basic functionality" do |result|
35
+ model = Model.new
36
+ model[:key1] = "val1"
37
+ model[:key2] = "val2"
38
+
39
+ result.check "keys are correct",
40
+ :expect => [ :key1, :key2 ],
41
+ :actual => model.keys.sort
42
+
43
+ result.check "labels are correct",
44
+ :expect => [ { :key => :key1, :label => "Key1" }, { :key => :key2, :label => "Key2" } ],
45
+ :actual => model.labels
46
+
47
+ result.check ":key1 is editable",
48
+ :expect => true,
49
+ :actual => model.is_editable?(:key1)
50
+
51
+ result.check ":key2 is editable",
52
+ :expect => true,
53
+ :actual => model.is_editable?(:key2)
54
+
55
+ result.check "#[] accessor",
56
+ :expect => "val1",
57
+ :actual => model[:key1]
58
+
59
+ result.check "#size accessor",
60
+ :expect => 2,
61
+ :actual => model.size
62
+
63
+ result.check "#label_for :key1",
64
+ :expect => "Key1",
65
+ :actual => model.label_for(:key1)
66
+
67
+ result.check "#label_for :key2",
68
+ :expect => "Key2",
69
+ :actual => model.label_for(:key2)
70
+ end
71
+
72
+ test "Signal tests" do |result|
73
+ model = Model.new
74
+
75
+ event = {}
76
+ model.signal_connect("property-changed") do |m, k, o, v|
77
+ event[:model] = m
78
+ event[:key] = k
79
+ event[:old] = o
80
+ event[:value] = v
81
+ end
82
+ model[:key1] = "val1"
83
+
84
+ result.check "signal emit",
85
+ :expect => { :model => model, :key => :key1, :old => nil, :value => "val1" },
86
+ :actual => event
87
+ end
88
+ end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_mvc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
5
+ version: 0.0.2
11
6
  platform: ruby
12
7
  authors:
13
8
  - Andrew S. Townley
@@ -15,8 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-11-24 00:00:00 +00:00
19
- default_executable:
13
+ date: 2012-01-09 00:00:00 Z
20
14
  dependencies: []
21
15
 
22
16
  description: A simple, cross-platform MVC framework for Ruby
@@ -29,47 +23,78 @@ extra_rdoc_files: []
29
23
 
30
24
  files:
31
25
  - lib/ruby_mvc/application.rb
26
+ - lib/ruby_mvc/controllers/action.rb
27
+ - lib/ruby_mvc/controllers/action_group.rb
32
28
  - lib/ruby_mvc/controllers/app_controller.rb
33
29
  - lib/ruby_mvc/controllers/rails_controller.rb
30
+ - lib/ruby_mvc/controllers.rb
31
+ - lib/ruby_mvc/models/ar_table_model.rb
34
32
  - lib/ruby_mvc/models/array_table_model.rb
35
33
  - lib/ruby_mvc/models/keyed_array_table_model.rb
34
+ - lib/ruby_mvc/models/model.rb
36
35
  - lib/ruby_mvc/models/table_model.rb
36
+ - lib/ruby_mvc/models/view_model_template.rb
37
37
  - lib/ruby_mvc/models.rb
38
38
  - lib/ruby_mvc/module.rb
39
39
  - lib/ruby_mvc/renderers/html4_table_model_renderer.rb
40
+ - lib/ruby_mvc/renderers/hyperlink_cell_renderer.rb
40
41
  - lib/ruby_mvc/renderers.rb
41
42
  - lib/ruby_mvc/toolkit/app.rb
43
+ - lib/ruby_mvc/toolkit/browser_history.rb
42
44
  - lib/ruby_mvc/toolkit/dialog.rb
43
45
  - lib/ruby_mvc/toolkit/frame.rb
44
- - lib/ruby_mvc/toolkit/notification.rb
46
+ - lib/ruby_mvc/toolkit/grid_view.rb
47
+ - lib/ruby_mvc/toolkit/messagebox.rb
45
48
  - lib/ruby_mvc/toolkit/peers/wxruby/app.rb
46
49
  - lib/ruby_mvc/toolkit/peers/wxruby/box_layout.rb
47
50
  - lib/ruby_mvc/toolkit/peers/wxruby/common.rb
51
+ - lib/ruby_mvc/toolkit/peers/wxruby/dialog.rb
52
+ - lib/ruby_mvc/toolkit/peers/wxruby/form_builder.rb
48
53
  - lib/ruby_mvc/toolkit/peers/wxruby/frame.rb
54
+ - lib/ruby_mvc/toolkit/peers/wxruby/grid_model.rb
55
+ - lib/ruby_mvc/toolkit/peers/wxruby/grid_view.rb
56
+ - lib/ruby_mvc/toolkit/peers/wxruby/messagebox.rb
49
57
  - lib/ruby_mvc/toolkit/peers/wxruby/web_view.rb
50
58
  - lib/ruby_mvc/toolkit/peers/wxruby.rb
59
+ - lib/ruby_mvc/toolkit/property_change_notifier.rb
60
+ - lib/ruby_mvc/toolkit/signal_handler.rb
51
61
  - lib/ruby_mvc/toolkit/web_view.rb
52
62
  - lib/ruby_mvc/toolkit/widget.rb
53
63
  - lib/ruby_mvc/toolkit.rb
54
- - lib/ruby_mvc/views/ar_model_editor.rb
64
+ - lib/ruby_mvc/views/ar_form_view.rb
65
+ - lib/ruby_mvc/views/ar_support.rb
55
66
  - lib/ruby_mvc/views/ar_type_editor.rb
56
- - lib/ruby_mvc/views/ar_type_list.rb
67
+ - lib/ruby_mvc/views/ar_web_model_view.rb
68
+ - lib/ruby_mvc/views/ar_web_type_list.rb
69
+ - lib/ruby_mvc/views/browser_view.rb
70
+ - lib/ruby_mvc/views/form_view.rb
71
+ - lib/ruby_mvc/views/grid_table_view.rb
57
72
  - lib/ruby_mvc/views/table_view.rb
58
- - lib/ruby_mvc/views/web_view.rb
73
+ - lib/ruby_mvc/views/view.rb
74
+ - lib/ruby_mvc/views/web_content_table_view.rb
75
+ - lib/ruby_mvc/views/web_content_view.rb
76
+ - lib/ruby_mvc/views/web_model_view.rb
59
77
  - lib/ruby_mvc/views.rb
60
78
  - lib/ruby_mvc/wx.rb
61
79
  - lib/ruby_mvc.rb
80
+ - sample/browser_view.rb
81
+ - sample/form.rb
82
+ - sample/form2.rb
62
83
  - sample/frame.rb
84
+ - sample/grid_table_view.rb
85
+ - sample/grid_view.rb
86
+ - sample/grid_view2.rb
63
87
  - sample/mvc.rb
64
88
  - sample/test.html
89
+ - sample/test2.html
65
90
  - sample/web_view.rb
66
91
  - test/unit/models/test_array_table_model.rb
67
92
  - test/unit/models/test_keyed_array_table_model.rb
93
+ - test/unit/models/test_model.rb
68
94
  - test/unit/test_array_table_model.rb
69
95
  - LICENSE
70
96
  - README.md
71
97
  - ruby_mvc.gemspec
72
- has_rdoc: true
73
98
  homepage: https://github.com/atownley/ruby_mvc
74
99
  licenses: []
75
100
 
@@ -83,23 +108,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
108
  requirements:
84
109
  - - ">="
85
110
  - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
111
  version: "0"
90
112
  required_rubygems_version: !ruby/object:Gem::Requirement
91
113
  none: false
92
114
  requirements:
93
115
  - - ">="
94
116
  - !ruby/object:Gem::Version
95
- hash: 3
96
- segments:
97
- - 0
98
117
  version: "0"
99
118
  requirements: []
100
119
 
101
120
  rubyforge_project:
102
- rubygems_version: 1.6.2
121
+ rubygems_version: 1.8.10
103
122
  signing_key:
104
123
  specification_version: 3
105
124
  summary: Ruby MVC
@@ -1,202 +0,0 @@
1
- #--
2
- ######################################################################
3
- #
4
- # Copyright 2008, Andrew S. Townley
5
- #
6
- # Permission to use, copy, modify, and disribute this software for
7
- # any purpose with or without fee is hereby granted, provided that
8
- # the above copyright notices and this permission notice appear in
9
- # all copies.
10
- #
11
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL
12
- # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13
- # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14
- # AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT OR
15
- # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
16
- # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
17
- # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
18
- # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
- #
20
- # File: notification.rb
21
- # Author: Andrew S. Townley
22
- # Created: Sat Nov 1 14:27:10 GMT 2008
23
- # Borrowed: Wed 23 Nov 2011 22:29:22 GMT
24
- #
25
- ######################################################################
26
- #++
27
-
28
- module RubyMVC
29
- module Toolkit
30
-
31
- # This class allows obsevers to register a single block
32
- # rather than implementing public observer methods (which
33
- # can get messy and unnecessarily pollute the public API
34
- # of the class)
35
- #
36
- # Each registered block will be called with the following
37
- # arguments:
38
- #
39
- # 1) The notification name (or the method name to be called)
40
- # 2) The sender of the notification
41
- # 3) The notification parameters.
42
-
43
- class ObserverReference
44
- attr_reader :observer
45
-
46
- def initialize(observer, &block)
47
- @observer = observer
48
- @block = block
49
- end
50
-
51
- def method_missing(method, *args, &block)
52
- if @observer.respond_to? method
53
- @observer.send(method, *args, &block)
54
- elsif !@block.nil?
55
- @block.call(method, *args)
56
- else
57
- super
58
- end
59
- end
60
- end
61
-
62
- class ObserverList
63
- def initialize
64
- @observers = {}
65
- end
66
-
67
- def <<(val)
68
- if !val.is_a? ObserverReference
69
- raise ArgumentError, "can only have observer references in the list!"
70
- end
71
-
72
- @observers[val.observer] = val if !@observers.include? val.observer
73
- end
74
-
75
- def delete(val)
76
- @observers.delete(val)
77
- end
78
-
79
- def each(&block)
80
- @observers.each_value(&block)
81
- end
82
- end
83
-
84
- # This class is used to relay notifications from one sender
85
- # to another sender's registered listeners.
86
-
87
- class NotificationRelay
88
- def initialize(sender, listeners)
89
- @listeners = listeners
90
- @sender = sender
91
- end
92
-
93
- def method_missing(method, *args, &block)
94
- args[0] = @sender
95
- @listeners.each { |l| l.send(method, *args, &block) }
96
- end
97
- end
98
-
99
- module ViewChangeNotifier
100
- def register_view_change_observer(observer, &block)
101
- observers = (@view_change_observers ||= ObserverList.new)
102
- observers << ObserverReference.new(observer, &block)
103
- end
104
-
105
- def unregister_view_change_observer(observer)
106
- observers = (@view_change_observers ||= ObserverList.new)
107
- observers.delete(observer)
108
- end
109
-
110
- protected
111
- def fire_view_changed
112
- observers = (@view_change_observers ||= [])
113
- observers.each { |o| o.view_changed(self) }
114
- end
115
- end
116
-
117
- module ChangeNotifier
118
- def register_change_observer(observer, &block)
119
- observers = (@change_observers ||= ObserverList.new)
120
- observers << ObserverReference.new(observer, &block)
121
- end
122
-
123
- def unregister_change_observer(observer)
124
- observers = (@change_observers ||= [])
125
- observers.delete(observer)
126
- end
127
-
128
- def squelch=(val)
129
- @notification_squelch = val
130
- end
131
-
132
- protected
133
- def fire_changed
134
- return if @notification_squelch
135
- observers = (@change_observers ||= [])
136
- observers.each { |o| o.changed(self) }
137
- end
138
- end
139
-
140
- module PropertyChangeNotifier
141
- def register_property_change_observer(observer, &block)
142
- observers = (@property_change_observers ||= [])
143
- observers << ObserverReference.new(observer, &block)
144
- end
145
-
146
- def unregister_property_change_observer(observer)
147
- observers = (@property_change_observers ||= [])
148
- observers.delete(observer)
149
- end
150
-
151
- def squelch=(val)
152
- @notification_squelch = val
153
- end
154
-
155
- protected
156
- def fire_property_changed(property, old_val, new_val)
157
- return if @notification_squelch
158
- observers = (@property_change_observers ||= [])
159
- observers.each { |o| o.property_changed(self, property, old_val, new_val) }
160
- end
161
- end
162
-
163
- module SignalHandler
164
- module ClassMethods
165
- def signals
166
- @signals ||= {}
167
- end
168
-
169
- def signal(signal, options = { :vetoable => false })
170
- signals[signal] = options
171
- end
172
-
173
- def valid_signal?(signal)
174
- if !signals.has_key? signal
175
- raise ArgumentError, "class #{self} does not support signal '#{signal}'"
176
- end
177
- end
178
- end
179
-
180
- def signal_connect(signal, &block)
181
- self.class.valid_signal? signal if self.class.respond_to? :signals
182
- signals = (@signals ||= {})
183
- signals[signal] = block
184
- end
185
-
186
- def signal_disconnect(signal)
187
- self.class.valid_signal? signal if self.class.respond_to? :signals
188
- signals = (@signals ||= {})
189
- signals.delete(signal)
190
- end
191
-
192
- def signal_emit(signal, *args)
193
- self.class.valid_signal? signal if self.class.respond_to? :signals
194
- signals = (@signals ||= {})
195
- if signals.key? signal
196
- proc = signals[signal]
197
- proc.call(*args) if !proc.nil?
198
- end
199
- end
200
- end
201
- end
202
- end
@@ -1,84 +0,0 @@
1
- #--
2
- ######################################################################
3
- #
4
- # Copyright 2011 Andrew S. Townley
5
- #
6
- # Permission to use, copy, modify, and disribute this software for
7
- # any purpose with or without fee is hereby granted, provided that
8
- # the above copyright notices and this permission notice appear in
9
- # all copies.
10
- #
11
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL
12
- # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13
- # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14
- # AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT OR
15
- # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
16
- # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
17
- # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
18
- # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
- #
20
- # File: ar_model_editor.rb
21
- # Created: Sat 19 Nov 2011 11:26:37 GMT
22
- #
23
- #####################################################################
24
- #++
25
-
26
- module RubyMVC
27
- module Views
28
-
29
- # This class is responsible for building a form for the
30
- # given ActiveRecord model
31
-
32
- class ActiveRecordModelEditor < View
33
- DEFAULTS = { :label_width => 0.3 }.freeze
34
-
35
- def initialize(model, options = {}, &block)
36
- super(options, &block)
37
- load(model, options, &block)
38
- end
39
-
40
- # This method is used to load the view with the
41
- # information in the AR model.
42
-
43
- def load(model, options = {}, &block)
44
- lwidth = options[:label_width] || DEFAULTS[:label_width]
45
-
46
- stack :width => "100%" do
47
- flow :width => "100%" do
48
- model.attributes.keys.sort.each do |key|
49
- # FIXME: I can't believe that you have to do this
50
- # this way with AR. I'm surely missing
51
- # something...
52
- m = "#{key}=".to_sym
53
- value = model.attributes[key]
54
- flow :width => lwidth, :margin_top => 2 do
55
- para key, :weight => 'bold', :align => "right"
56
- end
57
- flow :width => 1 - lwidth do
58
- edit_line model.attributes[key] do |e|
59
- model.send(m, e.text)
60
- end
61
- end
62
- end
63
- end
64
- end
65
-
66
- @model = model
67
- @options = options
68
- end
69
-
70
- def save
71
- @model.save!
72
- end
73
-
74
- def create
75
- if @model
76
- load(@model.class.new, options)
77
- else
78
- alert("No template model.\nUse the #load method instead.")
79
- end
80
- end
81
- end
82
-
83
- end
84
- end