hashery 1.5.0 → 2.0.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 (70) hide show
  1. data/.ruby +30 -17
  2. data/.yardopts +1 -0
  3. data/Config.rb +28 -0
  4. data/{QED.rdoc → DEMO.rdoc} +0 -0
  5. data/HISTORY.rdoc +37 -0
  6. data/LICENSE.txt +26 -0
  7. data/NOTICE.txt +46 -0
  8. data/README.rdoc +10 -7
  9. data/lib/hashery.rb +6 -6
  10. data/lib/hashery.yml +30 -17
  11. data/lib/hashery/association.rb +169 -109
  12. data/lib/hashery/casting_hash.rb +128 -135
  13. data/lib/hashery/core_ext.rb +89 -61
  14. data/lib/hashery/crud_hash.rb +365 -0
  15. data/lib/hashery/dictionary.rb +545 -345
  16. data/lib/hashery/fuzzy_hash.rb +177 -125
  17. data/lib/hashery/ini_hash.rb +321 -0
  18. data/lib/hashery/key_hash.rb +54 -179
  19. data/lib/hashery/linked_list.rb +245 -191
  20. data/lib/hashery/lru_hash.rb +292 -202
  21. data/lib/hashery/open_cascade.rb +133 -78
  22. data/lib/hashery/open_hash.rb +127 -61
  23. data/lib/hashery/ordered_hash.rb +128 -122
  24. data/lib/hashery/path_hash.rb +238 -0
  25. data/lib/hashery/property_hash.rb +144 -80
  26. data/lib/hashery/query_hash.rb +85 -29
  27. data/lib/hashery/stash.rb +7 -3
  28. data/lib/hashery/static_hash.rb +46 -41
  29. data/test/case_association.rb +65 -4
  30. data/test/case_dictionary.rb +149 -5
  31. data/test/{case_keyhash.rb → case_key_hash.rb} +20 -14
  32. data/test/case_lru_hash.rb +162 -0
  33. data/test/{case_opencascade.rb → case_open_cascade.rb} +4 -8
  34. data/test/case_open_hash.rb +87 -0
  35. data/test/case_query_hash.rb +226 -0
  36. data/test/helper.rb +8 -0
  37. metadata +33 -63
  38. data/COPYING.rdoc +0 -45
  39. data/lib/hashery/basic_object.rb +0 -74
  40. data/lib/hashery/basic_struct.rb +0 -288
  41. data/lib/hashery/basicobject.rb +0 -1
  42. data/lib/hashery/basicstruct.rb +0 -1
  43. data/lib/hashery/castinghash.rb +0 -1
  44. data/lib/hashery/fuzzyhash.rb +0 -1
  45. data/lib/hashery/ini.rb +0 -268
  46. data/lib/hashery/keyhash.rb +0 -1
  47. data/lib/hashery/linkedlist.rb +0 -1
  48. data/lib/hashery/lruhash.rb +0 -1
  49. data/lib/hashery/memoizer.rb +0 -64
  50. data/lib/hashery/open_object.rb +0 -1
  51. data/lib/hashery/opencascade.rb +0 -1
  52. data/lib/hashery/openhash.rb +0 -1
  53. data/lib/hashery/openobject.rb +0 -1
  54. data/lib/hashery/orderedhash.rb +0 -1
  55. data/lib/hashery/ostructable.rb +0 -186
  56. data/lib/hashery/propertyhash.rb +0 -1
  57. data/lib/hashery/queryhash.rb +0 -1
  58. data/lib/hashery/statichash.rb +0 -1
  59. data/qed/01_openhash.rdoc +0 -57
  60. data/qed/02_queryhash.rdoc +0 -21
  61. data/qed/03_castinghash.rdoc +0 -13
  62. data/qed/04_statichash.rdoc +0 -22
  63. data/qed/05_association.rdoc +0 -59
  64. data/qed/06_opencascade.rdoc +0 -58
  65. data/qed/07_fuzzyhash.rdoc +0 -141
  66. data/qed/08_properyhash.rdoc +0 -38
  67. data/qed/09_ostructable.rdoc +0 -56
  68. data/qed/applique/ae.rb +0 -1
  69. data/test/case_basicstruct.rb +0 -192
  70. data/test/case_openhash.rb +0 -22
