freightrain 0.6.0 → 0.6.1

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