Neurogami-jimpanzee 1.0.2.1 → 1.0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -0
- data/Jimpanzee.gemspec +0 -0
- data/Manifest.txt +2 -2
- data/README.md +1 -1
- data/bin/jimpanzee +1 -1
- data/lib/jimpanzee_version.rb +9 -0
- data/lib/monkeybars/controller.rb +61 -46
- data/lib/monkeybars/view.rb +9 -0
- data/skeleton/lib/java/{monkeybars-1.0.2.1.jar → monkeybars-1.0.3.1.jar} +0 -0
- data/skeleton/src/manifest.rb +11 -1
- data/skeleton/tasks/jimpanzee.rake +173 -0
- metadata +4 -3
- data/skeleton/tasks/monkeybars.rake +0 -89
data/History.txt
CHANGED
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.
|
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/
|
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
data/bin/jimpanzee
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
251
|
+
else
|
251
252
|
"window"
|
252
|
-
|
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
|
data/lib/monkeybars/view.rb
CHANGED
@@ -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
|
Binary file
|
data/skeleton/src/manifest.rb
CHANGED
@@ -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
|
-
|
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
|
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/
|
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.
|
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
|