Neurogami-jimpanzee 1.0.2.1 → 1.0.3.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.
data/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ == 1.0.3.1 / 2009-05-30
2
+
3
+ * Fixed bug in have_focus? and in generator code
4
+
5
+ == 1.0.2.2 / 2009-05-29
6
+ * Updated generator to include UI filem using SwingSet
7
+
1
8
  == 1.0.2.1 / 2009-05-16
2
9
  * Glommed source from Monkeybars gitorious repo
3
10
 
data/Jimpanzee.gemspec CHANGED
Binary file
data/Manifest.txt CHANGED
@@ -22,14 +22,14 @@ lib/monkeybars/view_nesting.rb
22
22
  lib/monkeybars/view_positioning.rb
23
23
  lib/jimpanzee_version.rb
24
24
  skeleton/Rakefile
25
- skeleton/lib/java/monkeybars-1.0.2.1.jar
25
+ skeleton/lib/java/monkeybars-1.0.3.1.jar
26
26
  skeleton/lib/ruby/README.txt
27
27
  skeleton/src/application_controller.rb
28
28
  skeleton/src/application_view.rb
29
29
  skeleton/src/main.rb
30
30
  skeleton/src/manifest.rb
31
31
  skeleton/src/resolver.rb
32
- skeleton/tasks/monkeybars.rake
32
+ skeleton/tasks/jimpanzee.rake
33
33
  spec/spec_helper.rb
34
34
  spec/unit/component_mixin_spec.rb
35
35
  spec/unit/controller_spec.rb
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Jimpanzee 1.0.2.1
1
+ Monkeybars 1.0.3.1
2
2
 
3
3
  http://github.com/Neurogami/Jimpanzee/tree/master
4
4
 
data/bin/jimpanzee CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'fileutils'
4
4
  require 'rubygems'
5
- require 'monkeybars_version'
5
+ require 'jimpanzee_version'
6
6
 
7
7
  def help(message = nil)
8
8
  $stdout << message + "\n-----------------------------------\n" unless message.nil?
@@ -0,0 +1,9 @@
1
+ # :main: /home/james/ngprojects/Jimpanzee/README.md
2
+ #
3
+ module Jimpanzee
4
+ VERSION = "1.0.3.2"
5
+
6
+ def self.version
7
+ VERSION
8
+ end
9
+ end
@@ -84,10 +84,11 @@ module Monkeybars
84
84
  class Controller
85
85
  include TaskProcessor
86
86
  include EventHandlerRegistrationAndDispatchMixin
87
+
87
88
 
88
89
  @@instance_list ||= Hash.new {|hash, key| hash[key] = []}
89
90
  @@instance_lock ||= Hash.new {|hash, key| hash[key] = Mutex.new }
90
-
91
+
91
92
  # Controllers cannot be instantiated via a call to new, instead use instance
92
93
  # to retrieve the instance of the view. Currently only one instance of a
93
94
  # controller is created but in the near future a configurable limit will be
@@ -102,7 +103,7 @@ module Monkeybars
102
103
  end
103
104
  end
104
105
  end
105
-
106
+
106
107
  # Always returns a new instance of the controller.
107
108
  #
108
109
  # controller1 = MyController.create_instance
@@ -113,7 +114,7 @@ module Monkeybars
113
114
  def self.create_instance
114
115
  new
115
116
  end
116
-
117
+
117
118
  # Declares the view class (as a symbol) to use when instantiating the controller.
118
119
  #
119
120
  # set_view :MyView
@@ -175,7 +176,7 @@ module Monkeybars
175
176
  raise "'Update' is a reserved method name" if :update == method
176
177
  self.send(:class_variable_set, :@@update_method_name, method)
177
178
  end
178
-
179
+
179
180
  # Valid close actions are
180
181
  # * :nothing
181
182
  # * :close (default)
@@ -195,7 +196,7 @@ module Monkeybars
195
196
  def self.set_close_action(action)
196
197
  self.send(:class_variable_set, :@@close_action, action)
197
198
  end
198
-
199
+
199
200
  # Returns a frozen hash of ControllerName => [instances] pairs. This is
200
201
  # useful if you need to iterate over all active controllers to call update
201
202
  # or to check for a status.
@@ -208,29 +209,29 @@ module Monkeybars
208
209
  def self.active_controllers
209
210
  @@instance_list.clone.freeze
