glib-eventable 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -24,6 +24,14 @@ class Window < Gtk::Window
24
24
  end
25
25
  ```
26
26
 
27
+ Or simply:
28
+
29
+ ```ruby
30
+ class Window < Gtk::Window
31
+ event destroy: -> { Gtk.main_quit }
32
+ end
33
+ ```
34
+
27
35
  This allows you to create subclasses of `Gtk` objects in a more OOP style.
28
36
 
29
37
  ## Install
@@ -39,13 +47,13 @@ require 'glib/eventable'
39
47
 
40
48
  class MyToggleRenderer < Gtk::CellRendererToggle
41
49
  event toggled: :on_toggle
42
-
50
+
43
51
  def initialize(column)
44
52
  @column = column
45
-
53
+
46
54
  super()
47
55
  end
48
-
56
+
49
57
  def on_toggle(path)
50
58
  iter = @column.tree_view.model.get_iter(path)
51
59
 
data/Rakefile CHANGED
@@ -27,6 +27,7 @@ spec = Gem::Specification.new do |s|
27
27
  s.add_development_dependency 'at', '~> 0.1.3'
28
28
  s.add_development_dependency 'rake', '~> 0.9'
29
29
  s.add_development_dependency 'gtk2', '~> 1.1.5'
30
+ s.add_development_dependency 'rspec', '~> 2.12'
30
31
  s.add_development_dependency 'guard-rspec', '~> 2.1'
31
32
  s.add_development_dependency 'guard-yard', '~> 2.0'
32
33
  s.add_development_dependency 'guard-shell', '~> 0.5'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "glib-eventable"
5
- s.version = "0.1.2"
5
+ s.version = "0.1.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ryan Scott Lewis"]
9
- s.date = "2012-11-27"
9
+ s.date = "2012-12-04"
10
10
  s.description = "This is a helper gem for ruby-gnome2 applications that allows developers to easily connect signals to methods."
11
11
  s.email = "ryan@rynet.us"
12
12
  s.files = [".gitignore", ".rvmrc", "Gemfile", "Guardfile", "LICENSE", "README.md", "Rakefile", "VERSION", "glib-eventable.gemspec", "lib/glib-eventable.rb", "lib/glib/eventable.rb", "spec/glib/eventable_spec.rb", "spec/spec_helper.rb", "spec/support/windows.rb"]
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency(%q<at>, ["~> 0.1.3"])
25
25
  s.add_development_dependency(%q<rake>, ["~> 0.9"])
26
26
  s.add_development_dependency(%q<gtk2>, ["~> 1.1.5"])
27
+ s.add_development_dependency(%q<rspec>, ["~> 2.12"])
27
28
  s.add_development_dependency(%q<guard-rspec>, ["~> 2.1"])
28
29
  s.add_development_dependency(%q<guard-yard>, ["~> 2.0"])
29
30
  s.add_development_dependency(%q<guard-shell>, ["~> 0.5"])
@@ -37,6 +38,7 @@ Gem::Specification.new do |s|
37
38
  s.add_dependency(%q<at>, ["~> 0.1.3"])
38
39
  s.add_dependency(%q<rake>, ["~> 0.9"])
39
40
  s.add_dependency(%q<gtk2>, ["~> 1.1.5"])
41
+ s.add_dependency(%q<rspec>, ["~> 2.12"])
40
42
  s.add_dependency(%q<guard-rspec>, ["~> 2.1"])
41
43
  s.add_dependency(%q<guard-yard>, ["~> 2.0"])
42
44
  s.add_dependency(%q<guard-shell>, ["~> 0.5"])
@@ -51,6 +53,7 @@ Gem::Specification.new do |s|
51
53
  s.add_dependency(%q<at>, ["~> 0.1.3"])
52
54
  s.add_dependency(%q<rake>, ["~> 0.9"])
53
55
  s.add_dependency(%q<gtk2>, ["~> 1.1.5"])
56
+ s.add_dependency(%q<rspec>, ["~> 2.12"])
54
57
  s.add_dependency(%q<guard-rspec>, ["~> 2.1"])
55
58
  s.add_dependency(%q<guard-yard>, ["~> 2.0"])
56
59
  s.add_dependency(%q<guard-shell>, ["~> 0.5"])
@@ -16,22 +16,31 @@ module GLib
16
16
  @events ||= ancestors[1].respond_to?(:events) ? ancestors[1].events.dup : {}
17
17
  return @events if event_hash.nil?
18
18
 
19
- raise TypeError, 'event_hash must respond to :to_hash or :to_h' unless [:to_hash, :to_h].any? { |method_name| event_hash.respond_to?(method_name) }
19
+ raise TypeError, 'event_hash must respond to :to_hash or :to_h' unless event_hash.respond_to?(:to_hash) || event_hash.respond_to?(:to_h)
20
20
  event_hash = event_hash.to_hash rescue event_hash.to_h
21
+
22
+ @events = @events.merge(event_hash).each_with_object({}) do |(event_name, method_name_or_proc), memo|
23
+ raise TypeError, 'event_hash keys must respond to :to_s' unless event_hash.respond_to?(:to_s)
24
+ raise TypeError, 'event_hash values must respond to :call or :to_s' unless method_name_or_proc.respond_to?(:call) || method_name_or_proc.respond_to?(:to_s)
25
+
26
+ event_name = event_name.to_s.downcase.strip
27
+ method_name_or_proc = method_name_or_proc.to_s.downcase.strip.to_sym unless method_name_or_proc.respond_to?(:call)
21
28
 
22
- @events = event_hash.merge(@events)
29
+ memo[event_name] = method_name_or_proc
30
+ end
23
31
  end
24
32
  alias_method :events, :event
25
33
 
26
34
  # Connect signals to events before initialization.
27
35
  def new(*args)
28
36
  super.instance_eval do
29
- self.class.events.each do |event_name, method_name|
30
- # TODO: These should be /defined/ as this, not read as this
31
- event_name = event_name.to_s.downcase.strip
32
- method_name = method_name.to_s.downcase.strip.to_sym
33
-
34
- signal_connect(event_name) { |object, *args| send(method_name, *args)}
37
+ self.class.events.each do |event_name, method_name_or_proc|
38
+ signal_connect(event_name) do |*arguments|
39
+ proc = method_name_or_proc.respond_to?(:call) ? method_name_or_proc : method(method_name_or_proc).to_proc
40
+ arguments = arguments[0...proc.arity] if proc.arity >= 0
41
+
42
+ instance_exec(*arguments, &proc)
43
+ end
35
44
  end
36
45
 
37
46
  self
@@ -39,7 +48,7 @@ module GLib
39
48
  end
40
49
  end
41
50
 
42
- # Modify all Instantiatable with Eventable
51
+ # Modify all Instantiatable objects with Eventable
43
52
  class Instantiatable
44
53
  extend Eventable
45
54
  end
@@ -23,3 +23,13 @@ end
23
23
  describe MainWindow do
24
24
  it_behaves_like 'an eventable GLib object'
25
25
  end
26
+
27
+ describe ProcWindow do
28
+ describe '#on_destroy' do
29
+ it 'should be run when a `destroy` signal is emitted' do
30
+ subject.at.is_destroyed.should be_false
31
+ subject.signal_emit('destroy')
32
+ subject.at.is_destroyed.should == :true_from_proc
33
+ end
34
+ end
35
+ end
@@ -1,14 +1,18 @@
1
1
  class BaseWindow < Gtk::Window
2
- event 'destroy' => :on_destroy
2
+ event destroy: :on_destroy
3
3
 
4
4
  def initialize
5
5
  super
6
6
  @is_destroyed = false
7
7
  end
8
8
 
9
- def on_destroy
9
+ def on_destroy(*args)
10
10
  @is_destroyed = true
11
11
  end
12
12
  end
13
13
 
14
14
  class MainWindow < BaseWindow; end
15
+
16
+ class ProcWindow < BaseWindow
17
+ event destroy: -> { |*args| @is_destroyed = :true_from_proc }
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glib-eventable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-27 00:00:00.000000000 Z
12
+ date: 2012-12-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: version
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: 1.1.5
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '2.12'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '2.12'
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: guard-rspec
96
112
  requirement: !ruby/object:Gem::Requirement