qtext 0.6.7 → 0.6.8
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/.gitignore +1 -0
- data/History.txt +11 -0
- data/Rakefile +25 -4
- data/lib/qtext/extensions.rb +13 -18
- data/lib/qtext/object_table_model.rb +2 -3
- data/lib/qtext/version.rb +2 -2
- data/test/test_helper.rb +2 -44
- data/test/test_key_event.rb +1 -5
- data/test/test_model_index_extensions.rb +0 -6
- data/test/test_object_table.rb +4 -8
- data/test/test_widget.rb +0 -2
- data/website/index.html +11 -0
- data/website/index.txt +83 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.html.erb +48 -0
- metadata +65 -38
- data/config/hoe.rb +0 -73
- data/config/requirements.rb +0 -15
- data/lib/qtext/hash_collector.rb +0 -120
- data/test/test_hash_collector.rb +0 -180
data/lib/qtext/hash_collector.rb
DELETED
@@ -1,120 +0,0 @@
|
|
1
|
-
# A DSL class that allows options to be collected for a field
|
2
|
-
# definition using a block and/or a hash.
|
3
|
-
# hash = { :colour => :red, :hue => 15 }
|
4
|
-
# collector = HashCollector.new( hash ) do |hc|
|
5
|
-
# hc.saturation = 17
|
6
|
-
# hc.opacity = 0.43
|
7
|
-
# hc.grooviness = 100
|
8
|
-
# end
|
9
|
-
# or like this (without the block parameter)
|
10
|
-
# collector = HashCollector.new( hash ) do
|
11
|
-
# saturation 17
|
12
|
-
# opacity 0.43
|
13
|
-
# grooviness = 100
|
14
|
-
# end
|
15
|
-
# either way, a call to collector.to_hash will result in
|
16
|
-
# { :hue=>15, :saturation=>17, :opacity=>0.43, :grooviness=>100, :colour=>:red }
|
17
|
-
# and the following accessors will be added
|
18
|
-
# collector.hue
|
19
|
-
# collector.hue( some_value )
|
20
|
-
# collector.hue = some_value
|
21
|
-
# for hue, saturation, opacity, grooviness and colour.
|
22
|
-
class HashCollector
|
23
|
-
# remove unused methods that might clash with user accessors
|
24
|
-
keep_methods = %w( __send__ __id__ self send class inspect instance_eval instance_variables )
|
25
|
-
instance_methods.each do |method|
|
26
|
-
undef_method( method ) unless keep_methods.include?( method )
|
27
|
-
end
|
28
|
-
|
29
|
-
# Collect values from the hash and the block, using the collect method.
|
30
|
-
def initialize( hash = {}, &block )
|
31
|
-
@hash = hash || {}
|
32
|
-
gather( &block )
|
33
|
-
end
|
34
|
-
|
35
|
-
# evaluate the block and collect options from args. Even if it's nil.
|
36
|
-
def collect( args = {}, &block )
|
37
|
-
@hash.merge!( args || {} )
|
38
|
-
unless block.nil?
|
39
|
-
if block.arity == -1
|
40
|
-
instance_eval &block
|
41
|
-
else
|
42
|
-
yield self
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# return a hash of the collected elements
|
48
|
-
def to_hash
|
49
|
-
@hash
|
50
|
-
end
|
51
|
-
|
52
|
-
protected
|
53
|
-
|
54
|
-
# Modified from Jim Freeze's article.
|
55
|
-
# For each symbol, add accessors to allow:
|
56
|
-
# instance.symbol as reader
|
57
|
-
# instance.symbol( value ) as writer
|
58
|
-
# instance.symbol = value as writer
|
59
|
-
def self.dsl_accessor( *symbols )
|
60
|
-
@stripper ||= /^([^\= ]+)\s*\=?\s*$/
|
61
|
-
symbols.each do |sym|
|
62
|
-
stripped = @stripper.match( sym.to_s )[1]
|
63
|
-
line, st = __LINE__, <<-EOF
|
64
|
-
def #{stripped}(*val)
|
65
|
-
if val.empty?
|
66
|
-
@hash[:#{stripped}]
|
67
|
-
else
|
68
|
-
@hash[:#{stripped}] = val.size == 1 ? val[0] : val
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def #{stripped}=(*val)
|
73
|
-
@hash[:#{stripped}] = val.size == 1 ? val[0] : val
|
74
|
-
end
|
75
|
-
EOF
|
76
|
-
class_eval st, __FILE__, line + 1
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# Do not allow accessors to be added dynamically. In other words,
|
81
|
-
# a subclass like this
|
82
|
-
# class IndexCollector < HashCollector
|
83
|
-
# dsl_static
|
84
|
-
# dsl_accessor :row, :column
|
85
|
-
# end
|
86
|
-
# will fail if used like this
|
87
|
-
# collector = IndexCollector.new( :row => 4, :column => 6 ) do
|
88
|
-
# other 'oops'
|
89
|
-
# end
|
90
|
-
# because :other isn't added by dsl_accessor.
|
91
|
-
def self.dsl_static
|
92
|
-
@dynamic = false
|
93
|
-
end
|
94
|
-
|
95
|
-
# Allow accessors to be added dynamically, the default.
|
96
|
-
def self.dsl_dynamic
|
97
|
-
@dynamic = true
|
98
|
-
end
|
99
|
-
|
100
|
-
def self.dynamic?
|
101
|
-
# don't optimise this to @dynamic ||= true, because it will reset
|
102
|
-
# an @dynamic of false to true
|
103
|
-
@dynamic = true if @dynamic.nil?
|
104
|
-
@dynamic
|
105
|
-
end
|
106
|
-
|
107
|
-
# Originally from Jim Freeze's article. Add the accessor methods if
|
108
|
-
# they don't already exist, and if dsl_dynamic is in effect, which is
|
109
|
-
# the default. If dsl_static is in effect, the normal method_missing
|
110
|
-
# behaviour will be invoked.
|
111
|
-
def method_missing(sym, *args)
|
112
|
-
if self.class.dynamic?
|
113
|
-
self.class.dsl_accessor sym
|
114
|
-
send( sym, *args )
|
115
|
-
else
|
116
|
-
super
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
data/test/test_hash_collector.rb
DELETED
@@ -1,180 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class OtherThing < HashCollector
|
4
|
-
dsl_static
|
5
|
-
dsl_accessor :thing, :other
|
6
|
-
end
|
7
|
-
|
8
|
-
class BuildOn < HashCollector
|
9
|
-
dsl_accessor :ook
|
10
|
-
end
|
11
|
-
|
12
|
-
class TestHashCollector < Test::Unit::TestCase
|
13
|
-
def setup
|
14
|
-
@hash = { :colour => :red, :hue => 15 }
|
15
|
-
@collected_hash = { :saturation => 17, :opacity => 0.43, :grooviness => 100 }
|
16
|
-
@full_hash = @hash.merge( @collected_hash )
|
17
|
-
@collector = HashCollector.new
|
18
|
-
end
|
19
|
-
|
20
|
-
def teardown
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'static hash collector' do
|
24
|
-
setup do
|
25
|
-
@collector = OtherThing.new
|
26
|
-
end
|
27
|
-
|
28
|
-
should "throw NoMethodError on collection" do
|
29
|
-
assert_raise( NoMethodError ) do
|
30
|
-
@collector.collect { thing 2; blah 3 }
|
31
|
-
end
|
32
|
-
assert_raise( NoMethodError ) do
|
33
|
-
@collector.collect {|c| c.blah = 3 }
|
34
|
-
end
|
35
|
-
assert_raise( NoMethodError ) { @collector.blah }
|
36
|
-
assert_raise( NoMethodError ) { @collector.blah = 5 }
|
37
|
-
end
|
38
|
-
|
39
|
-
should "understand defined attributes" do
|
40
|
-
assert_nothing_raised do
|
41
|
-
@collector.collect do
|
42
|
-
thing 1
|
43
|
-
other 2
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_nothing_raised { @collector.thing = 2 }
|
48
|
-
assert_nothing_raised { @collector.other = 4 }
|
49
|
-
end
|
50
|
-
|
51
|
-
should "be dynamic" do
|
52
|
-
assert BuildOn.dynamic?
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def assert_collected( collector )
|
57
|
-
assert_equal 17, collector.saturation
|
58
|
-
assert_equal 0.43, collector.opacity
|
59
|
-
assert_equal 100, collector.grooviness
|
60
|
-
end
|
61
|
-
|
62
|
-
def assert_hashed( collector )
|
63
|
-
assert_equal :red, collector.colour
|
64
|
-
assert_equal 15, collector.hue
|
65
|
-
end
|
66
|
-
|
67
|
-
should "collect from a hash" do
|
68
|
-
@collector.collect( @hash )
|
69
|
-
assert_equal @hash, @collector.to_hash
|
70
|
-
end
|
71
|
-
|
72
|
-
should 'not fail on a nil hash' do
|
73
|
-
@collector.collect nil
|
74
|
-
assert_equal 0, @collector.to_hash.size
|
75
|
-
end
|
76
|
-
|
77
|
-
should 'collect from a block, with dsl setters' do
|
78
|
-
@collector.collect do
|
79
|
-
saturation 17
|
80
|
-
opacity 0.43
|
81
|
-
grooviness 100
|
82
|
-
end
|
83
|
-
assert_collected( @collector )
|
84
|
-
assert_equal @collected_hash, @collector.to_hash
|
85
|
-
end
|
86
|
-
|
87
|
-
should 'collect from a block, with = setters' do
|
88
|
-
@collector.collect do |hc|
|
89
|
-
hc.saturation = 17
|
90
|
-
hc.opacity = 0.43
|
91
|
-
hc.grooviness = 100
|
92
|
-
end
|
93
|
-
assert_collected( @collector )
|
94
|
-
assert_equal @collected_hash, @collector.to_hash
|
95
|
-
end
|
96
|
-
|
97
|
-
should 'collect from a hash and block, with dsl setters' do
|
98
|
-
@collector.collect( @hash ) do
|
99
|
-
saturation 17
|
100
|
-
opacity 0.43
|
101
|
-
grooviness 100
|
102
|
-
end
|
103
|
-
assert_collected( @collector )
|
104
|
-
assert_hashed( @collector )
|
105
|
-
assert_equal @full_hash, @collector.to_hash
|
106
|
-
end
|
107
|
-
|
108
|
-
should 'collect from a hash and block with = setters' do
|
109
|
-
@collector.collect( @hash ) do |hc|
|
110
|
-
hc.saturation = 17
|
111
|
-
hc.opacity = 0.43
|
112
|
-
hc.grooviness = 100
|
113
|
-
end
|
114
|
-
assert_collected( @collector )
|
115
|
-
assert_hashed( @collector )
|
116
|
-
assert_equal @full_hash, @collector.to_hash
|
117
|
-
end
|
118
|
-
|
119
|
-
should 'not fail construction with a nil hash' do
|
120
|
-
collector = HashCollector.new nil
|
121
|
-
assert_equal 0, @collector.to_hash.size
|
122
|
-
end
|
123
|
-
|
124
|
-
should 'construct from a hash and block, with dsl setters' do
|
125
|
-
collector = HashCollector.new( @hash ) do
|
126
|
-
saturation 17
|
127
|
-
opacity 0.43
|
128
|
-
grooviness 100
|
129
|
-
end
|
130
|
-
assert_collected( collector )
|
131
|
-
assert_hashed( collector )
|
132
|
-
assert_equal @full_hash, collector.to_hash
|
133
|
-
end
|
134
|
-
|
135
|
-
should 'construct from a hash and bslock with = setters' do
|
136
|
-
collector = HashCollector.new( @hash ) do |hc|
|
137
|
-
hc.saturation = 17
|
138
|
-
hc.opacity = 0.43
|
139
|
-
hc.grooviness = 100
|
140
|
-
end
|
141
|
-
assert_collected( collector )
|
142
|
-
assert_hashed( collector )
|
143
|
-
assert_equal @full_hash, collector.to_hash
|
144
|
-
end
|
145
|
-
|
146
|
-
should 'not conflict with Object methods' do
|
147
|
-
hc = HashCollector.new do
|
148
|
-
display 'something'
|
149
|
-
sample "This is a long string designed to test the code to the very limits of possibility."
|
150
|
-
end
|
151
|
-
|
152
|
-
assert_equal 'something', hc.display
|
153
|
-
assert_equal "This is a long string designed to test the code to the very limits of possibility.", hc.sample
|
154
|
-
end
|
155
|
-
|
156
|
-
should 'work when called with &block instead of a do ... end' do
|
157
|
-
options = gather_block do
|
158
|
-
display 'activity'
|
159
|
-
order 'lower(activity)'
|
160
|
-
sample 'Troubleshooting'
|
161
|
-
conditions 'active = true'
|
162
|
-
end
|
163
|
-
assert_equal 'activity', options[:display]
|
164
|
-
end
|
165
|
-
|
166
|
-
should 'work when called with options and &block instead of a do ... end' do
|
167
|
-
options = gather_block :blah => 'ook' do
|
168
|
-
display 'activity'
|
169
|
-
order 'lower(activity)'
|
170
|
-
sample 'Troubleshooting'
|
171
|
-
conditions 'active = true'
|
172
|
-
end
|
173
|
-
assert_equal 'activity', options[:display]
|
174
|
-
assert_equal 'ook', options[:blah]
|
175
|
-
end
|
176
|
-
|
177
|
-
def gather_block( options = {}, &block )
|
178
|
-
HashCollector.new( options, &block ).to_hash
|
179
|
-
end
|
180
|
-
end
|