kyanite 0.6.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Div +6 -32
- data/{History.txt → History.rdoc} +8 -0
- data/{License.txt → License.rdoc} +0 -0
- data/Manifest.txt +6 -21
- data/README.rdoc +44 -0
- data/Rakefile.rb +19 -68
- data/console.rb +2 -4
- data/lib/kyanite.rb +151 -14
- data/lib/kyanite/array.rb +127 -4
- data/lib/kyanite/basics.rb +3 -7
- data/lib/kyanite/dictionary.rb +19 -21
- data/lib/kyanite/enumerable/enumerable_enumerables.rb +22 -24
- data/lib/kyanite/enumerable/enumerable_numerics.rb +51 -49
- data/lib/kyanite/enumerable/enumerable_strings.rb +18 -25
- data/lib/kyanite/enumerable/structure.rb +46 -58
- data/lib/kyanite/general/callerutils.rb +30 -28
- data/lib/kyanite/general/classutils.rb +73 -63
- data/lib/kyanite/general/kernel.rb +45 -64
- data/lib/kyanite/general/object.rb +22 -46
- data/lib/kyanite/general/true_false.rb +33 -27
- data/lib/kyanite/general/undoable.rb +12 -16
- data/lib/kyanite/hash.rb +63 -58
- data/lib/kyanite/numeric.rb +14 -1
- data/lib/kyanite/numeric/float.rb +32 -22
- data/lib/kyanite/numeric/integer.rb +12 -20
- data/lib/kyanite/optimizer.rb +41 -24
- data/lib/kyanite/range.rb +42 -22
- data/lib/kyanite/set.rb +56 -63
- data/lib/kyanite/string.rb +1 -2
- data/lib/kyanite/string/cast.rb +61 -37
- data/lib/kyanite/string/chars.rb +66 -36
- data/lib/kyanite/string/chars_const.rb +4 -3
- data/lib/kyanite/string/diff.rb +64 -34
- data/lib/kyanite/string/include.rb +16 -9
- data/lib/kyanite/string/list.rb +38 -8
- data/lib/kyanite/string/misc.rb +64 -0
- data/lib/kyanite/string/nested.rb +39 -22
- data/lib/kyanite/string/random.rb +117 -47
- data/lib/kyanite/string/split.rb +84 -45
- data/lib/kyanite/symbol.rb +30 -21
- data/lib/kyanite/tree.rb +33 -28
- data/test/_start_all.rb +18 -15
- data/test/array/test_array.rb +5 -7
- data/test/enumerable/test_enumerable_enumerables.rb +11 -15
- data/test/enumerable/test_enumerable_numerics.rb +50 -54
- data/test/enumerable/test_enumerable_strings.rb +8 -11
- data/test/enumerable/test_structure.rb +6 -8
- data/test/general/test_classutils.rb +9 -9
- data/test/general/test_object.rb +4 -5
- data/test/general/test_true_false.rb +4 -5
- data/test/numeric/test_numeric_integer.rb +6 -6
- data/test/string/test_cast.rb +4 -5
- data/test/string/test_chars.rb +6 -7
- data/test/string/test_diff.rb +4 -5
- data/test/string/test_list.rb +4 -5
- data/test/string/test_misc.rb +58 -0
- data/test/string/test_nested.rb +4 -5
- data/test/string/test_split.rb +10 -5
- data/test/test_dictionary.rb +4 -6
- data/test/test_hash.rb +5 -7
- data/test/test_optimizer.rb +4 -5
- data/test/test_range.rb +8 -9
- data/test/test_set.rb +7 -7
- data/test/test_tree.rb +7 -10
- data/version.rb +8 -0
- metadata +32 -33
- data/README.txt +0 -47
- data/lib/kyanite/array/array.rb +0 -140
- data/lib/kyanite/array/array2.rb +0 -142
- data/lib/kyanite/array/matrix2.rb +0 -120
- data/lib/kyanite/hoe.rb +0 -2
- data/lib/kyanite/matrix2.rb +0 -2
- data/lib/kyanite/numeric/numeric.rb +0 -54
- data/lib/kyanite/operation.rb +0 -5
- data/lib/kyanite/operation/call_tracker.rb +0 -69
- data/lib/kyanite/operation/hoe.rb +0 -12
- data/lib/kyanite/operation/rake.rb +0 -298
- data/lib/kyanite/operation/regexp.rb +0 -28
- data/lib/kyanite/operation/unit_test.rb +0 -50
- data/lib/kyanite/rake.rb +0 -2
- data/lib/kyanite/smart_load_path.rb +0 -6
- data/lib/kyanite/string/div.rb +0 -28
- data/lib/kyanite/string/mgsub.rb +0 -43
- data/lib/kyanite/unit_test.rb +0 -2
- data/test/array/test_matrix2.rb +0 -166
- data/test/string/test_mgsub.rb +0 -58
data/lib/kyanite/array/array.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
# ruby encoding: utf-8
|
2
|
-
require 'facets/array/delete' # Methoden delete_unless, delete_values, delete_values_at
|
3
|
-
require 'facets/array/rotate' # Methoden rotate, rotate!
|
4
|
-
require 'facets/array/select' # Methode select!
|
5
|
-
require 'facets/to_hash' # Methode to_h (in der Facets-Bibliothek falsch einsortiert?)
|
6
|
-
|
7
|
-
require 'kyanite/enumerable/enumerable_enumerables'
|
8
|
-
require 'kyanite/enumerable/enumerable_numerics'
|
9
|
-
require 'kyanite/enumerable/enumerable_strings'
|
10
|
-
require 'kyanite/general/object' # Methode respond
|
11
|
-
require 'kyanite/general/classutils' # <=> für Class
|
12
|
-
require 'kyanite/symbol' # size
|
13
|
-
|
14
|
-
# [ | Kyanite | Object | *Array* | Set | Enumerable | Hash | ] | *Array* | ArrayOfNumerics | ArrayOfStrings | ArrayOfEnumerables | Range |
|
15
|
-
# ---
|
16
|
-
#
|
17
|
-
# == *Tools* *And* *Casts* *For* *Array*
|
18
|
-
# See TestKyaniteArray for tests and examples.
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# Aus {Facets/Array}[http://facets.rubyforge.org/doc/api/core/classes/Array.html] eingefügt:
|
22
|
-
# [*delete_unless* (&block)] Ergänzung zum regulären +delete_if+
|
23
|
-
# [*delete_values* (*values)] Findet und löscht bestimmte Werte
|
24
|
-
# [*delete_values_at* (*selectors)] Löscht Elemente an bestimmten Positionen
|
25
|
-
# [ ] .
|
26
|
-
# [*rotate* (n=1)] Alles rückt n Positionen auf
|
27
|
-
# [<b>select!</b> { |obj| block }] Wie +select+, aber modifiziert das Objekt
|
28
|
-
# [*to_h* (arrayed=nil)] Converts a two-element associative array into a hash.
|
29
|
-
# [*to_hash* ()] (Unterschied zu +to_h+ ???)
|
30
|
-
#
|
31
|
-
class Array
|
32
|
-
|
33
|
-
# schneidet vorne ein Element ab und gibt den Rest zurück.
|
34
|
-
# Wenn der Rest nur noch aus einem Element besteht, wird er 'pur' zurückgeliefert und nicht als Array.
|
35
|
-
# Nützlich für Rekursionen. Bsp.:
|
36
|
-
# [1,2,3].shift_complement => [2,3]
|
37
|
-
# [1,2,3].shift_complement.shift_complement => 3
|
38
|
-
# [1,2,3].shift_complement.shift_complement.shift_complement => nil
|
39
|
-
#
|
40
|
-
# Tests and examples see TestKyaniteArray#test_array_shift_complement
|
41
|
-
#
|
42
|
-
def shift_complement
|
43
|
-
if self.size > 2
|
44
|
-
self[1..-1]
|
45
|
-
else
|
46
|
-
self[-1]
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
# Formuliert den Index eines Arrays
|
55
|
-
# :pos als positive Angabe
|
56
|
-
# :neg als negative Angabe
|
57
|
-
# :inv wenn positiv, dann negativ und umgekehrt
|
58
|
-
#
|
59
|
-
# Liefert eine Integerzahl.
|
60
|
-
#
|
61
|
-
# Tests and examples see TestKyaniteArray#test_rephrase_index
|
62
|
-
#
|
63
|
-
def rephrase_index(i, style=:inv)
|
64
|
-
return i if i > (size-1)
|
65
|
-
return i if i < -size
|
66
|
-
case style
|
67
|
-
when :inv
|
68
|
-
if i >=0 # pos >> neg
|
69
|
-
(i - size)
|
70
|
-
else # neg >> pos
|
71
|
-
(i + size)
|
72
|
-
end
|
73
|
-
when :pos
|
74
|
-
if i >= 0 # pos bleibt
|
75
|
-
i
|
76
|
-
else # neg >> pos
|
77
|
-
(i + size)
|
78
|
-
end
|
79
|
-
when :neg
|
80
|
-
if i >= 0 # pos >> neg
|
81
|
-
(i - size)
|
82
|
-
else # neg bleibt
|
83
|
-
i
|
84
|
-
end
|
85
|
-
end #case
|
86
|
-
end #def
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
# ==================================================================================
|
94
|
-
# Zufall
|
95
|
-
#
|
96
|
-
|
97
|
-
|
98
|
-
# Bringt das Array in eine zufällige Reihenfolge
|
99
|
-
def shuffle
|
100
|
-
sort_by { rand }
|
101
|
-
end
|
102
|
-
|
103
|
-
|
104
|
-
# In-place-Variante von shuffle
|
105
|
-
def shuffle!
|
106
|
-
self.replace shuffle
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end # class Array
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
if defined? TransparentNil
|
117
|
-
class NilClass
|
118
|
-
def shift_complement; nil; end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
data/lib/kyanite/array/array2.rb
DELETED
@@ -1,142 +0,0 @@
|
|
1
|
-
# ruby encoding: utf-8
|
2
|
-
require 'kyanite/array/array'
|
3
|
-
|
4
|
-
class Array
|
5
|
-
|
6
|
-
# Liefert nil, wenn das erste Element empty ist, sonst self.
|
7
|
-
# Wird von Array2 und Matrix2 verwendet.
|
8
|
-
# Tests: TestMatrix2#test_fehlerhalte_matrix
|
9
|
-
#
|
10
|
-
def row_to_nil #:nodoc:
|
11
|
-
return nil if self[0].empty?
|
12
|
-
return self
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
if defined? TransparentNil
|
18
|
-
class NilClass
|
19
|
-
def row_to_nil; nil; end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Ein Array2 ist eine spezielle Form von Array, nämlich immer zweidimensional. Siehe auch Matrix2!
|
24
|
-
#
|
25
|
-
# Ein Array2 kann <b>in jeder Zeile eine verschiedene Anzahl Spalten </b> haben (im Gegensatz zu Instanzen der Klasse Matrix2!)
|
26
|
-
# Jede Zeile hat einen Zeilenheader (Zelle 0), einen Spaltenheader gibt es nicht.
|
27
|
-
class Array2 < Array
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# Schreibt den Wert einer Zelle. Siehe auch set_row! und set_column!
|
32
|
-
# Stattdessen kann man auch schreiben:
|
33
|
-
# myarray[r][c] = neuerwert
|
34
|
-
#
|
35
|
-
# Tests: TestMatrix2#test_matrix_zellen_und_zeilen
|
36
|
-
def set_element!(i,j,wert)
|
37
|
-
self[i][j] = wert.dup
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
# Liefert eine bestimmte Zeile zurück.
|
42
|
-
#
|
43
|
-
# Tests: TestMatrix2#test_matrix_zellen_und_zeilen
|
44
|
-
def row(i)
|
45
|
-
return self.at(i)
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
# Setzt den Wert einer Zeile.
|
50
|
-
#
|
51
|
-
# Tests: TestMatrix2#test_matrix_zellen_und_zeilen
|
52
|
-
def set_row!(i,wert)
|
53
|
-
self[i] = wert.dup
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
# Wieviele Zeilen hat das Array2?
|
58
|
-
#
|
59
|
-
# Tests: TestMatrix2#test_matrix_zellen_und_zeilen
|
60
|
-
def row_size
|
61
|
-
size
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# Gibt das Array2 menschenlesbar aus.
|
67
|
-
# Beispielaufruf:
|
68
|
-
# pp germany.adms_and_orte.inspect
|
69
|
-
def inspect
|
70
|
-
analyze = Array.new
|
71
|
-
analyze = self.collect do | zeile |
|
72
|
-
( zeile.collect { | zelle | zelle.inspect } ).join(" | ")
|
73
|
-
end # zeile
|
74
|
-
return analyze
|
75
|
-
end # inspect
|
76
|
-
|
77
|
-
|
78
|
-
# Liefert eine bereinigte Kopie des Array2.
|
79
|
-
# Level=0:: Platzhalter für den More-Link durch echten More-Link ersetzen
|
80
|
-
# Level=1:: Zeilen ohne Zeilenheader werden gelöscht
|
81
|
-
#
|
82
|
-
def clean4view(level = 0)
|
83
|
-
new = self.collect { |zeile|
|
84
|
-
if zeile[1].nil? && level >= 1
|
85
|
-
nil
|
86
|
-
elsif zeile[-1] == :more
|
87
|
-
zeile[0..-2] << zeile[0].dup.more!
|
88
|
-
else
|
89
|
-
zeile
|
90
|
-
end
|
91
|
-
}
|
92
|
-
return Array2.new(new.compact)
|
93
|
-
end # clean4view
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
# In-place-Variante von clean4view.
|
98
|
-
def clean4view!(level = 0)
|
99
|
-
self.replace(self.clean4view(level))
|
100
|
-
end
|
101
|
-
|
102
|
-
end # class Array2
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
@@ -1,120 +0,0 @@
|
|
1
|
-
# ruby encoding: utf-8
|
2
|
-
require 'kyanite/array/array2'
|
3
|
-
|
4
|
-
# Datenstruktur für streng-zweidimensionale Matritzen. Erbt die Methoden von Array2 und Array. Beispiele siehe TestMatrix2.
|
5
|
-
#
|
6
|
-
# Eine Matrix2 ist eine spezielle Form von Array2, sie hat <b>in jeder Zeile die gleiche Anzahl Spalten</b>.
|
7
|
-
# Jede Zeile hat einen Zeilenheader row(0), jede Spalte einen Spaltenheader column(0).
|
8
|
-
#
|
9
|
-
# Man könnte auch die Standard-Library Matrix verwenden, aber die ist langsam, fehlerhaft und eher auf numerische Werte zugeschnitten denn auf beliebige Objekte.
|
10
|
-
#
|
11
|
-
# noch nicht implementiert: append!(top | bottom | left | right)
|
12
|
-
class Matrix2 < Array2
|
13
|
-
|
14
|
-
# Liefert eine bestimmte Spalte zurück.
|
15
|
-
# Dabei wird die Matrix2 vorher mit clean4view!(0) behandelt, d.h. sie verändert sich ggf.!
|
16
|
-
#
|
17
|
-
# Tests: TestMatrix2#test_spalten
|
18
|
-
def column(j)
|
19
|
-
clean4view!(0)
|
20
|
-
return self.transpose.at(j)
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
# Setzt den Wert einer Spalte.
|
25
|
-
# Dabei wird die Matrix2 vorher mit clean4view!(0) behandelt, d.h. sie verändert sich ggf.!
|
26
|
-
#
|
27
|
-
# Tests: TestMatrix2#test_spalten
|
28
|
-
def set_column!(j,wert)
|
29
|
-
clean4view!(0)
|
30
|
-
transpose!
|
31
|
-
wertdup = wert.dup
|
32
|
-
|
33
|
-
self[j] = wert.dup
|
34
|
-
transpose!
|
35
|
-
return wertdup
|
36
|
-
end
|
37
|
-
|
38
|
-
# Wieviele Spalten hat die Tabelle? Maßgeblich dafür ist die Header-Spalte!
|
39
|
-
def column_size
|
40
|
-
self[0].size
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
# Liefert eine bereinigte Kopie der Matrix2.
|
45
|
-
# Level=0:: Resize to Header, d.h. alle Zeilen werden auf die Länge der ersten Zeile angepasst (beschnitten oder mit nil aufgefüllt)
|
46
|
-
# Level=1:: Zeilen ohne Zeilenheader werden gelöscht
|
47
|
-
# Level=2:: Spalten ohne Spaltenheader werden gelöscht
|
48
|
-
#
|
49
|
-
# Test: TestMatrix2#test_resize_to_header
|
50
|
-
#
|
51
|
-
def clean4view(level = 0)
|
52
|
-
|
53
|
-
# Level 0 : Resize to Header, d.h. alle Zeilen werden auf die Länge der ersten Zeile angepasst (beschnitten oder mit nil aufgefüllt)
|
54
|
-
cs = self.column_size
|
55
|
-
new = self.collect { |zeile|
|
56
|
-
zs = zeile.size
|
57
|
-
if zs == cs
|
58
|
-
zeile
|
59
|
-
elsif zs > cs
|
60
|
-
zeile[0, cs]
|
61
|
-
else # zs < cs
|
62
|
-
zeile + Array.new(cs-zs)
|
63
|
-
end }
|
64
|
-
return Matrix2.new(new) if level == 0 # Level 0
|
65
|
-
|
66
|
-
|
67
|
-
#Level 1 : Zeilen ohne Zeilenheader werden gelöscht
|
68
|
-
new.collect! { | zeile | zeile.row_to_nil }
|
69
|
-
new.compact!
|
70
|
-
return Matrix2.new(new) if level == 1 # Level 1
|
71
|
-
|
72
|
-
|
73
|
-
# Level 2 : Spalten ohne Spaltenheader werden gelöscht
|
74
|
-
new.transpose!
|
75
|
-
new.collect! { | spalte | spalte.row_to_nil }
|
76
|
-
new.compact!
|
77
|
-
new.transpose!
|
78
|
-
return Matrix2.new(new) # Level 2
|
79
|
-
end # def clean4view
|
80
|
-
|
81
|
-
|
82
|
-
# In-place-Variante von clean4view.
|
83
|
-
def clean4view!(level = 0)
|
84
|
-
self.replace(self.clean4view(level))
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
end # class Matrix2
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
data/lib/kyanite/hoe.rb
DELETED
data/lib/kyanite/matrix2.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# ruby encoding: utf-8
|
2
|
-
# [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | Object | String | Symbol | *Numeric* |
|
3
|
-
# [ ] | *Numeric* | Integer | Float |
|
4
|
-
#
|
5
|
-
# ---
|
6
|
-
#
|
7
|
-
# == *General* *Numeric*
|
8
|
-
#
|
9
|
-
#
|
10
|
-
class Numeric
|
11
|
-
|
12
|
-
# Zahlen sind schon numerisch:
|
13
|
-
# Rückgabe self
|
14
|
-
def split_numeric
|
15
|
-
self
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
# Zahlen sind nicht empty:
|
20
|
-
# Rückgabe false
|
21
|
-
def empty?
|
22
|
-
false
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
# siehe Array#shift_complement:
|
27
|
-
# Rückgabe nil
|
28
|
-
def shift_complement
|
29
|
-
nil
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
# Wandelt 0 in nil um
|
34
|
-
def to_nil(*args)
|
35
|
-
return nil if self == 0
|
36
|
-
self
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
# nil-sicheres subtrahieren
|
41
|
-
def substract(other)
|
42
|
-
return nil if other.nil?
|
43
|
-
self - other
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end # class
|
49
|
-
|
50
|
-
if defined? TransparentNil
|
51
|
-
class NilClass
|
52
|
-
def substract(other); nil; end
|
53
|
-
end
|
54
|
-
end
|