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.
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