rui 0.1.0

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/rui.gemspec ADDED
@@ -0,0 +1,92 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{rui}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Paolo Capriotti"]
12
+ s.date = %q{2011-01-01}
13
+ s.description = %q{GUI abstraction library supporting Qt and KDE backends}
14
+ s.email = %q{p.capriotti@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ "COPYING",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "README.md",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "examples/autogui/main.rb",
27
+ "examples/hello/main.rb",
28
+ "examples/kderun.rb",
29
+ "examples/qtrun.rb",
30
+ "examples/signals/main.rb",
31
+ "lib/rui.rb",
32
+ "lib/rui/descriptor.rb",
33
+ "lib/rui/factory.rb",
34
+ "lib/rui/observer_utils.rb",
35
+ "lib/rui/toolkits/kde/kde.rb",
36
+ "lib/rui/toolkits/qt/qt.rb",
37
+ "lib/rui/toolkits/qtbase/gui_builder.rb",
38
+ "lib/rui/toolkits/qtbase/qt.rb",
39
+ "lib/rui/utils.rb",
40
+ "rui.gemspec",
41
+ "test/helper.rb",
42
+ "test/test_descriptor.rb",
43
+ "test/test_factory.rb",
44
+ "test/test_observer_utils.rb"
45
+ ]
46
+ s.homepage = %q{http://github.com/pcapriotti/rui}
47
+ s.licenses = ["LGPL"]
48
+ s.require_paths = ["lib"]
49
+ s.rubyforge_project = %q{nowarning}
50
+ s.rubygems_version = %q{1.3.7}
51
+ s.summary = %q{GUI abstraction library}
52
+ s.test_files = [
53
+ "examples/autogui/main.rb",
54
+ "examples/hello/main.rb",
55
+ "examples/kderun.rb",
56
+ "examples/qtrun.rb",
57
+ "examples/signals/main.rb",
58
+ "test/helper.rb",
59
+ "test/test_descriptor.rb",
60
+ "test/test_factory.rb",
61
+ "test/test_observer_utils.rb"
62
+ ]
63
+
64
+ if s.respond_to? :specification_version then
65
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
66
+ s.specification_version = 3
67
+
68
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
69
+ s.add_runtime_dependency(%q<builder>, [">= 0"])
70
+ s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
71
+ s.add_development_dependency(%q<bluecloth>, [">= 0"])
72
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
73
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
74
+ s.add_development_dependency(%q<rcov>, [">= 0"])
75
+ else
76
+ s.add_dependency(%q<builder>, [">= 0"])
77
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
78
+ s.add_dependency(%q<bluecloth>, [">= 0"])
79
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
80
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
81
+ s.add_dependency(%q<rcov>, [">= 0"])
82
+ end
83
+ else
84
+ s.add_dependency(%q<builder>, [">= 0"])
85
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
86
+ s.add_dependency(%q<bluecloth>, [">= 0"])
87
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
88
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
89
+ s.add_dependency(%q<rcov>, [">= 0"])
90
+ end
91
+ end
92
+
data/test/helper.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ require 'rui'
15
+
16
+ class Test::Unit::TestCase
17
+ end
@@ -0,0 +1,237 @@
1
+ # Copyright (c) 2010 Paolo Capriotti <p.capriotti@gmail.com>
2
+ #
3
+ # This library is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU Lesser General Public License as
5
+ # published by the Free Software Foundation; either version 3 of the
6
+ # License, or (at your option) any later version.
7
+
8
+ require 'test/unit'
9
+ require 'rui/descriptor'
10
+
11
+ class TestDescriptor < Test::Unit::TestCase
12
+ def test_add_child
13
+ parent = Descriptor.new(:parent)
14
+ child = Descriptor.new(:child)
15
+ parent.add_child(child)
16
+
17
+ assert_equal 1, parent.children.size
18
+ assert_equal :child, parent.children.first.tag
19
+ end
20
+
21
+ def test_merge_child_with_no_merge_points
22
+ parent = Descriptor.new(:parent)
23
+ children = (0...5).map do |i|
24
+ child = Descriptor.new("child#{i}".to_sym)
25
+ parent.add_child(child)
26
+ end
27
+ extra_child = Descriptor.new(:extra)
28
+
29
+ parent.merge_child(extra_child)
30
+
31
+ assert_equal 6, parent.children.size
32
+ assert_equal :extra, parent.children.last.tag
33
+ end
34
+
35
+ def test_merge_child_with_merge_point
36
+ parent = Descriptor.new(:parent)
37
+ parent.add_merge_point(3)
38
+
39
+ (0...5).each do |i|
40
+ child = Descriptor.new("child#{i}".to_sym)
41
+ parent.add_child(child)
42
+ end
43
+ extra_child = Descriptor.new(:extra)
44
+
45
+ parent.merge_child(extra_child)
46
+
47
+ assert_equal 6, parent.children.size
48
+ assert_equal :extra, parent.children[3].tag
49
+ end
50
+
51
+ def test_merge_child_with_capped_merge_point
52
+ parent = Descriptor.new(:parent)
53
+ parent.add_merge_point(3, 2)
54
+
55
+ (0...5).each do |i|
56
+ child = Descriptor.new("child#{i}".to_sym)
57
+ parent.add_child(child)
58
+ end
59
+ (0...3).each do |i|
60
+ child = Descriptor.new("extra#{i}".to_sym)
61
+ parent.merge_child(child)
62
+ end
63
+
64
+ assert_equal 8, parent.children.size
65
+ assert_equal :extra0, parent.children[3].tag
66
+ assert_equal :extra1, parent.children[4].tag
67
+ assert_equal :extra2, parent.children[7].tag
68
+ end
69
+
70
+ def test_simple_to_sexp
71
+ desc = Descriptor.new("hello", :foo => 42)
72
+ assert_equal "(hello {:foo=>42})", desc.to_sexp
73
+ end
74
+
75
+ def test_hierarchical_to_sexp
76
+ parent = Descriptor.new("parent", :foo => 42)
77
+ child = Descriptor.new("child")
78
+ parent.add_child(child)
79
+
80
+ assert_equal("(parent {:foo=>42} (child {}))", parent.to_sexp)
81
+ end
82
+
83
+ def test_builder
84
+ desc = Descriptor.build(:gui) do
85
+ menu_bar do
86
+ menu(:file) do
87
+ action :new
88
+ action :open
89
+ separator
90
+ action :quit
91
+ end
92
+ end
93
+ end
94
+
95
+ sexp = '(gui {} ' +
96
+ '(menu_bar {} ' +
97
+ '(menu {:name=>:file} ' +
98
+ '(action {:name=>:new}) ' +
99
+ '(action {:name=>:open}) ' +
100
+ '(separator {}) ' +
101
+ '(action {:name=>:quit}))))'
102
+ assert_equal sexp, desc.to_sexp
103
+ end
104
+
105
+ def test_merge_equal
106
+ desc = Descriptor.build(:gui)
107
+ desc2 = Descriptor.build(:gui)
108
+
109
+ desc.merge!(desc2)
110
+ sexp = '(gui {})'
111
+ assert_equal sexp, desc.to_sexp
112
+ end
113
+
114
+ def test_merge_children
115
+ desc = Descriptor.build(:gui) do |g|
116
+ g.item :a
117
+ g.item :b
118
+ end
119
+
120
+ desc2 = Descriptor.build(:gui) do |g|
121
+ g.item :c
122
+ g.item :d
123
+ end
124
+
125
+ desc.merge!(desc2)
126
+ sexp = '(gui {} ' +
127
+ '(item {:name=>:a}) ' +
128
+ '(item {:name=>:b}) ' +
129
+ '(item {:name=>:c}) ' +
130
+ '(item {:name=>:d}))'
131
+ assert_equal sexp, desc.to_sexp
132
+ end
133
+
134
+ def test_merge_recursive
135
+ desc = Descriptor.build(:gui) do |g|
136
+ g.menu_bar do |mb|
137
+ mb.item :a
138
+ mb.item :b
139
+ end
140
+ end
141
+
142
+ desc2 = Descriptor.build(:gui) do |g|
143
+ g.menu_bar do |mb|
144
+ mb.item :c
145
+ mb.item :d
146
+ end
147
+ end
148
+
149
+ desc.merge!(desc2)
150
+ sexp = '(gui {} ' +
151
+ '(menu_bar {} ' +
152
+ '(item {:name=>:a}) ' +
153
+ '(item {:name=>:b}) ' +
154
+ '(item {:name=>:c}) ' +
155
+ '(item {:name=>:d})))'
156
+ assert_equal sexp, desc.to_sexp
157
+ end
158
+
159
+ def test_simple_merge
160
+ desc = Descriptor.build(:gui) do |g|
161
+ g.menu_bar do |mb|
162
+ mb.menu(:file) do |m|
163
+ m.action :new
164
+ m.action :open
165
+ m.separator
166
+ m.action :quit
167
+ end
168
+ end
169
+ end
170
+
171
+ desc2 = Descriptor.build(:gui) do |g|
172
+ g.menu_bar do |mb|
173
+ mb.menu(:file) do |m|
174
+ m.action :save
175
+ end
176
+ mb.menu(:edit) do |m|
177
+ m.action :undo
178
+ end
179
+ end
180
+ g.tool_bar(:main_tool_bar)
181
+ end
182
+
183
+ desc.merge!(desc2)
184
+ sexp = '(gui {} ' +
185
+ '(menu_bar {} ' +
186
+ '(menu {:name=>:file} ' +
187
+ '(action {:name=>:new}) ' +
188
+ '(action {:name=>:open}) ' +
189
+ '(separator {}) ' +
190
+ '(action {:name=>:quit}) ' +
191
+ '(action {:name=>:save})) ' +
192
+ '(menu {:name=>:edit} ' +
193
+ '(action {:name=>:undo}))) ' +
194
+ '(tool_bar {:name=>:main_tool_bar}))'
195
+
196
+ assert_equal sexp, desc.to_sexp
197
+ end
198
+
199
+ def test_merge_partial
200
+ desc = Descriptor.build(:gui) do |g|
201
+ g.menu_bar do |mb|
202
+ mb.menu(:file) do |m|
203
+ m.action :open
204
+ end
205
+ mb.menu(:edit) do |m|
206
+ m.action :undo
207
+ end
208
+ end
209
+ end
210
+
211
+ desc2 = Descriptor.build(:gui) do |g|
212
+ g.menu_bar do |mb|
213
+ mb.menu(:edit) do |m|
214
+ m.action :redo
215
+ end
216
+ mb.menu(:game) do |m|
217
+ m.action :forward
218
+ m.action :back
219
+ end
220
+ end
221
+ end
222
+
223
+ desc.merge!(desc2)
224
+ sexp = '(gui {} ' +
225
+ '(menu_bar {} ' +
226
+ '(menu {:name=>:file} ' +
227
+ '(action {:name=>:open})) ' +
228
+ '(menu {:name=>:edit} ' +
229
+ '(action {:name=>:undo}) ' +
230
+ '(action {:name=>:redo})) ' +
231
+ '(menu {:name=>:game} ' +
232
+ '(action {:name=>:forward}) ' +
233
+ '(action {:name=>:back}))))'
234
+ assert_equal sexp, desc.to_sexp
235
+ end
236
+ end
237
+
@@ -0,0 +1,38 @@
1
+ # Copyright (c) 2010 Paolo Capriotti <p.capriotti@gmail.com>
2
+ #
3
+ # This library is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU Lesser General Public License as
5
+ # published by the Free Software Foundation; either version 3 of the
6
+ # License, or (at your option) any later version.
7
+
8
+ require 'test/unit'
9
+ require 'rui/factory'
10
+
11
+ class TestFactory < Test::Unit::TestCase
12
+ def test_simple_factory
13
+ factory = Factory.new { "hello" }
14
+ assert_equal "hello", factory.new
15
+ end
16
+
17
+ def test_factory_with_arguments
18
+ factory = Factory.new {|x, y| x + y }
19
+ assert_equal 42, factory.new(40, 2)
20
+ end
21
+
22
+ def test_component
23
+ factory = Factory.new(Array) do |n, value|
24
+ Array.new(n) { value }
25
+ end
26
+ assert_equal Array, factory.component
27
+ assert_equal Array, factory.new(10, "hello").class
28
+ end
29
+
30
+ def test_rebind
31
+ factory = Factory.new(Array) do |n, value|
32
+ new(n) { value }
33
+ end
34
+ factory = factory.__bind__(factory.component)
35
+ assert_equal Array, factory.component
36
+ assert_equal [:hello, :hello], factory.new(2, :hello)
37
+ end
38
+ end
@@ -0,0 +1,67 @@
1
+ # Copyright (c) 2010 Paolo Capriotti <p.capriotti@gmail.com>
2
+ #
3
+ # This library is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU Lesser General Public License as
5
+ # published by the Free Software Foundation; either version 3 of the
6
+ # License, or (at your option) any later version.
7
+
8
+ require 'test/unit'
9
+ require 'rui/observer_utils'
10
+
11
+ class TestObserverUtils < Test::Unit::TestCase
12
+ class FakeObservable
13
+ include Observable
14
+ end
15
+
16
+ def setup
17
+ @object = FakeObservable.new
18
+ end
19
+
20
+ def test_simple_observer
21
+ ok = false
22
+ @object.on(:something) { ok = true }
23
+ @object.fire :something
24
+ assert ok
25
+ end
26
+
27
+ def test_observer
28
+ obs = Object.new
29
+ class << obs
30
+ include Observer
31
+ attr_reader :arg
32
+
33
+ def on_something(arg)
34
+ @arg = arg
35
+ end
36
+ end
37
+
38
+ @object.add_observer(obs)
39
+ @object.changed
40
+ @object.notify_observers :something => 37
41
+
42
+ assert_equal 37, obs.arg
43
+ end
44
+
45
+ def test_multiple_observer
46
+ obs = Object.new
47
+ class << obs
48
+ include Observer
49
+ attr_reader :arg1, :arg2
50
+
51
+ def on_whatever(arg1)
52
+ @arg1 = arg1
53
+ end
54
+
55
+ def on_something(arg2)
56
+ @arg2 = arg2
57
+ end
58
+ end
59
+
60
+ @object.add_observer(obs)
61
+ @object.changed
62
+ @object.notify_observers :something => 2, :whatever => 1, :nothing => 3
63
+
64
+ assert_equal 1, obs.arg1
65
+ assert_equal 2, obs.arg2
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rui
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Paolo Capriotti
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-01 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ name: builder
32
+ requirement: *id001
33
+ type: :runtime
34
+ prerelease: false
35
+ - !ruby/object:Gem::Dependency
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ hash: 7
42
+ segments:
43
+ - 0
44
+ - 6
45
+ - 0
46
+ version: 0.6.0
47
+ name: yard
48
+ requirement: *id002
49
+ type: :development
50
+ prerelease: false
51
+ - !ruby/object:Gem::Dependency
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ name: bluecloth
62
+ requirement: *id003
63
+ type: :development
64
+ prerelease: false
65
+ - !ruby/object:Gem::Dependency
66
+ version_requirements: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ hash: 23
72
+ segments:
73
+ - 1
74
+ - 0
75
+ - 0
76
+ version: 1.0.0
77
+ name: bundler
78
+ requirement: *id004
79
+ type: :development
80
+ prerelease: false
81
+ - !ruby/object:Gem::Dependency
82
+ version_requirements: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ hash: 1
88
+ segments:
89
+ - 1
90
+ - 5
91
+ - 1
92
+ version: 1.5.1
93
+ name: jeweler
94
+ requirement: *id005
95
+ type: :development
96
+ prerelease: false
97
+ - !ruby/object:Gem::Dependency
98
+ version_requirements: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ name: rcov
108
+ requirement: *id006
109
+ type: :development
110
+ prerelease: false
111
+ description: GUI abstraction library supporting Qt and KDE backends
112
+ email: p.capriotti@gmail.com
113
+ executables: []
114
+
115
+ extensions: []
116
+
117
+ extra_rdoc_files:
118
+ - README.md
119
+ files:
120
+ - .document
121
+ - COPYING
122
+ - Gemfile
123
+ - Gemfile.lock
124
+ - README.md
125
+ - Rakefile
126
+ - VERSION
127
+ - examples/autogui/main.rb
128
+ - examples/hello/main.rb
129
+ - examples/kderun.rb
130
+ - examples/qtrun.rb
131
+ - examples/signals/main.rb
132
+ - lib/rui.rb
133
+ - lib/rui/descriptor.rb
134
+ - lib/rui/factory.rb
135
+ - lib/rui/observer_utils.rb
136
+ - lib/rui/toolkits/kde/kde.rb
137
+ - lib/rui/toolkits/qt/qt.rb
138
+ - lib/rui/toolkits/qtbase/gui_builder.rb
139
+ - lib/rui/toolkits/qtbase/qt.rb
140
+ - lib/rui/utils.rb
141
+ - rui.gemspec
142
+ - test/helper.rb
143
+ - test/test_descriptor.rb
144
+ - test/test_factory.rb
145
+ - test/test_observer_utils.rb
146
+ has_rdoc: true
147
+ homepage: http://github.com/pcapriotti/rui
148
+ licenses:
149
+ - LGPL
150
+ post_install_message:
151
+ rdoc_options: []
152
+
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: 3
161
+ segments:
162
+ - 0
163
+ version: "0"
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ hash: 3
170
+ segments:
171
+ - 0
172
+ version: "0"
173
+ requirements: []
174
+
175
+ rubyforge_project: nowarning
176
+ rubygems_version: 1.3.7
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: GUI abstraction library
180
+ test_files:
181
+ - examples/autogui/main.rb
182
+ - examples/hello/main.rb
183
+ - examples/kderun.rb
184
+ - examples/qtrun.rb
185
+ - examples/signals/main.rb
186
+ - test/helper.rb
187
+ - test/test_descriptor.rb
188
+ - test/test_factory.rb
189
+ - test/test_observer_utils.rb