210
211
  end
211
-
212
+
212
213
  # See EventHandlerRegistrationAndDispatchMixin::ClassMethods#add_listener
213
214
  class << self
214
- alias_method :original_add_listener, :add_listener
215
+ alias_method :original_add_listener, :add_listener
215
216
  end
216
217
  def self.add_listener(details)
217
218
  original_add_listener(details)
218
219
  hide_protected_class_methods #workaround for JRuby bug #1283
219
220
  end
220
-
221
- private
221
+
222
+ private
222
223
  def self.hide_protected_class_methods #JRuby bug #1283
223
224
  private_class_method :new
224
225
  end
225
226
  hide_protected_class_methods
226
-
227
+
227
228
  def self.__new__
228
229
  object = new
229
230
  @@instance_list[self] << object
230
231
  @@instance_list[self].uniq!
231
232
  object
232
233
  end
233
-
234
+
234
235
  def initialize
235
236
  @model_has_block = false
236
237
  @__model = create_new_model unless self.class.model_class.nil?
@@ -239,25 +240,25 @@ module Monkeybars
239
240
  @__transfer = {}
240
241
  @__view_state = nil
241
242
  setup_implicit_and_explicit_event_handlers
242
-
243
+
243
244
  action = close_action
244
245
  unless [:nothing, :close, :exit, :dispose, :hide].include?(action)
245
246
  raise "Unknown close action: #{action}. Only :nothing, :close, :exit, :dispose, and :hide are supported"
246
247
  end
247
-
248
+
248
249
  window_type = if @__view.instance_variable_get(:@main_view_component).kind_of? javax.swing.JInternalFrame
249
250
  "internalFrame"
250
- else
251
+ else
251
252
  "window"
252
- end
253
-
253
+ end
254
+
254
255
  unless @__view.nil?
255
256
  @__view.close_action(Monkeybars::View::CloseActions::METHOD, MonkeybarsWindowAdapter.new(:"#{window_type}Closing" => self.method(:built_in_close_method)))
256
257
  end
257
-
258
+
258
259
  @closed = true
259
260
  end
260
-
261
+
261
262
  def close_action
262
263
  if self.class.class_variables.member?("@@close_action")
263
264
  action = self.class.send(:class_variable_get, :@@close_action)
@@ -266,7 +267,7 @@ module Monkeybars
266
267
  end
267
268
  action
268
269
  end
269
-
270
+
270
271
  public
271
272
  # Calls the method that was set using Controller.set_update_method. If no method has been set defined, this call is ignored.
272
273
  def update
@@ -281,7 +282,7 @@ module Monkeybars
281
282
  def update_view
282
283
  @__view.update(model, transfer)
283
284
  end
284
-
285
+
285
286
  # Sends a signal to the view. The view will process the signal (if it is
286
287
  # defined in the view via View.define_signal) and optionally invoke the
287
288
  #callback that is passed in as a block.
@@ -294,7 +295,7 @@ module Monkeybars
294
295
  def signal(signal_name, &callback)
295
296
  @__view.process_signal(signal_name, model, transfer, &callback)
296
297
  end
297
-
298
+
298
299
  # Nests a controller under this controller with the given key
299
300
  # def add_user_button_action_performed
300
301
  # @controllers << UserController.create_instance
@@ -308,7 +309,7 @@ module Monkeybars
308
309
  nested_view = sub_controller.instance_variable_get(:@__view)
309
310
  @__view.add_nested_view(name, nested_view, nested_view.instance_variable_get(:@main_view_component), model, transfer)
310
311
  end
311
-
312
+
312
313
  # Removes the nested controller with the given key
313
314
  # This does not do any cleanup on the nested controller's instance.
314
315
  #
@@ -326,6 +327,13 @@ module Monkeybars
326
327
  @__view.remove_nested_view(name, nested_view, nested_view.instance_variable_get(:@main_view_component), model, transfer)
327
328
  end
328
329
 
330
+
331
+ # You cannot jusrt call the Rubty 'exit' to exit the application process, you need the Java exit.
332
+ #
333
+ def application_exit
334
+ java.lang.System.exit(0)
335
+ end
336
+
329
337
  # Returns true if the view is visible, false otherwise
330
338
  def visible?
331
339
  @__view.visible?
@@ -335,7 +343,7 @@ module Monkeybars
335
343
  def hide
