rubysync 0.0.3 → 0.0.4

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 (45) hide show
  1. data/HISTORY.txt +4 -0
  2. data/Manifest.txt +25 -12
  3. data/README.txt +0 -2
  4. data/bin/rubysync +20 -6
  5. data/bin/rubysync.rb +333 -0
  6. data/docs/in_pipeline.graffle +2690 -0
  7. data/docs/init_openldap.ldif +11 -0
  8. data/docs/out_pipeline.graffle +3274 -0
  9. data/docs/schema/99rubysync.ldif +27 -0
  10. data/docs/schema/rubysync.schema +16 -0
  11. data/docs/to_sync.txt +15 -0
  12. data/docs/walkthru.txt +186 -0
  13. data/lib/ruby_sync.rb +7 -29
  14. data/lib/ruby_sync/connectors/base_connector.rb +55 -86
  15. data/lib/ruby_sync/connectors/csv_file_connector.rb +16 -4
  16. data/lib/ruby_sync/connectors/ldap_associations.rb +126 -0
  17. data/lib/ruby_sync/connectors/ldap_changelog_connector.rb +127 -0
  18. data/lib/ruby_sync/connectors/ldap_connector.rb +29 -192
  19. data/lib/ruby_sync/connectors/memory_connector.rb +1 -1
  20. data/lib/ruby_sync/connectors/xml_connector.rb +105 -32
  21. data/lib/ruby_sync/event.rb +40 -12
  22. data/lib/ruby_sync/operation.rb +18 -2
  23. data/lib/ruby_sync/pipelines/base_pipeline.rb +44 -6
  24. data/lib/ruby_sync/util/utilities.rb +97 -4
  25. data/lib/rubysync.rb +1 -1
  26. data/rubysync.tmproj +279 -59
  27. data/test/.LCKts_rubysync.rb~ +1 -0
  28. data/test/ruby_sync_test.rb +9 -4
  29. data/test/{test_active_record_vault.rb → tc_active_record_connector.rb} +11 -7
  30. data/test/{test_base_connector.rb → tc_base_connector.rb} +1 -1
  31. data/test/{test_base_pipeline.rb → tc_base_pipeline.rb} +1 -1
  32. data/test/tc_changelog_ldap_connector.rb +93 -0
  33. data/test/{test_csv_file_connector.rb → tc_csv_file_connector.rb} +14 -5
  34. data/test/{test_event.rb → tc_event.rb} +1 -1
  35. data/test/{test_ldap_changelog.rb → tc_ldap_changelog.rb} +1 -1
  36. data/test/{test_ldap_connector.rb → tc_ldap_connector.rb} +20 -22
  37. data/test/{test_ldap_vault.rb → tc_ldap_vault.rb} +2 -2
  38. data/test/{test_ldif.rb → tc_ldif.rb} +1 -1
  39. data/test/{test_memory_connectors.rb → tc_memory_connectors.rb} +10 -6
  40. data/test/{test_rubysync.rb → tc_rubysync.rb} +4 -4
  41. data/test/tc_transformation.rb +71 -0
  42. data/test/{test_utilities.rb → tc_utilities.rb} +28 -1
  43. data/test/tc_xml_connectors.rb +107 -6
  44. data/test/ts_rubysync.rb +11 -6
  45. metadata +33 -28
@@ -27,12 +27,30 @@ class ::File
27
27
  end
28
28
  end
29
29
 
30
+ class Object
31
+
32
+ # Make the log method globally available
33
+ def log
34
+ unless defined? @@log
35
+ @@log = Logger.new(STDOUT)
36
+ #@@log.level = Logger::DEBUG
37
+ @@log.datetime_format = "%H:%M:%S"
38
+ end
39
+ @@log
40
+ end
41
+ end
42
+
43
+
30
44
  # Generally useful methods
31
45
  module RubySync
32
46
  module Utilities
33
-
34
47
  @@base_path=nil
35
48
 
49
+ # If not already an array, slip into one
50
+ def as_array o
51
+ (o.instance_of? Array)? o : [o]
52
+ end
53
+
36
54
  # Perform an action and rescue any exceptions thrown, display the exception with the specified text
37
55
  def with_rescue text
38
56
  begin
@@ -60,7 +78,7 @@ module RubySync
60
78
 
61
79
  # Ensure that a given path exists as a directory
62
80
  def ensure_dir_exists paths
63
- paths.as_array.each do |path|
81
+ as_array(paths).each do |path|
64
82
  raise Exception.new("Can't create nil directory") unless path