@@ -1,15 +1,17 @@
1
- require 'lemon'
2
- require 'ae'
3
- require 'ae/pry'
4
-
5
- require 'hashery/key_hash'
1
+ require 'helper'
6
2
 
7
3
  testcase KeyHash do
8
4
 
9
5
  class_method :[] do
10
- test 'class level fetch' do
6
+ test 'creates new KeyHash' do
7
+ s = KeyHash[]
8
+ KeyHash.assert === s
9
+ end
10
+
11
+ test 'pre-assigns values' do
11
12
  s = KeyHash[:a=>1, :b=>2]
12
- assert(s)
13
+ s[:a].assert == 1
14
+ s[:b].assert == 2
13
15
  end
14
16
  end
15
17
 
@@ -18,6 +20,10 @@ testcase KeyHash do
18
20
  s = KeyHash[:a=>1, :b=>2]
19
21
  s[:a].assert == 1
20
22
  s[:b].assert == 2
23
+ end
24
+
25
+ test 'by default keys are converted to strings' do
26
+ s = KeyHash[:a=>1, :b=>2]
21
27
  s['a'].assert == 1
22
28
  s['b'].assert == 2
23
29
  end
@@ -97,7 +103,7 @@ testcase KeyHash do
97
103
  s1.to_h.assert == {'a'=>1,'b'=>2,'c'=>3,'d'=>4}
98
104
  end
99
105
  end
100
- require 'ae'
106
+
101
107
  method :rekey do
102
108
  test do
103
109
  s = KeyHash[:a=>1,:b=>2,:c=>3]
@@ -164,12 +170,12 @@ require 'ae'
164
170
  end
165
171
  end
166
172
 
167
- method :convert_key do
168
- test do
169
- s = KeyHash.new
170
- s.pry.convert_key(:a).assert == 'a'
171
- end
172
- end
173
+ #method :cast_key do
174
+ # test do
175
+ # s = KeyHash.new
176
+ # s.send(:cast_key, :a).assert == 'a'
177
+ # end
178
+ #end
173
179
 
174
180
  end
175
181
 
@@ -0,0 +1,162 @@
1
+ require 'helper'
2
+
3
+ test_case LRUHash do
4
+
5
+ class_method :new do
6
+ h = LRUHash.new(10)
7
+ LRUHash.assert === h
8
+ end
9
+
10
+ method :max_size= do
11
+ test do
12
+ h = LRUHash.new(10)
13
+ h.max_size = 100
14
+ end
15
+ end
16
+
17
+ method :store do
18
+ test do
19
+ h = LRUHash.new(10)
20
+ h.store(:a, 1)
21
+ h[:a].assert == 1
22
+ end
23
+ end
24
+
25
+ method :[] do
26
+ test do
27
+ h = LRUHash.new(10)
28
+ h.store(:a, 1)
29
+ h[:a].assert == 1
30
+ end
31
+
32
+ test do
33
+ h = LRUHash.new(10){ |h,k| h[k] = 0 }
34
+ h[:a].assert == 0
35
+ end
36
+ end
37
+
38
+ method :empty? do
39
+ test do
40
+ h = LRUHash.new(10)
41
+ h.assert.empty?
42
+ end
43
+ end
44
+
45
+ method :key do
46
+ test do
47
+ h = LRUHash.new(10)
48
+ h[:a] = 1
49
+ h.key(1).assert == :a
50
+ end
51
+ end
52
+
53
+ method :keys do
54
+ test do
55
+ h = LRUHash.new(10)
56
+ h[:a] = 1
57
+ h.keys.assert == [:a]
58
+ end
59
+ end
60
+
61
+ method :values do
62
+ test do
63
+ h = LRUHash.new(10)
64
+ h[:a] = 1
65
+ h.values.assert == [1]
66
+ end
67
+ end
68
+
69
+ method :values_at do
70
+ test do
71
+ h = LRUHash.new(10)
72
+ h[:a] = 1
73
+ h[:b] = 2
74
+ h.values_at(:a).assert == [1]
75
+ end
76
+ end
77
+
78
+ method :has_key? do
79
+ test do
80
+ h = LRUHash.new(10)
81
+ h[:a] = 1
82
+ h.assert.has_key?(:a)
83
+ end
84
+ end
85
+
86
+ method :has_value? do
87
+ test do
88
+ h = LRUHash.new(10)
89
+ h[:a] = 1
90
+ h.assert.has_value?(1)
91
+ end
92
+ end
93
+
94
+ method :assoc do
95
+ test do
96
+ h = LRUHash.new(10)
97
+ h[:a] = 1
98
+ h[:b] = 2
99
+ h.assoc(:a).assert == [:a,1]
100
+ end
101
+ end
102
+
103
+ method :rassoc do
104
+ test do
105
+ h = LRUHash.new(10)
106
+ h[:a] = 1
107
+ h[:b] = 2
108
+ h.rassoc(1).assert == [:a,1]
109
+ end
110
+ end
111
+
112
+ method :each_key do
113
+ test do
114
+ h = LRUHash.new(10)
115
+ h[:a] = 1
116
+ h[:b] = 2
117
+ h.each_key do |k|
118
+ [:a,:b].assert.include?(k)
119
+ end
120
+ end
121
+ end
122
+
123
+ method :each_value do
124
+ test do
125
+ h = LRUHash.new(10)
126
+ h[:a] = 1
127
+ h[:b] = 2
128
+ h.each_value do |v|
129
+ [1,2].assert.include?(v)
130
+ end
131
+ end
132
+ end
133
+
134
+ method :clear do
135
+ test do
136
+ h = LRUHash.new(10)
137
+ h[:a] = 1
138
+ h[:b] = 2
139
+ h.clear
140
+ h.assert.empty?
141
+ end
142
+ end
143
+
144
+ method :delete do
145
+ test do
146
+ h = LRUHash.new(10)
147
+ h[:a] = 1
148
+ h.delete(:a)
149
+ h.assert.empty?
150
+ end
151
+ end
152
+
153
+ method :delete_if do
154
+ test do
155
+ h = LRUHash.new(10)
156
+ h[:a] = 1
157
+ h.delete_if{ |k,v| k == :a }
158
+ h.assert.empty?
159
+ end
160
+ end
161
+
162
+ end
@@ -1,14 +1,10 @@
1
- require 'lemon'
2
- require 'ae'
3
- require 'ae/legacy' # bacause imitation BasicObject sucks
4
-
5
- require 'hashery/open_cascade'
1
+ require 'helper'
6
2
 
