facets 2.8.2 → 2.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +13 -11
- data/HISTORY.rdoc +58 -0
- data/lib/core/facets/array/recursive.rb +91 -0
- data/lib/core/facets/array/recursively.rb +2 -2
- data/lib/core/facets/array/traverse.rb +23 -6
- data/lib/core/facets/enumerable/collisions.rb +1 -0
- data/lib/core/facets/enumerable/commonality.rb +4 -2
- data/lib/core/facets/enumerable/graph.rb +37 -1
- data/lib/core/facets/enumerable/mash.rb +1 -39
- data/lib/core/facets/enumerable/recursive.rb +75 -0
- data/lib/core/facets/enumerable/visit.rb +30 -0
- data/lib/core/facets/file/ext.rb +36 -0
- data/lib/core/facets/hash/graph.rb +18 -0
- data/lib/core/facets/hash/mash.rb +1 -18
- data/lib/core/facets/hash/recursive.rb +180 -0
- data/lib/core/facets/hash/recursive_merge.rb +6 -0
- data/lib/core/facets/hash/recursively.rb +2 -2
- data/lib/core/facets/hash/to_module.rb +26 -0
- data/lib/core/facets/hash/to_proc.rb +2 -2
- data/lib/core/facets/hash/traverse.rb +19 -13
- data/lib/core/facets/kernel/assign.rb +63 -0
- data/lib/core/facets/kernel/assign_from.rb +45 -0
- data/lib/core/facets/kernel/dup.rb +63 -0
- data/lib/core/facets/kernel/instance.rb +156 -0
- data/lib/core/facets/kernel/instance_assign.rb +1 -22
- data/lib/core/facets/kernel/meta_def.rb +4 -0
- data/lib/core/facets/kernel/populate.rb +1 -74
- data/lib/core/facets/kernel/set_from.rb +2 -0
- data/lib/core/facets/kernel/try_dup.rb +1 -0
- data/lib/core/facets/module/set.rb +36 -0
- data/lib/core/facets/objectspace/reflect.rb +45 -0
- data/lib/core/facets/struct/attributes.rb +6 -2
- data/lib/core/facets/symbol/op_div.rb +19 -0
- data/lib/core/facets/to_hash.rb +12 -0
- data/lib/more/facets/casting_hash.rb +172 -0
- data/lib/more/facets/pathname.rb +36 -0
- data/lib/more/facets/prepend.rb +57 -0
- data/lib/more/facets/random.rb +19 -3
- data/lib/more/facets/roman.rb +46 -153
- data/lib/more/facets/stash.rb +148 -33
- data/meta/released +1 -1
- data/meta/version +1 -1
- data/test/core/array/test_recursive.rb +18 -0
- data/test/core/enumerable/test_recursive.rb +18 -0
- data/test/core/file/test_ext.rb +31 -0
- data/test/core/hash/test_recursive.rb +23 -0
- data/test/core/hash/test_to_module.rb +21 -0
- data/test/core/kernel/test_assign.rb +57 -0
- data/test/core/kernel/test_assign_from.rb +20 -0
- data/test/more/test_prepend.rb +28 -0
- data/test/more/test_random.rb +40 -4
- metadata +39 -10
- data/lib/core/facets/kernel/instance_variables.rb +0 -97
- data/lib/more/facets/instance_eval.rb +0 -50
- data/lib/more/facets/ioredirect.rb +0 -77
- data/lib/more/facets/plugin_manager.rb +0 -50
- data/test/core/kernel/test_populate.rb +0 -46
@@ -1,77 +0,0 @@
|
|
1
|
-
warn "IORedirect is being deprecated. It is not a robust solution. If you use this library, please consider contributing to Facets by rewritting the library so we can keep it in Facets."
|
2
|
-
|
3
|
-
# = IORedirect
|
4
|
-
#
|
5
|
-
# IORedirect was ported from Paul Brannan's Ruby Treasures.
|
6
|
-
#
|
7
|
-
# Copyright (C) 2002 Paul Brannan <paul@atdesk.com>
|
8
|
-
#
|
9
|
-
# Ruby License
|
10
|
-
#
|
11
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
12
|
-
# software under the same terms as Ruby.
|
13
|
-
#
|
14
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
15
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
16
|
-
# FOR A PARTICULAR PURPOSE.
|
17
|
-
|
18
|
-
require 'thread'
|
19
|
-
|
20
|
-
# = IORedirect
|
21
|
-
#
|
22
|
-
# A class to redirect $stdout, or other IO object, to a StringIO object,
|
23
|
-
# or any other object with a write() method.
|
24
|
-
#
|
25
|
-
# s = StringIO.new
|
26
|
-
# r = IORedirect.redirect($stdout, s) do
|
27
|
-
# $stdout.puts "this is a test"
|
28
|
-
# end
|
29
|
-
#
|
30
|
-
class IORedirect
|
31
|
-
|
32
|
-
# Start redirection from one IO object to any other object with a
|
33
|
-
# write() method. +from+ is the IO object to redirect from,
|
34
|
-
# and +to+ is the object to redirect to.
|
35
|
-
def initialize(from, to)
|
36
|
-
@from = from
|
37
|
-
@to = to
|
38
|
-
start()
|
39
|
-
end
|
40
|
-
|
41
|
-
# Start redirection, if it has not already been started.
|
42
|
-
def start
|
43
|
-
raise "Redirection already in progress" if @t
|
44
|
-
tmp = @from.dup
|
45
|
-
r, w = *IO.pipe
|
46
|
-
@from.reopen(w)
|
47
|
-
@t = Thread.new do
|
48
|
-
begin
|
49
|
-
loop do
|
50
|
-
s = r.read(1) # TODO: can I make this buffered?
|
51
|
-
@to.write(s)
|
52
|
-
end
|
53
|
-
ensure
|
54
|
-
@from.reopen(tmp)
|
55
|
-
@t = nil
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# Stop redirection, if it is occurring
|
61
|
-
def stop
|
62
|
-
raise "Redirection already stopped" if not @t
|
63
|
-
@t.kill
|
64
|
-
end
|
65
|
-
|
66
|
-
# An exception-safe class method for redirection
|
67
|
-
def self.redirect(from, to)
|
68
|
-
s = new(from, to)
|
69
|
-
begin
|
70
|
-
yield
|
71
|
-
ensure
|
72
|
-
s.stop
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# = Plugin Manger
|
2
|
-
#
|
3
|
-
# Find plugins easily.
|
4
|
-
#
|
5
|
-
# NOTE: This is likely to be replaced with
|
6
|
-
# a more generic means of finding libraries.
|
7
|
-
#
|
8
|
-
module PluginManager
|
9
|
-
extend self
|
10
|
-
|
11
|
-
# Find plugins, searching through standard $LOAD_PATH,
|
12
|
-
# Roll Libraries and RubyGems.
|
13
|
-
#
|
14
|
-
# +match+ is a file glob for finding plugins.
|
15
|
-
#
|
16
|
-
# PluginManager.find('syckles/*')
|
17
|
-
#
|
18
|
-
def find(match)
|
19
|
-
plugins = []
|
20
|
-
# Standard $LOAD_PATH
|
21
|
-
$LOAD_PATH.uniq.each do |path|
|
22
|
-
list = Dir.glob(File.join(path, match))
|
23
|
-
#dirs = dirs.select{ |d| File.directory?(d) }
|
24
|
-
list = list.map{ |d| d.chomp('/') }
|
25
|
-
plugins.concat(list)
|
26
|
-
end
|
27
|
-
# ROLL (load latest versions only)
|
28
|
-
if defined?(::Roll)
|
29
|
-
::Roll::Library.ledger.each do |name, lib|
|
30
|
-
lib = lib.sort.first if Array===lib
|
31
|
-
lib.load_path.each do |path|
|
32
|
-
find = File.join(lib.location, path, match)
|
33
|
-
list = Dir.glob(find)
|
34
|
-
list = list.map{ |d| d.chomp('/') }
|
35
|
-
plugins.concat(list)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
# RubyGems (load latest versions only)
|
40
|
-
if defined?(::Gem)
|
41
|
-
Gem.latest_load_paths do |path|
|
42
|
-
list = Dir.glob(File.join(path, match))
|
43
|
-
list = list.map{ |d| d.chomp('/') }
|
44
|
-
plugins.concat(list)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
plugins
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'facets/kernel/populate.rb'
|
2
|
-
require 'test/unit'
|
3
|
-
|
4
|
-
class TestKernelPopulate < Test::Unit::TestCase
|
5
|
-
|
6
|
-
Customer = Struct.new( "Customer", :name, :address, :zip )
|
7
|
-
|
8
|
-
# def test_assign_from
|
9
|
-
# o = Object.new
|
10
|
-
# o.instance_eval{ @z=0; @a=1; @b=2 } #; @@a=3 }
|
11
|
-
# assign_from( o, "z", "@a", "@b" ) #, "@@a" )
|
12
|
-
# assert_equal( 1, @a )
|
13
|
-
# assert_equal( 2, @b )
|
14
|
-
# #assert_equal( 3, @@a )
|
15
|
-
# end
|
16
|
-
|
17
|
-
def test_set_from
|
18
|
-
bob = Customer.new("Bob Sawyer", "123 Maple, Anytown NC", 12345)
|
19
|
-
joe = Customer.new("Joe Pitare")
|
20
|
-
joe.set_from(bob, :address, :zip)
|
21
|
-
assert_equal("Joe Pitare", joe.name)
|
22
|
-
assert_equal("123 Maple, Anytown NC", joe.address)
|
23
|
-
assert_equal(12345, joe.zip)
|
24
|
-
end
|
25
|
-
|
26
|
-
#Customer = Struct.new( "Customer", :name, :address, :zip )
|
27
|
-
|
28
|
-
def test_populate_with_hash
|
29
|
-
bob = Customer.new()
|
30
|
-
x = { :name => "Bob Sawyer", :address => "123 Maple, Anytown NC", :zip => 12345 }
|
31
|
-
bob.populate(x)
|
32
|
-
assert_equal(x[:name], bob.name)
|
33
|
-
assert_equal(x[:address], bob.address)
|
34
|
-
assert_equal(x[:zip], bob.zip)
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_populate_with_block
|
38
|
-
bob = Customer.new()
|
39
|
-
x = lambda {|s| s.name = "Bob Sawyer"; s.address = "123 Maple, Anytown NC"; s.zip = 12345 }
|
40
|
-
bob.populate(&x)
|
41
|
-
assert_equal("Bob Sawyer", bob.name)
|
42
|
-
assert_equal("123 Maple, Anytown NC", bob.address)
|
43
|
-
assert_equal(12345, bob.zip)
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|