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.
Files changed (76) hide show
  1. data/0_rake_test.bat +12 -0
  2. data/1_rake_install_gem.bat +20 -0
  3. data/3_rake_deploy.bat +4 -0
  4. data/4_ruby_script_console.bat +12 -0
  5. data/Div +23 -0
  6. data/History.txt +4 -2
  7. data/License.txt +21 -2
  8. data/Manifest.txt +46 -29
  9. data/README.txt +26 -33
  10. data/Rakefile.rb +6 -6
  11. data/config/website.yml +2 -0
  12. data/lib/kyanite.rb +46 -2
  13. data/lib/kyanite/array/array.rb +15 -14
  14. data/lib/kyanite/array/array2.rb +1 -1
  15. data/lib/kyanite/dictionary.rb +17 -2
  16. data/lib/kyanite/enumerable/enumerable_enumerables.rb +19 -9
  17. data/lib/kyanite/enumerable/enumerable_numerics.rb +25 -19
  18. data/lib/kyanite/enumerable/enumerable_strings.rb +14 -6
  19. data/lib/kyanite/enumerable/structure.rb +45 -29
  20. data/lib/kyanite/general/callerutils.rb +9 -1
  21. data/lib/kyanite/general/classutils.rb +59 -78
  22. data/lib/kyanite/general/kernel.rb +21 -3
  23. data/lib/kyanite/general/nil.rb +34 -12
  24. data/lib/kyanite/general/object.rb +25 -3
  25. data/lib/kyanite/general/true_false.rb +28 -10
  26. data/lib/kyanite/general/undoable.rb +24 -0
  27. data/lib/kyanite/hash.rb +43 -28
  28. data/lib/kyanite/numeric/float.rb +12 -5
  29. data/lib/kyanite/numeric/integer.rb +16 -9
  30. data/lib/kyanite/numeric/numeric.rb +19 -11
  31. data/lib/kyanite/operation/regexp.rb +5 -1
  32. data/lib/kyanite/optimizer.rb +31 -16
  33. data/lib/kyanite/range.rb +15 -8
  34. data/lib/kyanite/set.rb +35 -6
  35. data/lib/kyanite/string/cast.rb +18 -7
  36. data/lib/kyanite/string/chars.rb +24 -17
  37. data/lib/kyanite/string/diff.rb +14 -5
  38. data/lib/kyanite/string/div.rb +8 -1
  39. data/lib/kyanite/string/include.rb +13 -5
  40. data/lib/kyanite/string/list.rb +3 -3
  41. data/lib/kyanite/string/mgsub.rb +6 -2
  42. data/lib/kyanite/string/nested.rb +22 -3
  43. data/lib/kyanite/string/random.rb +4 -0
  44. data/lib/kyanite/string/split.rb +15 -7
  45. data/lib/kyanite/symbol.rb +14 -0
  46. data/lib/kyanite/tree.rb +10 -4
  47. data/script/console +10 -0
  48. data/script/console.cmd +1 -0
  49. data/script/destroy +14 -0
  50. data/script/destroy.cmd +1 -0
  51. data/script/generate +14 -0
  52. data/script/generate.cmd +1 -0
  53. data/script/txt2html +82 -0
  54. data/script/txt2html.cmd +1 -0
  55. data/tasks/deployment.rake +92 -0
  56. data/tasks/documentation.rake +28 -0
  57. data/tasks/environment.rake +7 -0
  58. data/test/array/test_matrix2.rb +1 -0
  59. data/test/enumerable/test_enumerable_numerics.rb +3 -2
  60. data/test/general/test_classutils.rb +3 -0
  61. data/test/general/test_nil.rb +1 -0
  62. data/test/general/test_object.rb +2 -1
  63. data/test/general/test_true_false.rb +1 -0
  64. data/test/numeric/test_numeric_integer.rb +2 -0
  65. data/test/string/test_cast.rb +4 -0
  66. data/test/string/test_chars.rb +3 -0
  67. data/test/string/test_diff.rb +3 -0
  68. data/test/string/test_list.rb +2 -0
  69. data/test/string/test_nested.rb +2 -0
  70. data/test/string/test_split.rb +3 -0
  71. data/test/test_dictionary.rb +3 -0
  72. data/test/test_hash.rb +2 -0
  73. data/test/test_optimizer.rb +14 -14
  74. data/test/test_range.rb +1 -0
  75. data/test/test_tree.rb +1 -1
  76. metadata +48 -31
@@ -11,7 +11,18 @@ unless defined? RUBYDIR
11
11
  end
12
12
 
13
13
 