336
344
  @__view.hide
337
345
  end
338
-
346
+
339
347
  # Disposes the view
340
348
  def dispose
341
349
  @__view.dispose
@@ -345,7 +353,7 @@ module Monkeybars
345
353
  def show
346
354
  @__view.show
347
355
  end
348
-
356
+
349
357
  # True if close has been called on the controller
350
358
  def closed?
351
359
  @closed
@@ -370,19 +378,19 @@ module Monkeybars
370
378
  @@instance_list[self.class] << self
371
379
  end
372
380
  end
373
-
381
+
374
382
  if closed?
375
383
  load(*args, &block)
376
384
  @__view.on_first_update(model, transfer)
377
385
  clear_view_state
378
386
  @closed = false
379
387
  end
380
-
388
+
381
389
  show
382
-
390
+
383
391
  self #allow var assignment off of open, i.e. screen = SomeScreen.instance.open
384
392
  end
385
-
393
+
386
394
  # Stub to be overriden in sub-class. This is where you put the code you would
387
395
  # normally put in initialize, it will be called the first time open is called
388
396
  # on the controller.
@@ -397,9 +405,16 @@ module Monkeybars
397
405
  original_handle_event(component_name, event_name, event)
398
406
  clear_view_state
399
407
  end
408
+
409
+
400
410
 
411
+ def have_focus?
412
+ !@__view.have_focus?.nil?
413
+ end
414
+ alias_method :focused?, :have_focus?
415
+
401
416
  private
402
-
417
+
403
418
  # Returns the model object. This is the object that is passed to the view
404
419
  # when update_view is called. This model is *not* the same model that you
405
420
  # get from #view_state. Values that you want to propogate from the
@@ -407,7 +422,7 @@ module Monkeybars
407
422
  def model #:doc:
408
423
  @__model
409
424
  end
410
-
425
+
411
426
  # Returns the transfer object which is a transient hash passed to the view
412
427
  # whenever #update_view is called. The transfer is cleared after each call
413
428
  # to #update_view. The transfer is used to pass data to and
@@ -427,7 +442,7 @@ module Monkeybars
427
442
  def transfer #:doc:
428
443
  @__transfer
429
444
  end
430
-
445
+
431
446
  # Returns a ViewState object which contains a model and a transfer hash of the
432
447
  # view's current contents as defined by the view's mappings. This is for use in
433
448
  # event handlers. The contents of the model and transfer are *not* the same as
@@ -463,19 +478,19 @@ module Monkeybars
463
478
  def view_model # :doc:
464
479
  view_state.model
465
480
  end
466
-
481
+
467
482
  # Equivalent to view_state.transfer
468
483
  def view_transfer
469
484
  view_state.transfer
470
485
  end
471
-
486
+
472
487
  # Resets memoized view_state value. This is called automatically after each
473
488
  # event so it would only need to be called if view_state is used outside
474
489
  # of an event handler.
475
490
  def clear_view_state # :doc:
476
491
  @__view_state = nil
477
492
  end
478
-
493
+
479
494
  # This method is almost always used from within an event handler to propogate
480
495
  # the view_state to the model. Updates the model from the source provided
481
496
  # (typically from view_state). The list of properties defines what is modified
@@ -492,7 +507,7 @@ module Monkeybars
492
507
  def update_model(source, *properties) # :doc:
493
508
  update_provided_model(source, @__model, *properties)
494
509
  end
495
-
510
+
496
511
  # This method works just like Controller#update_model except that the target
497
512
  # is not implicitly the model. The second parameter is a target object for
498
513
  # the properties to be propogated to. This is useful if you have a composite
@@ -511,29 +526,29 @@ module Monkeybars
511
526
  destination.send("#{property}=", source.send(property))
512
527
  end
513
528
  end
514
-
529
+
515
530
  @@model_class_for_child_controller ||= {}
516
531
  def self.model_class
517
532
  @@model_class_for_child_controller[self]
518
533
  end
519
-
534
+
520
535
  def self.model_class=(model)
521
536
  @@model_class_for_child_controller[self] = model
522
537
  end
523
-
538
+
524
539
  @@view_class_for_child_controller ||= {}
525
540
  def self.view_class
526
541
  @@view_class_for_child_controller[self]
527
542
  end
528
-
543
+
529
544
  def self.view_class=(view)
530
545
  @@view_class_for_child_controller[self] = view
