rubysync 0.0.3 → 0.0.4

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