14
- module KyaniteKernel
14
+
15
+
16
+ # [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | *Object* | String | Symbol | Numeric |
17
+ # [ ] | Object | *KKernel* | CallerUtils | Undoable | Class |
18
+ #
19
+ # ---
20
+ #
21
+ #
22
+ # == *General* *Tools*
23
+ #
24
+ #
25
+ module KKernel
15
26
 
16
27
  # Wiederholt einen Block so lange, bis die Zeit abgelaufen ist.
17
28
  # Liefert die Anzahl der Durchläufe, die in dieser Zeit möglich waren.
@@ -37,7 +48,10 @@ module KyaniteKernel
37
48
 
38
49
 
39
50
 
40
- # Quelle: Rails http://api.rubyonrails.org/classes/Kernel.html#M001639
51
+
52
+ # [ ] Stellt für den nachfolgenden Block die Ruby-Warnungen ab.
53
+ # [ ] Nützlich, um z.B. Konstanten zu überschreiben.
54
+ # [ ] Quelle: Rails http://api.rubyonrails.org/classes/Kernel.html#M001639
41
55
  def silence_warnings
42
56
  old_verbose, $VERBOSE = $VERBOSE, nil
43
57
  yield
@@ -46,6 +60,10 @@ module KyaniteKernel
46
60
  end
47
61
 
48
62
 
63
+
64
+ # [ ] Vereinfacht die require-Statements in den Tests.
65
+ # [ ] Wird in allen Kyanite-Tests angewendet, Verwendung siehe dort.
66
+ #
49
67
  def smart_load_path(__file__ = nil)
50
68
  __file__ = caller[0] unless __file__
51
69
  dir_caller =File.dirname(__file__)
@@ -76,7 +94,7 @@ module KyaniteKernel
76
94
  end # class
77
95
 
78
96
  class Object
79
- include KyaniteKernel
97
+ include KKernel
80
98
  end
81
99
 
82
100
 
@@ -1,23 +1,46 @@
1
1
 
2
-
3
- # -----------------------------------------------------------------------------------------
4
- # Nil -- hier nur Ruby Core-Methoden!
2
+ # [ | *Kyanite* | Object | Array | Set | Enumerable | Hash | ] | Kyanite | TrueClass | FalseClass | *NilClass* | Div |
3
+ #
4
+ # ---
5
+ #
6
+ #
7
+ # == *Transparent* *Nil*
8
+ # Nil nervt oft. Zwar ist es ein schöner Fehlerindikator
9
+ # (meist läuft irgendwas schief wenn man es unerwartet mit nil zu tun hat)
10
+ # aber man verunstaltet seinen Quellcode schnell mit Fallunterscheidungen, die den nil-Fall behandeln.
11
+ #
12
+ # [ ] In Kyanite werden daher zahlreiche Methoden für nil definiert.
13
+ # [ ] Nil verhält sich damit wie alle anderen Objekte auch.
14
+ # [ ] Man kann immer noch nach Nil fragen, wenn man es möchte, aber man muss es nicht mehr tun!
5
15
  #
6
-
7
16
  class NilClass
8
-
9
- # Spezielle Rückgaben
10
17
 
18
+ # Rückgabe: Array mit dem einen Element
11
19
  def <<(element); [element]; end
12
- def empty?; true; end
20
+
21
+ # Rückgabe: true
22
+ def empty?; true; end
23
+
24
+ # Rückgabe: 0
13
25
  def length; 0; end
26
+
27
+ # Rückgabe: 0
14
28
  def size; 0; end
29
+
30
+ # Rückgabe: 0
15
31
  def count(*a); 0; end
32
+
33
+ # Rückgabe: leeres Array
16
34
  def split(*a); []; end
35
+
36
+ # Rückgabe: false
17
37
  def =~(other); false; end
18
- def include?(*a); false; end # redundante Definition
19
38
 
20
- # Rückgabe nil
39
+ # Rückgabe: false
40
+ # redundante Definition!
41
+ def include?(*a); false; end
42
+
43
+
21
44
  def -(other); nil; end
22
45
  def +(other); nil; end
23
46
  def <(*a); nil; end
@@ -32,12 +55,10 @@ class NilClass
32
55
  def downcase; nil; end
33
56
  def dup; nil; end
34
57
  def each(*a); nil; end
35
- # def first; nil; end
36
58
  def grep(*a); nil; end
37
59
  def gsub!(*a); nil; end
38
60
  def gsub(*a); nil; end
39
- def join; nil; end
40
- # def last; nil; end
61
+ def join; nil; end
41
62
  def pop(*a); nil; end
42
63
  def push(*a); nil; end
43
64
  def split(*a); nil; end
