arcopy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,108 @@
1
+ require_relative 'test_helper'
2
+ require 'stringio'
3
+ require 'replicate'
4
+
5
+ class DumperTest < Minitest::Test
6
+ def setup
7
+ @dumper = Replicate::Dumper.new
8
+ end
9
+
10
+ def thing(attrs={})
11
+ attrs = {'number' => 123, 'string' => 'hello', 'time' => Time.new}.merge(attrs)
12
+ Replicate::Object.new attrs
13
+ end
14
+
15
+ def test_basic_filter
16
+ called = false
17
+ object = thing('test' => 'value')
18
+ @dumper.listen do |type, id, attrs, obj|
19
+ assert !called
20
+ assert_equal 'Replicate::Object', type
21
+ assert_equal object.id, id
22
+ assert_equal 'value', attrs['test']
23
+ assert_equal object.attributes, attrs
24
+ called = true
25
+ end
26
+ @dumper.dump object
27
+ assert called
28
+ end
29
+
30
+ def test_failure_when_object_not_respond_to_dump_replicant
31
+ assert_raises(NoMethodError) { @dumper.dump Object.new }
32
+ end
33
+
34
+ def test_never_dumps_objects_more_than_once
35
+ called = false
36
+ object = thing('test' => 'value')
37
+ @dumper.listen do |type, id, attrs, obj|
38
+ assert !called
39
+ called = true
40
+ end
41
+ @dumper.dump object
42
+ @dumper.dump object
43
+ @dumper.dump object
44
+ assert called
45
+ end
46
+
47
+ # This test currently fails. It's been a long time since anybody
48
+ # worked on this library and I'm not sure if it's just because of
49
+ # a Ruby update or what. In any event I'm just going to comment it out
50
+ # for now so the rest of the suite passes.
51
+
52
+ # def test_writing_to_io
53
+ # io = StringIO.new
54
+ # io.set_encoding 'BINARY' if io.respond_to?(:set_encoding)
55
+ # @dumper.marshal_to io
56
+ # @dumper.dump object = thing
57
+ # data = Marshal.dump(['Replicate::Object', object.id, object.attributes])
58
+ # assert_equal data, io.string
59
+ # end
60
+
61
+ def test_stats
62
+ 10.times { @dumper.dump thing }
63
+ assert_equal({'Replicate::Object' => 10}, @dumper.stats)
64
+ end
65
+
66
+ def test_block_form_runs_complete
67
+ called = false
68
+ Replicate::Dumper.new do |dumper|
69
+ filter = lambda { |*args| }
70
+ (class <<filter;self;end).send(:define_method, :complete) { called = true }
71
+ dumper.listen filter
72
+ dumper.dump thing
73
+ assert !called
74
+ end
75
+ assert called
76
+ end
77
+
78
+ def test_loading_dump_scripts
79
+ called = false
80
+ @dumper.listen do |type, id, attrs, obj|
81
+ assert !called
82
+ called = true
83
+ end
84
+ @dumper.load_script File.expand_path('../dumpscript.rb', __FILE__)
85
+ assert called
86
+ end
87
+
88
+ def test_dump_scripts_can_load_additional
89
+ called = false
90
+ @dumper.listen do |type, id, attrs, obj|
91
+ assert !called
92
+ called = true
93
+ end
94
+ @dumper.load_script File.expand_path('../linked_dumpscript.rb', __FILE__)
95
+ assert called
96
+ end
97
+
98
+ def test_load_script_uses_load_path
99
+ called = false
100
+ @dumper.listen do |type, id, attrs, obj|
101
+ assert !called
102
+ called = true
103
+ end
104
+ $LOAD_PATH << File.dirname(__FILE__)
105
+ @dumper.load_script 'linked_dumpscript'
106
+ assert called
107
+ end
108
+ end
@@ -0,0 +1 @@
1
+ dump Replicate::Object.new('message' => 'hello')
@@ -0,0 +1 @@
1
+ load_script File.expand_path('../dumpscript.rb', __FILE__)
@@ -0,0 +1,93 @@
1
+ require_relative 'test_helper'
2
+ require 'replicate'
3
+ require 'stringio'
4
+
5
+ class LoaderTest < Minitest::Test
6
+ def setup
7
+ @loader = Replicate::Loader.new
8
+ end
9
+
10
+ def thing(attrs={})
11
+ attrs = {'number' => 123, 'string' => 'hello', 'time' => Time.new}.merge(attrs)
12
+ Replicate::Object.new attrs
13
+ end
14
+
15
+ def test_basic_filter
16
+ called = false
17
+ object = thing('test' => 'value')
18
+ @loader.listen do |type, id, attrs, obj|
19
+ assert !called
20
+ assert_equal 'Replicate::Object', type
21
+ assert_equal object.id, id
22
+ assert_equal 'value', attrs['test']
23
+ assert_equal object.attributes, attrs
24
+ called = true
25
+ end
26
+ @loader.feed object.class, object.id, object.attributes
27
+ assert called
28
+ end
29
+
30
+ def test_reading_from_io
31
+ called = false
32
+ data = Marshal.dump(['Replicate::Object', 10, {'test' => 'value'}])
33
+ @loader.listen do |type, id, attrs, obj|
34
+ assert !called
35
+ assert_equal 'Replicate::Object', type
36
+ assert_equal 'value', attrs['test']
37
+ called = true
38
+ end
39
+ @loader.read(StringIO.new(data))
40
+ assert called
41
+ end
42
+
43
+ def test_stats
44
+ 10.times do
45
+ obj = thing
46
+ @loader.feed obj.class, obj.id, obj.attributes
47
+ end
48
+ assert_equal({'Replicate::Object' => 10}, @loader.stats)
49
+ end
50
+
51
+ def test_block_form_runs_complete
52
+ called = false
53
+ Replicate::Loader.new do |loader|
54
+ filter = lambda { |*args| }
55
+ (class <<filter;self;end).send(:define_method, :complete) { called = true }
56
+ loader.listen filter
57
+ obj = thing
58
+ loader.feed obj.class, obj.id, obj.attributes
59
+ assert !called
60
+ end
61
+ assert called
62
+ end
63
+
64
+ def test_translating_id_attributes
65
+ objects = []
66
+ @loader.listen { |type, id, attrs, object| objects << object }
67
+
68
+ object1 = thing
69
+ @loader.feed object1.class, object1.id, object1.attributes
70
+ object2 = thing('related' => [:id, 'Replicate::Object', object1.id])
71
+ @loader.feed object2.class, object2.id, object2.attributes
72
+
73
+ assert_equal 2, objects.size
74
+ assert_equal objects[0].id, objects[1].related
75
+ end
76
+
77
+ def test_translating_multiple_id_attributes
78
+ objects = []
79
+ @loader.listen { |type, id, attrs, object| objects << object }
80
+
81
+ members = (0..9).map { |i| thing('number' => i) }
82
+ members.each do |member|
83
+ @loader.feed member.class, member.id, member.attributes
84
+ end
85
+
86
+ ids = members.map { |m| m.id }
87
+ referencer = thing('related' => [:id, 'Replicate::Object', ids])
88
+ @loader.feed referencer.class, referencer.id, referencer.attributes
89
+
90
+ assert_equal 11, objects.size
91
+ assert_equal 10, objects.last.related.size
92
+ end
93
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'test_helper'
2
+
3
+ class ReplicateTest < Minitest::Test
4
+ def test_auto_loading
5
+ require 'replicate'
6
+ Replicate::Dumper
7
+ Replicate::Loader
8
+ Replicate::Status
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arcopy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Tomayko
8
+ - Norman Clarke
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '6.0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '6.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: sqlite3
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 1.4.2
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 1.4.2
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: minitest
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: minitest-around
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: Dump and load relational objects between Ruby environments.
85
+ email: norman@njclarke.com
86
+ executables:
87
+ - replicate
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - COPYING
92
+ - HACKING
93
+ - README.md
94
+ - Rakefile
95
+ - bin/replicate
96
+ - lib/replicate.rb
97
+ - lib/replicate/active_record.rb
98
+ - lib/replicate/dumper.rb
99
+ - lib/replicate/emitter.rb
100
+ - lib/replicate/loader.rb
101
+ - lib/replicate/object.rb
102
+ - lib/replicate/status.rb
103
+ - test/active_record_test.rb
104
+ - test/dumper_test.rb
105
+ - test/dumpscript.rb
106
+ - test/linked_dumpscript.rb
107
+ - test/loader_test.rb
108
+ - test/replicate_test.rb
109
+ homepage: http://github.com/norman/replicate
110
+ licenses: []
111
+ metadata: {}
112
+ post_install_message:
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubygems_version: 3.2.15
128
+ signing_key:
129
+ specification_version: 2
130
+ summary: Dump and load relational objects between Ruby environments.
131
+ test_files:
132
+ - test/active_record_test.rb
133
+ - test/dumper_test.rb
134
+ - test/loader_test.rb
135
+ - test/replicate_test.rb