utilrb 1.6.4 → 1.6.5
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/ext/extconf.rb +7 -1
- data/ext/utilrb_ext.cc +7 -0
- data/ext/weakref.cc +1 -1
- data/lib/utilrb/common.rb +1 -1
- data/lib/utilrb/kernel/arity.rb +6 -0
- data/lib/utilrb/kernel/require.rb +2 -1
- data/lib/utilrb/logger/forward.rb +1 -1
- data/lib/utilrb/module/attr_enumerable.rb +1 -1
- data/lib/utilrb/module/attr_predicate.rb +1 -1
- data/lib/utilrb/module/cached_enum.rb +2 -2
- data/lib/utilrb/module/define_method.rb +1 -1
- data/lib/utilrb/module/dsl_attribute.rb +8 -2
- data/lib/utilrb/module/inherited_enumerable.rb +3 -3
- data/lib/utilrb/object/attribute.rb +3 -3
- data/lib/utilrb/pkgconfig.rb +1 -1
- data/lib/utilrb/value_set.rb +1 -1
- data/lib/utilrb/yard.rb +8 -1
- data/lib/utilrb.rb +1 -1
- data/test/test_kernel.rb +37 -1
- metadata +35 -35
data/ext/extconf.rb
CHANGED
@@ -5,7 +5,13 @@ if RUBY_VERSION >= "1.9"
|
|
5
5
|
$CFLAGS += " -DRUBY_IS_19"
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
if ENV['RUBY_SOURCE_DIR']
|
9
|
+
$CFLAGS += " -DHAS_RUBY_SOURCE -I#{ENV['RUBY_SOURCE_DIR']}"
|
10
|
+
end
|
11
|
+
|
12
|
+
if try_link("int main() { }", "-module")
|
13
|
+
$LDFLAGS += " -module"
|
14
|
+
end
|
9
15
|
create_makefile("utilrb_ext")
|
10
16
|
|
11
17
|
## WORKAROUND a problem with mkmf.rb
|
data/ext/utilrb_ext.cc
CHANGED
@@ -109,9 +109,13 @@ static VALUE kernel_is_immediate(VALUE klass, VALUE object)
|
|
109
109
|
{ return IMMEDIATE_P(object) ? Qtrue : Qfalse; }
|
110
110
|
#endif
|
111
111
|
|
112
|
+
static VALUE kernel_crash(VALUE klass)
|
113
|
+
{ *((int*)0) = 10; }
|
114
|
+
|
112
115
|
extern "C" void Init_value_set();
|
113
116
|
extern "C" void Init_swap();
|
114
117
|
extern "C" void Init_weakref(VALUE mUtilrb);
|
118
|
+
extern "C" void Init_proc();
|
115
119
|
|
116
120
|
extern "C" void Init_utilrb_ext()
|
117
121
|
{
|
@@ -126,12 +130,15 @@ extern "C" void Init_utilrb_ext()
|
|
126
130
|
rb_define_method(rb_cProc, "line", RUBY_METHOD_FUNC(proc_line), 0);
|
127
131
|
#endif
|
128
132
|
|
133
|
+
rb_define_singleton_method(rb_mKernel, "crash!", RUBY_METHOD_FUNC(kernel_crash), 0);
|
129
134
|
rb_define_singleton_method(rb_mKernel, "immediate?", RUBY_METHOD_FUNC(kernel_is_immediate), 1);
|
130
135
|
|
131
136
|
Init_swap();
|
132
137
|
Init_weakref(mUtilrb);
|
133
138
|
#endif
|
134
139
|
|
140
|
+
Init_proc();
|
141
|
+
|
135
142
|
Init_value_set();
|
136
143
|
}
|
137
144
|
|
data/ext/weakref.cc
CHANGED
data/lib/utilrb/common.rb
CHANGED
data/lib/utilrb/kernel/arity.rb
CHANGED
@@ -2,6 +2,12 @@ module Kernel
|
|
2
2
|
# Raises if +object+ can accept calls with exactly +arity+ arguments.
|
3
3
|
# object should respond to #arity
|
4
4
|
def check_arity(object, arity)
|
5
|
+
if object.respond_to?(:lambda?) # For ruby 1.9 compatibility on blocks without arguments
|
6
|
+
if !object.lambda? && object.arity == 0
|
7
|
+
return
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
5
11
|
unless object.arity == arity || (object.arity < 0 && object.arity > - arity - 2)
|
6
12
|
raise ArgumentError, "#{object} does not accept to be called with #{arity} argument(s)", caller(2)
|
7
13
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module Kernel
|
2
2
|
# Require all .rb files in the +filename+ directory
|
3
|
-
def require_dir(filename)
|
3
|
+
def require_dir(filename, exclude = nil)
|
4
4
|
dirname = filename.gsub(/.rb$/, '')
|
5
5
|
Dir.new(dirname).each do |file|
|
6
|
+
next if exclude && exclude === file
|
6
7
|
if file =~ /\.rb$/
|
7
8
|
require File.join(dirname, file)
|
8
9
|
end
|
@@ -21,7 +21,7 @@ class Module
|
|
21
21
|
def cached_enum(enum_name, name, with_arg)
|
22
22
|
include CachedValuesSupport
|
23
23
|
if with_arg
|
24
|
-
class_eval <<-EOD
|
24
|
+
class_eval <<-EOD, __FILE__, __LINE__+1
|
25
25
|
def enum_#{name}(arg)
|
26
26
|
@enum_#{name} ||= Hash.new
|
27
27
|
cached_variables << :@enum_#{name}
|
@@ -29,7 +29,7 @@ class Module
|
|
29
29
|
end
|
30
30
|
EOD
|
31
31
|
else
|
32
|
-
class_eval <<-EOD
|
32
|
+
class_eval <<-EOD, __FILE__, __LINE__+1
|
33
33
|
def enum_#{name}
|
34
34
|
cached_variables << :@enum_#{name}
|
35
35
|
@enum_#{name} ||= enum_for(:each_#{enum_name})
|
@@ -19,7 +19,7 @@ class Module
|
|
19
19
|
# +block+ is +nil+ if no block is given during the method call
|
20
20
|
#
|
21
21
|
def define_method_with_block(name, &mdef)
|
22
|
-
class_eval <<-EOD
|
22
|
+
class_eval <<-EOD, __FILE__, __LINE__+1
|
23
23
|
def #{name}(*args, &block)
|
24
24
|
dmwb_#{name}_user_definition(block, *args)
|
25
25
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class Module
|
2
2
|
# call-seq:
|
3
3
|
# dsl_attribute(name)
|
4
|
+
# dsl_attribute(name,name2,name3)
|
4
5
|
# dsl_attribute(name) { |value| ... }
|
5
6
|
#
|
6
7
|
# This defines a +name+ instance method on the given class which accepts zero or one argument
|
@@ -33,7 +34,11 @@ class Module
|
|
33
34
|
# end
|
34
35
|
# end
|
35
36
|
#
|
36
|
-
def dsl_attribute(
|
37
|
+
def dsl_attribute(*names, &filter_block)
|
38
|
+
if names.size > 1 && filter_block
|
39
|
+
raise ArgumentError, "multiple names as argument are only supported if no block is given"
|
40
|
+
end
|
41
|
+
names.each do |name|
|
37
42
|
class_eval do
|
38
43
|
if filter_block
|
39
44
|
define_method("__dsl_attribute__#{name}__filter__", &filter_block)
|
@@ -44,7 +49,7 @@ class Module
|
|
44
49
|
instance_variable_get("@#{name}")
|
45
50
|
elsif filter_block
|
46
51
|
if filter_block.arity >= 0 && value.size != filter_block.arity
|
47
|
-
raise ArgumentError, "too
|
52
|
+
raise ArgumentError, "too many arguments. Got #{value.size}, expected #{filter_block.arity}"
|
48
53
|
end
|
49
54
|
|
50
55
|
filtered_value = send("__dsl_attribute__#{name}__filter__", *value)
|
@@ -60,6 +65,7 @@ class Module
|
|
60
65
|
end
|
61
66
|
end
|
62
67
|
end
|
68
|
+
end
|
63
69
|
end
|
64
70
|
end
|
65
71
|
|
@@ -11,13 +11,13 @@ class Module
|
|
11
11
|
|
12
12
|
options[:enum_with] ||= :each
|
13
13
|
|
14
|
-
class_eval <<-EOF
|
14
|
+
class_eval <<-EOF, __FILE__, __LINE__+1
|
15
15
|
def all_#{name}; each_#{name}.to_a end
|
16
16
|
def self_#{name}; @#{attribute_name} end
|
17
17
|
EOF
|
18
18
|
|
19
19
|
if options[:map]
|
20
|
-
class_eval <<-EOF
|
20
|
+
class_eval <<-EOF, __FILE__, __LINE__+1
|
21
21
|
def each_#{name}(key = nil, uniq = true)
|
22
22
|
if !block_given?
|
23
23
|
return enum_for(:each_#{name}, key, uniq)
|
@@ -70,7 +70,7 @@ class Module
|
|
70
70
|
end
|
71
71
|
EOF
|
72
72
|
else
|
73
|
-
class_eval <<-EOF
|
73
|
+
class_eval <<-EOF, __FILE__, __LINE__+1
|
74
74
|
def each_#{name}
|
75
75
|
if !block_given?
|
76
76
|
return enum_for(:each_#{name})
|
@@ -26,7 +26,7 @@ Utilrb.unless_ext do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
class_eval <<-EOD
|
29
|
+
class_eval <<-EOD, __FILE__, __LINE__+1
|
30
30
|
def #{name}
|
31
31
|
if defined? @#{name} then @#{name}
|
32
32
|
else @#{name} = #{name}_defval
|
@@ -55,9 +55,9 @@ Utilrb.if_ext do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
class_eval <<-EOD
|
58
|
+
class_eval <<-EOD, __FILE__, __LINE__+1
|
59
59
|
def #{name}
|
60
|
-
if
|
60
|
+
if instance_variable_defined?(:@#{name}) then @#{name}
|
61
61
|
else @#{name} = #{name}_defval
|
62
62
|
end
|
63
63
|
end
|
data/lib/utilrb/pkgconfig.rb
CHANGED
@@ -304,7 +304,7 @@ module Utilrb
|
|
304
304
|
end
|
305
305
|
|
306
306
|
def self.define_pkgconfig_action(action) # :nodoc:
|
307
|
-
class_eval <<-EOD
|
307
|
+
class_eval <<-EOD, __FILE__, __LINE__+1
|
308
308
|
def pkgconfig_#{action.gsub(/-/, '_')}(static = false)
|
309
309
|
if static
|
310
310
|
`pkg-config --#{action} --static \#{name}`.strip
|
data/lib/utilrb/value_set.rb
CHANGED
data/lib/utilrb/yard.rb
CHANGED
@@ -6,7 +6,8 @@ module Utilrb
|
|
6
6
|
handles method_call(:inherited_enumerable)
|
7
7
|
namespace_only
|
8
8
|
|
9
|
-
def self.process(handler, name, attr_name, is_map)
|
9
|
+
def self.process(handler, name, attr_name, is_map, key_name = nil, return_type = nil)
|
10
|
+
key_type, value_type = nil
|
10
11
|
handler.send(:push_state, :scope => :class) do
|
11
12
|
namespace = handler.send(:namespace)
|
12
13
|
scope = handler.send(:scope)
|
@@ -82,6 +83,12 @@ module Utilrb
|
|
82
83
|
object.docstring.replace("Enumerates all objects registered in #{name}\n@return []\n@yield [element]\n@yieldparam [#{value_type}] element")
|
83
84
|
end
|
84
85
|
end
|
86
|
+
|
87
|
+
if is_map
|
88
|
+
return key_type, value_type
|
89
|
+
else
|
90
|
+
return value_type
|
91
|
+
end
|
85
92
|
end
|
86
93
|
|
87
94
|
def process
|
data/lib/utilrb.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
require 'utilrb/kernel/require'
|
2
|
-
require_dir(__FILE__)
|
2
|
+
require_dir(__FILE__, /yard|doc|rake/)
|
data/test/test_kernel.rb
CHANGED
@@ -30,7 +30,7 @@ class TC_Kernel < Test::Unit::TestCase
|
|
30
30
|
assert( !new_options.has_key?(:b) )
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def test_arity_of_methods
|
34
34
|
object = Class.new do
|
35
35
|
def arity_1(a); end
|
36
36
|
def arity_any(*a); end
|
@@ -49,6 +49,42 @@ class TC_Kernel < Test::Unit::TestCase
|
|
49
49
|
assert_nothing_raised { check_arity(object.method(:arity_1_more), 2) }
|
50
50
|
end
|
51
51
|
|
52
|
+
def test_arity_of_blocks
|
53
|
+
check_arity(Proc.new { bla }, 0)
|
54
|
+
check_arity(Proc.new { bla }, 1)
|
55
|
+
check_arity(Proc.new { bla }, 2)
|
56
|
+
|
57
|
+
assert_raises(ArgumentError) { check_arity(Proc.new { |arg| bla }, 0) }
|
58
|
+
check_arity(Proc.new { |arg| bla }, 1)
|
59
|
+
assert_raises(ArgumentError) { check_arity(Proc.new { |arg| bla }, 2) }
|
60
|
+
|
61
|
+
assert_raises(ArgumentError) { check_arity(Proc.new { |arg, *args| bla }, 0) }
|
62
|
+
check_arity(Proc.new { |arg, *args| bla }, 1)
|
63
|
+
check_arity(Proc.new { |arg, *args| bla }, 2)
|
64
|
+
|
65
|
+
check_arity(Proc.new { |*args| bla }, 0)
|
66
|
+
check_arity(Proc.new { |*args| bla }, 1)
|
67
|
+
check_arity(Proc.new { |*args| bla }, 2)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_arity_of_lambdas
|
71
|
+
check_arity(lambda { bla }, 0)
|
72
|
+
assert_raises(ArgumentError) { check_arity(lambda { bla }, 1) }
|
73
|
+
assert_raises(ArgumentError) { check_arity(lambda { bla }, 2) }
|
74
|
+
|
75
|
+
assert_raises(ArgumentError) { check_arity(lambda { |arg| bla }, 0) }
|
76
|
+
check_arity(lambda { |arg| bla }, 1)
|
77
|
+
assert_raises(ArgumentError) { check_arity(lambda { |arg| bla }, 2) }
|
78
|
+
|
79
|
+
assert_raises(ArgumentError) { check_arity(lambda { |arg, *args| bla }, 0) }
|
80
|
+
check_arity(lambda { |arg, *args| bla }, 1)
|
81
|
+
check_arity(lambda { |arg, *args| bla }, 2)
|
82
|
+
|
83
|
+
check_arity(lambda { |*args| bla }, 0)
|
84
|
+
check_arity(lambda { |*args| bla }, 1)
|
85
|
+
check_arity(lambda { |*args| bla }, 2)
|
86
|
+
end
|
87
|
+
|
52
88
|
def test_with_module
|
53
89
|
obj = Object.new
|
54
90
|
c0, c1 = nil
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: utilrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 1.6.
|
9
|
+
- 5
|
10
|
+
version: 1.6.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sylvain Joyeux
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-06-07 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: facets
|
@@ -48,34 +48,34 @@ dependencies:
|
|
48
48
|
type: :runtime
|
49
49
|
version_requirements: *id002
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
|
-
name:
|
51
|
+
name: rdoc
|
52
52
|
prerelease: false
|
53
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
54
|
none: false
|
55
55
|
requirements:
|
56
|
-
- -
|
56
|
+
- - ~>
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
hash:
|
58
|
+
hash: 19
|
59
59
|
segments:
|
60
|
-
-
|
61
|
-
-
|
62
|
-
|
63
|
-
version: 0.8.6
|
60
|
+
- 3
|
61
|
+
- 10
|
62
|
+
version: "3.10"
|
64
63
|
type: :development
|
65
64
|
version_requirements: *id003
|
66
65
|
- !ruby/object:Gem::Dependency
|
67
|
-
name:
|
66
|
+
name: flexmock
|
68
67
|
prerelease: false
|
69
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
70
69
|
none: false
|
71
70
|
requirements:
|
72
|
-
- -
|
71
|
+
- - ">="
|
73
72
|
- !ruby/object:Gem::Version
|
74
|
-
hash:
|
73
|
+
hash: 51
|
75
74
|
segments:
|
76
|
-
-
|
77
|
-
-
|
78
|
-
|
75
|
+
- 0
|
76
|
+
- 8
|
77
|
+
- 6
|
78
|
+
version: 0.8.6
|
79
79
|
type: :development
|
80
80
|
version_requirements: *id004
|
81
81
|
- !ruby/object:Gem::Dependency
|
@@ -86,11 +86,11 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
hash:
|
89
|
+
hash: 7
|
90
90
|
segments:
|
91
|
-
-
|
92
|
-
-
|
93
|
-
version: "
|
91
|
+
- 3
|
92
|
+
- 0
|
93
|
+
version: "3.0"
|
94
94
|
type: :development
|
95
95
|
version_requirements: *id005
|
96
96
|
description: |-
|
@@ -255,27 +255,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
255
255
|
requirements: []
|
256
256
|
|
257
257
|
rubyforge_project: utilrb
|
258
|
-
rubygems_version: 1.
|
258
|
+
rubygems_version: 1.8.15
|
259
259
|
signing_key:
|
260
260
|
specification_version: 3
|
261
261
|
summary: Yet another Ruby toolkit
|
262
262
|
test_files:
|
263
|
-
- test/test_time.rb
|
264
|
-
- test/test_weakref.rb
|
265
|
-
- test/test_config.rb
|
266
|
-
- test/test_array.rb
|
267
263
|
- test/test_kernel.rb
|
268
|
-
- test/
|
269
|
-
- test/test_proc.rb
|
270
|
-
- test/test_set.rb
|
264
|
+
- test/test_unbound_method.rb
|
271
265
|
- test/test_hash.rb
|
272
|
-
- test/
|
266
|
+
- test/test_exception.rb
|
267
|
+
- test/test_config.rb
|
268
|
+
- test/test_time.rb
|
269
|
+
- test/test_logger.rb
|
270
|
+
- test/test_module.rb
|
273
271
|
- test/test_objectstats.rb
|
274
|
-
- test/
|
272
|
+
- test/test_enumerable.rb
|
275
273
|
- test/test_gc.rb
|
276
|
-
- test/test_dir.rb
|
277
274
|
- test/test_misc.rb
|
278
|
-
- test/test_enumerable.rb
|
279
|
-
- test/test_exception.rb
|
280
|
-
- test/test_logger.rb
|
281
275
|
- test/test_object.rb
|
276
|
+
- test/test_array.rb
|
277
|
+
- test/test_dir.rb
|
278
|
+
- test/test_weakref.rb
|
279
|
+
- test/test_proc.rb
|
280
|
+
- test/test_set.rb
|
281
|
+
- test/test_pkgconfig.rb
|