@@ -51,6 +72,7 @@ class NilClass
51
72
  def uniq; nil; end
52
73
  def [](*a); nil; end
53
74
  def []=(*a); nil; end
75
+
54
76
 
55
77
  end
56
78
 
@@ -3,22 +3,39 @@
3
3
  $KCODE = 'UTF8'
4
4
  require 'active_support'
5
5
 
6
+
7
+ # [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | *Object* | String | Symbol | Numeric |
8
+ # [ ] | *Object* | KKernel | CallerUtils | Undoable | Class |
9
+ #
10
+ # ---
11
+ #
12
+ #
13
+ # == *For* *All* *Objects*
14
+ # [ ] Tests and examples see TestKyaniteObject
15
+ #
16
+ #
6
17
  class Object
7
18
 
8
19
  # <tt> false </tt>
9
20
  #
10
- # Test siehe TestTrueFalse#test_blank.
21
+ # Tests and examples see TestKyaniteObject
22
+ #
11
23
  def blank?
12
24
  false
13
25
  end
14
26
 
27
+
15
28
  # Quelle: Facets http://facets.rubyforge.org/quick/rdoc/core/classes/Kernel.html#M000379
29
+ #
16
30
  def respond(sym, *args)
17
31
  return nil if not respond_to?(sym)
18
32
  send(sym, *args)
19
33
  end
20
34
 
21
35
 
36
+ # Alternative zu Object#dup. Dupliziert auch Unterobjekte. Langsam.
37
+ # Wird z.B. für Undo-Operationen verwendet, siehe Modul Undoable.
38
+ #
22
39
  def deep_copy
23
40
  Marshal.load( Marshal.dump( self ) )
24
41
  end
@@ -26,7 +43,8 @@ class Object
26
43
 
27
44
  # Ist ein Objekt numerisch?
28
45
  #
29
- # Tests & Beispiele siehe TestObject#test_is_numeric
46
+ # Tests and examples see TestKyaniteObject
47
+ #
30
48
  def is_numeric?
31
49
  Float self
32
50
  rescue Exception => e
@@ -73,8 +91,12 @@ end
73
91
 
74
92
  class NilClass
75
93
 
76
- def blank?; false; end
94
+ # Rückgabe: false
95
+ def blank?; false; end
96
+
97
+ # Rückgabe: false
77
98
  def is_numeric?; false; end
99
+
78
100
  def to_nil; nil; end
79
101
  def to_nil_unless(*a); nil; end
80
102
  def name_of_constant(*a); nil; end
@@ -1,21 +1,34 @@
1
1
 
2
-
2
+ # [ | *Kyanite* | Object | Array | Set | Enumerable | Hash | ] | Kyanite | *TrueClass* | FalseClass | NilClass | Div |
3
+ #
4
+ # ---
5
+ #
6
+ # == *True*
7
+ #
8
+ #
3
9
  class TrueClass
4
10
 
5
- # <tt> 1 </tt>
11
+
12
+ # Rückgabe: 1
6
13
  def to_i; 1; end
7
14
 
8
- # <tt> self </tt>
15
+
16
+ # Rückgabe: self
9
17
  def strip; self; end
10
18
 
11
- # <tt> self </tt>
19
+
20
+ # Rückgabe: self
12
21
  def dup; self; end
13
22
 
23
+
24
+ # see TestKyaniteTrueFalse#test_raumschiff_operator for tests
14
25
  def <=>(other)
15
26
  return 1 if ! other
16
27
  return 0
17
28
  end
18
29
 
30
+
31
+ # Rückgabe: false
19
32
  def blank?; false; end
20
33
 
21
34
 
@@ -24,19 +37,24 @@ end # class
24
37
 
25
38
 
26
39
 
27
-
40
+ # [ | *Kyanite* | Object | Array | Set | Enumerable | Hash | ] | Kyanite | TrueClass | *FalseClass* | NilClass | Div |
41
+ #
42
+ # ---
43
+ #
44
+ # == *False*
45
+ #
28
46
  class FalseClass
29
47
 
30
- # <tt> 0 </tt>
48
+ # Rückgabe: 0
31
49
  def to_i; 0; end
32
50
 
33
- # <tt> self </tt>
51
+ # Rückgabe: self
34
52
  def strip; self; end
35
53
 
36
- # <tt> self </tt>
54
+ # Rückgabe: self
37
55
  def dup; self; end
38
56
 
39
- # TestTrueFalse#test_raumschiff_operator
57
+ # see TestKyaniteTrueFalse#test_raumschiff_operator for tests
40
58
  def <=>(other)
41
59
  return -1 if other
42
60
  return 0
