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
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (c) 2007 Ritchie Young. All rights reserved.
4
+ #
5
+ # This file is part of RubySync.
6
+ #
7
+ # RubySync is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
9
+ #
10
+ # RubySync is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
11
+ # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License along with RubySync; if not, write to the
14
+ # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
15
+
16
+ #
17
+ # Tests transformation operations in the Event class
18
+ #
19
+ [File.dirname(__FILE__) + '/../lib', File.dirname(__FILE__)].each do |lib_path|
20
+ $:.unshift lib_path unless $:.include?(lib_path) || $:.include?(File.expand_path(lib_path))
21
+ end
22
+ require 'ruby_sync_test'
23
+ require 'ruby_sync/connectors/xml_connector'
24
+
25
+
26
+ class TransformationVaultConnector < RubySync::Connectors::MemoryConnector
27
+ dbm_path "/tmp/rubysync_xml"
28
+ end
29
+
30
+ class TransformationClientConnector < RubySync::Connectors::MemoryConnector
31
+ dbm_path "/tmp/rubysync_memory"
32
+ end
33
+
34
+
35
+ class TransformationTestPipeline < RubySync::Pipelines::BasePipeline
36
+ client :transformation_vault
37
+ vault :transformation_client
38
+
39
+ in_transform do
40
+ map :first_name, :givenName
41
+ map :last_name, :sn
42
+ # Calculated value
43
+ map(:hobbies) {values_for(:interests).join ':'}
44
+ # Constant string
45
+ map(:note) {"Created by RubySync"}
46
+ map(:shopping) {%w/fish milk bread/}
47
+ end
48
+ end
49
+
50
+ class TcTransformation < Test::Unit::TestCase
51
+
52
+ include RubySyncTest
53
+
54
+ def client_path() 'bob'; end
55
+ def vault_path() 'bob'; end
56
+
57
+ def testPipeline
58
+ TransformationTestPipeline
59
+ end
60
+
61
+ def test_transform
62
+ @client['bob'] = @bob_details
63
+ @pipeline.run_once
64
+ assert_equal @bob_details['givenName'], @vault['bob']['first_name']
65
+ assert_equal @bob_details['sn'], @vault['bob']['last_name']
66
+ assert_equal "Created by RubySync", @vault['bob']['note'][0]
67
+ assert_equal "music:makeup", @vault['bob']['hobbies'][0]
68
+ assert_equal %w/fish milk bread/, @vault['bob']['shopping']
69
+ end
70
+
71
+ end
@@ -45,7 +45,7 @@ class C < A
45
45
  end
46
46
 
47
47
 
48
- class TestUtilities < Test::Unit::TestCase
48
+ class TcUtilities < Test::Unit::TestCase
49
49
 
50
50
  def test_class_option
51
51
  b = B.new
@@ -60,4 +60,31 @@ class TestUtilities < Test::Unit::TestCase
60
60
  assert_equal WRONG, c.just_one
61
61
  end
62
62
 
63
+
64
+ def test_effective_operations
65
+ a = A.new
66
+ entry = {
67
+ "sn" => "Fox",
68
+ "givenName" => %w{Michael Andrew},
69
+ "shows" => "Family Ties"
70
+ }
71
+
72
+ op = RubySync::Operation
73
+ ops = [
74
+ op.add("fans", ["Ritchie"]),
75
+ op.add("shows", ["Scrubs", "Boston Legal"]),
76
+ op.replace("givenName", %w{Michael J}),
77
+ op.delete("movies","Bright Lights, Big City")
78
+ ]
79
+
80
+ e = a.effective_operations(ops, entry)
81
+
82
+ assert_equal op.add("fans", ["Ritchie"]), e[0]
83
+ assert_equal op.replace("shows", ["Scrubs", "Boston Legal"]), e[1]
84
+ assert_equal op.replace("givenName", %w{Michael J}), e[2]
85
+ assert_equal 3, e.size
86
+ end
87
+
88
+
89
+
63
90
  end
@@ -24,24 +24,125 @@ require 'hashlike_tests'
24
24
  require 'ruby_sync/connectors/xml_connector'
25
25
 
26
26
 
27
- class TestAConnector < RubySync::Connectors::XmlConnector
27
+ class XmlTestAConnector < RubySync::Connectors::XmlConnector
28
28
  dbm_path "/tmp/rubysync_a"
29
29
  filename "/tmp/rubysync_a.xml"
30
30
  end
31
31
 
32
- class TestBConnector < RubySync::Connectors::XmlConnector
32
+ class XmlTestBConnector < RubySync::Connectors::XmlConnector
33
33
  dbm_path "/tmp/rubysync_b"
34
34
  filename "/tmp/rubysync_b.xml"
35
35
  end
36
36
 
37
- class TestPipeline < RubySync::Pipelines::BasePipeline
38
- client :test_a
39
- vault :test_b
37
+ class XmlTestConnector < RubySync::Connectors::XmlConnector
38
+ filename "/tmp/rubysync_test.xml"
40
39
  end
41
40
 