65
83
  if File.exist? path
66
84
  unless File.directory? path
@@ -113,7 +131,7 @@ module RubySync
113
131
  # Keep going up until we start repeating ourselves
114
132
  while File.directory?(bp) && bp != last && bp != "/"
115
133
  return bp if File.directory?("#{bp}/pipelines") &&
116
- File.directory?("#{bp}/connectors")
134
+ File.directory?("#{bp}/connectors")
117
135
  last = bp
118
136
  bp = File.expand_path("#{bp}/..")
119
137
  end
@@ -141,5 +159,80 @@ module RubySync
141
159
  "#{dir}#{file}"
142
160
  end
143
161
 
162
+ # Performs the given operations on the given record. The record is a
163
+ # Hash in which each key is a field name and each value is an array of
164
+ # values for that field.
165
+ # Operations is an Array of RubySync::Operation objects to be performed on the record.
166
+ def perform_operations operations, record={}, options={}
167
+ subjects = options[:subjects]
168
+ operations.each do |op|
169
+ unless op.instance_of? RubySync::Operation
170
+ log.warn "!!!!!!!!!! PROBLEM, DUMP FOLLOWS: !!!!!!!!!!!!!!"
171
+ p op
172
+ end
173
+ next if subjects and !subjects.include?(op.subject)
174
+ case op.type
175
+ when :add
176
+ if record[op.subject]
177
+ existing = as_array(record[op.subject])
178
+ next if existing == op.values # already same so ignore
179
+ (existing & op.values).empty? or
180
+ raise "Attempt to add duplicate elements to #{name}"
181
+ record[op.subject] = existing + op.values
182
+ else
183
+ record[op.subject] = op.values
184
+ end
185
+ when :replace
186
+ record[op.subject] = op.values
187
+ when :delete
188
+ if value == nil || value == "" || value == []
189
+ record.delete(op.subject)
190
+ else
191
+ record[op.subject] -= values
192
+ end
193
+ else
194
+ raise Exception.new("Unknown operation '#{op.type}'")
195
+ end
196
+ end
197
+ return record
198
+ end
199
+
200
+
201
+ # Filter operations to eliminate those that would have
202
+ # no effect on the record. Returns the resulting array
203
+ # of operations.
204
+ def effective_operations operations, record={}
205
+ effective = []
206
+ operations.each do |op|
207
+ existing = as_array(record[op.subject] || [])
208
+ case op.type
209
+ when :add
210
+ if existing.empty?
211
+ effective << op
212
+ else
213
+ next if existing == op.values # already same so ignore
214
+ effective << Operation.replace(op.subject, op.values)
215
+ end
216
+ when :replace
217
+ if existing.empty?
218
+ effective << Operation.add(op.subject, op.values)
219
+ else
220
+ next if existing == op.values
221
+ effective << op
222
+ end
223
+ when :delete
224
+ if [nil, "", []].include?(op.values)
225
+ effective << op if record[op.subject]
226
+ else
227
+ targets = op.values & existing
228
+ targets.empty? or effective << Operation.delete(op.subject, targets)
229
+ end
230
+ else
231
+ raise Exception.new("Unknown operation '#{op.type}'")
232
+ end
233
+ end
234
+ effective
235
+ end
236
+
144
237
  end
145
- end
238
+ end
data/lib/rubysync.rb CHANGED
@@ -15,5 +15,5 @@
15
15
 
16
16
 
17
17
  class Rubysync
18
- VERSION = '0.0.3'
18
+ VERSION = '0.0.4'
19
19
  end
data/rubysync.tmproj CHANGED
@@ -3,7 +3,7 @@
3
3
  <plist version="1.0">
4
4
  <dict>
5
5
  <key>currentDocument</key>
6
- <string>test/test_ldap_connector.rb</string>
6
+ <string>gemspec</string>
7
7
  <key>documents</key>
8
8
  <array>
9
9
  <dict>
@@ -33,22 +33,64 @@
33
33
  </dict>
34
34
  </array>
35
35
  <key>fileHierarchyDrawerWidth</key>
36
- <integer>431</integer>
36
+ <integer>246</integer>
37
37
  <key>metaData</key>
38
38
  <dict>