531
546
  end
532
-
547
+
533
548
  def sub_controllers
534
549
  @__sub_controllers ||= {}
535
550
  end
536
-
551
+
537
552
  def create_new_model
538
553
  begin
539
554
  unless self.class.model_class.first.nil?
@@ -548,7 +563,7 @@ module Monkeybars
548
563
  self.class.model_class.first.constantize.new
549
564
  end
550
565
  end
551
-
566
+
552
567
  def create_new_view
553
568
  begin
554
569
  self.class.view_class.constantize.new
@@ -581,11 +596,11 @@ module Monkeybars
581
596
  # an array so we emulate the array methods that are in common usage.
582
597
  class ViewState
583
598
  attr_reader :model, :transfer
584
-
599
+
585
600
  def initialize(model, transfer)
586
601
  @model, @transfer = model, transfer
587
602
  end
588
-
603
+
589
604
  def [](index)
590
605
  case index
591
606
  when 0
@@ -596,11 +611,11 @@ module Monkeybars
596
611
  nil
597
612
  end
598
613
  end
599
-
614
+
600
615
  def first
601
616
  @model
602
617
  end
603
-
618
+
604
619
  def last
605
620
  @transfer
606
621
  end
@@ -71,6 +71,8 @@ module Monkeybars
71
71
  METHOD = :method
72
72
  end
73
73
 
74
+
75
+
74
76
  private
75
77
  @@view_nestings_for_child_view ||= {}
76
78
  def self.view_nestings
@@ -437,6 +439,13 @@ module Monkeybars
437
439
  }
438
440
  end
439
441
 
442
+ def have_focus?
443
+ !@main_view_component.focus_owner?.nil?
444
+ end
445
+ alias_method :focused?, :have_focus?
446
+
447
+
448
+
440
449
  def update(model, transfer)
441
450
  self.class.view_mappings.select{|mapping| mapping.maps_to_view?}.each {|mapping| mapping.to_view(self, model, transfer)}
442
451
  transfer.clear
@@ -22,9 +22,19 @@ end
22
22
 
23
23
  require 'resolver'
24
24
 
25
+
26
+ # Good for when you replace an old version with a new version.
27
+ # Not good if you have more than one version in the same directory. :)
28
+ # But if take care to have only one monkeybars jar in the folder,
29
+ # then you don not need to re-edit this file.
30
+ def monkeybars_jar path
31
+ Dir.glob(path).select { |f| f =~ /(monkeybars-)(.+).jar$/}.first
32
+ end
33
+
25
34
  case Monkeybars::Resolver.run_location
26
35
  when Monkeybars::Resolver::IN_FILE_SYSTEM
27
- add_to_classpath '../lib/java/monkeybars-1.0.2.jar'
36
+ here = File.expand_path File.dirname(__FILE__)
37
+ add_to_classpath monkeybars_jar( here + '/../lib/java/*.jar' )
28
38
  end
29
39
 
30
40
  require 'monkeybars'
