kyanite 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/Div +6 -32
  2. data/{History.txt → History.rdoc} +8 -0
  3. data/{License.txt → License.rdoc} +0 -0
  4. data/Manifest.txt +6 -21
  5. data/README.rdoc +44 -0
  6. data/Rakefile.rb +19 -68
  7. data/console.rb +2 -4
  8. data/lib/kyanite.rb +151 -14
  9. data/lib/kyanite/array.rb +127 -4
  10. data/lib/kyanite/basics.rb +3 -7
  11. data/lib/kyanite/dictionary.rb +19 -21
  12. data/lib/kyanite/enumerable/enumerable_enumerables.rb +22 -24
  13. data/lib/kyanite/enumerable/enumerable_numerics.rb +51 -49
  14. data/lib/kyanite/enumerable/enumerable_strings.rb +18 -25
  15. data/lib/kyanite/enumerable/structure.rb +46 -58
  16. data/lib/kyanite/general/callerutils.rb +30 -28
  17. data/lib/kyanite/general/classutils.rb +73 -63
  18. data/lib/kyanite/general/kernel.rb +45 -64
  19. data/lib/kyanite/general/object.rb +22 -46
  20. data/lib/kyanite/general/true_false.rb +33 -27
  21. data/lib/kyanite/general/undoable.rb +12 -16
  22. data/lib/kyanite/hash.rb +63 -58
  23. data/lib/kyanite/numeric.rb +14 -1
  24. data/lib/kyanite/numeric/float.rb +32 -22
  25. data/lib/kyanite/numeric/integer.rb +12 -20
  26. data/lib/kyanite/optimizer.rb +41 -24
  27. data/lib/kyanite/range.rb +42 -22
  28. data/lib/kyanite/set.rb +56 -63
  29. data/lib/kyanite/string.rb +1 -2
  30. data/lib/kyanite/string/cast.rb +61 -37
  31. data/lib/kyanite/string/chars.rb +66 -36
  32. data/lib/kyanite/string/chars_const.rb +4 -3
  33. data/lib/kyanite/string/diff.rb +64 -34
  34. data/lib/kyanite/string/include.rb +16 -9
  35. data/lib/kyanite/string/list.rb +38 -8
  36. data/lib/kyanite/string/misc.rb +64 -0
  37. data/lib/kyanite/string/nested.rb +39 -22
  38. data/lib/kyanite/string/random.rb +117 -47
  39. data/lib/kyanite/string/split.rb +84 -45
  40. data/lib/kyanite/symbol.rb +30 -21
  41. data/lib/kyanite/tree.rb +33 -28
  42. data/test/_start_all.rb +18 -15
  43. data/test/array/test_array.rb +5 -7
  44. data/test/enumerable/test_enumerable_enumerables.rb +11 -15
  45. data/test/enumerable/test_enumerable_numerics.rb +50 -54
  46. data/test/enumerable/test_enumerable_strings.rb +8 -11
  47. data/test/enumerable/test_structure.rb +6 -8
  48. data/test/general/test_classutils.rb +9 -9
  49. data/test/general/test_object.rb +4 -5
  50. data/test/general/test_true_false.rb +4 -5
  51. data/test/numeric/test_numeric_integer.rb +6 -6
  52. data/test/string/test_cast.rb +4 -5
  53. data/test/string/test_chars.rb +6 -7
  54. data/test/string/test_diff.rb +4 -5
  55. data/test/string/test_list.rb +4 -5
  56. data/test/string/test_misc.rb +58 -0
  57. data/test/string/test_nested.rb +4 -5
  58. data/test/string/test_split.rb +10 -5
  59. data/test/test_dictionary.rb +4 -6
  60. data/test/test_hash.rb +5 -7
  61. data/test/test_optimizer.rb +4 -5
  62. data/test/test_range.rb +8 -9
  63. data/test/test_set.rb +7 -7
  64. data/test/test_tree.rb +7 -10
  65. data/version.rb +8 -0
  66. metadata +32 -33
  67. data/README.txt +0 -47
  68. data/lib/kyanite/array/array.rb +0 -140
  69. data/lib/kyanite/array/array2.rb +0 -142
  70. data/lib/kyanite/array/matrix2.rb +0 -120
  71. data/lib/kyanite/hoe.rb +0 -2
  72. data/lib/kyanite/matrix2.rb +0 -2
  73. data/lib/kyanite/numeric/numeric.rb +0 -54
  74. data/lib/kyanite/operation.rb +0 -5
  75. data/lib/kyanite/operation/call_tracker.rb +0 -69
  76. data/lib/kyanite/operation/hoe.rb +0 -12
  77. data/lib/kyanite/operation/rake.rb +0 -298
  78. data/lib/kyanite/operation/regexp.rb +0 -28
  79. data/lib/kyanite/operation/unit_test.rb +0 -50
  80. data/lib/kyanite/rake.rb +0 -2
  81. data/lib/kyanite/smart_load_path.rb +0 -6
  82. data/lib/kyanite/string/div.rb +0 -28
  83. data/lib/kyanite/string/mgsub.rb +0 -43
  84. data/lib/kyanite/unit_test.rb +0 -2
  85. data/test/array/test_matrix2.rb +0 -166
  86. data/test/string/test_mgsub.rb +0 -58
@@ -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
-
@@ -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
@@ -1,2 +0,0 @@
1
- # ruby encoding: utf-8
2
- require 'kyanite/operation/hoe'
@@ -1,2 +0,0 @@
1
- # ruby encoding: utf-8
2
- require 'kyanite/array/matrix2'
@@ -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