39
+ <key>HISTORY.txt</key>
40
+ <dict>
41
+ <key>caret</key>
42
+ <dict>
43
+ <key>column</key>
44
+ <integer>0</integer>
45
+ <key>line</key>
46
+ <integer>0</integer>
47
+ </dict>
48
+ <key>firstVisibleColumn</key>
49
+ <integer>0</integer>
50
+ <key>firstVisibleLine</key>
51
+ <integer>0</integer>
52
+ </dict>
53
+ <key>Manifest.txt</key>
54
+ <dict>
55
+ <key>caret</key>
56
+ <dict>
57
+ <key>column</key>
58
+ <integer>0</integer>
59
+ <key>line</key>
60
+ <integer>0</integer>
61
+ </dict>
62
+ <key>firstVisibleColumn</key>
63
+ <integer>0</integer>
64
+ <key>firstVisibleLine</key>
65
+ <integer>0</integer>
66
+ </dict>
67
+ <key>Rakefile</key>
68
+ <dict>
69
+ <key>caret</key>
70
+ <dict>
71
+ <key>column</key>
72
+ <integer>24</integer>
73
+ <key>line</key>
74
+ <integer>27</integer>
75
+ </dict>
76
+ <key>firstVisibleColumn</key>
77
+ <integer>0</integer>
78
+ <key>firstVisibleLine</key>
79
+ <integer>0</integer>
80
+ </dict>
39
81
  <key>bin/rubysync</key>
40
82
  <dict>
41
83
  <key>caret</key>
42
84
  <dict>
43
85
  <key>column</key>
44
- <integer>3</integer>
86
+ <integer>0</integer>
45
87
  <key>line</key>
46
- <integer>304</integer>
88
+ <integer>264</integer>
47
89
  </dict>
48
90
  <key>firstVisibleColumn</key>
49
91
  <integer>0</integer>
50
92
  <key>firstVisibleLine</key>
51
- <integer>277</integer>
93
+ <integer>218</integer>
52
94
  </dict>
53
95
  <key>examples/ar_webapp/db/migrate/009_create_ruby_sync_states.rb</key>
54
96
  <dict>
@@ -64,75 +106,91 @@
64
106
  <key>firstVisibleLine</key>
65
107
  <integer>0</integer>
66
108
  </dict>
67
- <key>lib/ruby_sync.rb</key>
109
+ <key>gemspec</key>
68
110
  <dict>
69
111
  <key>caret</key>
70
112
  <dict>
71
113
  <key>column</key>
72
- <integer>0</integer>
114
+ <integer>34</integer>
73
115
  <key>line</key>
74
- <integer>67</integer>
116
+ <integer>19</integer>
75
117
  </dict>
76
118
  <key>firstVisibleColumn</key>
77
119
  <integer>0</integer>
78
120
  <key>firstVisibleLine</key>
79
- <integer>48</integer>
121
+ <integer>0</integer>
80
122
  </dict>
81
- <key>lib/ruby_sync/connectors/active_record_association_handler.rb</key>
123
+ <key>lib/net/ldif.rb</key>
82
124
  <dict>
83
125
  <key>caret</key>
84
126
  <dict>
85
127
  <key>column</key>
86
- <integer>3</integer>
128
+ <integer>0</integer>
87
129
  <key>line</key>
88
- <integer>45</integer>
130
+ <integer>14</integer>
89
131
  </dict>
132
+ <key>columnSelection</key>
133
+ <false/>
90
134
  <key>firstVisibleColumn</key>
91
135
  <integer>0</integer>
92
136
  <key>firstVisibleLine</key>
93
- <integer>28</integer>
137
+ <integer>0</integer>
138
+ <key>selectFrom</key>
139
+ <dict>
140
+ <key>column</key>
141
+ <integer>0</integer>
142
+ <key>line</key>
143
+ <integer>6</integer>
144
+ </dict>
145
+ <key>selectTo</key>
146
+ <dict>
147
+ <key>column</key>
148
+ <integer>0</integer>
149
+ <key>line</key>
150
+ <integer>14</integer>
151
+ </dict>
94
152
  </dict>
95
- <key>lib/ruby_sync/connectors/active_record_connector.rb</key>
153
+ <key>lib/ruby_sync.rb</key>
96
154
  <dict>
97
155
  <key>caret</key>
98
156
  <dict>
99
157
  <key>column</key>
100
- <integer>38</integer>
158
+ <integer>0</integer>
101
159
  <key>line</key>
102
- <integer>87</integer>
160
+ <integer>14</integer>
103
161
  </dict>
104
162
  <key>firstVisibleColumn</key>
105
163
  <integer>0</integer>
106
164
  <key>firstVisibleLine</key>
107
- <integer>19</integer>
165
+ <integer>3</integer>
108
166
  </dict>