@@ -0,0 +1,173 @@
1
+ require 'fileutils'
2
+
3
+ desc "ALL, CONTROLLER, VIEW, MODEL, UI are valid options."
4
+ task 'generate'
5
+ rule(/^generate/) do |t|
6
+ ARGV[1..-1].each do |generator_command|
7
+ command, argument = generator_command.split("=")
8
+ case command
9
+ when "ALL"
10
+ generate_tuple argument
11
+ when "VIEW"
12
+ generate_view argument
13
+ when "CONTROLLER"
14
+ generate_controller argument
15
+ when "MODEL"
16
+ generate_model argument
17
+ when "UI"
18
+ generate_ui argument
19
+
20
+ else
21
+ $stdout << "Unknown generate target #{argument}"
22
+ end
23
+ end
24
+ end
25
+
26
+ def generate_tuple path
27
+ pwd = FileUtils.pwd
28
+ generate_controller path
29
+ FileUtils.cd pwd
30
+ generate_model path
31
+ FileUtils.cd pwd
32
+ generate_view path, using_ui = true
33
+ FileUtils.cd pwd
34
+ generate_ui path
35
+ end
36
+
37
+ def generate_controller path
38
+ name = setup_directory path
39
+ file_name = "#{name}_controller.rb"
40
+ name = camelize name
41
+ $stdout << "Generating controller #{name}Controller in file #{file_name}\n"
42
+ File.open(file_name, "w") do |controller_file|
43
+ controller_file << <<-ENDL
44
+ class #{name}Controller < ApplicationController
45
+ set_model '#{name}Model'
46
+ set_view '#{name}View'
47
+ set_close_action :exit
48
+ end
49
+ ENDL
50
+ end
51
+ end
52
+
53
+ def generate_model(path)
54
+ name = setup_directory(path)
55
+ file_name = "#{name}_model.rb"
56
+ name = camelize(name)
57
+ $stdout << "Generating model #{name}Model in file #{file_name}\n"
58
+ File.open(file_name, "w") do |model_file|
59
+ model_file << <<-ENDL
60
+ class #{name}Model
61
+
62
+ end
63
+ ENDL
64
+ end
65
+ end
66
+
67
+ def generate_view path, using_ui = false
68
+ name = setup_directory path
69
+ file_name = "#{name}_view.rb"
70
+ cname = camelize(name)
71
+ puts "Generating view #{cname}View in file #{file_name}"
72
+
73
+
74
+ require_ui = using_ui ? "require '#{name}_ui'" : ''
75
+ java_class = using_ui ? "#{cname}Frame" : "'REPLACE_ME' "
76
+ view_file = %~
77
+ #{require_ui}
78
+
79
+ class #{cname}View < ApplicationView
80
+ set_java_class #{java_class}
81
+
82
+ # Put your load behavior here:
83
+ def load
84
+ move_to_center
85
+ end
86
+
87
+ end
88
+ ~
89
+
90
+ File.open(file_name, "w") {|f| f.puts view_file}
91
+
92
+
93
+ end
94
+
95
+
96
+
97
+ def generate_ui path
98
+ name = setup_directory path
99
+ file_name = "#{name}_ui.rb"
100
+ name = camelize(name)
101
+ $stdout << "Generating ui #{name}Frame in file #{file_name}\n"
102
+ source = %~# Must have the Neurogami::SwingSet files in your project
103
+ require 'swingset'
104
+
105
+ include Neurogami::SwingSet::Core
106
+
107
+ class #{name}Frame < Frame
108
+ FRAME_WIDTH = 420
109
+ FRAME_HEIGHT = 430
110
+
111
+ LABEL_HEIGHT = 20
112
+ LABEL_WIDTH = 200
113
+
114
+ # Need accessor methods for you UI components:
115
+ attr_accessor :example_label, :example_value
116
+
117
+
118
+ def initialize *args
119
+ super
120
+ self.minimum_width = FRAME_WIDTH
121
+ self.minimum_height = FRAME_HEIGHT
122
+ self.setSize FRAME_HEIGHT, FRAME_WIDTH
123
+ set_up_components
124
+ end
125
+
126
+
127
+ def set_up_components
128
+ # Assumes you have the MiG layout jar in your project and
129
+ # bundled with the app.
130
+
131
+ component_panel = Panel.new
132
+
133
+ component_panel.background_color 255, 255, 255
134
+ component_panel.size FRAME_WIDTH, FRAME_HEIGHT
135
+
136
+ @example_label = Label.new do |l|
137
+ l.font = Font.new "Lucida Grande", 0, 18
138
+ l.minimum_dimensions LABEL_WIDTH, LABEL_HEIGHT
139
+ l.text = "Example label"
140
+ end
141
+
142
+ @example_value = Label.new do |l|
143
+ l.font = Font.new "Lucida Grande", 0, 18
144
+ l.minimum_dimensions LABEL_WIDTH, LABEL_HEIGHT
145
+ l.text = "An example"
146
+ end
147
+
148
+ component_panel.add @example_label, 'grow x'
149
+ component_panel.add @example_value, "gap unrelated"
150
+
151
+ add component_panel
152
+
153
+ end
154
+ end ~
155
+
156
+ File.open(file_name, "w"){ |f| f.puts source }
157
+ end
158
+
159
+ def setup_directory(path)
160
+ FileUtils.mkdir_p path.gsub("\\", "/")
161
+ FileUtils.cd(path)
162
+ path.split("/").last
163
+ end
164
+
165
+ def camelize(name, first_letter_in_uppercase = true)
166
+ name = name.to_s
167
+ if first_letter_in_uppercase
168
+ name.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
169
+ else
170
+ name[0..0] + camelize(name[1..-1])
171
+ end
172
+ end
173
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Neurogami-jimpanzee
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2.1
4
+ version: 1.0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Britt
@@ -41,6 +41,7 @@ files:
41
41
  - bin/jimpanzee
