facets 2.8.2 → 2.8.3
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/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
|