109
- <key>lib/ruby_sync/connectors/active_record_event_handler.rb</key>
167
+ <key>lib/ruby_sync/connectors/active_record_association_handler.rb</key>
110
168
  <dict>
111
169
  <key>caret</key>
112
170
  <dict>
113
171
  <key>column</key>
114
- <integer>30</integer>
172
+ <integer>3</integer>
115
173
  <key>line</key>
116
- <integer>24</integer>
174
+ <integer>45</integer>
117
175
  </dict>
118
176
  <key>firstVisibleColumn</key>
119
177
  <integer>0</integer>
120
178
  <key>firstVisibleLine</key>
121
- <integer>9</integer>
179
+ <integer>28</integer>
122
180
  </dict>
123
- <key>lib/ruby_sync/connectors/base_connector.rb</key>
181
+ <key>lib/ruby_sync/connectors/active_record_event_handler.rb</key>
124
182
  <dict>
125
183
  <key>caret</key>
126
184
  <dict>
127
185
  <key>column</key>
128
- <integer>0</integer>
186
+ <integer>30</integer>
129
187
  <key>line</key>
130
- <integer>93</integer>
188
+ <integer>24</integer>
131
189
  </dict>
132
190
  <key>firstVisibleColumn</key>
133
191
  <integer>0</integer>
134
192
  <key>firstVisibleLine</key>
135
- <integer>392</integer>
193
+ <integer>9</integer>
136
194
  </dict>
137
195
  <key>lib/ruby_sync/connectors/connector_event_processing.rb</key>
138
196
  <dict>
@@ -185,12 +243,12 @@
185
243
  <key>column</key>
186
244
  <integer>0</integer>
187
245
  <key>line</key>
188
- <integer>27</integer>
246
+ <integer>76</integer>
189
247
  </dict>
190
248
  <key>firstVisibleColumn</key>
191
249
  <integer>0</integer>
192
250
  <key>firstVisibleLine</key>
193
- <integer>14</integer>
251
+ <integer>43</integer>
194
252
  </dict>
195
253
  <key>lib/ruby_sync/connectors/xml_connector.rb</key>
196
254
  <dict>
@@ -199,12 +257,28 @@
199
257
  <key>column</key>
200
258
  <integer>0</integer>
201
259
  <key>line</key>
202
- <integer>0</integer>
260
+ <integer>156</integer>
203
261
  </dict>
262
+ <key>columnSelection</key>
263
+ <false/>
204
264
  <key>firstVisibleColumn</key>
205
265
  <integer>0</integer>
206
266
  <key>firstVisibleLine</key>
207
- <integer>14</integer>
267
+ <integer>127</integer>
268
+ <key>selectFrom</key>
269
+ <dict>
270
+ <key>column</key>
271
+ <integer>0</integer>
272
+ <key>line</key>
273
+ <integer>155</integer>
274
+ </dict>
275
+ <key>selectTo</key>
276
+ <dict>
277
+ <key>column</key>
278
+ <integer>0</integer>
279
+ <key>line</key>
280
+ <integer>156</integer>
281
+ </dict>
208
282
  </dict>
209
283
  <key>lib/ruby_sync/event.rb</key>
210
284
  <dict>
@@ -218,7 +292,21 @@
218
292
  <key>firstVisibleColumn</key>
219
293
  <integer>0</integer>
220
294
  <key>firstVisibleLine</key>
221
- <integer>88</integer>
295
+ <integer>42</integer>
296
+ </dict>
297
+ <key>lib/ruby_sync/pipelines/base_pipeline.rb</key>
298
+ <dict>
299
+ <key>caret</key>
300
+ <dict>
301
+ <key>column</key>
302
+ <integer>26</integer>
303
+ <key>line</key>
304
+ <integer>289</integer>
305
+ </dict>
306
+ <key>firstVisibleColumn</key>
307
+ <integer>0</integer>
308
+ <key>firstVisibleLine</key>
309
+ <integer>260</integer>
222
310
  </dict>
223
311
  <key>lib/ruby_sync/util/utilities.rb</key>
224
312
  <dict>
@@ -234,19 +322,91 @@
234
322
  <key>firstVisibleLine</key>
235
323
  <integer>75</integer>
236
324
  </dict>
