linkage 0.0.8 → 0.1.0.pre

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 (105) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +1 -19
  5. data/Gemfile-java +3 -0
  6. data/README.markdown +88 -34
  7. data/Rakefile +16 -15
  8. data/TODO +4 -0
  9. data/lib/linkage/comparator.rb +139 -144
  10. data/lib/linkage/comparators/compare.rb +236 -29
  11. data/lib/linkage/comparators/strcompare.rb +85 -0
  12. data/lib/linkage/comparators/within.rb +24 -20
  13. data/lib/linkage/configuration.rb +44 -466
  14. data/lib/linkage/dataset.rb +28 -127
  15. data/lib/linkage/exceptions.rb +5 -0
  16. data/lib/linkage/field.rb +6 -37
  17. data/lib/linkage/field_set.rb +3 -3
  18. data/lib/linkage/match_recorder.rb +22 -0
  19. data/lib/linkage/match_set.rb +34 -0
  20. data/lib/linkage/match_sets/csv.rb +39 -0
  21. data/lib/linkage/match_sets/database.rb +45 -0
  22. data/lib/linkage/matcher.rb +30 -0
  23. data/lib/linkage/result_set.rb +25 -110
  24. data/lib/linkage/result_sets/csv.rb +54 -0
  25. data/lib/linkage/result_sets/database.rb +42 -0
  26. data/lib/linkage/runner.rb +57 -16
  27. data/lib/linkage/score_recorder.rb +30 -0
  28. data/lib/linkage/score_set.rb +49 -0
  29. data/lib/linkage/score_sets/csv.rb +64 -0
  30. data/lib/linkage/score_sets/database.rb +77 -0
  31. data/lib/linkage/version.rb +1 -1
  32. data/lib/linkage.rb +14 -17
  33. data/linkage.gemspec +13 -1
  34. data/linkage.gemspec-java +32 -0
  35. data/test/helper.rb +30 -23
  36. data/test/integration/test_cross_linkage.rb +46 -25
  37. data/test/integration/test_database_result_set.rb +55 -0
  38. data/test/integration/test_dual_linkage.rb +19 -94
  39. data/test/integration/test_self_linkage.rb +100 -203
  40. data/test/integration/test_within_comparator.rb +24 -77
  41. data/test/unit/comparators/test_compare.rb +254 -50
  42. data/test/unit/comparators/test_strcompare.rb +45 -0
  43. data/test/unit/comparators/test_within.rb +14 -26
  44. data/test/unit/match_sets/test_csv.rb +78 -0
  45. data/test/unit/match_sets/test_database.rb +63 -0
  46. data/test/unit/result_sets/test_csv.rb +111 -0
  47. data/test/unit/result_sets/test_database.rb +68 -0
  48. data/test/unit/score_sets/test_csv.rb +151 -0
  49. data/test/unit/score_sets/test_database.rb +149 -0
  50. data/test/unit/test_comparator.rb +46 -83
  51. data/test/unit/test_comparators.rb +4 -0
  52. data/test/unit/test_configuration.rb +99 -145
  53. data/test/unit/test_dataset.rb +52 -73
  54. data/test/unit/test_field.rb +4 -55
  55. data/test/unit/test_field_set.rb +6 -6
  56. data/test/unit/test_match_recorder.rb +23 -0
  57. data/test/unit/test_match_set.rb +23 -0
  58. data/test/unit/test_match_sets.rb +4 -0
  59. data/test/unit/test_matcher.rb +44 -0
  60. data/test/unit/test_result_set.rb +24 -223
  61. data/test/unit/test_result_sets.rb +4 -0
  62. data/test/unit/test_runner.rb +122 -17
  63. data/test/unit/test_runners.rb +4 -0
  64. data/test/unit/test_score_recorder.rb +25 -0
  65. data/test/unit/test_score_set.rb +37 -0
  66. data/test/unit/test_score_sets.rb +4 -0
  67. metadata +183 -90
  68. data/Gemfile.lock +0 -92
  69. data/lib/linkage/comparators/binary.rb +0 -12
  70. data/lib/linkage/data.rb +0 -175
  71. data/lib/linkage/decollation.rb +0 -93
  72. data/lib/linkage/expectation.rb +0 -21
  73. data/lib/linkage/expectations/exhaustive.rb +0 -63
  74. data/lib/linkage/expectations/simple.rb +0 -168
  75. data/lib/linkage/function.rb +0 -148
  76. data/lib/linkage/functions/binary.rb +0 -30
  77. data/lib/linkage/functions/cast.rb +0 -54
  78. data/lib/linkage/functions/length.rb +0 -29
  79. data/lib/linkage/functions/strftime.rb +0 -33
  80. data/lib/linkage/functions/trim.rb +0 -30
  81. data/lib/linkage/group.rb +0 -55
  82. data/lib/linkage/meta_object.rb +0 -139
  83. data/lib/linkage/runner/single_threaded.rb +0 -187
  84. data/lib/linkage/utils.rb +0 -164
  85. data/lib/linkage/warnings.rb +0 -5
  86. data/test/integration/test_collation.rb +0 -45
  87. data/test/integration/test_configuration.rb +0 -268
  88. data/test/integration/test_dataset.rb +0 -116
  89. data/test/integration/test_functions.rb +0 -88
  90. data/test/integration/test_result_set.rb +0 -85
  91. data/test/integration/test_scoring.rb +0 -84
  92. data/test/unit/expectations/test_exhaustive.rb +0 -111
  93. data/test/unit/expectations/test_simple.rb +0 -303
  94. data/test/unit/functions/test_binary.rb +0 -54
  95. data/test/unit/functions/test_cast.rb +0 -98
  96. data/test/unit/functions/test_length.rb +0 -52
  97. data/test/unit/functions/test_strftime.rb +0 -60
  98. data/test/unit/functions/test_trim.rb +0 -43
  99. data/test/unit/runner/test_single_threaded.rb +0 -12
  100. data/test/unit/test_data.rb +0 -445
  101. data/test/unit/test_decollation.rb +0 -201
  102. data/test/unit/test_function.rb +0 -233
  103. data/test/unit/test_group.rb +0 -38
  104. data/test/unit/test_meta_object.rb +0 -208
  105. data/test/unit/test_utils.rb +0 -341