@@ -45,7 +63,7 @@ class FalseClass
45
63
 
46
64
  # umdefiniert!
47
65
  #
48
- # TestTrueFalse#test_blank
66
+ # TestKyaniteObject#test_blank
49
67
  def blank?; self; end
50
68
 
51
69
 
@@ -1,21 +1,45 @@
1
1
 
2
+
3
+ # [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | *Object* | String | Symbol | Numeric | Class |
4
+ # [ ] | Object | KKernel | CallerUtils | *Undoable* | Class |
5
+ #
6
+ # ---
7
+ #
8
+ #
9
+ # == *Undo*
10
+ #
11
+ #
2
12
  module Undoable
3
13
 
4
14
  @@undoable_history = Hash.new
5
15
 
16
+ # [ ] Speichert ein Objekt.
17
+ # [ ] Verwendet standardmäßig Object#dup. Für komplexere Objekte muss allerdings Object#deep_copy genutzt werden.
18
+ #
6
19
  def save(method=:dup)
7
20
  return if self == @@undoable_history[self.object_id] # nichts zu tun
8
21
  @@undoable_history[self.object_id] = self.send(method)
9
22
  end
10
23
 
24
+
25
+ # [ ] Rückgriff auf den gespeicherten Zustand eines Objektes.
26
+ # [ ] Der gespeicherte Zustand verbleibt im Speicher.
27
+ #
11
28
  def load_and_keep
12
29
  @@undoable_history[self.object_id]
13
30
  end
14
31
 
32
+
33
+ # [ ] Rückgriff auf den gespeicherten Zustand eines Objektes.
34
+ # [ ] Der gespeicherte Zustand wird verworfen.
35
+ #
15
36
  def load_and_delete
16
37
  @@undoable_history.delete(self.object_id)
17
38
  end
18
39
 
40
+
41
+ # Verwirft alle gepeicherten Objektzustände.
42
+ #
19
43
  def self.clear
20
44
  @@undoable_history.clear
21
45
  end
@@ -7,67 +7,76 @@ class Hash
7
7
  include ActiveSupport::CoreExtensions::Hash::Slice
8
8
  end
9
9
 
10
- #
11
- # Aus {Facets/Hash}[http://facets.rubyforge.org/api/core/classes/Hash.html] eingefügt:
12
- # * *reverse_merge* <tt>(other_hash) </tt> Beispiel: <tt>options.reverse_merge!(:key => default_value)</tt>
10
+
11
+
12
+
13
+ # [ | Kyanite | Object | Array | Set | Enumerable | *Hash* | ] | *Hash* | Dictionary |
14
+ # ---
13
15
  #
14
16
  #
15
- # ==Generelle Anmerkungen zu Hashes
16
- # * Definiert man in irgendeinem Objekt die Methode <tt>==(other)</tt>, so muss man auch die Methode +hash+ neu definieren!
17
- # * Rubys +delete+ und +delete_if+ verändern den Hash! Siehe TestHash#test_delete
17
+ # == *Tools* *For* *Hash*
18
+ # See TestKyaniteHash for tests and examples.
18
19
  #
20
+ # [Generelle Anmerkungen zu Hashes] Definiert man in irgendeinem Objekt die Methode <tt>==(other)</tt>, so muss man auch die Methode +hash+ neu definieren!
21
+ # [ ] Rubys +delete+ und +delete_if+ verändern den Hash! Siehe TestHash#test_delete
22
+ #
23
+ #
24
+ # Aus {Facets/Hash}[http://facets.rubyforge.org/doc/api/core/classes/Hash.html] eingefügt:
25
+ # [ ] *reverse_merge*(other_hash)
26
+ # [ ] Beispiel: <tt>options.reverse_merge!(:key => default_value)</tt>
27
+ #
19
28
  #
20
29
  class Hash
21
30
 
22
31
 
23
32
  if RUBY_VERSION < "1.9"
24
- # Credit: Paul Murur http://mucur.name/posts/when-is-a-set-not-a-set
25
- # Create a hash based on the keys and values.
33
+
34
+ # [ ] Credit: Paul Murur http://mucur.name/posts/when-is-a-set-not-a-set
35
+ # [ ] Create a hash based on the keys and values.
26
36
  def hash
27
37
  keys.hash + values.hash + (default ? default.hash : 0)
28
38
  end
29
39
 
30
- # Credit: Paul Murur http://mucur.name/posts/when-is-a-set-not-a-set
31
- # To determine whether two hashes are the same, compare
32
- # their hashes.
40
+ # [ ] Credit: Paul Murur http://mucur.name/posts/when-is-a-set-not-a-set
41
+ # [ ] To determine whether two hashes are the same, compare their hashes.
33
42
  def eql?(other)
