glib-eventable 0.1.2 → 0.1.3

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