facets 2.4.0 → 2.4.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 +14 -6
- data/MANIFEST +35 -18
- data/NOTES +5 -15
- data/README +1 -11
- data/doc/{History.txt → history.rdoc} +0 -0
- data/doc/html/api/core/created.rid +1 -1
- data/doc/html/api/core/files/CHANGES.html +20 -4
- data/doc/html/api/core/files/NOTES.html +44 -15
- data/doc/html/api/more/created.rid +1 -1
- data/doc/html/api/more/files/CHANGES.html +20 -4
- data/doc/html/api/more/files/NOTES.html +46 -15
- data/doc/html/changes.html +19 -3
- data/doc/html/notes.html +43 -14
- data/doc/notes.rdoc +9 -0
- data/lib/facets/basex.rb +37 -0
- data/lib/facets/basicobject.rb +2 -2
- data/lib/facets/date.rb +16 -4
- data/lib/facets/exception.rb +1 -0
- data/lib/facets/exception/suppress.rb +21 -0
- data/lib/facets/hash/argumentize.rb +2 -1
- data/lib/facets/kernel.rb +9 -2
- data/lib/facets/kernel/__class__.rb +9 -0
- data/lib/facets/kernel/__get__.rb +10 -0
- data/lib/facets/kernel/__set__.rb +1 -0
- data/lib/facets/kernel/instance_assign.rb +41 -0
- data/lib/facets/kernel/instance_class.rb +24 -0
- data/lib/facets/kernel/instance_send.rb +7 -0
- data/lib/facets/kernel/instance_variables.rb +99 -0
- data/lib/facets/kernel/object_class.rb +10 -0
- data/lib/facets/kernel/object_hexid.rb +12 -0
- data/lib/facets/kernel/{object.rb → object_send.rb} +0 -21
- data/lib/facets/kernel/silence.rb +25 -19
- data/lib/facets/kernel/suppress.rb +18 -0
- data/lib/facets/module.rb +3 -0
- data/lib/facets/module/basename.rb +31 -0
- data/lib/facets/module/modspace.rb +22 -0
- data/lib/facets/module/nesting.rb +0 -66
- data/lib/facets/module/spacename.rb +25 -0
- data/lib/facets/net/smtp_tls.rb +5 -8
- data/lib/facets/openhash.rb +1 -0
- data/lib/facets/openobject.rb +2 -1
- data/lib/facets/paramix.rb +187 -0
- data/lib/facets/platform.rb +192 -0
- data/lib/facets/recorder.rb +1 -1
- data/lib/facets/string.rb +12 -0
- data/lib/facets/string/to_time.rb +1 -23
- data/lib/facets/style.rb +145 -64
- data/lib/facets/time.rb +5 -0
- data/lib/facets/time/to_time.rb +14 -0
- data/log/{Changelog-0.txt → changelog-0.rdoc} +0 -0
- data/log/{Changelog-1.txt → changelog-1.rdoc} +0 -0
- data/log/{Changelog.txt → changelog.rdoc} +18 -0
- data/log/{Fixme.txt → fixme.rdoc} +3 -3
- data/log/testlog.txt +645 -0
- data/log/{Todo.txt → todo.rdoc} +80 -89
- data/meta/project.yaml +14 -10
- data/meta/version +1 -1
- data/script/conflicts +28 -3
- data/script/methods +32 -43
- data/test/kernel/{test_instance.rb → test_instance_assign.rb} +2 -10
- data/test/kernel/test_instance_class.rb +12 -0
- data/test/kernel/{test_object.rb → test_object_class.rb} +2 -9
- data/test/kernel/test_object_hexid.rb +12 -0
- data/test/module/test_basename.rb +11 -0
- data/test/module/test_modspace.rb +13 -0
- data/test/module/test_nesting.rb +0 -17
- data/test/module/test_spacename.rb +14 -0
- data/test/test_date.rb +12 -0
- data/test/test_style.rb +1 -1
- data/test/{string → time}/test_to_time.rb +1 -9
- metadata +46 -26
- data/lib/facets/behavior.rb +0 -104
- data/lib/facets/kernel/instance.rb +0 -73
- data/lib/facets/string/stylize.rb +0 -73
- data/lib/facets/string/underscore.rb +0 -28
- data/log/Testlog.txt +0 -205
- data/meta/corelibs +0 -49
- data/test/string/test_stylize.rb +0 -52
- data/test/string/test_underscore.rb +0 -13
data/lib/facets/net/smtp_tls.rb
CHANGED
@@ -41,17 +41,13 @@ class Net::SMTP
|
|
41
41
|
send :remove_method, :start
|
42
42
|
end
|
43
43
|
|
44
|
-
def self.start(
|
45
|
-
helo = 'localhost.localdomain',
|
46
|
-
user = nil, secret = nil, authtype = nil, use_tls = false,
|
47
|
-
&block) # :yield: smtp
|
44
|
+
def self.start(address, port=nil, helo='localhost.localdomain', user=nil, secret=nil, authtype=nil, use_tls=false, &block) # :yield: smtp
|
48
45
|
new(address, port).start(helo, user, secret, authtype, use_tls, &block)
|
49
46
|
end
|
50
47
|
|
51
48
|
alias tls_old_start start
|
52
49
|
|
53
|
-
def start(
|
54
|
-
user = nil, secret = nil, authtype = nil, use_tls = false ) # :yield: smtp
|
50
|
+
def start(helo='localhost.localdomain', user=nil, secret=nil, authtype=nil, use_tls=false) # :yield: smtp
|
55
51
|
start_method = use_tls ? :do_tls_start : :do_start
|
56
52
|
if block_given?
|
57
53
|
begin
|
@@ -75,7 +71,7 @@ class Net::SMTP
|
|
75
71
|
sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
|
76
72
|
@socket = Net::InternetMessageIO.new(sock)
|
77
73
|
@socket.read_timeout = 60 #@read_timeout
|
78
|
-
@socket.debug_output = STDERR #@debug_output
|
74
|
+
@socket.debug_output = STDERR if $DEBUG #@debug_output
|
79
75
|
|
80
76
|
check_response(critical { recv_response() })
|
81
77
|
do_helo(helodomain)
|
@@ -87,7 +83,7 @@ class Net::SMTP
|
|
87
83
|
ssl.connect
|
88
84
|
@socket = Net::InternetMessageIO.new(ssl)
|
89
85
|
@socket.read_timeout = 60 #@read_timeout
|
90
|
-
@socket.debug_output = STDERR #@debug_output
|
86
|
+
@socket.debug_output = STDERR if $DEBUG #@debug_output
|
91
87
|
do_helo(helodomain)
|
92
88
|
|
93
89
|
authenticate user, secret, authtype if user
|
@@ -132,3 +128,4 @@ class Net::SMTP
|
|
132
128
|
|
133
129
|
end unless Net::SMTP.private_method_defined? :do_tls_start or
|
134
130
|
Net::SMTP.method_defined? :tls?
|
131
|
+
|
data/lib/facets/openhash.rb
CHANGED
data/lib/facets/openobject.rb
CHANGED
@@ -0,0 +1,187 @@
|
|
1
|
+
# TITLE:
|
2
|
+
#
|
3
|
+
# Parametric Mixins
|
4
|
+
#
|
5
|
+
# SUMMARY:
|
6
|
+
#
|
7
|
+
# Parametric Mixins provides parameters for mixin modules.
|
8
|
+
#
|
9
|
+
# COPYRIGHT:
|
10
|
+
#
|
11
|
+
# Copyright (c) 2008 T. Sawyer
|
12
|
+
#
|
13
|
+
# LICENSE:
|
14
|
+
#
|
15
|
+
# Ruby License
|
16
|
+
#
|
17
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
18
|
+
# software under the same terms as Ruby.
|
19
|
+
#
|
20
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
21
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
22
|
+
# FOR A PARTICULAR PURPOSE.
|
23
|
+
#
|
24
|
+
# AUTHORS:
|
25
|
+
#
|
26
|
+
# - Thomas Sawyer
|
27
|
+
|
28
|
+
require 'facets/module/basename'
|
29
|
+
require 'facets/module/modspace'
|
30
|
+
|
31
|
+
# = Parametric Mixin
|
32
|
+
#
|
33
|
+
# Parametric Mixins provides parameters for mixin modules.
|
34
|
+
# Module parameters can be set at the time of inclusion or extension,
|
35
|
+
# then accessed via an instance method per mixin.
|
36
|
+
#
|
37
|
+
# module Mixin
|
38
|
+
# def hello
|
39
|
+
# puts "Hello from #{mixin_parameters[Mixin][:name]}"
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# class MyClass
|
44
|
+
# include Mixin(:name => 'Ruby')
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# m = MyClass.new
|
48
|
+
# m.hello -> 'Hello from Ruby'
|
49
|
+
#
|
50
|
+
# You can view the full set of parameters via the #mixin_parameters
|
51
|
+
# class method, which returns a hash keyed on the included modules.
|
52
|
+
#
|
53
|
+
# MyClass.mixin_parameters #=> {Mixin=>{:name=>'Ruby'}}
|
54
|
+
# MyClass.mixin_parameters[Mixin] #=> {:name=>'Ruby'}
|
55
|
+
#
|
56
|
+
# To create _dynamic mixins_ you can use the #included callback
|
57
|
+
# method along with mixin_parameters method like so:
|
58
|
+
#
|
59
|
+
# module Mixin
|
60
|
+
# def self.included( base )
|
61
|
+
# parms = base.mixin_parameters[self]
|
62
|
+
# base.class_eval {
|
63
|
+
# def hello
|
64
|
+
# puts "Hello from #{parms(:name)}"
|
65
|
+
# end
|
66
|
+
# }
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
#--
|
71
|
+
# More conveniently a new callback has been added, #included_with_parameters,
|
72
|
+
# which passes in the parameters in addition to the base class/module.
|
73
|
+
#
|
74
|
+
# module Mixin
|
75
|
+
# def self.included_with_parameters( base, parms )
|
76
|
+
# base.class_eval {
|
77
|
+
# def hello
|
78
|
+
# puts "Hello from #{parms(:name)}"
|
79
|
+
# end
|
80
|
+
# }
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# We would prefer to have passed the parameters through the #included callback
|
85
|
+
# method itself, but implementation of such a feature is much more complicated.
|
86
|
+
# If a reasonable solution presents itself in the future however, we will fix.
|
87
|
+
#++
|
88
|
+
|
89
|
+
module Paramix # or PatrametricMixin ?
|
90
|
+
|
91
|
+
def self.append_features(base)
|
92
|
+
base.modspace.module_eval %{
|
93
|
+
def #{base.basename.to_s}(parameters, &block)
|
94
|
+
Delegator.new(#{base}, parameters, &block)
|
95
|
+
end
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
# It you want to define the module method by hand. You
|
100
|
+
# can use Parmix.new instead of Parmix::Delegator.new.
|
101
|
+
|
102
|
+
def self.new(delegate_module, parameters={}, &base_block)
|
103
|
+
Delegator.new(delegate_module, parameters, &base_block)
|
104
|
+
end
|
105
|
+
|
106
|
+
#
|
107
|
+
|
108
|
+
class Delegator < Module
|
109
|
+
|
110
|
+
attr :delegate_module
|
111
|
+
attr :parameters
|
112
|
+
attr :base_block
|
113
|
+
|
114
|
+
def initialize(delegate_module, parameters={}, &base_block)
|
115
|
+
@delegate_module = delegate_module
|
116
|
+
@parameters = parameters
|
117
|
+
@base_block = base_block
|
118
|
+
end
|
119
|
+
|
120
|
+
def append_features(base)
|
121
|
+
base.__send__(:include, delegate_module)
|
122
|
+
|
123
|
+
base.mixin_parameters[delegate_module] = parameters
|
124
|
+
|
125
|
+
base.module_eval do
|
126
|
+
define_method(:mixin_parameters) do
|
127
|
+
base.mixin_parameters
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
base.module_eval(&@base_block) if base_block
|
132
|
+
end
|
133
|
+
|
134
|
+
def [](name)
|
135
|
+
@parameters[name]
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
class Module
|
144
|
+
|
145
|
+
# Store for parametric mixin parameters.
|
146
|
+
#
|
147
|
+
# Returns a hash, the keys of which are the parametric mixin module
|
148
|
+
# and the values are the parameters associacted with this module/class.
|
149
|
+
#
|
150
|
+
# class C
|
151
|
+
# include P(:x=>1)
|
152
|
+
# end
|
153
|
+
#
|
154
|
+
# C.mixin_parameters[P] #=> {:x=>1}
|
155
|
+
#
|
156
|
+
def mixin_parameters
|
157
|
+
@mixin_parameters ||= {}
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
if __FILE__ == $0
|
164
|
+
|
165
|
+
module O
|
166
|
+
include Paramix
|
167
|
+
|
168
|
+
def x
|
169
|
+
mixin_parameters[O][:x]
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
#def O(options)
|
174
|
+
# Paramix.new(O, options)
|
175
|
+
#end
|
176
|
+
|
177
|
+
class X
|
178
|
+
include O(:x=>1)
|
179
|
+
end
|
180
|
+
|
181
|
+
x = X.new
|
182
|
+
p x.x
|
183
|
+
|
184
|
+
p X.ancestors
|
185
|
+
|
186
|
+
end
|
187
|
+
|
@@ -0,0 +1,192 @@
|
|
1
|
+
# Copyright (c) 2007 Eric Hodel
|
2
|
+
#
|
3
|
+
# Available list of platforms.
|
4
|
+
|
5
|
+
require 'rbconfig'
|
6
|
+
|
7
|
+
class Platform
|
8
|
+
|
9
|
+
@local = nil
|
10
|
+
@supported = nil
|
11
|
+
|
12
|
+
attr_accessor :cpu
|
13
|
+
|
14
|
+
attr_accessor :os
|
15
|
+
|
16
|
+
attr_accessor :version
|
17
|
+
|
18
|
+
RbConfig = Config unless defined? ::RbConfig
|
19
|
+
|
20
|
+
DEPRECATED_CONSTS = [
|
21
|
+
:DARWIN,
|
22
|
+
:LINUX_586,
|
23
|
+
:MSWIN32,
|
24
|
+
:PPC_DARWIN,
|
25
|
+
:WIN32,
|
26
|
+
:X86_LINUX
|
27
|
+
]
|
28
|
+
|
29
|
+
# Array of supported platforms (ie. pure-Ruby and local platform).
|
30
|
+
|
31
|
+
def self.supported
|
32
|
+
@suported ||= [Platform::RUBY, Platform.local]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.const_missing(name) # TODO remove six months from 2007/12
|
36
|
+
if DEPRECATED_CONSTS.include? name then
|
37
|
+
raise NameError, "#{name} has been removed, use CURRENT instead"
|
38
|
+
else
|
39
|
+
super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.local
|
44
|
+
arch = RbConfig::CONFIG['arch']
|
45
|
+
arch = "#{arch}_60" if arch =~ /mswin32$/
|
46
|
+
@local ||= new(arch)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.match(platform)
|
50
|
+
supported.any? do |local_platform|
|
51
|
+
platform.nil? or local_platform == platform or
|
52
|
+
(local_platform != Platform::RUBY and local_platform =~ platform)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.new(arch) # :nodoc:
|
57
|
+
case arch
|
58
|
+
when Platform::CURRENT then
|
59
|
+
Platform.local
|
60
|
+
when Platform::RUBY, nil, '' then
|
61
|
+
Platform::RUBY
|
62
|
+
else
|
63
|
+
super
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize(arch)
|
68
|
+
case arch
|
69
|
+
when Array then
|
70
|
+
@cpu, @os, @version = arch
|
71
|
+
when String then
|
72
|
+
arch = arch.split '-'
|
73
|
+
|
74
|
+
if arch.length > 2 and arch.last !~ /\d/ then # reassemble x86-linux-gnu
|
75
|
+
extra = arch.pop
|
76
|
+
arch.last << "-#{extra}"
|
77
|
+
end
|
78
|
+
|
79
|
+
cpu = arch.shift
|
80
|
+
|
81
|
+
@cpu = case cpu
|
82
|
+
when /i\d86/ then 'x86'
|
83
|
+
else cpu
|
84
|
+
end
|
85
|
+
|
86
|
+
if arch.length == 2 and arch.last =~ /^\d+$/ then # for command-line
|
87
|
+
@os, @version = arch
|
88
|
+
return
|
89
|
+
end
|
90
|
+
|
91
|
+
os, = arch
|
92
|
+
@cpu, os = nil, cpu if os.nil? # legacy jruby
|
93
|
+
|
94
|
+
@os, @version = case os
|
95
|
+
when /aix(\d+)/ then [ 'aix', $1 ]
|
96
|
+
when /cygwin/ then [ 'cygwin', nil ]
|
97
|
+
when /darwin(\d+)?/ then [ 'darwin', $1 ]
|
98
|
+
when /freebsd(\d+)/ then [ 'freebsd', $1 ]
|
99
|
+
when /hpux(\d+)/ then [ 'hpux', $1 ]
|
100
|
+
when /^java$/, /^jruby$/ then [ 'java', nil ]
|
101
|
+
when /^java([\d.]*)/ then [ 'java', $1 ]
|
102
|
+
when /linux/ then [ 'linux', $1 ]
|
103
|
+
when /mingw32/ then [ 'mingw32', nil ]
|
104
|
+
when /(mswin\d+)(\_(\d+))?/ then
|
105
|
+
os, version = $1, $3
|
106
|
+
@cpu = 'x86' if @cpu.nil? and os =~ /32$/
|
107
|
+
[os, version]
|
108
|
+
when /netbsdelf/ then [ 'netbsdelf', nil ]
|
109
|
+
when /openbsd(\d+\.\d+)/ then [ 'openbsd', $1 ]
|
110
|
+
when /solaris(\d+\.\d+)/ then [ 'solaris', $1 ]
|
111
|
+
# test
|
112
|
+
when /^(\w+_platform)(\d+)/ then [ $1, $2 ]
|
113
|
+
else [ 'unknown', nil ]
|
114
|
+
end
|
115
|
+
when Platform then
|
116
|
+
@cpu = arch.cpu
|
117
|
+
@os = arch.os
|
118
|
+
@version = arch.version
|
119
|
+
else
|
120
|
+
raise ArgumentError, "invalid argument #{arch.inspect}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def inspect
|
125
|
+
"#<%s:0x%x @cpu=%p, @os=%p, @version=%p>" % [self.class, object_id, *to_a]
|
126
|
+
end
|
127
|
+
|
128
|
+
def to_a
|
129
|
+
[@cpu, @os, @version]
|
130
|
+
end
|
131
|
+
|
132
|
+
def to_s
|
133
|
+
to_a.compact.join '-'
|
134
|
+
end
|
135
|
+
|
136
|
+
def ==(other)
|
137
|
+
self.class === other and
|
138
|
+
@cpu == other.cpu and @os == other.os and @version == other.version
|
139
|
+
end
|
140
|
+
|
141
|
+
def ===(other)
|
142
|
+
return nil unless Platform === other
|
143
|
+
|
144
|
+
# cpu
|
145
|
+
(@cpu == 'universal' or other.cpu == 'universal' or @cpu == other.cpu) and
|
146
|
+
|
147
|
+
# os
|
148
|
+
@os == other.os and
|
149
|
+
|
150
|
+
# version
|
151
|
+
(@version.nil? or other.version.nil? or @version == other.version)
|
152
|
+
end
|
153
|
+
|
154
|
+
def =~(other)
|
155
|
+
case other
|
156
|
+
when Platform then # nop
|
157
|
+
when String then
|
158
|
+
# This data is from http://gems.rubyforge.org/gems/yaml on 19 Aug 2007
|
159
|
+
other = case other
|
160
|
+
when /^i686-darwin(\d)/ then ['x86', 'darwin', $1]
|
161
|
+
when /^i\d86-linux/ then ['x86', 'linux', nil]
|
162
|
+
when 'java', 'jruby' then [nil, 'java', nil]
|
163
|
+
when /mswin32(\_(\d+))?/ then ['x86', 'mswin32', $2]
|
164
|
+
when 'powerpc-darwin' then ['powerpc', 'darwin', nil]
|
165
|
+
when /powerpc-darwin(\d)/ then ['powerpc', 'darwin', $1]
|
166
|
+
when /sparc-solaris2.8/ then ['sparc', 'solaris', '2.8']
|
167
|
+
when /universal-darwin(\d)/ then ['universal', 'darwin', $1]
|
168
|
+
else other
|
169
|
+
end
|
170
|
+
|
171
|
+
other = Platform.new other
|
172
|
+
else
|
173
|
+
return nil
|
174
|
+
end
|
175
|
+
|
176
|
+
self === other
|
177
|
+
end
|
178
|
+
|
179
|
+
##
|
180
|
+
# A pure-ruby gem that may use Gem::Specification#extensions to build
|
181
|
+
# binary files.
|
182
|
+
|
183
|
+
RUBY = 'ruby'
|
184
|
+
|
185
|
+
##
|
186
|
+
# A platform-specific gem that is built for the packaging ruby's platform.
|
187
|
+
# This will be replaced with Gem::Platform::local.
|
188
|
+
|
189
|
+
CURRENT = 'current'
|
190
|
+
|
191
|
+
end
|
192
|
+
|
data/lib/facets/recorder.rb
CHANGED