325
+ <key>lib/rubysync.rb</key>
326
+ <dict>
327
+ <key>caret</key>
328
+ <dict>
329
+ <key>column</key>
330
+ <integer>18</integer>
331
+ <key>line</key>
332
+ <integer>17</integer>
333
+ </dict>
334
+ <key>firstVisibleColumn</key>
335
+ <integer>0</integer>
336
+ <key>firstVisibleLine</key>
337
+ <integer>0</integer>
338
+ </dict>
339
+ <key>pkg/rubysync-0.0.3/lib/ruby_sync/pipelines/base_pipeline.rb</key>
340
+ <dict>
341
+ <key>caret</key>
342
+ <dict>
343
+ <key>column</key>
344
+ <integer>30</integer>
345
+ <key>line</key>
346
+ <integer>254</integer>
347
+ </dict>
348
+ <key>firstVisibleColumn</key>
349
+ <integer>0</integer>
350
+ <key>firstVisibleLine</key>
351
+ <integer>224</integer>
352
+ </dict>
353
+ <key>test/hashlike_tests.rb</key>
354
+ <dict>
355
+ <key>caret</key>
356
+ <dict>
357
+ <key>column</key>
358
+ <integer>0</integer>
359
+ <key>line</key>
360
+ <integer>39</integer>
361
+ </dict>
362
+ <key>firstVisibleColumn</key>
363
+ <integer>0</integer>
364
+ <key>firstVisibleLine</key>
365
+ <integer>38</integer>
366
+ </dict>
237
367
  <key>test/ruby_sync_test.rb</key>
238
368
  <dict>
239
369
  <key>caret</key>
240
370
  <dict>
241
371
  <key>column</key>
242
- <integer>14</integer>
372
+ <integer>0</integer>
373
+ <key>line</key>
374
+ <integer>18</integer>
375
+ </dict>
376
+ <key>columnSelection</key>
377
+ <false/>
378
+ <key>firstVisibleColumn</key>
379
+ <integer>0</integer>
380
+ <key>firstVisibleLine</key>
381
+ <integer>12</integer>
382
+ <key>selectFrom</key>
383
+ <dict>
384
+ <key>column</key>
385
+ <integer>19</integer>
386
+ <key>line</key>
387
+ <integer>20</integer>
388
+ </dict>
389
+ <key>selectTo</key>
390
+ <dict>
391
+ <key>column</key>
392
+ <integer>0</integer>
243
393
  <key>line</key>
244
- <integer>42</integer>
394
+ <integer>18</integer>
395
+ </dict>
396
+ </dict>
397
+ <key>test/tc_xml_connectors.rb</key>
398
+ <dict>
399
+ <key>caret</key>
400
+ <dict>
401
+ <key>column</key>
402
+ <integer>0</integer>
403
+ <key>line</key>
404
+ <integer>0</integer>
245
405
  </dict>
246
406
  <key>firstVisibleColumn</key>
247
407
  <integer>0</integer>
248
408
  <key>firstVisibleLine</key>
249
- <integer>15</integer>
409
+ <integer>76</integer>
250
410
  </dict>
251
411
  <key>test/test_active_record_vault.rb</key>
252
412
  <dict>
@@ -267,14 +427,30 @@
267
427
  <key>caret</key>
268
428
  <dict>
269
429
  <key>column</key>
270
- <integer>15</integer>
430
+ <integer>0</integer>
271
431
  <key>line</key>
272
- <integer>28</integer>
432
+ <integer>16</integer>
273
433
  </dict>
434
+ <key>columnSelection</key>
435
+ <false/>
274
436
  <key>firstVisibleColumn</key>
275
437
  <integer>0</integer>
276
438
  <key>firstVisibleLine</key>
277
439
  <integer>10</integer>
440
+ <key>selectFrom</key>
441
+ <dict>
442
+ <key>column</key>
443
+ <integer>0</integer>
444
+ <key>line</key>
445
+ <integer>21</integer>
446
+ </dict>
447
+ <key>selectTo</key>
448
+ <dict>
449
+ <key>column</key>
450
+ <integer>0</integer>
451
+ <key>line</key>
452
+ <integer>16</integer>
453
+ </dict>
278
454
  </dict>
279
455
  <key>test/test_ldap_changelog.rb</key>
280
456
  <dict>
@@ -295,54 +471,98 @@
295
471
  <key>caret</key>
296
472
  <dict>
297
473
  <key>column</key>
298
- <integer>15</integer>
474
+ <integer>0</integer>
299
475
  <key>line</key>
300
- <integer>85</integer>
476
+ <integer>84</integer>
301
477
  </dict>
302
478
  <key>firstVisibleColumn</key>
303
479
  <integer>0</integer>