metadata CHANGED
@@ -1,62 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linkage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
5
- prerelease:
4
+ version: 0.1.0.pre
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jeremy Stephens
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-06 00:00:00.000000000 Z
11
+ date: 2014-03-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sequel
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: sequel-collation
28
+ name: hashery
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: hashery
42
+ name: bundler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
52
60
  - !ruby/object:Gem::Version
53
61
  version: '0'
54
- type: :runtime
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: versionomy
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mysql2
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard-test
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: guard-yard
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
55
161
  prerelease: false
56
162
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
163
  requirements:
59
- - - ! '>='
164
+ - - '>='
60
165
  - !ruby/object:Gem::Version
61
166
  version: '0'
62
167
  description: Performs record linkage between one or two datasets, using Sequel on
@@ -70,146 +175,134 @@ files:
70
175
  - .document
71
176
  - .gitignore
72
177
  - .vimrc
178
+ - .yardopts
73
179
  - Gemfile
74
- - Gemfile.lock
180
+ - Gemfile-java
75
181
  - Guardfile
76
182
  - LICENSE.txt
77
183
  - README.markdown
78
184
  - Rakefile
185
+ - TODO
79
186
  - VERSION
80
187
  - lib/linkage.rb
81
188
  - lib/linkage/comparator.rb
82
- - lib/linkage/comparators/binary.rb
83
189
  - lib/linkage/comparators/compare.rb
190
+ - lib/linkage/comparators/strcompare.rb
84
191
  - lib/linkage/comparators/within.rb
85
192
  - lib/linkage/configuration.rb
86
- - lib/linkage/data.rb
87
193
  - lib/linkage/dataset.rb
88
- - lib/linkage/decollation.rb
89
- - lib/linkage/expectation.rb
90
- - lib/linkage/expectations/exhaustive.rb
91
- - lib/linkage/expectations/simple.rb
194
+ - lib/linkage/exceptions.rb
92
195
  - lib/linkage/field.rb
93
196
  - lib/linkage/field_set.rb
94
- - lib/linkage/function.rb
95
- - lib/linkage/functions/binary.rb
96
- - lib/linkage/functions/cast.rb
97
- - lib/linkage/functions/length.rb
98
- - lib/linkage/functions/strftime.rb
99
- - lib/linkage/functions/trim.rb
100
- - lib/linkage/group.rb
101
197
  - lib/linkage/import_buffer.rb
