dslkit 0.2.0 → 0.2.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/CHANGES +3 -0
- data/Rakefile +6 -1
- data/VERSION +1 -1
- data/lib/dslkit/polite.rb +43 -0
- data/lib/dslkit/rude.rb +1 -0
- data/tests/test_common.rb +8 -0
- data/tests/test_polite.rb +14 -0
- data/tests/test_rude.rb +12 -0
- metadata +4 -3
data/CHANGES
CHANGED
data/Rakefile
CHANGED
@@ -22,9 +22,14 @@ task :test do
|
|
22
22
|
ruby '-Ilib tests/runner.rb'
|
23
23
|
end
|
24
24
|
|
25
|
+
desc "Testing library with coverage"
|
26
|
+
task :coverage do
|
27
|
+
system 'rcov -Ilib tests/test_rude.rb'
|
28
|
+
end
|
29
|
+
|
25
30
|
desc "Clean created files"
|
26
31
|
task :clean do
|
27
|
-
%w[doc coverage]
|
32
|
+
rm_rf %w[doc coverage]
|
28
33
|
end
|
29
34
|
|
30
35
|
desc "Prepare a release"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/dslkit/polite.rb
CHANGED
@@ -535,4 +535,47 @@ module DSLKit
|
|
535
535
|
Thread.critical = old
|
536
536
|
end
|
537
537
|
end
|
538
|
+
|
539
|
+
# This module can be included into modules/classes to make the delegate
|
540
|
+
# method available.
|
541
|
+
module Delegate
|
542
|
+
# A method to easily delegate methods to an object, stored in an
|
543
|
+
# instance variable or returned by a method call.
|
544
|
+
#
|
545
|
+
# It's used like this:
|
546
|
+
# class A
|
547
|
+
# delegate :method_here, :@obj, :method_there
|
548
|
+
# end
|
549
|
+
# or:
|
550
|
+
# class A
|
551
|
+
# delegate :method_here, :method_call, :method_there
|
552
|
+
# end
|
553
|
+
#
|
554
|
+
# _other_method_name_ defaults to method_name, if it wasn't given.
|
555
|
+
def delegate(method_name, obj, other_method_name = method_name)
|
556
|
+
raise ArgumentError, "obj wasn't defined" unless obj
|
557
|
+
=begin
|
558
|
+
1.9 only:
|
559
|
+
define_method(method_name) do |*args, &block|
|
560
|
+
instance_variable_get(obj).__send__(other_method_name, *args, &block)
|
561
|
+
end
|
562
|
+
=end
|
563
|
+
obj = obj.to_s
|
564
|
+
if obj[0] == ?@
|
565
|
+
class_eval <<-EOS
|
566
|
+
def #{method_name}(*args, &block)
|
567
|
+
instance_variable_get('#{obj}').__send__(
|
568
|
+
'#{other_method_name}', *args, &block)
|
569
|
+
end
|
570
|
+
EOS
|
571
|
+
else
|
572
|
+
class_eval <<-EOS
|
573
|
+
def #{method_name}(*args, &block)
|
574
|
+
__send__('#{obj}').__send__(
|
575
|
+
'#{other_method_name}', *args, &block)
|
576
|
+
end
|
577
|
+
EOS
|
578
|
+
end
|
579
|
+
end
|
580
|
+
end
|
538
581
|
end
|
data/lib/dslkit/rude.rb
CHANGED
data/tests/test_common.rb
CHANGED
@@ -177,4 +177,12 @@ class TC_DSLKit < Test::Unit::TestCase
|
|
177
177
|
assert !D.deflect?(Integer, :method_missing)
|
178
178
|
assert_raises(NoMethodError) { 1.foo }
|
179
179
|
end
|
180
|
+
|
181
|
+
def test_delegate
|
182
|
+
d = D2.new
|
183
|
+
assert_equal 3, d.my_size1
|
184
|
+
assert_equal 3, d.my_size2
|
185
|
+
assert_equal 3, d.size
|
186
|
+
assert_equal 3, d.length
|
187
|
+
end
|
180
188
|
end
|
data/tests/test_polite.rb
CHANGED
@@ -88,4 +88,18 @@ module D
|
|
88
88
|
extend DSLKit::Deflect
|
89
89
|
end
|
90
90
|
|
91
|
+
class D2
|
92
|
+
extend DSLKit::Delegate
|
93
|
+
|
94
|
+
def initialize
|
95
|
+
@ary = [ 1, 2, 3 ]
|
96
|
+
end
|
97
|
+
attr_reader :ary
|
98
|
+
|
99
|
+
delegate :my_size1, :@ary, :size
|
100
|
+
delegate :my_size2, :ary, :size
|
101
|
+
delegate :size, :ary
|
102
|
+
delegate :length, :ary
|
103
|
+
end
|
104
|
+
|
91
105
|
require 'test_common'
|
data/tests/test_rude.rb
CHANGED
@@ -67,4 +67,16 @@ end
|
|
67
67
|
module D
|
68
68
|
end
|
69
69
|
|
70
|
+
class D2
|
71
|
+
def initialize
|
72
|
+
@ary = [ 1, 2, 3 ]
|
73
|
+
end
|
74
|
+
attr_reader :ary
|
75
|
+
|
76
|
+
delegate :my_size1, :@ary, :size
|
77
|
+
delegate :my_size2, :ary, :size
|
78
|
+
delegate :size, :@ary
|
79
|
+
delegate :length, :ary
|
80
|
+
end
|
81
|
+
|
70
82
|
require 'test_common'
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: dslkit
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date:
|
6
|
+
version: 0.2.1
|
7
|
+
date: 2007-02-22 00:00:00 +01:00
|
8
8
|
summary: Kit for building DSLs in Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Florian Frank
|
30
31
|
files:
|