304
480
  <key>firstVisibleLine</key>
305
- <integer>64</integer>
481
+ <integer>0</integer>
482
+ </dict>
483
+ <key>test/test_ldif.rb</key>
484
+ <dict>
485
+ <key>caret</key>
486
+ <dict>
487
+ <key>column</key>
488
+ <integer>0</integer>
489
+ <key>line</key>
490
+ <integer>41</integer>
491
+ </dict>
492
+ <key>firstVisibleColumn</key>
493
+ <integer>0</integer>
494
+ <key>firstVisibleLine</key>
495
+ <integer>23</integer>
306
496
  </dict>
307
497
  <key>test/test_memory_connectors.rb</key>
308
498
  <dict>
309
499
  <key>caret</key>
310
500
  <dict>
311
501
  <key>column</key>
312
- <integer>14</integer>
502
+ <integer>13</integer>
313
503
  <key>line</key>
314
- <integer>42</integer>
504
+ <integer>27</integer>
315
505
  </dict>
316
506
  <key>firstVisibleColumn</key>
317
507
  <integer>0</integer>
318
508
  <key>firstVisibleLine</key>
319
- <integer>7</integer>
509
+ <integer>8</integer>
510
+ </dict>
511
+ <key>test/test_rubysync.rb</key>
512
+ <dict>
513
+ <key>caret</key>
514
+ <dict>
515
+ <key>column</key>
516
+ <integer>0</integer>
517
+ <key>line</key>
518
+ <integer>27</integer>
519
+ </dict>
520
+ <key>firstVisibleColumn</key>
521
+ <integer>0</integer>
522
+ <key>firstVisibleLine</key>
523
+ <integer>0</integer>
524
+ </dict>
525
+ <key>test/ts_rubysync.rb</key>
526
+ <dict>
527
+ <key>caret</key>
528
+ <dict>
529
+ <key>column</key>
530
+ <integer>0</integer>
531
+ <key>line</key>
532
+ <integer>15</integer>
533
+ </dict>
534
+ <key>columnSelection</key>
535
+ <false/>
536
+ <key>firstVisibleColumn</key>
537
+ <integer>0</integer>
538
+ <key>firstVisibleLine</key>
539
+ <integer>0</integer>
540
+ <key>selectFrom</key>
541
+ <dict>
542
+ <key>column</key>
543
+ <integer>39</integer>
544
+ <key>line</key>
545
+ <integer>21</integer>
546
+ </dict>
547
+ <key>selectTo</key>
548
+ <dict>
549
+ <key>column</key>
550
+ <integer>0</integer>
551
+ <key>line</key>
552
+ <integer>15</integer>
553
+ </dict>
320
554
  </dict>
321
555
  </dict>
322
556
  <key>openDocuments</key>
323
557
  <array>
324
558
  <string>lib/ruby_sync/connectors/xml_connector.rb</string>
325
- <string>lib/ruby_sync/connectors/active_record_connector.rb</string>
326
- <string>lib/ruby_sync/connectors/active_record_event_handler.rb</string>
327
- <string>lib/ruby_sync/connectors/active_record_association_handler.rb</string>
328
- <string>test/test_active_record_vault.rb</string>
329
- <string>test/test_ldap_connector.rb</string>
330
- <string>test/test_ldap_changelog.rb</string>
331
- <string>test/ruby_sync_test.rb</string>
332
- <string>test/test_base_pipeline.rb</string>
333
- <string>lib/ruby_sync/util/utilities.rb</string>
334
- <string>lib/ruby_sync/event.rb</string>
335
- <string>bin/rubysync</string>
336
- <string>lib/ruby_sync.rb</string>
337
- <string>lib/ruby_sync/connectors/ldap_connector.rb</string>
338
- <string>lib/ruby_sync/connectors/base_connector.rb</string>
339
- <string>lib/ruby_sync/connectors/memory_connector.rb</string>
340
- <string>test/test_memory_connectors.rb</string>
341
- <string>lib/ruby_sync/connectors/connector_event_processing.rb</string>
559
+ <string>test/tc_xml_connectors.rb</string>
560
+ <string>Rakefile</string>
561
+ <string>gemspec</string>
342
562
  </array>
343
563
  <key>showFileHierarchyDrawer</key>
344
564
  <true/>
345
565
  <key>windowFrame</key>
346
- <string>{{480, 51}, {795, 725}}</string>
566
+ <string>{{-1024, -139}, {1024, 1024}}</string>
347
567
  </dict>
348
568
  </plist>