facets 2.1.2 → 2.1.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/lib/core/facets.rb +1 -1
- data/lib/core/facets/conversion.rb +6 -1
- data/lib/core/facets/enumerable/collate.rb +13 -24
- data/lib/core/facets/{main.rb → facets.rb} +0 -0
- data/lib/methods/facets/facets/require_core.rb +1 -1
- data/lib/more/facets/advice.rb +28 -1
- data/lib/more/facets/aop.rb +2 -9
- data/log/history.rd +5 -0
- data/meta/MANIFEST +2 -4
- data/meta/{rollrc → ROLLRC} +1 -1
- data/task/release +1 -3
- data/task/test/general +2 -2
- data/task/test/loadtest +1 -1
- data/test/unit/enumerable/test_collate.rb +46 -50
- data/test/unit/test_advice.rb +2 -0
- data/test/unit/test_annotations.rb +2 -0
- data/test/unit/test_arguments.rb +45 -61
- data/test/unit/test_association.rb +1 -7
- data/test/unit/test_attributes.rb +1 -7
- data/test/unit/test_autoarray.rb +1 -8
- data/test/unit/test_basicobject.rb +40 -56
- data/test/unit/test_bbcode.rb +14 -30
- data/test/unit/test_binreadable.rb +35 -51
- data/test/unit/test_boolean.rb +64 -80
- data/test/unit/test_buildable.rb +26 -41
- data/test/unit/test_buildingblock.rb +24 -39
- data/test/unit/test_bytes.rb +50 -66
- data/test/unit/test_class_extension.rb +43 -59
- data/test/unit/test_classmethods.rb +42 -58
- data/test/unit/test_compare_on.rb +40 -54
- data/test/unit/test_conversion.rb +143 -159
- data/test/unit/test_coroutine.rb +31 -47
- data/test/unit/test_crypt.rb +2 -11
- data/test/unit/test_curry.rb +19 -35
- data/test/unit/test_cut.rb +14 -30
- data/test/unit/test_date.rb +31 -47
- data/test/unit/test_dependency.rb +49 -64
- data/test/unit/test_dictionary.rb +1 -7
- data/test/unit/test_elementor.rb +45 -61
- data/test/unit/test_enumerablepass.rb +57 -73
- data/test/unit/test_functor.rb +21 -34
- data/test/unit/test_getoptlong.rb +17 -33
- data/test/unit/test_infinity.rb +1 -7
- data/test/unit/test_inheritor.rb +1 -7
- data/test/unit/test_instantiable.rb +14 -30
- data/test/unit/test_instantise.rb +20 -36
- data/test/unit/test_interface.rb +58 -65
- data/test/unit/test_interval.rb +1 -7
- data/test/unit/test_let.rb +11 -25
- data/test/unit/test_linkedlist.rb +38 -52
- data/test/unit/test_lrucache.rb +6 -22
- data/test/unit/test_mapsend.rb +12 -28
- data/test/unit/test_memoize.rb +17 -32
- data/test/unit/test_multipliers.rb +72 -87
- data/test/unit/test_namespace.rb +35 -51
- data/test/unit/test_opencascade.rb +47 -63
- data/test/unit/test_openobject.rb +94 -110
- data/test/unit/test_ostruct.rb +1 -7
- data/test/unit/test_overload.rb +1 -6
- data/test/unit/test_paramix.rb +1 -7
- data/test/unit/test_pp_s.rb +1 -7
- data/test/unit/test_prototype.rb +1 -6
- data/test/unit/test_recorder.rb +22 -37
- data/test/unit/test_snapshot.rb +2 -14
- data/test/unit/test_stylize.rb +113 -127
- data/test/unit/test_syncarray.rb +2 -15
- data/test/unit/test_synchash.rb +16 -28
- data/test/unit/test_timer.rb +2 -14
- data/test/unit/test_times.rb +64 -80
- data/test/unit/test_tuple.rb +40 -56
- data/test/unit/test_typecast.rb +29 -40
- data/test/unit/test_uninheritable.rb +30 -42
- metadata +4 -8
- data/test/lib/rq.rb +0 -15
data/lib/core/facets.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require 'facets/
|
1
|
+
require 'facets/facets.rb'
|
@@ -41,7 +41,12 @@ class Array
|
|
41
41
|
#each{ |e| h[e.first] = e.slice(1..-1) }
|
42
42
|
each{ |k,*v| h[k] = v }
|
43
43
|
else
|
44
|
-
h = Hash[*(
|
44
|
+
#h = Hash[*flatten(1)] # TODO Use in 1.9 instead.
|
45
|
+
ary = []
|
46
|
+
each do |a|
|
47
|
+
Array===a ? ary.concat(a) : ary << a
|
48
|
+
end
|
49
|
+
h = Hash[*ary]
|
45
50
|
end
|
46
51
|
h
|
47
52
|
end
|
@@ -1,20 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Enumerable Collate
|
4
|
-
#
|
5
|
-
# DESCRIPTION:
|
6
|
-
#
|
7
|
-
# Collate is a Hash collection method.
|
8
|
-
#
|
9
|
-
# AUTHORS:
|
10
|
-
#
|
11
|
-
# CREDIT 7ransVent
|
12
|
-
#
|
13
|
-
# NOTES:
|
14
|
-
#
|
15
|
-
# NOTE Hash#collate! is only useful for Hash. It is not generally
|
16
|
-
# applicable to Enumerable.
|
17
|
-
#++
|
1
|
+
require 'enumerator'
|
18
2
|
|
19
3
|
module Enumerable
|
20
4
|
|
@@ -22,23 +6,25 @@ module Enumerable
|
|
22
6
|
# is expected to return two values: the key and the value for the new hash.
|
23
7
|
#
|
24
8
|
# numbers = (1..3)
|
25
|
-
# squares = numbers.
|
26
|
-
# sq_roots = numbers.
|
9
|
+
# squares = numbers.collate { |n| [n, n*n] } # { 1=>1, 2=>4, 3=>9 }
|
10
|
+
# sq_roots = numbers.collate { |n| [n*n, n] } # { 1=>1, 4=>2, 9=>3 }
|
11
|
+
#
|
12
|
+
# CREDIT: Trans
|
13
|
+
# CREDIT: Andrew Dudzik (adudzik)
|
27
14
|
|
28
15
|
def collate(&yld)
|
29
16
|
if yld
|
30
|
-
inject({}) do |h,kv|
|
31
|
-
|
17
|
+
inject({}) do |h, *kv| # Used to be inject({}) do |h,kv|
|
18
|
+
r = *yld[*kv] # The *-op works differnt from to_a on single element hash!!!
|
19
|
+
nk, nv = *r # Used to be nk, nv = *yld[*kv].to_a.flatten
|
32
20
|
h[nk] = nv
|
33
21
|
h
|
34
22
|
end
|
35
23
|
else
|
36
|
-
Hash[*self.to_a.flatten]
|
24
|
+
Enumerator.new(self,:collate) # Used to be Hash[*self.to_a] or Hash[*self.to_a.flatten]
|
37
25
|
end
|
38
26
|
end
|
39
27
|
|
40
|
-
# Alias for #collate (THIS WILL BE DEPRECATED)
|
41
|
-
|
42
28
|
alias :graph :collate
|
43
29
|
|
44
30
|
# Returns a new hash built by iterating through each key,value
|
@@ -55,6 +41,9 @@ end
|
|
55
41
|
class Hash
|
56
42
|
|
57
43
|
# In place version of #collate.
|
44
|
+
#
|
45
|
+
# NOTE Hash#collate! is only useful for Hash. It is not generally
|
46
|
+
# applicable to Enumerable.
|
58
47
|
|
59
48
|
def collate!(&yld)
|
60
49
|
replace(collate(&yld))
|
File without changes
|
@@ -1 +1 @@
|
|
1
|
-
require 'facets/
|
1
|
+
require 'facets/facets.rb'
|
data/lib/more/facets/advice.rb
CHANGED
@@ -1,8 +1,35 @@
|
|
1
|
+
# = TITLE:
|
2
|
+
#
|
3
|
+
# Advice
|
4
|
+
#
|
5
|
+
# = SUMMARY:
|
6
|
+
#
|
7
|
+
# Add before, after and around advice in dynamic fashion.
|
8
|
+
#
|
9
|
+
# = COPYRIGHT:
|
10
|
+
#
|
11
|
+
# Copyright (c) 2007 Thomas 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
|
+
# - TransAspect
|
27
|
+
|
1
28
|
require 'facets/1stclassmethod'
|
2
29
|
require 'facets/unboundmethod/arguments'
|
3
30
|
#require 'facets/binding'
|
4
31
|
|
5
|
-
|
32
|
+
#
|
6
33
|
class Method
|
7
34
|
attr_accessor :advised
|
8
35
|
|
data/lib/more/facets/aop.rb
CHANGED
@@ -176,14 +176,7 @@ class Class
|
|
176
176
|
end
|
177
177
|
|
178
178
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
#
|
183
|
-
# Basic Test
|
184
|
-
#
|
185
|
-
|
186
|
-
if $0 == __FILE__
|
179
|
+
=begin demo
|
187
180
|
|
188
181
|
class X
|
189
182
|
def x; "x"; end
|
@@ -209,4 +202,4 @@ if $0 == __FILE__
|
|
209
202
|
print '"y" == ' ; p x1.y
|
210
203
|
print '"<{x}>" == ' ; p x1.q
|
211
204
|
|
212
|
-
end
|
205
|
+
=end
|
data/log/history.rd
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
= Facets Revision History
|
2
2
|
|
3
|
+
== 2.1.3 / 2007-11-28
|
4
|
+
|
5
|
+
* Fixed minor oddity in Enumerable/collate.
|
6
|
+
* Fixed major issue with 2.1.2 where it would not core facets correctly.
|
7
|
+
|
3
8
|
== 2.1.2 / 2007-11-22
|
4
9
|
|
5
10
|
* Dir::multiglob no longer handels -/+ modifiers. Use FileList instead.
|
data/meta/MANIFEST
CHANGED
@@ -68,6 +68,7 @@ lib/core/facets/enumerable.rb
|
|
68
68
|
lib/core/facets/exception
|
69
69
|
lib/core/facets/exception/detail.rb
|
70
70
|
lib/core/facets/exception.rb
|
71
|
+
lib/core/facets/facets.rb
|
71
72
|
lib/core/facets/file
|
72
73
|
lib/core/facets/file/read.rb
|
73
74
|
lib/core/facets/file/topath.rb
|
@@ -126,7 +127,6 @@ lib/core/facets/kernel/tap.rb
|
|
126
127
|
lib/core/facets/kernel/val.rb
|
127
128
|
lib/core/facets/kernel/withattr.rb
|
128
129
|
lib/core/facets/kernel.rb
|
129
|
-
lib/core/facets/main.rb
|
130
130
|
lib/core/facets/matchdata
|
131
131
|
lib/core/facets/matchdata/matchset.rb
|
132
132
|
lib/core/facets/matchdata.rb
|
@@ -751,10 +751,10 @@ log/history.rd
|
|
751
751
|
log/todo.rd
|
752
752
|
meta
|
753
753
|
meta/MANIFEST
|
754
|
+
meta/ROLLRC
|
754
755
|
meta/google_ad.html
|
755
756
|
meta/icli.yaml
|
756
757
|
meta/project.yaml
|
757
|
-
meta/rollrc
|
758
758
|
task
|
759
759
|
task/changes
|
760
760
|
task/clean
|
@@ -784,8 +784,6 @@ task/test/loadtest
|
|
784
784
|
task/test/pairs
|
785
785
|
task/test/syntax
|
786
786
|
test
|
787
|
-
test/lib
|
788
|
-
test/lib/rq.rb
|
789
787
|
test/unit
|
790
788
|
test/unit/array
|
791
789
|
test/unit/array/test_delete.rb
|
data/meta/{rollrc → ROLLRC}
RENAMED
data/task/release
CHANGED
@@ -3,9 +3,7 @@
|
|
3
3
|
# release packages
|
4
4
|
|
5
5
|
main :release do
|
6
|
-
|
7
|
-
pname = File.basename(fname).chomp('.roll')
|
8
|
-
name, version = *pname.split('-')
|
6
|
+
name, version = rollrc.name, rollrc.version
|
9
7
|
|
10
8
|
icli "rubyforge release --version=#{version}"
|
11
9
|
end
|
data/task/test/general
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Run unit tests
|
4
4
|
|
5
|
-
live =
|
5
|
+
live = commandline.flag?('--live')
|
6
6
|
|
7
7
|
unless live
|
8
8
|
$LOAD_PATH.unshift(File.expand_path('lib/methods'))
|
@@ -11,7 +11,7 @@ unless live
|
|
11
11
|
end
|
12
12
|
|
13
13
|
main :test do
|
14
|
-
if find =
|
14
|
+
if find = commandline[0]
|
15
15
|
unless file?(find)
|
16
16
|
find = File.join(find, '**', 'test_*.rb')
|
17
17
|
end
|
data/task/test/loadtest
CHANGED
@@ -12,7 +12,7 @@ main :syntax do
|
|
12
12
|
scripts.each do |s|
|
13
13
|
next unless File.file?(s)
|
14
14
|
#if not system "ruby -c -Ibin:lib:test #{s} &> /dev/null" then
|
15
|
-
if
|
15
|
+
if system("ruby -I#{libpath} #{s} > /dev/null")
|
16
16
|
puts "#{s} [PASS]" #if verbose?
|
17
17
|
else
|
18
18
|
puts "Load Issue: #{s}"
|
@@ -1,55 +1,51 @@
|
|
1
|
-
|
2
|
-
# |_ _|__ ___| |_
|
3
|
-
# | |/ _ \/ __| __|
|
4
|
-
# | | __/\__ \ |
|
5
|
-
# |_|\___||___/\__|
|
6
|
-
#
|
7
|
-
# for lib/facets/enumerable/collate.rb
|
8
|
-
#
|
9
|
-
# Extracted Mon Sep 03 16:23:07 -0700 2007
|
10
|
-
# w/ Test Extraction Ratchet
|
11
|
-
#
|
12
|
-
|
13
|
-
require 'facets/enumerable/collate.rb'
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
require 'test/unit'
|
18
|
-
|
19
|
-
class TestEnumerableCollate < Test::Unit::TestCase
|
20
|
-
|
21
|
-
def test_collate_01
|
22
|
-
a = { :a => 1, :b => 2, :c => 3 }
|
23
|
-
e = { :a => 2, :b => 3, :c => 4 }
|
24
|
-
assert_equal( e, a.collate{ |k,v| { k => v+1 } } )
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_collate_02
|
28
|
-
numbers = (1..3)
|
29
|
-
squares = numbers.collate{ |n| [n, n*n] }
|
30
|
-
assert_equal( {1=>1, 2=>4, 3=>9}, squares )
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_collate_03
|
34
|
-
numbers = (1..3)
|
35
|
-
sq_roots = numbers.collate{ |n| [n*n, n] }
|
36
|
-
assert_equal( {1=>1, 4=>2, 9=>3}, sq_roots )
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_collate_01!
|
40
|
-
a = { :a => 1, :b => 2, :c => 3 }
|
41
|
-
e = { :a => 2, :b => 3, :c => 4 }
|
42
|
-
a.collate!{ |k,v| { k => v+1 } }
|
43
|
-
assert_equal( e, a )
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_collate_02!
|
47
|
-
h = {:a=>1,:b=>2,:c=>3}
|
48
|
-
h.collate!{ |k,v| [v, v*v] }
|
49
|
-
assert_equal( {1=>1, 2=>4, 3=>9}, h )
|
50
|
-
end
|
1
|
+
# Test facets/enumerable/collate.rb
|
51
2
|
|
3
|
+
require 'facets/enumerable/collate.rb'
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
class TestEnumerableCollate < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_collate_hash_return
|
9
|
+
a = { :a => 1, :b => 2, :c => 3 }
|
10
|
+
e = { :a => 2, :b => 3, :c => 4 }
|
11
|
+
assert_equal( e, a.collate{ |k,v| {k => v+1} } )
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_collate_hash_of_array
|
15
|
+
a = { :a => [1,2], :b => [2,3], :c => [3,4] }
|
16
|
+
e = { :a => 2, :b => 6, :c => 12 }
|
17
|
+
assert_equal( e, a.collate{ |k,v| [k, v[0]*v[1] ] } )
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_collate_array_of_array
|
21
|
+
a = [ [1,2], [2,3], [3,4] ]
|
22
|
+
e = { [1,2] => 2, [2,3] => 6, [3,4] => 12 }
|
23
|
+
assert_equal( e, a.collate{ |a| [a, a[0]*a[1] ] } )
|
52
24
|
end
|
53
25
|
|
26
|
+
def test_collate_squares
|
27
|
+
numbers = (1..3)
|
28
|
+
squares = numbers.collate{ |n| [n, n*n] }
|
29
|
+
assert_equal( {1=>1, 2=>4, 3=>9}, squares )
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_collate_roots
|
33
|
+
numbers = (1..3)
|
34
|
+
sq_roots = numbers.collate{ |n| [n*n, n] }
|
35
|
+
assert_equal( {1=>1, 4=>2, 9=>3}, sq_roots )
|
36
|
+
end
|
54
37
|
|
38
|
+
def test_collate_inplace!
|
39
|
+
a = { :a => 1, :b => 2, :c => 3 }
|
40
|
+
e = { :a => 2, :b => 3, :c => 4 }
|
41
|
+
a.collate!{ |k,v| { k => v+1 } }
|
42
|
+
assert_equal( e, a )
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_collate_inplace_again!
|
46
|
+
h = {:a=>1,:b=>2,:c=>3}
|
47
|
+
h.collate!{ |k,v| [v, v*v] }
|
48
|
+
assert_equal( {1=>1, 2=>4, 3=>9}, h )
|
49
|
+
end
|
55
50
|
|
51
|
+
end
|
data/test/unit/test_advice.rb
CHANGED
data/test/unit/test_arguments.rb
CHANGED
@@ -1,71 +1,55 @@
|
|
1
|
-
|
2
|
-
# |_ _|__ ___| |_
|
3
|
-
# | |/ _ \/ __| __|
|
4
|
-
# | | __/\__ \ |
|
5
|
-
# |_|\___||___/\__|
|
6
|
-
#
|
7
|
-
# for lib/facets/arguments.rb
|
8
|
-
#
|
9
|
-
# Extracted Mon Sep 03 16:23:08 -0700 2007
|
10
|
-
# w/ Test Extraction Ratchet
|
11
|
-
#
|
1
|
+
# Test for facets/arguments.rb.
|
12
2
|
|
13
|
-
|
3
|
+
require 'test/unit'
|
4
|
+
require 'facets/arguments.rb'
|
14
5
|
|
6
|
+
class TestArguments < Test::Unit::TestCase
|
15
7
|
|
8
|
+
include Console
|
16
9
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
line = "-x baz --foo=8 bar"
|
25
|
-
cargs = Arguments.new(line)
|
26
|
-
args, keys = cargs.parameters
|
27
|
-
assert_equal(['baz','bar'], args)
|
28
|
-
assert_equal({'foo'=>'8','x'=>true}, keys)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_parameters_with_arity
|
32
|
-
line = "-g a -x b -x c"
|
33
|
-
cargs = Arguments.new(line, :g=>1, :x=>1)
|
34
|
-
args, keys = cargs.parameters
|
35
|
-
assert_equal({'g'=>'a','x'=>['b','c']}, keys)
|
36
|
-
assert_equal([], args)
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_flags
|
40
|
-
line = "-x baz --foo=8 bar"
|
41
|
-
cargs = Arguments.new(line)
|
42
|
-
flags = cargs.flags
|
43
|
-
assert_equal(['x'], flags)
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_repeat
|
47
|
-
line = "-x baz --foo=1 --foo=2 bar"
|
48
|
-
cargs = Arguments.new(line)
|
49
|
-
args, keys = cargs.parameters
|
50
|
-
assert_equal(['baz','bar'], args)
|
51
|
-
assert_equal({'x'=>true,'foo'=>['1','2']}, keys)
|
52
|
-
end
|
10
|
+
def test_parameters
|
11
|
+
line = "-x baz --foo=8 bar"
|
12
|
+
cargs = Arguments.new(line)
|
13
|
+
args, keys = cargs.parameters
|
14
|
+
assert_equal(['baz','bar'], args)
|
15
|
+
assert_equal({'foo'=>'8','x'=>true}, keys)
|
16
|
+
end
|
53
17
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
18
|
+
def test_parameters_with_arity
|
19
|
+
line = "-g a -x b -x c"
|
20
|
+
cargs = Arguments.new(line, :g=>1, :x=>1)
|
21
|
+
args, keys = cargs.parameters
|
22
|
+
assert_equal({'g'=>'a','x'=>['b','c']}, keys)
|
23
|
+
assert_equal([], args)
|
24
|
+
end
|
60
25
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
assert_equal({'q'=>true,'aq'=>'5'},flags)
|
67
|
-
end
|
26
|
+
def test_flags
|
27
|
+
line = "-x baz --foo=8 bar"
|
28
|
+
cargs = Arguments.new(line)
|
29
|
+
flags = cargs.flags
|
30
|
+
assert_equal(['x'], flags)
|
68
31
|
end
|
69
32
|
|
33
|
+
def test_repeat
|
34
|
+
line = "-x baz --foo=1 --foo=2 bar"
|
35
|
+
cargs = Arguments.new(line)
|
36
|
+
args, keys = cargs.parameters
|
37
|
+
assert_equal(['baz','bar'], args)
|
38
|
+
assert_equal({'x'=>true,'foo'=>['1','2']}, keys)
|
39
|
+
end
|
70
40
|
|
41
|
+
def test_preoptions
|
42
|
+
line = "-x --foo=7 baz -y bar"
|
43
|
+
cargs = Arguments.new(line)
|
44
|
+
flags = cargs.preoptions
|
45
|
+
assert_equal({'x'=>true,'foo'=>'7'}, flags)
|
46
|
+
end
|
71
47
|
|
48
|
+
def test_with_arity
|
49
|
+
line = "-q baz --aq 5 bar"
|
50
|
+
cargs = Arguments.new(line,'aq'=>1)
|
51
|
+
words, flags = cargs.parameters
|
52
|
+
assert_equal(['baz','bar'],words)
|
53
|
+
assert_equal({'q'=>true,'aq'=>'5'},flags)
|
54
|
+
end
|
55
|
+
end
|