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
@@ -1,17 +1,22 @@
|
|
1
1
|
# ruby encoding: utf-8
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
6
|
+
end
|
7
|
+
|
2
8
|
class String
|
3
9
|
|
4
|
-
#
|
5
|
-
|
6
|
-
#
|
7
|
-
|
10
|
+
# @!group Miscellaneous
|
11
|
+
|
12
|
+
# @private
|
8
13
|
alias :old_include? :include?
|
9
14
|
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
+
# Now also accepts an Array as input parameter.
|
16
|
+
# The array elements are ORed, i.e. +include?+ is true if +old_include?+ is true for at least one element of the array.
|
17
|
+
# All strings include +''+, +[]+ or +nil+.
|
18
|
+
# +Nil+ does not include anything: +nil.include? => false+
|
19
|
+
#
|
15
20
|
def include?(input)
|
16
21
|
return true if input.nil?
|
17
22
|
return true if input.empty?
|
@@ -35,6 +40,8 @@ if defined? TransparentNil
|
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
43
|
+
|
44
|
+
|
38
45
|
# -----------------------------------------------------------------------------------------
|
39
46
|
# ausprobieren
|
40
47
|
#
|
data/lib/kyanite/string/list.rb
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
# ruby encoding: utf-8
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
6
|
+
end
|
7
|
+
|
2
8
|
require 'transparent_nil'
|
3
9
|
require 'kyanite/symbol'
|
4
10
|
|
5
11
|
class String
|
6
12
|
|
7
|
-
|
8
|
-
#
|
9
|
-
# See TestKyaniteStringList for tests and examples.
|
13
|
+
|
14
|
+
# @!group Database-Helper
|
10
15
|
|
11
16
|
|
12
|
-
#
|
17
|
+
# Generates WHERE clause from {Array}.
|
18
|
+
#
|
19
|
+
# Example:
|
20
|
+
# array = ['Anna','Birte','Charlie']
|
21
|
+
# "kisses_from = ".list_with(array)
|
22
|
+
# => "kisses_from = 'Anna' OR kisses_from = 'Birte' OR kisses_from = 'Charlie'"
|
23
|
+
#
|
24
|
+
# See tests and more examples {TestKyaniteStringList here}.
|
25
|
+
# @return [String]
|
13
26
|
def list_with( elemente, options = {}, &block )
|
14
27
|
|
15
28
|
options = { :pre => %q{'},
|
@@ -54,9 +67,9 @@ class String
|
|
54
67
|
|
55
68
|
|
56
69
|
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
70
|
+
# Returns SQL-RegExp for searching in Postgres comma-separated list.
|
71
|
+
# @return [String]
|
72
|
+
#
|
60
73
|
def sql_regexp_for_kommaliste
|
61
74
|
'[, ]' + self + '[, ]' + '|' + # match mittendrin
|
62
75
|
'^' + self + '[, ]' + '|' + # match am Anfang
|
@@ -65,7 +78,8 @@ class String
|
|
65
78
|
end
|
66
79
|
|
67
80
|
|
68
|
-
#
|
81
|
+
# Converts MySQL-Enum to {Array}.
|
82
|
+
# @return [Array]
|
69
83
|
#
|
70
84
|
def enum_to_array
|
71
85
|
self[5..-2].gsub("'",'').split(',').collect {|i| [i,i] }
|
@@ -83,3 +97,19 @@ if defined? TransparentNil
|
|
83
97
|
end
|
84
98
|
end
|
85
99
|
|
100
|
+
|
101
|
+
# -----------------------------------------------------------------------------------------
|
102
|
+
# Ausprobieren
|
103
|
+
#
|
104
|
+
if $0 == __FILE__ then
|
105
|
+
|
106
|
+
require 'kyanite/string/chars'
|
107
|
+
array = ['Anna','Birte','Charlie']
|
108
|
+
puts "kisses_from = ".list_with(array)
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
end
|
115
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# ruby encoding: utf-8
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
# @!macro string
|
12
|
+
class String
|
13
|
+
|
14
|
+
|
15
|
+
# @!group Miscellaneous
|
16
|
+
|
17
|
+
|
18
|
+
# Counts the number of words.
|
19
|
+
# @return [Integer] number of words
|
20
|
+
def count_words
|
21
|
+
n = 0
|
22
|
+
scan(/\b\S+\b/) { n += 1}
|
23
|
+
n
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
# String substitution like +gsub+, but replaces multible patterns in one turn. Example:
|
28
|
+
# "between".mgsub([[/ee/, 'II'], [/e/, 'E']])
|
29
|
+
# => "bEtwIIn"
|
30
|
+
# Tests {TestKyaniteStringMisc here}.
|
31
|
+
# @return [String]
|
32
|
+
def mgsub(search_and_replace_pairs)
|
33
|
+
patterns = search_and_replace_pairs.collect { |search, replace| search }
|
34
|
+
gsub(Regexp.union(*patterns)) do |match|
|
35
|
+
search_and_replace_pairs.detect{ |search, replace| search =~ match}[1]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
if defined? TransparentNil
|
44
|
+
class NilClass
|
45
|
+
|
46
|
+
# @return 0
|
47
|
+
def count_words; 0; end
|
48
|
+
|
49
|
+
def mgsub(*a); nil; end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
# -----------------------------------------------------------------------------------------
|
57
|
+
# ausprobieren
|
58
|
+
#
|
59
|
+
if $0 == __FILE__ then
|
60
|
+
|
61
|
+
puts "between".mgsub([[/ee/, 'II'], [/e/, 'E']])
|
62
|
+
puts "between".mgsub([])
|
63
|
+
|
64
|
+
end # if
|
@@ -1,21 +1,27 @@
|
|
1
1
|
# ruby encoding: utf-8
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
6
|
+
end
|
7
|
+
|
2
8
|
class String
|
3
9
|
|
4
10
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
5
|
-
#
|
11
|
+
# @!group Nested
|
6
12
|
# See TestKyaniteStringNested for tests and examples.
|
7
13
|
#
|
8
14
|
|
9
15
|
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
+
# Returns the matching opposite bracket. Examples:
|
17
|
+
# '('.anti -> ')'
|
18
|
+
# '{'.anti -> '}'
|
19
|
+
# ']'.anti -> '['
|
20
|
+
# '<hallo>'.anti -> '</hallo>'
|
21
|
+
# '</hallo>'.anti -> '<hallo>'
|
16
22
|
#
|
17
|
-
# See
|
18
|
-
#
|
23
|
+
# See tests and examples {TestKyaniteStringNested#test_010_anti here}.
|
24
|
+
# @return [String] opposite bracket
|
19
25
|
def anti
|
20
26
|
if self.size == 1
|
21
27
|
return self.tr('([{<)]}>',')]}>([{<')
|
@@ -31,11 +37,12 @@ class String
|
|
31
37
|
|
32
38
|
|
33
39
|
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
40
|
+
# Returns the positions of the next bracket pair. Example:
|
41
|
+
# 'Hello(welt)wort'.index_bracket -> 5..10
|
42
|
+
# See tests and examples {TestKyaniteStringNested#test_020_index_bracket here}.
|
43
|
+
# @return [Range] Positions of brackets
|
44
|
+
# @param start [Integer] Search from this starting position
|
45
|
+
# @param pattern [RegExp, String] Search only this type of bracket
|
39
46
|
#
|
40
47
|
def index_bracket( pattern=nil, start=0, last_found = nil )
|
41
48
|
return nil if self.empty?
|
@@ -73,10 +80,20 @@ class String
|
|
73
80
|
end
|
74
81
|
|
75
82
|
|
76
|
-
#
|
83
|
+
# Applies the block to a hierarchically defined substring of the string.
|
77
84
|
#
|
78
|
-
# See
|
79
|
-
#
|
85
|
+
# See tests and examples {TestKyaniteStringNested#test_030_mask_ungeklammert here}.
|
86
|
+
# @return [String]
|
87
|
+
# @param options [Hash]
|
88
|
+
# @option options [Integer] :level_start
|
89
|
+
# @option options [Integer] :level_end
|
90
|
+
# @option options [Integer] :level_akt
|
91
|
+
# @option options [RegExp, String] :pattern
|
92
|
+
# @option options [Boolean] :skip_empty
|
93
|
+
# @option options [Boolean] :param_level
|
94
|
+
# @option options [Boolean] :with_brackets
|
95
|
+
# @param block [Block]
|
96
|
+
#
|
80
97
|
def mask( options={}, &block )
|
81
98
|
|
82
99
|
# vorbereiten
|
@@ -189,10 +206,10 @@ class String
|
|
189
206
|
end # def
|
190
207
|
|
191
208
|
|
192
|
-
|
193
|
-
#
|
194
|
-
#
|
195
|
-
#
|
209
|
+
|
210
|
+
# Returns the depth of nesting (number of nesting levels).
|
211
|
+
# @return [Integer] Depth of nesting
|
212
|
+
# @param pattern [RegExp, String] Search only this type of bracket
|
196
213
|
def nestinglevel(pattern=/[{<(\[]/)
|
197
214
|
result = 0
|
198
215
|
self.mask( :level_start => 0,
|
@@ -237,7 +254,7 @@ end
|
|
237
254
|
|
238
255
|
if $0 == __FILE__
|
239
256
|
|
240
|
-
|
257
|
+
|
241
258
|
|
242
259
|
end # if
|
243
260
|
|
@@ -1,66 +1,124 @@
|
|
1
1
|
# ruby encoding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
string_random_basis[:password] = password
|
7
|
-
|
8
|
-
de_hauf = [ [ 'ß', 3 ],
|
9
|
-
[ 'ä', 5 ],
|
10
|
-
[ 'ö', 3 ],
|
11
|
-
[ 'ü', 8 ],
|
12
|
-
[ 'a', 51 ],
|
13
|
-
[ 'b', 19 ],
|
14
|
-
[ 'c', 30 ],
|
15
|
-
[ 'd', 51 ],
|
16
|
-
[ 'e', 174 ],
|
17
|
-
[ 'f', 17 ],
|
18
|
-
[ 'g', 30 ],
|
19
|
-
[ 'h', 48 ],
|
20
|
-
[ 'i', 76 ],
|
21
|
-
[ 'j', 3 ],
|
22
|
-
[ 'k', 12 ],
|
23
|
-
[ 'l', 34 ],
|
24
|
-
[ 'm', 25 ],
|
25
|
-
[ 'n', 98 ],
|
26
|
-
[ 'o', 23 ],
|
27
|
-
[ 'p', 8 ],
|
28
|
-
[ 'q', 1 ],
|
29
|
-
[ 'r', 70 ],
|
30
|
-
[ 's', 72 ],
|
31
|
-
[ 't', 61 ],
|
32
|
-
[ 'u', 40 ],
|
33
|
-
[ 'v', 7 ],
|
34
|
-
[ 'w', 19 ],
|
35
|
-
[ 'x', 1 ],
|
36
|
-
[ 'y', 1 ],
|
37
|
-
[ 'z', 11 ]]
|
38
|
-
de_array = []
|
39
|
-
de_hauf.each do | buchstabe, haufigkeit |
|
40
|
-
de_array += [buchstabe]*haufigkeit
|
41
|
-
end
|
42
|
-
string_random_basis[:de] = de_array
|
43
|
-
STRING_RANDOM_BASIS = string_random_basis
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
44
6
|
end
|
45
7
|
|
8
|
+
|
46
9
|
class String
|
47
10
|
|
11
|
+
unless defined? STRING_RANDOM_BASIS
|
12
|
+
string_random_basis = Hash.new
|
13
|
+
|
14
|
+
password = [('0'..'9'),('A'..'Z'),('a'..'z')].map {|range| range.to_a}.flatten
|
15
|
+
string_random_basis[:password] = password
|
16
|
+
|
17
|
+
de_hauf = [ [ 'ß', 3 ],
|
18
|
+
[ 'ä', 5 ],
|
19
|
+
[ 'ö', 3 ],
|
20
|
+
[ 'ü', 8 ],
|
21
|
+
[ 'a', 51 ],
|
22
|
+
[ 'b', 19 ],
|
23
|
+
[ 'c', 30 ],
|
24
|
+
[ 'd', 51 ],
|
25
|
+
[ 'e', 174 ],
|
26
|
+
[ 'f', 17 ],
|
27
|
+
[ 'g', 30 ],
|
28
|
+
[ 'h', 48 ],
|
29
|
+
[ 'i', 76 ],
|
30
|
+
[ 'j', 3 ],
|
31
|
+
[ 'k', 12 ],
|
32
|
+
[ 'l', 34 ],
|
33
|
+
[ 'm', 25 ],
|
34
|
+
[ 'n', 98 ],
|
35
|
+
[ 'o', 23 ],
|
36
|
+
[ 'p', 8 ],
|
37
|
+
[ 'q', 1 ],
|
38
|
+
[ 'r', 70 ],
|
39
|
+
[ 's', 72 ],
|
40
|
+
[ 't', 61 ],
|
41
|
+
[ 'u', 40 ],
|
42
|
+
[ 'v', 7 ],
|
43
|
+
[ 'w', 19 ],
|
44
|
+
[ 'x', 1 ],
|
45
|
+
[ 'y', 1 ],
|
46
|
+
[ 'z', 11 ]]
|
47
|
+
de_array = []
|
48
|
+
de_hauf.each do | buchstabe, haufigkeit |
|
49
|
+
de_array += [buchstabe]*haufigkeit
|
50
|
+
end
|
51
|
+
string_random_basis[:de] = de_array
|
52
|
+
|
53
|
+
en_hauf = [ [ 'a', 51 ],
|
54
|
+
[ 'b', 19 ],
|
55
|
+
[ 'c', 30 ],
|
56
|
+
[ 'd', 51 ],
|
57
|
+
[ 'e', 174 ],
|
58
|
+
[ 'f', 17 ],
|
59
|
+
[ 'g', 30 ],
|
60
|
+
[ 'h', 48 ],
|
61
|
+
[ 'i', 76 ],
|
62
|
+
[ 'j', 3 ],
|
63
|
+
[ 'k', 12 ],
|
64
|
+
[ 'l', 34 ],
|
65
|
+
[ 'm', 25 ],
|
66
|
+
[ 'n', 98 ],
|
67
|
+
[ 'o', 23 ],
|
68
|
+
[ 'p', 8 ],
|
69
|
+
[ 'q', 1 ],
|
70
|
+
[ 'r', 70 ],
|
71
|
+
[ 's', 72 ],
|
72
|
+
[ 't', 61 ],
|
73
|
+
[ 'u', 40 ],
|
74
|
+
[ 'v', 7 ],
|
75
|
+
[ 'w', 19 ],
|
76
|
+
[ 'x', 1 ],
|
77
|
+
[ 'y', 1 ],
|
78
|
+
[ 'z', 11 ]]
|
79
|
+
en_array = []
|
80
|
+
en_hauf.each do | buchstabe, haufigkeit |
|
81
|
+
en_array += [buchstabe]*haufigkeit
|
82
|
+
end
|
83
|
+
string_random_basis[:en] = en_array
|
84
|
+
|
85
|
+
STRING_RANDOM_BASIS = string_random_basis
|
86
|
+
end
|
87
|
+
|
88
|
+
|
48
89
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
49
|
-
#
|
90
|
+
# @!group Random
|
50
91
|
#
|
51
92
|
|
52
|
-
#
|
93
|
+
# Reorder string in random order. Example:
|
94
|
+
# "Random order".shuffle
|
95
|
+
# => "oeo rdRdnmar"
|
96
|
+
# @return [String]
|
53
97
|
def shuffle(separator=//)
|
54
98
|
split(separator).shuffle.join('')
|
55
99
|
end
|
56
100
|
|
57
|
-
# In-place-
|
101
|
+
# In-place-variant of {#shuffle +shuffle+}.
|
102
|
+
# @return [String]
|
58
103
|
def shuffle!(separator=//)
|
59
104
|
self.replace( shuffle(separator) )
|
60
105
|
end
|
61
106
|
|
62
|
-
|
63
|
-
|
107
|
+
# Generates a random string.
|
108
|
+
# Example:
|
109
|
+
# String.random( :de, 20)
|
110
|
+
# => brräbkpßrdirnenshrnh
|
111
|
+
#
|
112
|
+
# String.random( :en, 20)
|
113
|
+
# => euduwmtenohrtnaeewsc
|
114
|
+
#
|
115
|
+
# String.random( :password, 20)
|
116
|
+
# => PzAAGW2ALsbJRnljI6ho
|
117
|
+
#
|
118
|
+
# @param type [Symbol] Char base with letter frequency of the random string (+:de+, +:en+ or +:password+)
|
119
|
+
# @param size [Integer] Length of the random string
|
120
|
+
# @return [String] Random string
|
121
|
+
def String.random( type=:en, size=16)
|
64
122
|
(0...size).map { STRING_RANDOM_BASIS[type][Kernel.rand(STRING_RANDOM_BASIS[type].size)] }.join
|
65
123
|
end
|
66
124
|
|
@@ -72,3 +130,15 @@ if defined? TransparentNil
|
|
72
130
|
def shuffle!; nil; end
|
73
131
|
end
|
74
132
|
end
|
133
|
+
|
134
|
+
|
135
|
+
# -----------------------------------------------------------------------------------------
|
136
|
+
# Ausprobieren
|
137
|
+
#
|
138
|
+
if $0 == __FILE__ then
|
139
|
+
|
140
|
+
puts String.random( :password, 20)
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
end
|