kyanite 0.3.7 → 0.4.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/0_rake_test.bat +12 -0
- data/1_rake_install_gem.bat +20 -0
- data/3_rake_deploy.bat +4 -0
- data/4_ruby_script_console.bat +12 -0
- data/Div +23 -0
- data/History.txt +4 -2
- data/License.txt +21 -2
- data/Manifest.txt +46 -29
- data/README.txt +26 -33
- data/Rakefile.rb +6 -6
- data/config/website.yml +2 -0
- data/lib/kyanite.rb +46 -2
- data/lib/kyanite/array/array.rb +15 -14
- data/lib/kyanite/array/array2.rb +1 -1
- data/lib/kyanite/dictionary.rb +17 -2
- data/lib/kyanite/enumerable/enumerable_enumerables.rb +19 -9
- data/lib/kyanite/enumerable/enumerable_numerics.rb +25 -19
- data/lib/kyanite/enumerable/enumerable_strings.rb +14 -6
- data/lib/kyanite/enumerable/structure.rb +45 -29
- data/lib/kyanite/general/callerutils.rb +9 -1
- data/lib/kyanite/general/classutils.rb +59 -78
- data/lib/kyanite/general/kernel.rb +21 -3
- data/lib/kyanite/general/nil.rb +34 -12
- data/lib/kyanite/general/object.rb +25 -3
- data/lib/kyanite/general/true_false.rb +28 -10
- data/lib/kyanite/general/undoable.rb +24 -0
- data/lib/kyanite/hash.rb +43 -28
- data/lib/kyanite/numeric/float.rb +12 -5
- data/lib/kyanite/numeric/integer.rb +16 -9
- data/lib/kyanite/numeric/numeric.rb +19 -11
- data/lib/kyanite/operation/regexp.rb +5 -1
- data/lib/kyanite/optimizer.rb +31 -16
- data/lib/kyanite/range.rb +15 -8
- data/lib/kyanite/set.rb +35 -6
- data/lib/kyanite/string/cast.rb +18 -7
- data/lib/kyanite/string/chars.rb +24 -17
- data/lib/kyanite/string/diff.rb +14 -5
- data/lib/kyanite/string/div.rb +8 -1
- data/lib/kyanite/string/include.rb +13 -5
- data/lib/kyanite/string/list.rb +3 -3
- data/lib/kyanite/string/mgsub.rb +6 -2
- data/lib/kyanite/string/nested.rb +22 -3
- data/lib/kyanite/string/random.rb +4 -0
- data/lib/kyanite/string/split.rb +15 -7
- data/lib/kyanite/symbol.rb +14 -0
- data/lib/kyanite/tree.rb +10 -4
- data/script/console +10 -0
- data/script/console.cmd +1 -0
- data/script/destroy +14 -0
- data/script/destroy.cmd +1 -0
- data/script/generate +14 -0
- data/script/generate.cmd +1 -0
- data/script/txt2html +82 -0
- data/script/txt2html.cmd +1 -0
- data/tasks/deployment.rake +92 -0
- data/tasks/documentation.rake +28 -0
- data/tasks/environment.rake +7 -0
- data/test/array/test_matrix2.rb +1 -0
- data/test/enumerable/test_enumerable_numerics.rb +3 -2
- data/test/general/test_classutils.rb +3 -0
- data/test/general/test_nil.rb +1 -0
- data/test/general/test_object.rb +2 -1
- data/test/general/test_true_false.rb +1 -0
- data/test/numeric/test_numeric_integer.rb +2 -0
- data/test/string/test_cast.rb +4 -0
- data/test/string/test_chars.rb +3 -0
- data/test/string/test_diff.rb +3 -0
- data/test/string/test_list.rb +2 -0
- data/test/string/test_nested.rb +2 -0
- data/test/string/test_split.rb +3 -0
- data/test/test_dictionary.rb +3 -0
- data/test/test_hash.rb +2 -0
- data/test/test_optimizer.rb +14 -14
- data/test/test_range.rb +1 -0
- data/test/test_tree.rb +1 -1
- metadata +48 -31
@@ -2,13 +2,20 @@
|
|
2
2
|
Infinity = 1.0/0 unless defined? Infinity
|
3
3
|
Googol = 10**100 unless defined? Googol
|
4
4
|
|
5
|
-
|
5
|
+
# [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | Object | String | Symbol | *Numeric* |
|
6
|
+
# [ ] | Numeric | Integer | *Float* |
|
7
|
+
#
|
8
|
+
# ---
|
9
|
+
#
|
10
|
+
# == *Float*
|
11
|
+
#
|
12
|
+
#
|
6
13
|
class Float
|
7
14
|
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
15
|
+
# 1.9 == 1.8 + 0.1 => false
|
16
|
+
# 1.9.approx(1.8 + 0.1) => true
|
17
|
+
# 98.6.approx(98.66) => false
|
18
|
+
# 98.6.approx(98.66, 0.001) => true
|
12
19
|
# Copyright 2006 O'Reilly Media, Ruby Cookbook, by Lucas Carlson and Leonard Richardson
|
13
20
|
#
|
14
21
|
def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON)
|
@@ -1,4 +1,12 @@
|
|
1
1
|
|
2
|
+
# [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | Object | String | Symbol | *Numeric* |
|
3
|
+
# [ ] | Numeric | *Integer* | Float |
|
4
|
+
#
|
5
|
+
# ---
|
6
|
+
#
|
7
|
+
# == *Trivial* *Integer* *Methods*
|
8
|
+
#
|
9
|
+
#
|
2
10
|
class Integer
|
3
11
|
|
4
12
|
# Wandelt eine Sekundenzahl-seit-1970 in ein Time-Objekt
|
@@ -7,19 +15,18 @@ class Integer
|
|
7
15
|
::Time.at(self) # ohne die Doppelpunkte sucht Ruby die Methode at in ::Time und wirft einen Error
|
8
16
|
end
|
9
17
|
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# Test: TestInteger#test_triviales
|
18
|
+
# [ ] Rückgabe: self
|
19
|
+
# [ ] Test: TestKyaniteNumeric#test_integer_triviales
|
13
20
|
def to_integer; self; end
|
14
21
|
|
15
|
-
|
16
|
-
#
|
17
|
-
# Test:
|
22
|
+
|
23
|
+
# [ ] Rückgabe: self
|
24
|
+
# [ ] Test: TestKyaniteNumeric#test_integer_triviales
|
18
25
|
def to_integer_optional; self; end
|
19
26
|
|
20
|
-
|
21
|
-
#
|
22
|
-
# Test:
|
27
|
+
|
28
|
+
# [ ] Rückgabe: self
|
29
|
+
# [ ] Test: TestKyaniteNumeric#test_integer_triviales
|
23
30
|
def dup; self; end
|
24
31
|
|
25
32
|
end # class
|
@@ -1,35 +1,43 @@
|
|
1
1
|
|
2
|
+
# [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | Object | String | Symbol | *Numeric* |
|
3
|
+
# [ ] | *Numeric* | Integer | Float |
|
4
|
+
#
|
5
|
+
# ---
|
6
|
+
#
|
7
|
+
# == *General* *Numeric*
|
8
|
+
#
|
9
|
+
#
|
2
10
|
class Numeric
|
3
11
|
|
4
|
-
# Zahlen sind schon numerisch:
|
5
|
-
#
|
6
|
-
def split_numeric
|
12
|
+
# [ ] Zahlen sind schon numerisch:
|
13
|
+
# [ ] Rückgabe self
|
14
|
+
def split_numeric
|
7
15
|
self
|
8
16
|
end
|
9
17
|
|
10
18
|
|
11
|
-
# Zahlen sind nicht empty:
|
12
|
-
#
|
13
|
-
def empty?
|
19
|
+
# [ ] Zahlen sind nicht empty:
|
20
|
+
# [ ] Rückgabe false
|
21
|
+
def empty?
|
14
22
|
false
|
15
23
|
end
|
16
24
|
|
17
25
|
|
18
|
-
# siehe
|
19
|
-
#
|
20
|
-
def shift_complement
|
26
|
+
# [ ] siehe Array#shift_complement:
|
27
|
+
# [ ] Rückgabe nil
|
28
|
+
def shift_complement
|
21
29
|
nil
|
22
30
|
end
|
23
31
|
|
24
32
|
|
25
|
-
# Wandelt 0 in nil um
|
33
|
+
# [ ] Wandelt 0 in nil um
|
26
34
|
def to_nil(*args)
|
27
35
|
return nil if self == 0
|
28
36
|
self
|
29
37
|
end
|
30
38
|
|
31
39
|
|
32
|
-
# nil-sicheres subtrahieren
|
40
|
+
# [ ] nil-sicheres subtrahieren
|
33
41
|
def substract(other)
|
34
42
|
return nil if other.nil?
|
35
43
|
self - other
|
@@ -3,7 +3,11 @@
|
|
3
3
|
|
4
4
|
class String
|
5
5
|
|
6
|
-
#
|
6
|
+
# ---------------------------------------------------------------------------------------------------------------------------------
|
7
|
+
# :section: Operation
|
8
|
+
#
|
9
|
+
|
10
|
+
# Zeigt das Ergebnis eines Matches mit einer Regular Expression. Erleichtert das Entwickeln regulärer Ausdrücke.
|
7
11
|
#
|
8
12
|
def show_regexp(re)
|
9
13
|
if self =~ re
|
data/lib/kyanite/optimizer.rb
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
|
2
2
|
require 'perception' if $0 == __FILE__
|
3
|
-
|
3
|
+
|
4
|
+
#
|
5
|
+
# [ | *Kyanite* | Object | Array | Set | Enumerable | Hash | ] | Kyanite | TrueClass | FalseClass | NilClass | *Div* |
|
6
|
+
# [ ] | Div | Tree::TreeNode | *Optimizer* |
|
7
|
+
# ---
|
8
|
+
#
|
9
|
+
# == *Optimizer*
|
10
|
+
# Auswahl von Objekten auf Basis von Scores. See TestKyaniteOptimizer for Tests and examples.
|
11
|
+
#
|
12
|
+
# [] Jedes Objekt wird per +push+ in den Optimizer geschrieben. Dabei wird auch sein Score übergeben.
|
13
|
+
# [] +content_max+ bzw. +content_min+ liefern das Objekt mit dem höchsten / niedrigsten Score.
|
14
|
+
# [] +delete_max+ bzw. +delete_min+ löschen das Objekt mit den höchsten / niedrigsten Score. Dadurch ist auch der Zugriff auf die zweiten und dritten Objekte möglich.
|
15
|
+
#
|
4
16
|
# Drei Stufen für Marshall sind denkbar:
|
5
17
|
# * kein Marshal
|
6
18
|
# * Marshal.load(Marshal.dump) beim Schreiben. Dadurch sind Schreibzugriffe teuer, Lesezugriffe aber billig
|
@@ -16,23 +28,24 @@ class Optimizer < Hash
|
|
16
28
|
# end
|
17
29
|
|
18
30
|
|
19
|
-
|
31
|
+
# Liefert den Wert des höchsten Scores.
|
32
|
+
def score_max
|
20
33
|
return nil if size == 0
|
21
34
|
keys.max
|
22
35
|
end
|
23
36
|
|
24
37
|
|
25
|
-
|
26
|
-
def
|
38
|
+
# Liefert den Wert des niedrigsten Scores.
|
39
|
+
def score_min
|
27
40
|
return nil if size == 0
|
28
41
|
keys.min
|
29
42
|
end
|
30
43
|
|
31
44
|
|
32
|
-
# Liefert den Content mit
|
33
|
-
# content_max(0) erhält man den ersten Content mit
|
34
|
-
# content_max(-1) den letzten Content mit
|
35
|
-
# content_max(0..-1) alle Contents mit
|
45
|
+
# Liefert den Content mit dem höchsten Score. Mit
|
46
|
+
# [] content_max(0) erhält man den ersten Content mit maximalem Score, mit
|
47
|
+
# [] content_max(-1) den letzten Content mit maximalem Score und mit
|
48
|
+
# [] content_max(0..-1) alle Contents mit maximalem Score (dann als Array).
|
36
49
|
#
|
37
50
|
def content_max(range=0..0)
|
38
51
|
return nil if size == 0
|
@@ -49,7 +62,7 @@ class Optimizer < Hash
|
|
49
62
|
end
|
50
63
|
|
51
64
|
|
52
|
-
# siehe content_max
|
65
|
+
# siehe #content_max
|
53
66
|
def content_min(range=0..0)
|
54
67
|
return nil if size == 0
|
55
68
|
range = (range..range) if range.kind_of?(Fixnum)
|
@@ -65,17 +78,17 @@ class Optimizer < Hash
|
|
65
78
|
end
|
66
79
|
|
67
80
|
|
68
|
-
|
69
|
-
def push(
|
70
|
-
if self.has_key?(
|
71
|
-
self[
|
81
|
+
# Beladen des Optimizers mit Objekten.
|
82
|
+
def push( score, content, options={} )
|
83
|
+
if self.has_key?(score)
|
84
|
+
self[score] << Marshal.dump(content)
|
72
85
|
else
|
73
|
-
self[
|
86
|
+
self[score] = [ Marshal.dump(content) ]
|
74
87
|
end
|
75
88
|
end
|
76
89
|
|
77
90
|
|
78
|
-
|
91
|
+
# Löscht alle Objekte in der Mitte.
|
79
92
|
def cleanup
|
80
93
|
return false if size <= 2
|
81
94
|
keys.sort[1..-2].each do | key |
|
@@ -85,13 +98,14 @@ class Optimizer < Hash
|
|
85
98
|
end
|
86
99
|
|
87
100
|
|
101
|
+
# Löscht das Objekt mit dem niedrigsten Score.
|
88
102
|
def delete_min
|
89
103
|
return false if size <= 1
|
90
104
|
self.delete(keys.min)
|
91
105
|
true
|
92
106
|
end
|
93
107
|
|
94
|
-
|
108
|
+
# Löscht das Objekt mit dem höchsten Score.
|
95
109
|
def delete_max
|
96
110
|
return false if size <= 1
|
97
111
|
self.delete(keys.max)
|
@@ -100,6 +114,7 @@ class Optimizer < Hash
|
|
100
114
|
|
101
115
|
|
102
116
|
|
117
|
+
|
103
118
|
|
104
119
|
|
105
120
|
end #class
|
data/lib/kyanite/range.rb
CHANGED
@@ -1,18 +1,25 @@
|
|
1
1
|
|
2
2
|
require 'facets/range/combine'
|
3
3
|
require 'facets/range/within'
|
4
|
-
require 'kyanite/enumerable' # is_collection? ist
|
4
|
+
require 'kyanite/enumerable' # is_collection? ist für Ranges false
|
5
5
|
|
6
|
-
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# *
|
6
|
+
# [ | Kyanite | Object | *Array* | Set | Enumerable | Hash | ] | Array | ArrayOfNumerics | ArrayOfStrings | ArrayOfEnumerables | *Range* |
|
7
|
+
# ---
|
8
|
+
#
|
9
|
+
#
|
10
|
+
# == *Range*
|
11
|
+
#
|
12
|
+
#
|
13
|
+
# Aus {Facets/Range}[http://facets.rubyforge.org/doc/api/core/classes/Range.html] eingefügt:
|
14
|
+
# [ ] umbrella(range)
|
15
|
+
# [ ] within?
|
16
|
+
# [ ] combine(range)
|
17
|
+
#
|
11
18
|
#
|
12
19
|
class Range
|
13
20
|
|
14
21
|
# Invertiert den Range, mit dem ein Ausschnitt eines Strings oder eines Arrays bestimmt wird.
|
15
|
-
# Liefert einen Range, mit dem der inverse Teil des Strings
|
22
|
+
# Liefert einen Range, mit dem der inverse Teil des Strings ausgewählt werden kann.
|
16
23
|
# Beispiele siehe TestKyaniteRange.
|
17
24
|
#
|
18
25
|
def invert_index
|
@@ -28,7 +35,7 @@ class Range
|
|
28
35
|
|
29
36
|
end
|
30
37
|
|
31
|
-
#
|
38
|
+
# äußere Teile ausgeben
|
32
39
|
return [(first..-1).invert_index, (0..last).invert_index]
|
33
40
|
end # def
|
34
41
|
|
data/lib/kyanite/set.rb
CHANGED
@@ -7,9 +7,15 @@ require 'kyanite/symbol' # damit man auch Symbols aufnehmen kann
|
|
7
7
|
require 'kyanite/hash' # Korrektur der Methoden hash und eql?
|
8
8
|
|
9
9
|
|
10
|
-
# Set OrderedSet SortedSet
|
10
|
+
# [ | Kyanite | Object | Array | *Set* | Enumerable | Hash | ] | *Set* | OrderedSet | SortedSet |
|
11
|
+
# ---
|
11
12
|
#
|
12
|
-
#
|
13
|
+
#
|
14
|
+
# == *General* *Set*
|
15
|
+
# [ ] Tests and examples see TestKyaniteSet
|
16
|
+
#
|
17
|
+
#
|
18
|
+
# === Unterschiede der verschiedenen Set-Klassen
|
13
19
|
# * Ein {Set}[http://www.ruby-doc.org/core/classes/Set.html] ist ungeordnet.
|
14
20
|
# Beispiele: TestKyaniteSet#test_set
|
15
21
|
# * Ein OrderedSet ist geordnet, es behält die ursprüngliche Reihenfolge, wird aber nicht kontinuierlich neu sortiert.
|
@@ -59,7 +65,13 @@ class Set
|
|
59
65
|
end
|
60
66
|
|
61
67
|
|
62
|
-
# Set OrderedSet SortedSet
|
68
|
+
# [ | Kyanite | Object | Array | *Set* | Enumerable | Hash | ] | Set | *OrderedSet* | SortedSet |
|
69
|
+
# ---
|
70
|
+
#
|
71
|
+
#
|
72
|
+
# == *Ordered* *Set*
|
73
|
+
# [ ] Tests and examples see TestKyaniteSet
|
74
|
+
#
|
63
75
|
#
|
64
76
|
# Ein OrderedSet ist geordnet, es behält die ursprüngliche Reihenfolge, wird aber nicht kontinuierlich neu sortiert.
|
65
77
|
# Es sei denn, man sorgt dafür mit Dictionary#order_by
|
@@ -127,7 +139,13 @@ class OrderedSet < Set
|
|
127
139
|
end # class
|
128
140
|
|
129
141
|
|
130
|
-
# Set OrderedSet SortedSet
|
142
|
+
# [ | Kyanite | Object | | Array | *Set* | Enumerable | Hash ] | Set | OrderedSet | *SortedSet* |
|
143
|
+
# ---
|
144
|
+
#
|
145
|
+
#
|
146
|
+
# == *Sorted* *Set*
|
147
|
+
# [ ] Tests and examples see TestKyaniteSet
|
148
|
+
#
|
131
149
|
#
|
132
150
|
# Ein {SortedSet}[http://www.ruby-doc.org/core/classes/SortedSet.html] ist geordnet und sortiert. Es behält immer die Sortierung.
|
133
151
|
# Beispiele: TestKyaniteSet#test_sorted_set
|
@@ -186,14 +204,25 @@ end # class
|
|
186
204
|
|
187
205
|
|
188
206
|
class NilClass
|
189
|
-
|
190
|
-
|
207
|
+
|
208
|
+
# Rückgabe: Leeres Set
|
209
|
+
def to_set; Set.new; end
|
210
|
+
|
211
|
+
# Rückgabe: Leeres SortedSet
|
212
|
+
def to_sorted_set; SortedSet.new; end
|
213
|
+
|
214
|
+
# Rückgabe: Leeres OrderedSet
|
191
215
|
def to_ordered_set; OrderedSet.new; end
|
192
216
|
end
|
193
217
|
|
194
218
|
|
219
|
+
|
195
220
|
class Object
|
221
|
+
|
222
|
+
# Liefert ein Set mit einem Element
|
223
|
+
#
|
196
224
|
def to_set; Set.new([self]); end
|
225
|
+
|
197
226
|
end
|
198
227
|
|
199
228
|
|
data/lib/kyanite/string/cast.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
1
|
|
2
2
|
require 'kyanite/numeric/integer'
|
3
3
|
|
4
|
-
|
4
|
+
# [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | Object | *String* | Symbol | Numeric |
|
5
|
+
#
|
6
|
+
# ---
|
7
|
+
#
|
8
|
+
# == *String*
|
9
|
+
#
|
10
|
+
#
|
5
11
|
class String
|
6
12
|
|
7
13
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
8
|
-
# :section:
|
9
|
-
#
|
14
|
+
# :section: Cast
|
15
|
+
# See TestKyaniteStringCast for tests and examples.
|
16
|
+
#
|
10
17
|
|
11
18
|
|
12
19
|
|
13
20
|
# Wandelt einen String in den plausibelsten Identifier um:
|
14
21
|
# self.strip.to_integer_optional
|
15
22
|
#
|
16
|
-
# Tests & Beispiele siehe
|
23
|
+
# Tests & Beispiele siehe TestKyaniteStringCast#test_to_identifier
|
17
24
|
def to_identifier
|
18
25
|
self.strip.to_integer_optional
|
19
26
|
end
|
@@ -22,7 +29,7 @@ class String
|
|
22
29
|
# Wandelt einen String in einen Integer, auch dann, wenn die Zahl hinten angehängt wurde.
|
23
30
|
# Im Gegensatz zu to_i wird nil zurückgegeben, wenn keine Zahl drin war.
|
24
31
|
#
|
25
|
-
# Beispiele & Tests siehe
|
32
|
+
# Beispiele & Tests siehe TestKyaniteStringCast#test_to_integer
|
26
33
|
def to_integer
|
27
34
|
return nil unless self =~ /\d/
|
28
35
|
firsttry = self.to_i
|
@@ -35,7 +42,7 @@ class String
|
|
35
42
|
# Im Gegensatz zu to_i wird self zurückgegeben, wenn der String nicht mit einer Zahl beginnt.
|
36
43
|
# Leere Strings werden in NIL umgewandelt.
|
37
44
|
#
|
38
|
-
# Beispiele & Tests siehe
|
45
|
+
# Beispiele & Tests siehe TestKyaniteStringCast#test_to_integer_optional
|
39
46
|
def to_integer_optional
|
40
47
|
return nil if self.empty?
|
41
48
|
return self unless (self =~ /^\d/ || self =~ /^-\d/ )
|
@@ -55,6 +62,9 @@ class String
|
|
55
62
|
HEX_CHARS = '0123456789abcdef'.freeze
|
56
63
|
end
|
57
64
|
|
65
|
+
|
66
|
+
# Get a hex representation for a char.
|
67
|
+
# [ ] See also String#from_x.
|
58
68
|
def to_x
|
59
69
|
hex = ''
|
60
70
|
each_byte { |byte|
|
@@ -66,7 +76,8 @@ class String
|
|
66
76
|
hex
|
67
77
|
end
|
68
78
|
|
69
|
-
|
79
|
+
# [ ] Get a char for a hex representation.
|
80
|
+
# [ ] See also String#to_x.
|
70
81
|
def from_x
|
71
82
|
str, q, first = '', 0, false
|
72
83
|
each_byte { |byte|
|
data/lib/kyanite/string/chars.rb
CHANGED
@@ -32,39 +32,42 @@ end
|
|
32
32
|
class String
|
33
33
|
|
34
34
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
35
|
-
# :section:
|
36
|
-
#
|
35
|
+
# :section: Clear / Format Text
|
36
|
+
# See TestKyaniteStringChars for tests and examples.
|
37
37
|
|
38
38
|
# Reduziert den String auf ein Base94-Encoding.
|
39
39
|
# * Wandelt àáâăäãāåạąæảấầắằÀÁÂĂÄÃĀÅẠĄÆẢẤẦẮẰ usw. in aaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAA usw. um
|
40
40
|
# * entfernt anschließend alle Nicht-Asciizeichen
|
41
41
|
# * entfernt außerdem alle nichtdruckbaren Asciizeichen
|
42
42
|
# * Vorsicht: Newlines werden auch entfernt
|
43
|
-
#
|
43
|
+
#
|
44
|
+
# See TestKyaniteStringChars for tests and examples.
|
44
45
|
#
|
45
|
-
# Tests & Beispiele siehe TestKyaniteStringClear
|
46
46
|
def reduce94( options={} )
|
47
47
|
dup.reduce94!
|
48
48
|
end
|
49
49
|
|
50
|
+
# See TestKyaniteStringChars for tests and examples.
|
51
|
+
#
|
50
52
|
def reduce94!( options={} )
|
51
53
|
self.tr!(TR_FULL, TR_REDUCED)
|
52
54
|
self.delete!('^ -~')
|
53
55
|
self
|
54
56
|
end
|
55
57
|
|
56
|
-
# Reduziert den String auf ein Base53-Encoding,
|
57
|
-
# bestehend aus Großbuchstaben, Minuszeichen und zu Kleinbuchstaben umgeformten Sonderzeichen.
|
58
|
-
# Alle reduzierten Zeichen sind aber *klein*, streng genommen handelt es sich also um ein Base52-Encoding.
|
59
|
-
# Wandelt z.B. àáâăäãāåạąæảấầắằÀÁÂĂÄÃĀÅẠĄÆẢẤẦẮẰ usw. in aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa usw. um.
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
58
|
+
# [ ] Reduziert den String auf ein Base53-Encoding,
|
59
|
+
# [ ] bestehend aus Großbuchstaben, Minuszeichen und zu Kleinbuchstaben umgeformten Sonderzeichen.
|
60
|
+
# [ ] Alle reduzierten Zeichen sind aber *klein*, streng genommen handelt es sich also um ein Base52-Encoding.
|
61
|
+
# [ ] Wandelt z.B. àáâăäãāåạąæảấầắằÀÁÂĂÄÃĀÅẠĄÆẢẤẦẮẰ usw. in aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa usw. um.
|
62
|
+
#
|
63
|
+
# [ ] See TestKyaniteStringChars for tests and examples.
|
64
|
+
#
|
63
65
|
def reduce53( options={} )
|
64
66
|
dup.reduce53!(options)
|
65
67
|
end
|
66
68
|
|
67
|
-
|
69
|
+
# See TestKyaniteStringChars for tests and examples.
|
70
|
+
#
|
68
71
|
def reduce53!( options={} )
|
69
72
|
if options[:camelcase]
|
70
73
|
self.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1-\2')
|
@@ -90,7 +93,8 @@ class String
|
|
90
93
|
|
91
94
|
# Formt einen String so um, dass man auch mit utf8_general_ci verglichene Strings wiedererkennen kann
|
92
95
|
#
|
93
|
-
#
|
96
|
+
# See TestKyaniteStringChars for tests and examples.
|
97
|
+
#
|
94
98
|
def mysqlize
|
95
99
|
self.mb_chars.tidy_bytes.mgsub(MYSQL_REPLACES).downcase.to_s
|
96
100
|
end
|
@@ -99,7 +103,7 @@ class String
|
|
99
103
|
|
100
104
|
# macht die nötigen Korrekturen für EmailAddress und Domain.
|
101
105
|
#
|
102
|
-
# Tests & Beispiele siehe
|
106
|
+
# Tests & Beispiele siehe TestKyaniteStringChars
|
103
107
|
# def strip_downcase_iconv
|
104
108
|
#to #from
|
105
109
|
# Iconv.new('iso-8859-1','utf-8').iconv(self.strip.downcase2)
|
@@ -111,7 +115,8 @@ class String
|
|
111
115
|
|
112
116
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
113
117
|
# :section: Groß- und Kleinschreibung
|
114
|
-
#
|
118
|
+
# See TestKyaniteStringChars for tests and examples.
|
119
|
+
#
|
115
120
|
|
116
121
|
# Ein Überschreiben von downcase führt in Kombination mit ActiveSupport zu seltsamen Ergebnissen!
|
117
122
|
def downcase2
|
@@ -153,15 +158,17 @@ end
|
|
153
158
|
|
154
159
|
|
155
160
|
class NilClass
|
161
|
+
|
162
|
+
# Rückgabe: false
|
163
|
+
def capitalized?; false; end
|
164
|
+
|
156
165
|
def reduce94; nil; end
|
157
166
|
def reduce94!; nil; end
|
158
167
|
def reduce53; nil; end
|
159
168
|
def reduce53!; nil; end
|
160
|
-
def capitalized?; false; end
|
161
169
|
def downcase2; nil; end
|
162
170
|
def downcase2!; nil; end
|
163
171
|
def mysqlize; nil; end
|
164
|
-
# def strip_downcase_iconv; nil; end
|
165
172
|
def upcase2; nil; end
|
166
173
|
def upcase2!; nil; end
|
167
174
|
end
|