42
- class TestMemoryConnectors < Test::Unit::TestCase
41
+ class XmlTestPipeline < RubySync::Pipelines::BasePipeline
42
+ client :xml_test_a
43
+ vault :xml_test_b
44
+ end
45
+
46
+ class TcXmlConnectors < Test::Unit::TestCase
43
47
 
44
48
  include RubySyncTest
45
49
  include HashlikeTests
46
50
 
51
+ alias_method :old_setup, :setup
52
+ def setup
53
+ old_setup
54
+ @tc = XmlTestConnector.new
55
+ File.delete_if_exists [@client.filename, @vault.filename, @tc.filename]
56
+ xml_test_document
57
+ @tc.started
58
+ end
59
+
60
+ alias_method :old_teardown, :teardown
61
+ def teardown
62
+ @tc.stopped
63
+ end
64
+
65
+ def testPipeline
66
+ XmlTestPipeline
67
+ end
68
+
69
+
70
+ # def test_with_xml()
71
+ # File.delete(@client.filename)
72
+ # mrA = {
73
+ # 'sn' => "A",
74
+ # 'givenName' => 'Mr'
75
+ # }
76
+ # @client.with_xml do |content|
77
+ # assert_equal({}, content)
78
+ # content['a'] = mrA
79
+ # end
80
+ # @client.with_xml do |content|
81
+ # assert_equal(mrA, content['a'])
82
+ # end
83
+ # end
84
+
85
+
86
+ def test_xml_delete
87
+ assert_not_nil @tc['ctd']
88
+ assert_equal ['Dummy'],@tc["ctd"]['sn']
89
+ @tc.delete "ctd"
90
+ assert_nil @tc['ctd']
91
+ end
92
+
93
+ def test_to_xml
94
+ entry = {
95
+ 'sn'=>['Smith'],
96
+ 'givenName'=>%w/Bobby Earl/
97
+ }
98
+
99
+ xml = @tc.to_xml('bob', entry)
100
+ doc = REXML::Document.new()
101
+ doc << xml
102
+ assert_equal doc, xml.document
103
+ values = []
104
+ xml.each_element("attr[@name='sn']/value") {|e| values << e.text}
105
+ assert_equal as_array(entry['sn']), values
106
+ values = []
107
+ xml.each_element("attr[@name='givenName']/value") {|e| values << e.text}
108
+ assert_equal entry['givenName'], values
109
+ assert_equal entry, @tc.to_entry(xml)
110
+ end
111
+
112
+ def xml_test_document
113
+ File.open(@tc.filename, "w") do |f|
114
+ f.write <<END
115
+ <?xml version="1.0"?>
116
+ <entries>
117
+ <entry id="ritchie">
118
+ <attr name="sn">
119
+ <value>Young</value>
120
+ </attr>
121
+ <attr name="givenName">
122
+ <value>Ritchie</value>
123
+ </attr>
124
+ <attr name="hobbies">
125
+ <value>Juggling</value>
126
+ <value>Running</value>
127
+ <value>Skipping</value>
128
+ </attr>
129
+ </entry>
130
+ <entry id="ctd">
131
+ <attr name="sn">
132
+ <value>Dummy</value>
133
+ </attr>
134
+ <attr name="givenName">
135
+ <value>Crash</value>
136
+ <value>Test</value>
137
+ </attr>
138
+ <attr name="hobbies">
139
+ <value>Falling</value>
140
+ <value>Crashing</value>
141
+ <value>Burning</value>
142
+ </attr>
143
+ </entry>
144
+ </entries>
145
+ END
146
+ end
147
+ end
47
148
  end
data/test/ts_rubysync.rb CHANGED
@@ -14,9 +14,14 @@
14
14
  # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
15
15
 
16
16
  require 'test/unit'
17
- #require 'test_csv_file_connector'
18
- require 'test_memory_connectors'
19
- require 'test_ldif'
20
- require 'test_base_pipeline'
21
- #require 'test_ldap_connector'
22
- #require 'test_active_record_connector'
17
+ require 'tc_csv_file_connector'
18
+ require 'tc_memory_connectors'
19
+ require 'tc_ldif'
20
+ require 'tc_base_pipeline'
21
+ require 'tc_xml_connectors'
22
+ require 'tc_transformation'
23
+ #require 'tc_active_record_connector'
24
+
25
+ # The following require some setup on your computer before they'll work
26
+
27
+ #require 'tc_ldap_connector'
metadata CHANGED
@@ -3,15 +3,15 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rubysync
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.3
7
- date: 2007-08-27 00:00:00 +08:00
6
+ version: 0.0.4
7
+ date: 2007-09-18 00:00:00 +08:00
8
8
  summary: Event driven identity synchronization engine
9
9
  require_paths:
10
10
  - lib
11
11
  email: ritchiey@gmail.com
12
12
  homepage: " by Ritchie Young"
13
13
  rubyforge_project: rubysync
