facets 2.8.3 → 2.8.4
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/HISTORY.rdoc +22 -1
- data/lib/core/facets/hash/to_proc.rb +20 -23
- data/lib/core/facets/kernel/dup.rb +1 -63
- data/lib/core/facets/kernel/singleton_class.rb +11 -10
- data/lib/core/facets/kernel/try_dup.rb +63 -1
- data/lib/core/facets/objectspace/reflect.rb +9 -7
- data/lib/more/facets/basicobject.rb +3 -2
- data/meta/version +1 -1
- metadata +3 -3
data/HISTORY.rdoc
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
= Facets Release History
|
2
2
|
|
3
|
-
== 2.8.
|
3
|
+
== 2.8.4 / 2010-04-27
|
4
|
+
|
5
|
+
This release primarily fixes a small bug that prevents
|
6
|
+
facets.rb from loading correctly, namely reopening
|
7
|
+
ObjectSpace as a class rather than a modules.
|
8
|
+
|
9
|
+
Changes:
|
10
|
+
|
11
|
+
* 1 Bug Fix
|
12
|
+
|
13
|
+
* bug: ObjectSpace is a module, not a class
|
14
|
+
|
15
|
+
* 5 Minor Enhancements
|
16
|
+
|
17
|
+
* Hash#to_proc takes response argument replacing #to_proc_with_response.
|
18
|
+
* Add #respond_to? as BasicObject exception.
|
19
|
+
* Global lambda can be used instead of ObjectSpace.reflect.
|
20
|
+
* For compatability with 1.9.2, #singleton_class no longer takes a block.
|
21
|
+
* Ruby 1.9 is embracing try_ notation, so we will use #try_dup instead of #dup!
|
22
|
+
|
23
|
+
|
24
|
+
== 2.8.3 / 2010-04-10
|
4
25
|
|
5
26
|
New release which makes a few adjustments in Kernel core extensions,
|
6
27
|
adds a few new extensions and additions, plus other small improvements.
|
@@ -1,8 +1,8 @@
|
|
1
1
|
class Hash
|
2
2
|
|
3
|
-
# Constructs a Proc object from a hash such
|
4
|
-
#
|
5
|
-
#
|
3
|
+
# Constructs a Proc object from a hash such that
|
4
|
+
# the parameter of the Proc is assigned the hash
|
5
|
+
# keys as attributes.
|
6
6
|
#
|
7
7
|
# h = { :a => 1 }
|
8
8
|
# p = h.to_proc
|
@@ -10,29 +10,26 @@ class Hash
|
|
10
10
|
# p.call(o)
|
11
11
|
# o.a #=> 1
|
12
12
|
#
|
13
|
-
#
|
14
|
-
|
15
|
-
|
16
|
-
lambda do |o|
|
17
|
-
self.each do |k,v|
|
18
|
-
ke = "#{k}="
|
19
|
-
o.__send__(ke, v)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# A fault-tolerent version of #to_proc.
|
25
|
-
#
|
26
|
-
# It works just like #to_proc, but the block will make
|
27
|
-
# sure the object responds to the assignment.
|
13
|
+
# If +response+ is set to +true+, then assignment
|
14
|
+
# will only occur if receiver responds_to? the
|
15
|
+
# writer method.
|
28
16
|
#
|
29
17
|
# CREDIT: Trans
|
30
18
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
19
|
+
def to_proc(response=false)
|
20
|
+
if response
|
21
|
+
lambda do |o|
|
22
|
+
self.each do |k,v|
|
23
|
+
ke = "#{k}="
|
24
|
+
o.__send__(ke, v) if respond_to?(ke)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else
|
28
|
+
lambda do |o|
|
29
|
+
self.each do |k,v|
|
30
|
+
ke = "#{k}="
|
31
|
+
o.__send__(ke, v)
|
32
|
+
end
|
36
33
|
end
|
37
34
|
end
|
38
35
|
end
|
@@ -1,63 +1 @@
|
|
1
|
-
|
2
|
-
# Override this in a child class if it cannot be dup'ed.
|
3
|
-
#
|
4
|
-
# CREDIT: Dan Kubb (extlib)
|
5
|
-
def dup!
|
6
|
-
dup
|
7
|
-
end
|
8
|
-
|
9
|
-
# Original name for dup! as defined by extlib.
|
10
|
-
# This will eventually be deprecated. Use #dup! instead.
|
11
|
-
def try_dup
|
12
|
-
dup!
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class TrueClass
|
17
|
-
# Since TrueClass is immutable it cannot be duplicated.
|
18
|
-
# For this reason #dup! returns +self+.
|
19
|
-
def dup!
|
20
|
-
self
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class FalseClass
|
25
|
-
# Since FalseClass is immutable it cannot be duplicated.
|
26
|
-
# For this reason #dup! returns +self+.
|
27
|
-
def dup!
|
28
|
-
self
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class NilClass
|
33
|
-
# Since NilClass is immutable it cannot be duplicated.
|
34
|
-
# For this reason #dup! returns +self+.
|
35
|
-
def dup!
|
36
|
-
self
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
class Numeric
|
41
|
-
# Since Numeric is immutable it cannot be duplicated.
|
42
|
-
# For this reason #dup! returns +self+.
|
43
|
-
def dup!
|
44
|
-
self
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class Symbol
|
49
|
-
# Since Symbol is immutable it cannot be duplicated.
|
50
|
-
# For this reason #dup! returns +self+.
|
51
|
-
def dup!
|
52
|
-
self
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
#class Module
|
57
|
-
# # Since Module is immutable it cannot be duplicated.
|
58
|
-
# # For this reason #dup! returns +self+.
|
59
|
-
# def dup!
|
60
|
-
# self
|
61
|
-
# end
|
62
|
-
#end
|
63
|
-
|
1
|
+
require 'facets/kernel/try_dup'
|
@@ -1,19 +1,20 @@
|
|
1
1
|
module Kernel
|
2
2
|
|
3
|
-
# Easy access to an object's "special" class
|
3
|
+
# Easy access to an object's "special" class.
|
4
4
|
#
|
5
|
-
#
|
5
|
+
# <b>This is part of Ruby as of 1.9.2+.</b>
|
6
|
+
#
|
7
|
+
# NOTE: This used to support a class eval block,
|
8
|
+
# but to comply with Ruby 1.9.2's definition
|
9
|
+
# it has been removed.
|
6
10
|
|
7
11
|
def singleton_class(&block)
|
8
|
-
if block_given?
|
9
|
-
|
10
|
-
else
|
12
|
+
#if block_given?
|
13
|
+
# (class << self; self; end).class_eval(&block)
|
14
|
+
#else
|
11
15
|
(class << self; self; end)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
# Deprecate?
|
16
|
-
alias_method :singleton, :singleton_class
|
16
|
+
#end
|
17
|
+
end unless method_defined? :singleton_class
|
17
18
|
|
18
19
|
end
|
19
20
|
|
@@ -1 +1,63 @@
|
|
1
|
-
|
1
|
+
module Kernel
|
2
|
+
# Override this in a child class if it cannot be dup'ed.
|
3
|
+
#
|
4
|
+
# CREDIT: Dan Kubb (extlib)
|
5
|
+
def try_dup
|
6
|
+
dup
|
7
|
+
end
|
8
|
+
|
9
|
+
# Alternative name for #try_dup.
|
10
|
+
# This will eventually be deprecated.
|
11
|
+
def dup!
|
12
|
+
try_dup
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class TrueClass
|
17
|
+
# Since TrueClass is immutable it cannot be duplicated.
|
18
|
+
# For this reason #try_dup returns +self+.
|
19
|
+
def try_dup
|
20
|
+
self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class FalseClass
|
25
|
+
# Since FalseClass is immutable it cannot be duplicated.
|
26
|
+
# For this reason #try_dup returns +self+.
|
27
|
+
def try_dup
|
28
|
+
self
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class NilClass
|
33
|
+
# Since NilClass is immutable it cannot be duplicated.
|
34
|
+
# For this reason #try_dup returns +self+.
|
35
|
+
def try_dup
|
36
|
+
self
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Numeric
|
41
|
+
# Since Numeric is immutable it cannot be duplicated.
|
42
|
+
# For this reason #try_dup returns +self+.
|
43
|
+
def try_dup
|
44
|
+
self
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Symbol
|
49
|
+
# Since Symbol is immutable it cannot be duplicated.
|
50
|
+
# For this reason #try_dup returns +self+.
|
51
|
+
def try_dup
|
52
|
+
self
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
#class Module
|
57
|
+
# # Since Module is immutable it cannot be duplicated.
|
58
|
+
# # For this reason #try_dup returns +self+.
|
59
|
+
# def try_dup
|
60
|
+
# self
|
61
|
+
# end
|
62
|
+
#end
|
63
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'facets/functor'
|
2
2
|
|
3
|
-
|
3
|
+
module ObjectSpace
|
4
4
|
|
5
5
|
# Reflection ensures that information about an object
|
6
6
|
# is actual according to Ruby's Kernel definitions, just
|
@@ -12,7 +12,7 @@ class << ObjectSpace
|
|
12
12
|
# There is also a global short-cut for this method to ease
|
13
13
|
# meta-programming with it.
|
14
14
|
#
|
15
|
-
# $ref[obj].
|
15
|
+
# $ref[obj].class
|
16
16
|
#++
|
17
17
|
#
|
18
18
|
# Typically theis method will be used to gather the object's
|
@@ -30,7 +30,7 @@ class << ObjectSpace
|
|
30
30
|
# But obviously, in this case there is the risk that #as has
|
31
31
|
# be overridden too.
|
32
32
|
#
|
33
|
-
def reflect(obj)
|
33
|
+
def self.reflect(obj)
|
34
34
|
Functor.new do |meth, *a, &b|
|
35
35
|
Kernel.instance_method(meth).bind(obj).call(*a, &b)
|
36
36
|
end
|
@@ -38,8 +38,10 @@ class << ObjectSpace
|
|
38
38
|
|
39
39
|
end
|
40
40
|
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
# Shorcut for +ObjectSpace.reflect+.
|
42
|
+
$ref = lambda do |obj|
|
43
|
+
Functor.new do |meth, *a, &b|
|
44
|
+
Kernel.instance_method(meth).bind(obj).call(*a, &b)
|
45
|
+
end
|
46
|
+
end
|
45
47
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
5
5
|
# All rights reserved.
|
6
6
|
#
|
7
|
-
# Since Ruby 1.9 has a BasicObject class this will of course be
|
7
|
+
# Since Ruby 1.9 has a BasicObject class this will of course be
|
8
8
|
# deprecated as 1.9 goes mainstream.
|
9
9
|
|
10
10
|
unless defined? BasicObject # just in case it already exists!
|
@@ -27,12 +27,13 @@ unless defined? BasicObject # just in case it already exists!
|
|
27
27
|
# * #==
|
28
28
|
# * #!
|
29
29
|
# * #!=
|
30
|
+
# * respond_to?
|
30
31
|
#
|
31
32
|
# Seems to me it should have #__id__ too.
|
32
33
|
def hide(name)
|
33
34
|
undef_method name if
|
34
35
|
instance_methods.include?(name.to_s) and
|
35
|
-
name !~ /^(__|instance_eval$|instance_exec$|equal\?$|\=\=$)/
|
36
|
+
name !~ /^(__|respond_to\?|instance_eval$|instance_exec$|equal\?$|\=\=$)/
|
36
37
|
end
|
37
38
|
end
|
38
39
|
instance_methods.each { |m| hide(m) }
|
data/meta/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.8.
|
1
|
+
2.8.4
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 8
|
8
|
-
-
|
9
|
-
version: 2.8.
|
8
|
+
- 4
|
9
|
+
version: 2.8.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Thomas Sawyer <transfire@gmail.com>
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-27 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|