undestroy 0.0.2 → 0.1.0
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.
- data/ARCH.md +13 -24
- data/README.md +72 -27
- data/lib/undestroy/binding.rb +1 -0
- data/lib/undestroy/binding/active_record.rb +53 -11
- data/lib/undestroy/binding/active_record/migration_statement.rb +118 -0
- data/lib/undestroy/binding/active_record/restorable.rb +28 -0
- data/lib/undestroy/config.rb +32 -8
- data/lib/undestroy/config/field.rb +20 -0
- data/lib/undestroy/restore.rb +44 -0
- data/lib/undestroy/version.rb +1 -1
- data/lib/undestroy/without_binding.rb +1 -0
- data/test/fixtures/ar.rb +8 -4
- data/test/fixtures/load_test/models1/test_model001.rb +2 -0
- data/test/fixtures/load_test/models1/test_model002.rb +2 -0
- data/test/fixtures/load_test/models1/test_module001.rb +2 -0
- data/test/fixtures/load_test/models1/test_module001/test_model003.rb +2 -0
- data/test/fixtures/load_test/models2/test_model001.rb +2 -0
- data/test/fixtures/load_test/models2/test_model002.rb +2 -0
- data/test/fixtures/load_test/models2/test_module001.rb +2 -0
- data/test/fixtures/load_test/models2/test_module001/test_model003.rb +2 -0
- data/test/helper.rb +12 -0
- data/test/helpers/model_loading.rb +20 -0
- data/test/integration/active_record_test.rb +50 -1
- data/test/irb.rb +2 -0
- data/test/unit/archive_test.rb +1 -1
- data/test/unit/binding/active_record/migration_statement_test.rb +306 -0
- data/test/unit/binding/active_record/restorable_test.rb +132 -0
- data/test/unit/binding/active_record_test.rb +187 -19
- data/test/unit/config/field_test.rb +86 -0
- data/test/unit/config_test.rb +114 -8
- data/test/unit/restore_test.rb +95 -0
- metadata +35 -3
data/test/unit/config_test.rb
CHANGED
@@ -53,12 +53,42 @@ class Undestroy::Config::Test
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
class CatalogClassMethod < Base
|
57
|
+
desc 'catalog class method'
|
58
|
+
|
59
|
+
should "exist" do
|
60
|
+
assert_respond_to :catalog, subject
|
61
|
+
end
|
62
|
+
|
63
|
+
should "return Array" do
|
64
|
+
assert_kind_of Array, subject.catalog
|
65
|
+
end
|
66
|
+
|
67
|
+
should "persist Array" do
|
68
|
+
assert_equal subject.catalog.object_id, subject.catalog.object_id
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class ResetCatalogClassMethod < Base
|
73
|
+
desc 'reset_catalog class method'
|
74
|
+
|
75
|
+
should "exist" do
|
76
|
+
assert_respond_to :reset_catalog, subject
|
77
|
+
end
|
78
|
+
|
79
|
+
should "reset catalog cache" do
|
80
|
+
catalog = subject.catalog
|
81
|
+
subject.reset_catalog
|
82
|
+
assert_not_equal catalog.object_id, subject.catalog.object_id
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
56
86
|
class BasicInstance < Base
|
57
87
|
desc 'basic instance'
|
58
88
|
subject { Undestroy::Config.new }
|
59
89
|
|
60
|
-
should have_accessors :table_name, :abstract_class, :fields, :migrate
|
61
|
-
should have_accessors :source_class, :target_class, :internals
|
90
|
+
should have_accessors :table_name, :abstract_class, :fields, :migrate, :indexes, :prefix
|
91
|
+
should have_accessors :source_class, :target_class, :internals, :model_paths
|
62
92
|
end
|
63
93
|
|
64
94
|
class InitMethod < Base
|
@@ -72,9 +102,9 @@ class Undestroy::Config::Test
|
|
72
102
|
should "default fields to delayed deleted_at" do
|
73
103
|
config = subject.new
|
74
104
|
assert_equal [:deleted_at], config.fields.keys
|
75
|
-
assert_instance_of
|
76
|
-
assert_instance_of Time, config.fields[:deleted_at].
|
77
|
-
assert Time.now - config.fields[:deleted_at].
|
105
|
+
assert_instance_of Undestroy::Config::Field, config.fields[:deleted_at]
|
106
|
+
assert_instance_of Time, config.fields[:deleted_at].value(1)
|
107
|
+
assert Time.now - config.fields[:deleted_at].value(1)< 1
|
78
108
|
end
|
79
109
|
|
80
110
|
should "default internals to internal classes" do
|
@@ -83,6 +113,46 @@ class Undestroy::Config::Test
|
|
83
113
|
assert_instance_of Hash, config.internals
|
84
114
|
assert_equal Undestroy::Archive, config.internals[:archive]
|
85
115
|
assert_equal Undestroy::Transfer, config.internals[:transfer]
|
116
|
+
assert_equal Undestroy::Restore, config.internals[:restore]
|
117
|
+
end
|
118
|
+
|
119
|
+
should "default indexes to false" do
|
120
|
+
config = subject.new
|
121
|
+
assert_equal false, config.indexes
|
122
|
+
end
|
123
|
+
|
124
|
+
should "default prefix to 'archive_'" do
|
125
|
+
config = subject.new
|
126
|
+
assert_equal 'archive_', config.prefix
|
127
|
+
end
|
128
|
+
|
129
|
+
should "default model_paths to [] if Rails is not defined" do
|
130
|
+
config = subject.new
|
131
|
+
assert_equal [], config.model_paths
|
132
|
+
end
|
133
|
+
|
134
|
+
should "dup passed in objects" do
|
135
|
+
fields = {}
|
136
|
+
config = subject.new :fields => fields
|
137
|
+
config.add_field :foo, :bar, :baz
|
138
|
+
assert fields.empty?
|
139
|
+
end
|
140
|
+
|
141
|
+
should "default model_paths to [Rails.root.join('app', 'models')] if Rails is defined" do
|
142
|
+
module ::Rails
|
143
|
+
@@base_root = "/foo/bar"
|
144
|
+
def self.root
|
145
|
+
self
|
146
|
+
end
|
147
|
+
|
148
|
+
def self.join(*args)
|
149
|
+
File.join(@@base_root, *args)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
config = subject.new
|
154
|
+
assert_equal ["/foo/bar/app/models"], config.model_paths
|
155
|
+
Object.send(:remove_const, :Rails)
|
86
156
|
end
|
87
157
|
|
88
158
|
should "set config options using provided hash" do
|
@@ -90,13 +160,20 @@ class Undestroy::Config::Test
|
|
90
160
|
:abstract_class => "test_archive",
|
91
161
|
:target_class => "foo",
|
92
162
|
:fields => {},
|
93
|
-
:migrate => false
|
163
|
+
:migrate => false,
|
164
|
+
:indexes => true
|
94
165
|
|
95
166
|
assert_equal "foo", config.table_name
|
96
167
|
assert_equal "foo", config.target_class
|
97
168
|
assert_equal "test_archive", config.abstract_class
|
98
169
|
assert_equal Hash.new, config.fields
|
99
170
|
assert_equal false, config.migrate
|
171
|
+
assert_equal true, config.indexes
|
172
|
+
end
|
173
|
+
|
174
|
+
should "track instances in catalog" do
|
175
|
+
config = subject.new
|
176
|
+
assert_includes config, subject.catalog
|
100
177
|
end
|
101
178
|
|
102
179
|
end
|
@@ -118,7 +195,7 @@ class Undestroy::Config::Test
|
|
118
195
|
end
|
119
196
|
|
120
197
|
|
121
|
-
class
|
198
|
+
class PrimitiveFieldsMethod < Base
|
122
199
|
desc 'primitive_fields method'
|
123
200
|
subject { @config ||= Undestroy::Config.new }
|
124
201
|
|
@@ -137,10 +214,39 @@ class Undestroy::Config::Test
|
|
137
214
|
|
138
215
|
should "pass argument in to proc" do
|
139
216
|
val = {}
|
140
|
-
subject.fields = { :test =>
|
217
|
+
subject.fields = { :test => Undestroy::Config::Field.new(:test, :string) { |arg| val[:arg] = arg } }
|
141
218
|
subject.primitive_fields("FOOO!")
|
142
219
|
assert_equal "FOOO!", val[:arg]
|
143
220
|
end
|
144
221
|
end
|
145
222
|
|
223
|
+
class AddFieldMethod < Base
|
224
|
+
desc 'add_field method'
|
225
|
+
subject { @config ||= Undestroy::Config.new }
|
226
|
+
|
227
|
+
should "pass args to Config::Field constructor" do
|
228
|
+
field = subject.add_field :foo, :string, 'val'
|
229
|
+
assert_instance_of Undestroy::Config::Field, field
|
230
|
+
assert_equal :foo, field.name
|
231
|
+
assert_equal :string, field.type
|
232
|
+
assert_equal 'val', field.raw_value
|
233
|
+
end
|
234
|
+
|
235
|
+
should "pass block to Config::Field constructor" do
|
236
|
+
block = proc { |i| "foo" }
|
237
|
+
field = subject.add_field :foo, :string, &block
|
238
|
+
assert_equal block, field.raw_value
|
239
|
+
end
|
240
|
+
|
241
|
+
should "store new Field on fields hash" do
|
242
|
+
field = subject.add_field :foo, :string, 'val'
|
243
|
+
assert_equal field, subject.fields[:foo]
|
244
|
+
end
|
245
|
+
|
246
|
+
should "store field name as symbol" do
|
247
|
+
field = subject.add_field 'foo', :string, 'val'
|
248
|
+
assert_equal field, subject.fields[:foo]
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
146
252
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
module Undestroy::Restore::Test
|
4
|
+
|
5
|
+
class Base < Undestroy::Test::Base
|
6
|
+
desc 'Undestroy::Restore class'
|
7
|
+
subject { @subject_klass }
|
8
|
+
|
9
|
+
setup do
|
10
|
+
@source_class = Class.new(Undestroy::Test::Fixtures::ARFixture)
|
11
|
+
@target_class = Class.new(Undestroy::Test::Fixtures::ARFixture)
|
12
|
+
@subject_klass = Undestroy::Restore
|
13
|
+
@default_init = {
|
14
|
+
:target => @target_class.construct(:id => 1, 'name' => "Foo", :deleted_at => Time.now),
|
15
|
+
:config => Undestroy::Config.new(
|
16
|
+
:source_class => @source_class,
|
17
|
+
:target_class => @target_class
|
18
|
+
)
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class BasicInstance < Base
|
24
|
+
desc 'basic instance'
|
25
|
+
subject { @restore ||= @subject_klass.new @default_init }
|
26
|
+
|
27
|
+
should have_accessors :target, :config, :transfer
|
28
|
+
end
|
29
|
+
|
30
|
+
class InitMethod < Base
|
31
|
+
desc 'init method'
|
32
|
+
|
33
|
+
should "accept hash of arguments and set them to attributes" do
|
34
|
+
restore = subject.new :target => 1, :config => 2, :transfer => 3
|
35
|
+
assert_equal 1, restore.target
|
36
|
+
assert_equal 2, restore.config
|
37
|
+
assert_equal 3, restore.transfer
|
38
|
+
end
|
39
|
+
|
40
|
+
should "require :target and :config keys" do
|
41
|
+
assert_raises(ArgumentError) { subject.new :transfer => :foo }
|
42
|
+
assert_raises(ArgumentError) { subject.new :target => :foo }
|
43
|
+
assert_raises(ArgumentError) { subject.new :config => :foo }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class TransferMethod < BasicInstance
|
48
|
+
desc 'transfer method'
|
49
|
+
|
50
|
+
should "return instance of config.internals[:transfer]" do
|
51
|
+
assert_instance_of @default_init[:config].internals[:transfer], subject.transfer
|
52
|
+
end
|
53
|
+
|
54
|
+
should ":klass should be config.source_class" do
|
55
|
+
assert_instance_of @default_init[:config].source_class, subject.transfer.target
|
56
|
+
end
|
57
|
+
|
58
|
+
should ":fields should be target.attributes - config.fields.keys" do
|
59
|
+
subject.config.add_field 'deleted_by_id', :string, 'foo'
|
60
|
+
@default_init[:target]['deleted_by_id'] = "Foo"
|
61
|
+
assert_equal({ 'id' => 1, 'name' => "Foo" }, subject.transfer.target.attributes)
|
62
|
+
end
|
63
|
+
|
64
|
+
should "cache transfer object" do
|
65
|
+
assert_equal subject.transfer.object_id, subject.transfer.object_id
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
class RunMethod < BasicInstance
|
71
|
+
desc 'run method'
|
72
|
+
|
73
|
+
should "call run on the transfer" do
|
74
|
+
foo = Class.new do
|
75
|
+
@@called = false
|
76
|
+
def initialize(options={})
|
77
|
+
end
|
78
|
+
|
79
|
+
def run
|
80
|
+
@@called = true
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.called
|
84
|
+
@@called
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
subject.transfer = foo.new
|
89
|
+
subject.run
|
90
|
+
assert foo.called, "Foo was not called"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.2
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Travis Petticrew
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-03-
|
18
|
+
date: 2012-03-26 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :runtime
|
@@ -82,7 +82,11 @@ files:
|
|
82
82
|
- lib/undestroy/archive.rb
|
83
83
|
- lib/undestroy/binding.rb
|
84
84
|
- lib/undestroy/binding/active_record.rb
|
85
|
+
- lib/undestroy/binding/active_record/migration_statement.rb
|
86
|
+
- lib/undestroy/binding/active_record/restorable.rb
|
85
87
|
- lib/undestroy/config.rb
|
88
|
+
- lib/undestroy/config/field.rb
|
89
|
+
- lib/undestroy/restore.rb
|
86
90
|
- lib/undestroy/transfer.rb
|
87
91
|
- lib/undestroy/version.rb
|
88
92
|
- lib/undestroy/with_binding.rb
|
@@ -90,11 +94,25 @@ files:
|
|
90
94
|
- test/fixtures/active_record_models.rb
|
91
95
|
- test/fixtures/ar.rb
|
92
96
|
- test/fixtures/archive.rb
|
97
|
+
- test/fixtures/load_test/models1/test_model001.rb
|
98
|
+
- test/fixtures/load_test/models1/test_model002.rb
|
99
|
+
- test/fixtures/load_test/models1/test_module001.rb
|
100
|
+
- test/fixtures/load_test/models1/test_module001/test_model003.rb
|
101
|
+
- test/fixtures/load_test/models2/test_model001.rb
|
102
|
+
- test/fixtures/load_test/models2/test_model002.rb
|
103
|
+
- test/fixtures/load_test/models2/test_module001.rb
|
104
|
+
- test/fixtures/load_test/models2/test_module001/test_model003.rb
|
93
105
|
- test/helper.rb
|
106
|
+
- test/helpers/model_loading.rb
|
94
107
|
- test/integration/active_record_test.rb
|
108
|
+
- test/irb.rb
|
95
109
|
- test/unit/archive_test.rb
|
110
|
+
- test/unit/binding/active_record/migration_statement_test.rb
|
111
|
+
- test/unit/binding/active_record/restorable_test.rb
|
96
112
|
- test/unit/binding/active_record_test.rb
|
113
|
+
- test/unit/config/field_test.rb
|
97
114
|
- test/unit/config_test.rb
|
115
|
+
- test/unit/restore_test.rb
|
98
116
|
- test/unit/transfer_test.rb
|
99
117
|
- tmp/.gitkeep
|
100
118
|
- undestroy.gemspec
|
@@ -135,9 +153,23 @@ test_files:
|
|
135
153
|
- test/fixtures/active_record_models.rb
|
136
154
|
- test/fixtures/ar.rb
|
137
155
|
- test/fixtures/archive.rb
|
156
|
+
- test/fixtures/load_test/models1/test_model001.rb
|
157
|
+
- test/fixtures/load_test/models1/test_model002.rb
|
158
|
+
- test/fixtures/load_test/models1/test_module001.rb
|
159
|
+
- test/fixtures/load_test/models1/test_module001/test_model003.rb
|
160
|
+
- test/fixtures/load_test/models2/test_model001.rb
|
161
|
+
- test/fixtures/load_test/models2/test_model002.rb
|
162
|
+
- test/fixtures/load_test/models2/test_module001.rb
|
163
|
+
- test/fixtures/load_test/models2/test_module001/test_model003.rb
|
138
164
|
- test/helper.rb
|
165
|
+
- test/helpers/model_loading.rb
|
139
166
|
- test/integration/active_record_test.rb
|
167
|
+
- test/irb.rb
|
140
168
|
- test/unit/archive_test.rb
|
169
|
+
- test/unit/binding/active_record/migration_statement_test.rb
|
170
|
+
- test/unit/binding/active_record/restorable_test.rb
|
141
171
|
- test/unit/binding/active_record_test.rb
|
172
|
+
- test/unit/config/field_test.rb
|
142
173
|
- test/unit/config_test.rb
|
174
|
+
- test/unit/restore_test.rb
|
143
175
|
- test/unit/transfer_test.rb
|