34
43
  hash == other.hash
35
44
  end
45
+
36
46
  end # Ruby Version
37
47
 
38
48
 
39
49
 
40
- # Entfernt alle Key-Value-Paare mit <b>nil-Keys</b> in-place.
41
- #
42
- # Tests: TestHash#test_delete
50
+ # [ ] Entfernt alle Key-Value-Paare mit <b>nil-Keys</b> in-place.
51
+ # [ ] Tests: TestHash#test_delete
43
52
  def compact_keys!
44
53
  delete_if {|key, value| key.nil? }
45
54
  end
46
55
 
47
56
 
48
- # Entfernt alle alle Key-Value-Paare mit <b>nil-Values</b> in-place.
49
- #
50
- # Tests: TestHash#test_compact
57
+ # [ ] Entfernt alle alle Key-Value-Paare mit <b>nil-Values</b> in-place.
58
+ # [ ] Tests: TestHash#test_compact
51
59
  def compact_values!
52
60
  delete_if {|key, value| value.nil? }
53
61
  end
54
62
 
55
63
 
56
- # Entfernt das Key-Value-Paar mit einem bestimmten Key in-place.
57
- # Rückgabe ist der modifizierte Hash (im Gegensatz zur +delete+-Methode, die das entfernte Key-Value-Paar zurückgibt! ).
64
+ # [ ] Entfernt das Key-Value-Paar mit einem bestimmten Key in-place.
65
+ # [ ] Rückgabe ist der modifizierte Hash (im Gegensatz zur +delete+-Methode, die das entfernte Key-Value-Paar zurückgibt! ).
58
66
  def delete_key(key)
59
67
  delete_if { |k,v| k == key }
60
68
  end
61
69
 
62
- # Entfernt alle Key-Value-Paare mit einem bestimmten Value in-place.
70
+ # [ ] Entfernt alle Key-Value-Paare mit einem bestimmten Value in-place.
63
71
  #
64
72
  def delete_value(value)
65
73
  delete_if { |k,v| v == value }
66
74
  end
67
75
 
68
76
 
69
- # erzwingt ein Array der Länge 1, wenn sowohl Einzelwerte als auch Arrays erlaubt sind.
70
- # Beispiel:<tt> inputoptions = options.arrayize(:skip, :debug) </tt>
77
+ # [ ] erzwingt ein Array der Länge 1, wenn sowohl Einzelwerte als auch Arrays erlaubt sind.
78
+ # [ ] Beispiel:
79
+ # inputoptions = options.arrayize(:skip, :debug)
71
80
  #
72
81
  def arrayize(*keys)
73
82
  keys.each do |k|
@@ -80,7 +89,8 @@ class Hash
80
89
  end
81
90
 
82
91
 
83
- # Greift auf den Hash mit nicht-ganz-passenden Schlüsseln zu
92
+ # [ ] Greift auf den Hash mit nicht-ganz-passenden Schlüsseln zu
93
+ #
84
94
  def fuzzyget(key, level = 3)
85
95
  try = self[key]
86
96
  return try if try || level <= 0
@@ -91,8 +101,11 @@ class Hash
91
101
  end
92
102
 
93
103
 
94
- # Liefert die Verteilung der Size / Class / etc. aller Values.
95
- # Die Keys werden ignoriert.
104
+ # [ ] Liefert die Verteilung der size
105
+ # [ ] oder die Verteilung der class
106
+ # [ ] oder die Verteilung eines anderen Merkmals der aufgezählten Elemente.
107
+ # [ ] Siehe auch Enumerable#distribution.
108
+ # [ ] Die Keys des Hash werden ignoriert.
96
109
  #
97
110
  def distribution( mode = :size)
98
111
  verteilung = Hash.new
@@ -108,7 +121,8 @@ class Hash
108
121
  end
109
122
 
110
123
 
111
- # liefert irgendein Value
124
+ # [ ] liefert irgendein Value
125
+ #
112
126
  def first
113
127
  self.each do |key, value|
114
128
  return value
@@ -116,7 +130,8 @@ class Hash
116
130
  end #def
117
131
 
118
132
 
119
- # liefert irgendein anderes Value
133
+ # [ ] liefert irgendein anderes Value
134
+ #
120
135
  def last
121
136
  first = nil
122
137
  self.each do |key, value|
@@ -148,7 +163,7 @@ end
148
163
 
149
164
 
150
165
 
151
- # ---------------------------------------------------------
166
+ # ---------------------------------------------------------
152
167
  # Ausprobieren
153
168
  #
154
169
  if $0 == __FILE__