freightrain 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require 'rake/testtask'
9
9
 
10
10
  spec = Gem::Specification.new do |s|
11
11
  s.name = 'freightrain'
12
- s.version = '0.6.0'
12
+ s.version = '0.6.1'
13
13
  s.add_dependency('require_all', '>= 1.1.0')
14
14
  s.add_dependency('needle', '>= 1.3.0')
15
15
  s.has_rdoc = false
@@ -15,10 +15,11 @@ module Freightrain
15
15
 
16
16
  def create_objects_from_file(file_name)
17
17
  @builder.add_from_file(get_glade_file(file_name))
18
- if @builder.objects.first.respond_to? :toplevel
19
- @control = @builder.objects.first.toplevel
18
+ objects = @builder.objects
19
+ if objects.first.respond_to? :toplevel
20
+ @control = objects.first.toplevel
20
21
  end
21
- return @builder.objects.select do |obj|
22
+ return objects.select do |obj|
22
23
  obj.respond_to? :name
23
24
  end
24
25
  end
@@ -30,16 +31,14 @@ module Freightrain
30
31
  end
31
32
  end
32
33
 
33
- # def connect_signals()
34
- # @builder.connect_signals do |signal|
35
- # yield(signal)
36
- # end
37
- # end
38
-
39
34
  def connect_to_callback(widget, event_name, method)
35
+ begin
40
36
  widget.signal_connect(event_name) do |instance, *args|
41
37
  method.call(*args)
42
38
  end
39
+ rescue Exception => ex
40
+ #TODO:handle this
41
+ end
43
42
  end
44
43
 
45
44
  def get_glade_file(file_name)
@@ -18,13 +18,22 @@ module Freightrain
18
18
 
19
19
  def create_signals
20
20
  @signals = {}
21
- signal_keys = self.class.instance_variable_get(:@signals)
22
- signal_keys ||= []
23
- signal_keys.each do |signal|
21
+ signals = self.class.instance_variable_get(:@signals)
22
+ signals ||= {}
23
+ signals.keys.each do |signal|
24
+ create_forward_method(signals[signal][:forwards], signal) if signals[signal]
24
25
  @signals[signal] = FreightSignal.new
25
26
  end
26
27
  end
27
28
 
29
+ def create_forward_method(target_description, signal)
30
+ target = target_description.split(".")[0]
31
+ event = target_description.split(".")[1]
32
+ self.class.send(:define_method, "#{target}_on_#{event}") do
33
+ fire signal.to_sym
34
+ end
35
+ end
36
+
28
37
  def hook_to_signals(host, prefix = nil)
29
38
  @signals.each do |signal_key, signal|
30
39
  method_name = "on_#{signal_key}"
@@ -32,14 +41,13 @@ module Freightrain
32
41
  signal.connect(host.method(method_name)) if host.respond_to?(method_name)
33
42
  end
34
43
  end
35
-
36
44
 
37
45
  end
38
46
  end
39
47
 
40
- def signal(signal_name)
41
- @signals ||= []
42
- @signals << signal_name.to_sym
48
+ def signal(signal_name, options = nil)
49
+ @signals ||= {}
50
+ @signals[signal_name.to_sym] = options
43
51
  end
44
52
 
45
53
  end
@@ -19,10 +19,10 @@ module Freightrain
19
19
  end
20
20
 
21
21
  def self.new(*args, &block)
22
- @viewmodel = allocate
23
- @viewmodel.bootstrap
24
- @viewmodel.send(:initialize, *args, &block)
25
- return @viewmodel
22
+ viewmodel = allocate
23
+ viewmodel.bootstrap
24
+ viewmodel.send(:initialize, *args, &block)
25
+ return viewmodel
26
26
  end
27
27
 
28
28
  def bootstrap
@@ -7,14 +7,12 @@ class CallbackWrapper
7
7
  @method = method
8
8
  end
9
9
 
10
- def matches_widget?(widget)
11
- method_target_and_event = @method.name.sub("on_", "")
12
- return method_target_and_event.scan(/^#{widget.name}/).any?
10
+ def target
11
+ return @method.name.split("_on_")[0]
13
12
  end
14
13
 
15
- def event_name(widget)
16
- event_name = @method.name.split(widget.name)[1]
17
- return event_name.sub("_", "").gsub("_", "-")
14
+ def event
15
+ return @method.name.split("_on_")[1].gsub("_", "-")
18
16
  end
19
17
 
20
18
  end
@@ -15,7 +15,7 @@ module Freightrain
15
15
 
16
16
  def get_all_callbacks
17
17
  return self.methods.select do |method_name|
18
- method_name =~ /^on_/i
18
+ method_name =~ /_on_/i
19
19
  end.map { |method_name| CallbackWrapper.new(method(method_name)) }
20
20
  end
21
21
 
@@ -32,6 +32,7 @@ module Freightrain
32
32
  end
33
33
 
34
34
  def initialize()
35
+ create_signals
35
36
  @widgets = []
36
37
  if(Freightrain.toolkit)
37
38
  self.class.instance_eval("include Toolkit::DialogHelper")
@@ -39,8 +40,7 @@ module Freightrain
39
40
  load_from_file(self.class.name, @builder)
40
41
  end
41
42
  hook_to_layout_widgets()
42
- load_bindings_from_file(@widgets)
43
- create_signals
43
+ load_bindings_from_file(@widgets)
44
44
  end
45
45
 
46
46
  def hook_to_layout_widgets
@@ -12,8 +12,8 @@ module Freightrain
12
12
  @widgets = builder.create_objects_from_file(file_name)
13
13
  builder.create_object_accessors(@widgets, self)
14
14
  self.get_all_callbacks.each do |callback|
15
- target = @widgets.select { |widget| callback.matches_widget?(widget)}.first
16
- builder.connect_to_callback(target, callback.event_name(target), callback.method) if target
15
+ target = @widgets.select { |widget| callback.target == widget.name }.first
16
+ builder.connect_to_callback(target, callback.event, callback.method) if target
17
17
  end
18
18
  end
19
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freightrain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Dallera
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-03-26 00:00:00 +01:00
12
+ date: 2010-03-31 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency