kyanite 0.7.4 → 0.7.5
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/History.rdoc +3 -0
- data/Manifest.txt +2 -0
- data/README.rdoc +1 -0
- data/Rakefile.rb +2 -2
- data/lib/kyanite/fsymbol.rb +177 -0
- data/lib/kyanite.rb +20 -0
- data/test/_start_all.rb +2 -9
- data/test/test_fsymbol.rb +122 -0
- data/version.rb +1 -1
- metadata +9 -6
data/History.rdoc
CHANGED
data/Manifest.txt
CHANGED
@@ -18,6 +18,7 @@ lib/kyanite/enumerable/enumerable_enumerables.rb
|
|
18
18
|
lib/kyanite/enumerable/enumerable_numerics.rb
|
19
19
|
lib/kyanite/enumerable/enumerable_strings.rb
|
20
20
|
lib/kyanite/enumerable/structure.rb
|
21
|
+
lib/kyanite/fsymbol.rb
|
21
22
|
lib/kyanite/general.rb
|
22
23
|
lib/kyanite/general/callerutils.rb
|
23
24
|
lib/kyanite/general/classutils.rb
|
@@ -64,6 +65,7 @@ test/string/test_misc.rb
|
|
64
65
|
test/string/test_nested.rb
|
65
66
|
test/string/test_split.rb
|
66
67
|
test/test_dictionary.rb
|
68
|
+
test/test_fsymbol.rb
|
67
69
|
test/test_hash.rb
|
68
70
|
test/test_optimizer.rb
|
69
71
|
test/test_range.rb
|
data/README.rdoc
CHANGED
@@ -13,6 +13,7 @@ Welcome to Kyanite. It's a general toolbox like Facets or ActiveSupport.
|
|
13
13
|
[{Hash} {Dictionary} {Tree::TreeNode Tree}] General tools.
|
14
14
|
[{Optimizer}] Find objects with min or max score.
|
15
15
|
[{Undoable}] Save and restore objects. Great for try-and-error-algorithms.
|
16
|
+
[{FSymbol}] A comparable {Symbol} within a hierarchy: A more specific {FSymbol} is larger than a more general {FSymbol}.
|
16
17
|
[{Object} {CallerUtils}] Repeats a block until the time is up. Silence Ruby warnings. Deep copy. Examine the call stack.
|
17
18
|
|
18
19
|
|
data/Rakefile.rb
CHANGED
@@ -22,8 +22,8 @@ $hoe = Hoe.spec Drumherum.project_name do
|
|
22
22
|
|
23
23
|
developer('Bjoern Klippstein', 'klippstein@klippstein.com')
|
24
24
|
summary = 'General toolbox like Facets or ActiveSupport.'
|
25
|
-
extra_deps << ['drumherum', '>= 0.1.
|
26
|
-
extra_deps << ['transparent_nil', '>= 0.1.
|
25
|
+
extra_deps << ['drumherum', '>= 0.1.34']
|
26
|
+
extra_deps << ['transparent_nil', '>= 0.1.20']
|
27
27
|
extra_deps << ['activesupport', '>= 3.2.8']
|
28
28
|
extra_deps << ['facets', '>= 2.9.3']
|
29
29
|
extra_deps << ['rubytree', '>= 0.8.3']
|
@@ -0,0 +1,177 @@
|
|
1
|
+
# ruby encoding: utf-8
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
6
|
+
end
|
7
|
+
require 'kyanite/tree'
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
# @!macro fsymbol
|
13
|
+
class FSymbol
|
14
|
+
|
15
|
+
attr_accessor :value
|
16
|
+
attr_accessor :childs
|
17
|
+
@@instance_cache = {}
|
18
|
+
@@def_tree_cache = nil
|
19
|
+
|
20
|
+
# @private
|
21
|
+
def self.instance_cache
|
22
|
+
@@instance_cache
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
def initialize( value, def_tree=nil)
|
30
|
+
raise ArgumentError, 'Value darf nicht nil sein!' if value.nil?
|
31
|
+
@value = value
|
32
|
+
|
33
|
+
if @@instance_cache[value]
|
34
|
+
@childs = @@instance_cache[value].childs
|
35
|
+
return @@instance_cache[value]
|
36
|
+
end
|
37
|
+
|
38
|
+
if def_tree.nil?
|
39
|
+
def_tree = @@def_tree_cache
|
40
|
+
else
|
41
|
+
@@def_tree_cache = def_tree
|
42
|
+
end
|
43
|
+
tree = def_tree.find(value) || nil
|
44
|
+
raise ArgumentError, "FSymbol konnte nicht erzeugt werden. Value :#{value} nicht im Definitionstree gefunden." if tree.nil?
|
45
|
+
|
46
|
+
@childs = tree.all_child_keys
|
47
|
+
@@instance_cache[value] = self
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def to_s
|
53
|
+
@value.to_s
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def inspect
|
58
|
+
@value.inspect
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def <=>(other)
|
63
|
+
return nil if other.nil?
|
64
|
+
other = other.to_fsymbol unless other.class == FSymbol
|
65
|
+
return 0 if @value == other.value
|
66
|
+
return -1 if @childs.include?(other.value)
|
67
|
+
return 1 if other.childs.include?(@value)
|
68
|
+
return nil
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def ==(other)
|
73
|
+
return nil if other.nil?
|
74
|
+
begin
|
75
|
+
(self <=> other) == 0
|
76
|
+
rescue
|
77
|
+
nil
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def <=(other)
|
83
|
+
return nil if other.nil?
|
84
|
+
begin
|
85
|
+
c = (self <=> other)
|
86
|
+
(c == -1 || c == 0)
|
87
|
+
rescue
|
88
|
+
nil
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def >=(other)
|
94
|
+
return nil if other.nil?
|
95
|
+
begin
|
96
|
+
c = (self <=> other)
|
97
|
+
(c == 1 || c == 0)
|
98
|
+
rescue
|
99
|
+
nil
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
def nil?
|
105
|
+
return true if @value.nil?
|
106
|
+
false
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
# -----------------------------------------------------------------------------------------
|
115
|
+
# Interface für Symbol
|
116
|
+
#
|
117
|
+
class Symbol
|
118
|
+
|
119
|
+
def to_fsymbol(def_tree=nil)
|
120
|
+
FSymbol.new(self, def_tree)
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
# -----------------------------------------------------------------------------------------
|
131
|
+
# Ausprobieren
|
132
|
+
#
|
133
|
+
if $0 == __FILE__ then
|
134
|
+
|
135
|
+
require 'perception'
|
136
|
+
|
137
|
+
unless defined? DEF_TREE
|
138
|
+
# Oberste Ebene
|
139
|
+
ttroot = Tree::TreeNode.new(:root)
|
140
|
+
ttroot << Tree::TreeNode.new(:item)
|
141
|
+
ttroot << Tree::TreeNode.new(:num)
|
142
|
+
ttroot << Tree::TreeNode.new(:site) << Tree::TreeNode.new(:url)
|
143
|
+
ttroot << Tree::TreeNode.new(:sonstiges)
|
144
|
+
|
145
|
+
# :singlechar
|
146
|
+
ttroot << Tree::TreeNode.new(:singlechar)
|
147
|
+
ttroot[:singlechar] << Tree::TreeNode.new(:struktur) << Tree::TreeNode.new(:punkt) << Tree::TreeNode.new(:satzende)
|
148
|
+
ttroot[:singlechar] << Tree::TreeNode.new(:minus)
|
149
|
+
ttroot[:singlechar] << Tree::TreeNode.new(:sonderzeichen)
|
150
|
+
|
151
|
+
# :item
|
152
|
+
ttroot[:item] << (wa_word=Tree::TreeNode.new(:de)) << Tree::TreeNode.new(:name)
|
153
|
+
wa_word << Tree::TreeNode.new(:abbrev)
|
154
|
+
wa_word << Tree::TreeNode.new(:multi)
|
155
|
+
|
156
|
+
|
157
|
+
DEF_TREE = ttroot
|
158
|
+
# see DEF_TREE.print_tree
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
see :item.to_fsymbol(DEF_TREE)
|
163
|
+
see :item.to_fsymbol(DEF_TREE)
|
164
|
+
see :singlechar.to_fsymbol(DEF_TREE)
|
165
|
+
see :singlechar.to_fsymbol(DEF_TREE)
|
166
|
+
see FSymbol.instance_cache
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
|
data/lib/kyanite.rb
CHANGED
@@ -157,12 +157,32 @@
|
|
157
157
|
# [Kyanite tests and examples]
|
158
158
|
# [Usage] +require 'kyanite/general/callerutils'+
|
159
159
|
|
160
|
+
# @!macro [new] fsymbol
|
161
|
+
# === CallerUtils
|
162
|
+
# [Kyanite definitions] {FSymbol}
|
163
|
+
# [Kyanite tests and examples] {TestKyaniteFSymbols}
|
164
|
+
# [Usage] +require 'kyanite/fsymbol'+
|
165
|
+
#
|
166
|
+
# A {FSymbol} ("focusable Symbol") is
|
167
|
+
# a comparable {Symbol} within a hierarchy. You can use it for classifications.
|
168
|
+
# In its values, it is limited to the values,
|
169
|
+
# which are defined in the hierarchy.
|
170
|
+
# FSymbols are comparable with <= >= <=>. A more specific {FSymbol} is larger than a more general {FSymbol}
|
171
|
+
# (because the specific FSymbol contains more information)
|
172
|
+
# E.g. if you define a hierarchy if animal species, you can say:
|
173
|
+
# :insect.to_f_symbol <= :bee.to_f_symbol
|
174
|
+
# FSymbols are equal to Symbols with the same name.
|
175
|
+
#
|
176
|
+
|
177
|
+
|
178
|
+
|
160
179
|
require 'drumherum'
|
161
180
|
|
162
181
|
require 'kyanite/array'
|
163
182
|
# require 'kyanite/basics' # Auswahl
|
164
183
|
require 'kyanite/dictionary'
|
165
184
|
require 'kyanite/enumerable'
|
185
|
+
require 'kyanite/fsymbol'
|
166
186
|
require 'kyanite/general'
|
167
187
|
require 'kyanite/hash'
|
168
188
|
require 'kyanite/numeric'
|
data/test/_start_all.rb
CHANGED
@@ -3,17 +3,10 @@
|
|
3
3
|
# Führt alle Tests aus
|
4
4
|
#
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
smart_init
|
9
|
-
end
|
6
|
+
require 'drumherum'
|
7
|
+
smart_init
|
10
8
|
|
11
|
-
require 'transparent_nil'
|
12
|
-
|
13
|
-
|
14
|
-
# Test-Verzeichnisse der Applikation
|
15
9
|
Dir["#{File.join(Drumherum::directory_main, 'test')}/test_*.rb"].sort.each { |t| require t }
|
16
|
-
|
17
10
|
Dir["#{File.join(Drumherum::directory_main, 'test', 'array' )}/test_*.rb"].sort.each { |t| require t }
|
18
11
|
Dir["#{File.join(Drumherum::directory_main, 'test', 'enumerable' )}/test_*.rb"].sort.each { |t| require t }
|
19
12
|
Dir["#{File.join(Drumherum::directory_main, 'test', 'general' )}/test_*.rb"].sort.each { |t| require t }
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# ruby encoding: utf-8
|
2
|
+
# ü
|
3
|
+
if $0 == __FILE__
|
4
|
+
require 'drumherum'
|
5
|
+
smart_init
|
6
|
+
require 'perception'
|
7
|
+
end
|
8
|
+
require 'drumherum/unit_test'
|
9
|
+
|
10
|
+
require 'kyanite/fsymbol'
|
11
|
+
|
12
|
+
|
13
|
+
# @!macro fsymbol
|
14
|
+
class TestKyaniteFSymbols < UnitTest
|
15
|
+
|
16
|
+
|
17
|
+
def setup
|
18
|
+
|
19
|
+
unless defined? $def_tree
|
20
|
+
# Oberste Ebene
|
21
|
+
ttroot = Tree::TreeNode.new(:root)
|
22
|
+
ttroot << Tree::TreeNode.new(:item)
|
23
|
+
ttroot << Tree::TreeNode.new(:num)
|
24
|
+
ttroot << Tree::TreeNode.new(:site) << Tree::TreeNode.new(:url)
|
25
|
+
ttroot << Tree::TreeNode.new(:sonstiges)
|
26
|
+
|
27
|
+
# :singlechar
|
28
|
+
ttroot << Tree::TreeNode.new(:singlechar)
|
29
|
+
ttroot[:singlechar] << Tree::TreeNode.new(:struktur) << Tree::TreeNode.new(:punkt) << Tree::TreeNode.new(:satzende)
|
30
|
+
ttroot[:singlechar] << Tree::TreeNode.new(:minus)
|
31
|
+
ttroot[:singlechar] << Tree::TreeNode.new(:sonderzeichen)
|
32
|
+
|
33
|
+
# :item
|
34
|
+
ttroot[:item] << (wa_word=Tree::TreeNode.new(:de)) << Tree::TreeNode.new(:name)
|
35
|
+
wa_word << Tree::TreeNode.new(:abbrev)
|
36
|
+
wa_word << Tree::TreeNode.new(:multi)
|
37
|
+
|
38
|
+
|
39
|
+
$def_tree = ttroot
|
40
|
+
#$def_tree.print_tree
|
41
|
+
end
|
42
|
+
|
43
|
+
@tokencodes = [:num, :url, :site, :item, :punkt, :minus, :struktur, :sonderzeichen, :sonstiges, :singlechar, :satzende, :de, :abbrev, :name, :multi]
|
44
|
+
@root = :root.to_fsymbol($def_tree)
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
def test_first
|
50
|
+
a = FSymbol.new(:item)
|
51
|
+
assert_equal 'item', a.to_s
|
52
|
+
assert_equal ':item', a.inspect
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def test_raise
|
57
|
+
assert_raise(ArgumentError) { FSymbol.new(:idfsdgtem) }
|
58
|
+
assert_raise(ArgumentError) { FSymbol.new('item') }
|
59
|
+
assert_raise(ArgumentError) { FSymbol.new(nil) }
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
def test_tokencodes
|
64
|
+
@tokencodes.each do |c|
|
65
|
+
assert_equal c.to_s, FSymbol.new(c).to_s, "FSymbol für Tokencode :#{c} konnte nicht erzeugt werden"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
def test_all_child_keys
|
71
|
+
t = @tokencodes.to_set
|
72
|
+
b = FSymbol.new(:root).childs.to_set
|
73
|
+
diff = ((t-b) + (b-t)).to_a
|
74
|
+
assert_equal t, b, "\n\n\nDifferenz zwischen @tokencodes hier im Test und dem Definitionsbaum. \nUnterschied: #{diff}\n\n\n"
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
def test_root
|
79
|
+
assert_equal 0, @root <=> @root
|
80
|
+
assert_equal 0, @root <=> :root
|
81
|
+
assert @root >= @root
|
82
|
+
assert @root <= @root
|
83
|
+
assert @root >= @root
|
84
|
+
assert @root <= @root
|
85
|
+
@tokencodes.each do |c|
|
86
|
+
cf = c.to_fsymbol
|
87
|
+
assert_equal( -1, (@root <=> c.to_fsymbol ))
|
88
|
+
assert_equal( 1, (cf <=> @root ))
|
89
|
+
assert_equal( -1, (@root <=> cf ))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
def test_specific
|
95
|
+
assert :item.to_fsymbol <= :name.to_fsymbol
|
96
|
+
assert :name.to_fsymbol >= :item.to_fsymbol
|
97
|
+
assert :item.to_fsymbol <= :abbrev.to_fsymbol
|
98
|
+
assert :abbrev.to_fsymbol >= :item.to_fsymbol
|
99
|
+
assert :minus.to_fsymbol >= :singlechar.to_fsymbol
|
100
|
+
assert :singlechar.to_fsymbol <= :minus.to_fsymbol
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
|
data/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kyanite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: drumherum
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.1.
|
21
|
+
version: 0.1.34
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.1.
|
29
|
+
version: 0.1.34
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: transparent_nil
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.1.
|
37
|
+
version: 0.1.20
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.1.
|
45
|
+
version: 0.1.20
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: activesupport
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- lib/kyanite/enumerable/enumerable_numerics.rb
|
203
203
|
- lib/kyanite/enumerable/enumerable_strings.rb
|
204
204
|
- lib/kyanite/enumerable/structure.rb
|
205
|
+
- lib/kyanite/fsymbol.rb
|
205
206
|
- lib/kyanite/general.rb
|
206
207
|
- lib/kyanite/general/callerutils.rb
|
207
208
|
- lib/kyanite/general/classutils.rb
|
@@ -248,6 +249,7 @@ files:
|
|
248
249
|
- test/string/test_nested.rb
|
249
250
|
- test/string/test_split.rb
|
250
251
|
- test/test_dictionary.rb
|
252
|
+
- test/test_fsymbol.rb
|
251
253
|
- test/test_hash.rb
|
252
254
|
- test/test_optimizer.rb
|
253
255
|
- test/test_range.rb
|
@@ -298,6 +300,7 @@ test_files:
|
|
298
300
|
- test/string/test_nested.rb
|
299
301
|
- test/string/test_split.rb
|
300
302
|
- test/test_dictionary.rb
|
303
|
+
- test/test_fsymbol.rb
|
301
304
|
- test/test_hash.rb
|
302
305
|
- test/test_optimizer.rb
|
303
306
|
- test/test_range.rb
|