7
3
  testcase OpenCascade do
8
4
  include AE::Legacy::Assertions
9
5
 
10
6
  class_method :new do
11
- OpenCascade.new(:a=>1)
7
+ OpenCascade[:a=>1]
12
8
  end
13
9
 
14
10
  class_method :[] do
@@ -32,7 +28,7 @@ testcase OpenCascade do
32
28
  test "basic assignment" do
33
29
  o = OpenCascade.new
34
30
  o[:a] = 1
35
- assert_equal(1, o.a)
31
+ assert_equal(1, o[:a])
36
32
  end
37
33
  end
38
34
 
@@ -64,8 +60,8 @@ testcase OpenCascade do
64
60
  method :merge! do
65
61
  test do
66
62
  o = OpenCascade[:f0=>"f0"]
67
- h = { :h0=>"h0" }
68
63
  r = OpenCascade[:f0=>"f0", :h0=>"h0"]
64
+ h = { :h0=>"h0" }
69
65
  assert_equal(r, o.merge!(h))
70
66
  assert_equal({:f0=>"f0", :h0=>"h0"}, h.merge(o))
71
67
  end
@@ -0,0 +1,87 @@
1
+ require 'helper'
2
+
3
+ testcase OpenHash do
4
+
5
+ class_method :[] do
6
+ test do
7
+ o = OpenHash[:a=>1, :b=>2]
8
+ o.a.assert == 1
9
+ o.b.assert == 2
10
+ end
11
+
12
+ test do
13
+ o = OpenHash[:a=>1, :b=>2]
14
+ o.a.assert == 1
15
+ o.b.assert == 2
16
+ end
17
+ end
18
+
19
+ method :open? do
20
+ test do
21
+ o = OpenHash[:a=>1, :b=>2]
22
+ o.assert.open?(:foo)
23
+ o.refute.open?(:each)
24
+ end
25
+ end
26
+
27
+ method :open! do
28
+ test do
29
+ o = OpenHash[:a=>1, :b=>2]
30
+ o.open!(:each)
31
+ o.assert.open?(:each)
32
+ o.each = 10
33
+ o.each.assert == 10
34
+ end
35
+ end
36
+
37
+ method :close! do
38
+ test do
39
+ o = OpenHash[:a=>1, :b=>2]
40
+ o.open!(:each)
41
+ o.assert.open?(:each)
42
+ o.each = 10
43
+ o.each.assert == 10
44
+ o.close!(:each)
45
+ o.each.refute == 10
46
+ end
47
+ end
48
+
49
+ method :method_missing do
50
+ test 'bang method' do
51
+ o = OpenHash[]
52
+ o.open!(:each)
53
+ o.each = 10
54
+ o.each.assert == 10
55
+
56
+ a = []
57
+ o.each! do |k,v|
58
+ a << [k,v]
59
+ end
60
+ a.assert == [[:each,10]]
61
+ end
62
+
63
+ test 'query method' do
64
+ o = OpenHash[]
65
+ o.a = 1
66
+ o.assert.a?
67
+ o.refute.b?
68
+ end
69
+ end
70
+
71
+ method :send do
72
+ test do
73
+ o = OpenHash[]
74
+ o.open!(:each)
75
+ o.each = 10
76
+ o.each.assert == 10
77
+
78
+ a = []
79
+ o.send(:each) do |k,v|
80
+ a << [k,v]
81
+ end
82
+ a.assert == [[:each,10]]
83
+ end
84
+ end
85
+
86
+ end
87
+
@@ -0,0 +1,226 @@
1
+ require 'helper'
2
+
3
+ testcase QueryHash do
4
+
5
+ class_method :new do
6
+ test 'new QueryHash with default proc' do
7
+ q = QueryHash.new{ |h,k| h[k] = 1 }
8
+ q[:a].assert == 1
9
+ end
10
+ end
11
+
12
+ class_method :[] do
13
+ test 'creates new QueryHash' do
14
+ s = QueryHash[]
15
+ QueryHash.assert === s
16
+ end
17
+
18
+ test 'pre-assigns values' do
19
+ s = QueryHash[:a=>1, :b=>2]
20
+ s[:a].assert == 1
21
+ s[:b].assert == 2
22
+ end
23
+ end
24
+
25
+ method :[] do
26
+ test 'instance level fetch' do
27
+ s = QueryHash[:a=>1, :b=>2]
28
+ s[:a].assert == 1
29
+ s[:b].assert == 2
30
+ #s['a'].assert == 1
31
+ #s['b'].assert == 2
32
+ end
33
+ end
34
+
35
+ method :[]= do
36
+ test do
37
+ s = QueryHash.new
38
+ s[:a] = 1
39
+ s[:b] = 2
40
+ s[:a].assert == 1
41
+ s[:b].assert == 2
42
+ #s['a'].assert == 1
43
+ #s['b'].assert == 2
44
+ end
45
+ end
46
+
47
+ method :respond_to? do
48
+ test 'responds to all query methods' do
49
+ q = QueryHash.new
50
+ q.assert.respond_to?(:anything?)
51
+ end
52
+
53
+ test 'responds to all bang methods' do
54
+ q = QueryHash.new
55
+ q.assert.respond_to?(:anything!)
56
+ end
57
+
58
+ test 'responds to all setter methods' do
59
+ q = QueryHash.new
60
+ q.assert.respond_to?(:anything=)
61
+ end
62
+
63
+ test 'responds to usual methods' do
64
+ q = QueryHash.new
65
+ q.assert.respond_to?(:each)
66
+ end
67
+ end
68
+
69
+ method :to_hash do
70
+ test do
71
+ s = QueryHash[:a=>1, :b=>2]
72
+ s.to_hash.assert == {'a'=>1, 'b'=>2}
73
+ end
74
+ end
75
+
76
+ method :to_h do
77
+ test do
78
+ s = QueryHash[:a=>1, :b=>2]
79
+ s.to_h.assert == {'a'=>1, 'b'=>2}
80
+ end
81
+ end
82
+
83
+ method :replace do
84
+ test do
85
+ s = QueryHash.new
86
+ s.replace(:a=>1, :b=>2)
87
+ s.to_h.assert == {'a'=>1, 'b'=>2}
88
+ end
89
+ end
90
+
91
+ method :delete do
92
+ test do
93
+ s = QueryHash[:a=>1, :b=>2]
94
+ s.delete(:a)
95
+ s.to_h.assert == {'b'=>2}
96
+ end
97
+ end
98
+
99
+ method :each do
100
+ test do
101
+ s = QueryHash[:a=>1, :b=>2]
102
+ s.each do |k,v|
103
+ String.assert === k
104
+ end
105
+ end
106
+ end
107
+
108
+ method :store do
109
+ test do
110
+ s = QueryHash.new
111
+ s.store(:a, 1)
112
+ s.to_h.assert == {'a'=>1}
113
+ end
114
+ end
115
+
116
+ method :update do
117
+ test do
118
+ s1 = QueryHash[:a=>1,:b=>2]
119
+ s2 = QueryHash[:c=>3,:d=>4]
120
+ s1.update(s2)
121
+ s1.to_h.assert == {'a'=>1,'b'=>2,'c'=>3,'d'=>4}
122
+ end
123
+ end
124
+
125
+ method :rekey do
126
+ test do
127
+ s = QueryHash[:a=>1,:b=>2,:c=>3]
128
+ x = s.rekey{ |k| k.upcase }
129
+ x.to_h.assert == {'A'=>1,'B'=>2,'C'=>3}
130
+ end
131
+ end
132
+
133
+ method :rekey! do
134
+ test do
135
+ s = QueryHash[:a=>1,:b=>2,:c=>3]
136
+ s.rekey!{ |k| k.upcase }
137
+ s.to_h.assert == {'A'=>1,'B'=>2,'C'=>3}
138
+ end
139
+ end
140
+
141
+ method :key? do
142
+ test do
143
+ s = QueryHash[:a=>1]
144
+ s.assert.key?(:a)
145
+ s.assert.key?('a')
146
+ end
147
+ end
148
+
149
+ method :has_key? do
150
+ test do
151
+ s = QueryHash[:a=>1]
152
+ s.assert.has_key?(:a)
153
+ s.assert.has_key?('a')
154
+ end
155
+ end
156
+
157
+ method :<< do
158
+ test do
159
+ s = QueryHash.new
160
+ s << [:a, 1]
161
+ s << [:b, 2]
162
+ s.to_h.assert == {'a'=>1, 'b'=>2}
163
+ end
164
+ end
165
+
166
+ method :merge! do
167
+ test do
168
+ s1 = QueryHash[:a=>1,:b=>2]
169
+ s2 = QueryHash[:c=>3,:d=>4]
170
+ s1.merge!(s2)
171
+ s1.to_h.assert == {'a'=>1,'b'=>2,'c'=>3,'d'=>4}
172
+ end
173
+ end
174
+
175
+ method :values_at do
176
+ test do
177
+ s = QueryHash[:a=>1,:b=>2,:c=>3]
178
+ s.values_at(:a, :b).assert == [1,2]
179
+ s.values_at('a','b').assert == [1,2]
180
+ end
181
+ end
182
+
183
+ method :fetch do
184
+ test do
185
+ s = QueryHash[:a=>1,:b=>2,:c=>3]
186
+ s.fetch(:a).assert == 1
187
+ s.fetch('a').assert == 1
188
+ end
189
+ end
190
+
191
+ method :cast_key do
192
+ test do
193
+ s = QueryHash.new
194
+ s.pry.cast_key(:a).assert == 'a'
195
+ end
196
+ end
197
+
198
+ method :method_missing do
199
+ test 'dynamic query methods can look-up values' do
200
+ q = QueryHash[:a=>1,:b=>2,:c=>3]
201
+ q.a?.assert == 1
202
+ q.b?.assert == 2
203
+ q.c?.assert == 3
204
+ end
205
+
206
+ test 'dynamic bang methods can looks up values too' do
207
+ q = QueryHash[:a=>1,:b=>2,:c=>3]
208
+ q.a!.assert == 1
209
+ q.b!.assert == 2
210
+ q.c!.assert == 3
211
+ end
212
+
213
+ test 'dynamic bang methods will auto-instantiate' do
214
+ q = QueryHash.new
215
+ q.default_proc{ |h,k| h[k] = 'default' }
216
+ q.foo!.assert == 'default'
217
+ end
218
+
219
+ test 'dynamic query methods will NOT auto-instantiate' do
220
+ q = QueryHash.new
221
+ q.default_proc{ |h,k| h[k] = 'default' }
222
+ q.foo?.assert == nil
223
+ end
224
+ end
225
+
226
+ end