kyanite 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|