102
- - lib/linkage/meta_object.rb
198
+ - lib/linkage/match_recorder.rb
199
+ - lib/linkage/match_set.rb
200
+ - lib/linkage/match_sets/csv.rb
201
+ - lib/linkage/match_sets/database.rb
202
+ - lib/linkage/matcher.rb
103
203
  - lib/linkage/result_set.rb
204
+ - lib/linkage/result_sets/csv.rb
205
+ - lib/linkage/result_sets/database.rb
104
206
  - lib/linkage/runner.rb
105
- - lib/linkage/runner/single_threaded.rb
106
- - lib/linkage/utils.rb
207
+ - lib/linkage/score_recorder.rb
208
+ - lib/linkage/score_set.rb
209
+ - lib/linkage/score_sets/csv.rb
210
+ - lib/linkage/score_sets/database.rb
107
211
  - lib/linkage/version.rb
108
- - lib/linkage/warnings.rb
109
212
  - linkage.gemspec
213
+ - linkage.gemspec-java
110
214
  - test/config.yml
111
215
  - test/helper.rb
112
- - test/integration/test_collation.rb
113
- - test/integration/test_configuration.rb
114
216
  - test/integration/test_cross_linkage.rb
115
- - test/integration/test_dataset.rb
217
+ - test/integration/test_database_result_set.rb
116
218
  - test/integration/test_dual_linkage.rb
117
- - test/integration/test_functions.rb
118
- - test/integration/test_result_set.rb
119
- - test/integration/test_scoring.rb
120
219
  - test/integration/test_self_linkage.rb
121
220
  - test/integration/test_within_comparator.rb
122
221
  - test/unit/comparators/test_compare.rb
222
+ - test/unit/comparators/test_strcompare.rb
123
223
  - test/unit/comparators/test_within.rb
124
- - test/unit/expectations/test_exhaustive.rb
125
- - test/unit/expectations/test_simple.rb
126
- - test/unit/functions/test_binary.rb
127
- - test/unit/functions/test_cast.rb
128
- - test/unit/functions/test_length.rb
129
- - test/unit/functions/test_strftime.rb
130
- - test/unit/functions/test_trim.rb
131
- - test/unit/runner/test_single_threaded.rb
224
+ - test/unit/match_sets/test_csv.rb
225
+ - test/unit/match_sets/test_database.rb
226
+ - test/unit/result_sets/test_csv.rb
227
+ - test/unit/result_sets/test_database.rb
228
+ - test/unit/score_sets/test_csv.rb
229
+ - test/unit/score_sets/test_database.rb
132
230
  - test/unit/test_comparator.rb
231
+ - test/unit/test_comparators.rb
133
232
  - test/unit/test_configuration.rb
134
- - test/unit/test_data.rb
135
233
  - test/unit/test_dataset.rb
136
- - test/unit/test_decollation.rb
137
234
  - test/unit/test_field.rb
138
235
  - test/unit/test_field_set.rb
139
- - test/unit/test_function.rb
140
- - test/unit/test_group.rb
141
236
  - test/unit/test_import_buffer.rb
142
237
  - test/unit/test_linkage.rb
143
- - test/unit/test_meta_object.rb
238
+ - test/unit/test_match_recorder.rb
239
+ - test/unit/test_match_set.rb
240
+ - test/unit/test_match_sets.rb
241
+ - test/unit/test_matcher.rb
144
242
  - test/unit/test_result_set.rb
243
+ - test/unit/test_result_sets.rb
145
244
  - test/unit/test_runner.rb
146
- - test/unit/test_utils.rb
245
+ - test/unit/test_runners.rb
246
+ - test/unit/test_score_recorder.rb
247
+ - test/unit/test_score_set.rb
248
+ - test/unit/test_score_sets.rb
147
249
  homepage: http://github.com/coupler/linkage
148
250
  licenses: []
251
+ metadata: {}
149
252
  post_install_message:
150
253
  rdoc_options: []
151
254
  require_paths:
152
255
  - lib
153
256
  required_ruby_version: !ruby/object:Gem::Requirement
154
- none: false
155
257
  requirements:
156
- - - ! '>='
258
+ - - '>='
157
259
  - !ruby/object:Gem::Version
158
- version: '0'
159
- segments:
160
- - 0
161
- hash: -1649246308926950627
260
+ version: '1.9'
162
261
  required_rubygems_version: !ruby/object:Gem::Requirement
163
- none: false
164
262
  requirements:
165
- - - ! '>='
263
+ - - '>'
166
264
  - !ruby/object:Gem::Version
167
- version: '0'
168
- segments:
169
- - 0
170
- hash: -1649246308926950627
265
+ version: 1.3.1
171
266
  requirements: []
172
267
  rubyforge_project:
173
- rubygems_version: 1.8.23
268
+ rubygems_version: 2.0.3
174
269
  signing_key:
175
- specification_version: 3
270
+ specification_version: 4
176
271
  summary: Record linkage library
177
272
  test_files:
178
273
  - test/config.yml
179
274
  - test/helper.rb
180
- - test/integration/test_collation.rb
181
- - test/integration/test_configuration.rb
182
275
  - test/integration/test_cross_linkage.rb
183
- - test/integration/test_dataset.rb
276
+ - test/integration/test_database_result_set.rb
184
277
  - test/integration/test_dual_linkage.rb
185
- - test/integration/test_functions.rb
186
- - test/integration/test_result_set.rb
187
- - test/integration/test_scoring.rb
188
278
  - test/integration/test_self_linkage.rb
189
279
  - test/integration/test_within_comparator.rb
190
280
  - test/unit/comparators/test_compare.rb
281
+ - test/unit/comparators/test_strcompare.rb
191
282
  - test/unit/comparators/test_within.rb
192
- - test/unit/expectations/test_exhaustive.rb
193
- - test/unit/expectations/test_simple.rb
194
- - test/unit/functions/test_binary.rb
195
- - test/unit/functions/test_cast.rb
196
- - test/unit/functions/test_length.rb
197
- - test/unit/functions/test_strftime.rb
198
- - test/unit/functions/test_trim.rb
199
- - test/unit/runner/test_single_threaded.rb
283
+ - test/unit/match_sets/test_csv.rb
284
+ - test/unit/match_sets/test_database.rb
285
+ - test/unit/result_sets/test_csv.rb
286
+ - test/unit/result_sets/test_database.rb
287
+ - test/unit/score_sets/test_csv.rb
288
+ - test/unit/score_sets/test_database.rb
200
289
  - test/unit/test_comparator.rb
290
+ - test/unit/test_comparators.rb
201
291
  - test/unit/test_configuration.rb
202
- - test/unit/test_data.rb
203
292
  - test/unit/test_dataset.rb
204
- - test/unit/test_decollation.rb
205
293
  - test/unit/test_field.rb
206
294
  - test/unit/test_field_set.rb
207
- - test/unit/test_function.rb
208
- - test/unit/test_group.rb
209
295
  - test/unit/test_import_buffer.rb
210
296
  - test/unit/test_linkage.rb
211
- - test/unit/test_meta_object.rb
297
+ - test/unit/test_match_recorder.rb
298
+ - test/unit/test_match_set.rb
299
+ - test/unit/test_match_sets.rb
300
+ - test/unit/test_matcher.rb
212
301
  - test/unit/test_result_set.rb
302
+ - test/unit/test_result_sets.rb
213
303
  - test/unit/test_runner.rb
214
- - test/unit/test_utils.rb
304
+ - test/unit/test_runners.rb
305
+ - test/unit/test_score_recorder.rb
306
+ - test/unit/test_score_set.rb
307
+ - test/unit/test_score_sets.rb
215
308
  has_rdoc:
