kyanite 0.6.1 → 0.7.0
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/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
|