14
- description: "You can configure RubySync to perform transformations on the data as it syncs. RubySync is designed both as a handy utility to pack into your directory management toolkit or as a fully-fledged provisioning system for your organisation. == FEATURES/PROBLEMS: * Add support for running continually * Test suites. Individual tests work but test suites have trouble ??? == SYNOPSIS: This sets up the skeleton of a configuration for importing comma delimeted text files into a database. Note, if the application happens to be a Rails app then it can also export changes."
14
+ description: "You can configure RubySync to perform transformations on the data as it syncs. RubySync is designed both as a handy utility to pack into your directory management toolkit or as a fully-fledged provisioning system for your organisation. == FEATURES/PROBLEMS: == SYNOPSIS: This sets up the skeleton of a configuration for importing comma delimeted text files into a database. Note, if the application happens to be a Rails app then it can also export changes."
15
15
  autorequire:
16
16
  default_executable:
17
17
  bindir: bin
@@ -38,6 +38,14 @@ files:
38
38
  - Rakefile
39
39
  - bin/.DS_Store
40
40
  - bin/rubysync
41
+ - bin/rubysync.rb
42
+ - docs/in_pipeline.graffle
43
+ - docs/init_openldap.ldif
44
+ - docs/out_pipeline.graffle
45
+ - docs/schema/99rubysync.ldif
46
+ - docs/schema/rubysync.schema
47
+ - docs/to_sync.txt
48
+ - docs/walkthru.txt
41
49
  - examples/.DS_Store
42
50
  - examples/ar_client_webapp/README
43
51
  - examples/ar_client_webapp/Rakefile
@@ -210,6 +218,8 @@ files:
210
218
  - lib/ruby_sync/connectors/connector_event_processing.rb
211
219
  - lib/ruby_sync/connectors/csv_file_connector.rb
212
220
  - lib/ruby_sync/connectors/file_connector.rb
221
+ - lib/ruby_sync/connectors/ldap_associations.rb
222
+ - lib/ruby_sync/connectors/ldap_changelog_connector.rb
213
223
  - lib/ruby_sync/connectors/ldap_connector.rb
214
224
  - lib/ruby_sync/connectors/memory_connector.rb
215
225
  - lib/ruby_sync/connectors/xml_connector.rb
@@ -224,6 +234,7 @@ files:
224
234
  - nbproject/project.xml
225
235
  - rubysync.tmproj
226
236
  - test/.DS_Store
237
+ - test/.LCKts_rubysync.rb~
227
238
  - test/data/example1.ldif
228
239
  - test/data/example2.ldif
229
240
  - test/data/example3.ldif
@@ -233,33 +244,24 @@ files:
233
244
  - test/data/example7.ldif
234
245
  - test/hashlike_tests.rb
235
246
  - test/ruby_sync_test.rb
247
+ - test/tc_active_record_connector.rb
248
+ - test/tc_base_connector.rb
249
+ - test/tc_base_pipeline.rb
250
+ - test/tc_changelog_ldap_connector.rb
251
+ - test/tc_csv_file_connector.rb
252
+ - test/tc_event.rb
253
+ - test/tc_ldap_changelog.rb
254
+ - test/tc_ldap_connector.rb
255
+ - test/tc_ldap_vault.rb
256
+ - test/tc_ldif.rb
257
+ - test/tc_memory_connectors.rb
258
+ - test/tc_rubysync.rb
259
+ - test/tc_transformation.rb
260
+ - test/tc_utilities.rb
236
261
  - test/tc_xml_connectors.rb
237
- - test/test_active_record_vault.rb
238
- - test/test_base_connector.rb
239
- - test/test_base_pipeline.rb
240
- - test/test_csv_file_connector.rb
241
- - test/test_event.rb
242
- - test/test_ldap_changelog.rb
243
- - test/test_ldap_connector.rb
244
- - test/test_ldap_vault.rb
245
- - test/test_ldif.rb
246
- - test/test_memory_connectors.rb
247
- - test/test_rubysync.rb
248
- - test/test_utilities.rb
249
262
  - test/ts_rubysync.rb
250
- test_files:
251
- - test/test_active_record_vault.rb
252
- - test/test_base_connector.rb
253
- - test/test_base_pipeline.rb
254
- - test/test_csv_file_connector.rb
255
- - test/test_event.rb
256
- - test/test_ldap_changelog.rb
257
- - test/test_ldap_connector.rb
258
- - test/test_ldap_vault.rb
259
- - test/test_ldif.rb
260
- - test/test_memory_connectors.rb
261
- - test/test_rubysync.rb
262
- - test/test_utilities.rb
263
+ test_files: []
264
+
263
265
  rdoc_options:
264
266
  - --main
265
267
  - README.txt
@@ -267,11 +269,14 @@ extra_rdoc_files:
267
269
  - HISTORY.txt
268
270
  - Manifest.txt
269
271
  - README.txt
272
+ - docs/to_sync.txt
273
+ - docs/walkthru.txt
270
274
  - examples/ar_client_webapp/public/robots.txt
271
275
  - examples/ar_webapp/public/robots.txt
272
276
  executables:
273
277
  - .DS_Store
274
278
  - rubysync
279
+ - rubysync.rb
275
280
  extensions: []
276
281
 
277
282
  requirements: []