data/Gemfile.lock DELETED
@@ -1,92 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- linkage (0.0.8)
5
- hashery
6
- sequel
7
- sequel-collation
8
-
9
- GEM
10
- remote: http://rubygems.org/
11
- specs:
12
- blockenspiel (0.4.5)
13
- coderay (1.0.8)
14
- columnize (0.3.6)
15
- debugger (1.3.0)
16
- columnize (>= 0.3.1)
17
- debugger-linecache (~> 1.1.1)
18
- debugger-ruby_core_source (~> 1.1.7)
19
- debugger-linecache (1.1.2)
20
- debugger-ruby_core_source (>= 1.1.1)
21
- debugger-ruby_core_source (1.1.7)
22
- ffi (1.3.1)
23
- ffi (1.3.1-java)
24
- guard (1.6.2)
25
- listen (>= 0.6.0)
26
- lumberjack (>= 1.0.2)
27
- pry (>= 0.9.10)
28
- terminal-table (>= 1.4.3)
29
- thor (>= 0.14.6)
30
- guard-test (0.7.0)
31
- guard (>= 1.1)
32
- test-unit (~> 2.2)
33
- guard-yard (2.0.1)
34
- guard (>= 1.1.0)
35
- yard (>= 0.7.0)
36
- hashery (2.1.0)
37
- jdbc-mysql (5.1.22.1)
38
- jdbc-sqlite3 (3.7.2.1)
39
- listen (0.7.2)
40
- lumberjack (1.0.2)
41
- metaclass (0.0.1)
42
- method_source (0.8.1)
43
- mocha (0.13.2)
44
- metaclass (~> 0.0.1)
45
- mysql2 (0.3.11)
46
- pry (0.9.11.4)
47
- coderay (~> 1.0.5)
48
- method_source (~> 0.8)
49
- slop (~> 3.4)
50
- pry (0.9.11.4-java)
51
- coderay (~> 1.0.5)
52
- method_source (~> 0.8)
53
- slop (~> 3.4)
54
- spoon (~> 0.0)
55
- rake (10.0.3)
56
- rb-inotify (0.8.8)
57
- ffi (>= 0.5.0)
58
- rdiscount (2.0.7)
59
- sequel (3.44.0)
60
- sequel-collation (0.1.0)
61
- sequel
62
- slop (3.4.3)
63
- spoon (0.0.1)
64
- sqlite3 (1.3.7)
65
- terminal-table (1.4.5)
66
- test-unit (2.5.4)
67
- thor (0.17.0)
68
- versionomy (0.4.4)
69
- blockenspiel (>= 0.4.5)
70
- yard (0.8.4.1)
71
-
72
- PLATFORMS
73
- java
74
- ruby
75
-
76
- DEPENDENCIES
77
- bundler
78
- debugger
79
- guard-test
80
- guard-yard
81
- jdbc-mysql
82
- jdbc-sqlite3
83
- linkage!
84
- mocha
85
- mysql2
86
- rake
87
- rb-inotify (~> 0.8.8)
88
- rdiscount
89
- sqlite3
90
- test-unit
91
- versionomy
92
- yard
@@ -1,12 +0,0 @@
1
- module Linkage
2
- module Comparators
3
- # @abstract Convenient abstract class for comparators that only return
4
- # true/false values (0 or 1).
5
- class Binary < Comparator
6
- @@score_range = 0..1
7
- def self.score_range
8
- @@score_range
9
- end
10
- end
11
- end
12
- end
data/lib/linkage/data.rb DELETED
@@ -1,175 +0,0 @@
1
- module Linkage
2
- # Superclass to {Field} and {Function}.
3
- #
4
- # @abstract
5
- class Data
6
- # A "tree" used to find compatible types.
7
- TYPE_CONVERSION_TREE = {
8
- TrueClass => [Integer],
9
- Integer => [Bignum, Float],
10
- Bignum => [BigDecimal],
11
- Float => [BigDecimal],
12
- BigDecimal => [String],
13
- String => nil,
14
- DateTime => nil,
15
- Date => nil,
16
- Time => nil,
17
- File => nil
18
- }
19
-
20
- # @!attribute [r] name
21
- # @return [Symbol] This object's name
22
- attr_reader :name
23
-
24
- # @!attribute [r] dataset
25
- # @return [Linkage::Dataset, nil] This object's dataset, or nil
26
- attr_reader :dataset
27
-
28
- def initialize(name)
29
- @name = name
30
- end
31
-
32
- def ruby_type
33
- raise NotImplementedError
34
- end
35
-
36
- def to_expr
37
- raise NotImplementedError
38
- end
39
-
40
- def collation
41
- nil
42
- end
43
-
44
- def database_type
45
- ds = dataset
46
- ds ? ds.database_type : nil
47
- end
48
-
49
- def static?
50
- raise NotImplementedError
51
- end
52
-
53
- # Create a merge field that can hold data from two data sources. If the
54
- # fields have different types, the resulting type is determined via a
55
- # type-conversion tree.
56
- #
57
- # @param [Linkage::Data] other
58
- # @return [Linkage::MergeField]
59
- def merge(other, new_name = nil)
60
- schema_1 = self.ruby_type
61
- db_type_1 = self.database_type
62
- schema_2 = other.ruby_type
63
- db_type_2 = other.database_type
64
- if schema_1 == schema_2 && db_type_1 == db_type_2
65
- result = schema_1
66
- else
67
- type_1 = schema_1[:type]
68
- opts_1 = schema_1[:opts] || {}
69
- type_2 = schema_2[:type]
70
- opts_2 = schema_2[:opts] || {}
71
- result_type = type_1
72
- result_opts = schema_1[:opts] ? schema_1[:opts].dup : {}
73
-
74
- # type
75
- if type_1 != type_2
76
- result_type = first_common_type(type_1, type_2)
77
- if result_type.nil?
78
- raise "Can't merge #{type_1} (#{name}) with #{type_2} (#{other.name})"
79
- end
80
- end
81
-
82
- # text
83
- if opts_1[:text] != opts_2[:text]
84
- # This can only be of type String.
85
- result_opts[:text] = true
86
- result_opts.delete(:size)
87
- end
88
-
89
- # size
90
- if !result_opts[:text] && opts_1[:size] != opts_2[:size]
91
- types = [type_1, type_2].uniq
92
- if types.length == 1 && types[0] == BigDecimal
93
- # Two decimals
94
- if opts_1.has_key?(:size) && opts_2.has_key?(:size)
95
- s_1 = opts_1[:size]
96
- s_2 = opts_2[:size]
97
- result_opts[:size] = [ s_1[0] > s_2[0] ? s_1[0] : s_2[0] ]
98
-
99
- if s_1[1] && s_2[1]
100
- result_opts[:size][1] = s_1[1] > s_2[1] ? s_1[1] : s_2[1]
101
- else
102
- result_opts[:size][1] = s_1[1] ? s_1[1] : s_2[1]
103
- end
104
- else
105
- result_opts[:size] = opts_1.has_key?(:size) ? opts_1[:size] : opts_2[:size]
106
- end
107
- elsif types.include?(String) && types.include?(BigDecimal)
108
- # Add one to the precision of the BigDecimal (for the dot)
109
- if opts_1.has_key?(:size) && opts_2.has_key?(:size)
110
- s_1 = opts_1[:size].is_a?(Array) ? opts_1[:size][0] + 1 : opts_1[:size]
111
- s_2 = opts_2[:size].is_a?(Array) ? opts_2[:size][0] + 1 : opts_2[:size]
112
- result_opts[:size] = s_1 > s_2 ? s_1 : s_2
113
- elsif opts_1.has_key?(:size)
114
- result_opts[:size] = opts_1[:size].is_a?(Array) ? opts_1[:size][0] + 1 : opts_1[:size]
115
- elsif opts_2.has_key?(:size)
116
- result_opts[:size] = opts_2[:size].is_a?(Array) ? opts_2[:size][0] + 1 : opts_2[:size]
117
- end
118
- else
119
- # Treat as two strings
120
- if opts_1.has_key?(:size) && opts_2.has_key?(:size)
121
- result_opts[:size] = opts_1[:size] > opts_2[:size] ? opts_1[:size] : opts_2[:size]
122
- elsif opts_1.has_key?(:size)
123
- result_opts[:size] = opts_1[:size]
124
- else
125
- result_opts[:size] = opts_2[:size]
126
- end
127
- end
128
- end
129
-
130
- # fixed
131
- if opts_1[:fixed] != opts_2[:fixed]
132
- # This can only be of type String.
133
- result_opts[:fixed] = true
134
- end
135
-
136
- # collation
137
- if opts_1[:collate] != opts_2[:collate] || db_type_1 != db_type_2
138
- result_opts.delete(:collate)
139
- end
140
-
141
- result = {:type => result_type}
142
- result[:opts] = result_opts unless result_opts.empty?
143
- end
144
-
145
- if new_name
146
- name = new_name.to_sym
147
- else
148
- name = self.name == other.name ? self.name : :"#{self.name}_#{other.name}"
149
- end
150
- MergeField.new(name, result, db_type_1 == db_type_2 ? db_type_1 : nil)
151
- end
152
-
153
- private
154
-
155
- def first_common_type(type_1, type_2)
156
- types_1 = [type_1] + get_types(type_1)
157
- types_2 = [type_2] + get_types(type_2)
158
- (types_1 & types_2).first
159
- end
160
-
161
- # Get all types that the specified type can be converted to. Order
162
- # matters.
163
- def get_types(type)
164
- result = []
165
- types = TYPE_CONVERSION_TREE[type]
166
- if types
167
- result += types
168
- types.each do |t|
169
- result |= get_types(t)
170
- end
171
- end
172
- result
173
- end
174
- end
175
- end