42
42
  - lib/monkeybars.rb
43
43
  - lib/monkeybars/controller.rb
44
+ - lib/jimpanzee_version.rb
44
45
  - lib/monkeybars/debug.rb
45
46
  - lib/monkeybars/event_handler.rb
46
47
  - lib/monkeybars/event_handler_registration_and_dispatch_mixin.rb
@@ -54,14 +55,14 @@ files:
54
55
  - lib/monkeybars/view_nesting.rb
55
56
  - lib/monkeybars/view_positioning.rb
56
57
  - lib/monkeybars/view.rb
57
- - skeleton/tasks/monkeybars.rake
58
+ - skeleton/tasks/jimpanzee.rake
58
59
  - skeleton/src/application_view.rb
59
60
  - skeleton/src/main.rb
60
61
  - skeleton/src/application_controller.rb
61
62
  - skeleton/src/resolver.rb
62
63
  - skeleton/src/manifest.rb
63
64
  - skeleton/lib/java/README.txt
64
- - skeleton/lib/java/monkeybars-1.0.2.1.jar
65
+ - skeleton/lib/java/monkeybars-1.0.3.1.jar
65
66
  - skeleton/lib/ruby/README.md
66
67
  - skeleton/lib/ruby/README.txt
67
68
  - skeleton/Rakefile
@@ -1,89 +0,0 @@
1
- require 'fileutils'
2
-
3
- desc "ALL, CONTROLLER, VIEW, MODEL are valid options."
4
- task 'generate'
5
- rule(/^generate/) do |t|
6
- ARGV[1..-1].each do |generator_command|
7
- command, argument = generator_command.split("=")
8
- case command
9
- when "ALL"
10
- generate_tuple(argument)
11
- when "VIEW"
12
- generate_view(argument)
13
- when "CONTROLLER"
14
- generate_controller(argument)
15
- when "MODEL"
16
- generate_model(argument)
17
- else
18
- $stdout << "Unknown generate target #{argument}"
19
- end
20
- end
21
- end
22
-
23
- def generate_tuple(path)
24
- pwd = FileUtils.pwd
25
- generate_controller(path)
26
- FileUtils.cd(pwd)
27
- generate_model(path)
28
- FileUtils.cd(pwd)
29
- generate_view(path)
30
- end
31
-
32
- def generate_controller(path)
33
- name = setup_directory(path)
34
- file_name = "#{name}_controller.rb"
35
- name = camelize(name)
36
- $stdout << "Generating controller #{name}Controller in file #{file_name}\n"
37
- File.open(file_name, "w") do |controller_file|
38
- controller_file << <<-ENDL
39
- class #{name}Controller < ApplicationController
40
- set_model '#{name}Model'
41
- set_view '#{name}View'
42
- set_close_action :exit
43
- end
44
- ENDL
45
- end
46
- end
47
-
48
- def generate_model(path)
49
- name = setup_directory(path)
50
- file_name = "#{name}_model.rb"
51
- name = camelize(name)
52
- $stdout << "Generating model #{name}Model in file #{file_name}\n"
53
- File.open(file_name, "w") do |model_file|
54
- model_file << <<-ENDL
55
- class #{name}Model
56
-
57
- end
58
- ENDL
59
- end
60
- end
61
-
62
- def generate_view(path)
63
- name = setup_directory(path)
64
- file_name = "#{name}_view.rb"
65
- name = camelize(name)
66
- $stdout << "Generating view #{name}View in file #{file_name}\n"
67
- File.open(file_name, "w") do |view_file|
68
- view_file << <<-ENDL
69
- class #{name}View < ApplicationView
70
- set_java_class ''
71
- end
72
- ENDL
73
- end
74
- end
75
-
76
- def setup_directory(path)
77
- FileUtils.mkdir_p path.gsub("\\", "/")
78
- FileUtils.cd(path)
79
- path.split("/").last
80
- end
81
-
82
- def camelize(name, first_letter_in_uppercase = true)
83
- name = name.to_s
84
- if first_letter_in_uppercase
85
- name.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
86
- else
87
- name[0..0] + camelize(name[1..-1])
88
- end
89
- end