dump 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -15
  2. data/.rubocop_todo.yml +1 -1
  3. data/Gemfile +6 -1
  4. data/LICENSE.txt +1 -1
  5. data/README.markdown +2 -2
  6. data/dump.gemspec +2 -2
  7. data/lib/dump.rb +86 -2
  8. data/lib/{dump_rake/archive_tar_minitar_fix.rb → dump/archive_tar_minitar.rb} +0 -0
  9. data/lib/{dump_rake → dump}/assets.rb +6 -4
  10. data/lib/dump/capistrano/v2.rb +34 -34
  11. data/lib/{dump_rake → dump}/continious_timeout.rb +1 -1
  12. data/lib/{dump_rake → dump}/env.rb +4 -4
  13. data/lib/{dump_rake → dump}/env/filter.rb +1 -1
  14. data/lib/dump/rails_root.rb +19 -0
  15. data/lib/{dump_rake/dump_reader.rb → dump/reader.rb} +25 -17
  16. data/lib/{dump_rake/dump.rb → dump/snapshot.rb} +9 -5
  17. data/lib/{dump_rake → dump}/table_manipulation.rb +28 -14
  18. data/lib/{dump_rake/dump_writer.rb → dump/writer.rb} +13 -5
  19. data/lib/tasks/assets.rake +4 -4
  20. data/lib/tasks/dump.rake +10 -10
  21. data/script/update_readme +3 -3
  22. data/spec/cycle_spec.rb +78 -84
  23. data/spec/{lib/dump_rake → dump}/env/filter_spec.rb +14 -14
  24. data/spec/dump/env_spec.rb +139 -0
  25. data/spec/{lib/dump_rake → dump}/rails_root_spec.rb +11 -13
  26. data/spec/{lib/dump_rake/dump_reader_spec.rb → dump/reader_spec.rb} +89 -89
  27. data/spec/dump/snapshot_spec.rb +290 -0
  28. data/spec/{lib/dump_rake → dump}/table_manipulation_spec.rb +54 -55
  29. data/spec/{lib/dump_rake/dump_writer_spec.rb → dump/writer_spec.rb} +41 -42
  30. data/spec/dump_spec.rb +327 -0
  31. data/spec/recipes/dump_spec.rb +92 -93
  32. data/spec/spec_helper.rb +0 -3
  33. data/spec/tasks/assets_spec.rb +16 -15
  34. data/spec/tasks/dump_spec.rb +30 -29
  35. metadata +75 -98
  36. data/.autotest +0 -13
  37. data/lib/dump_rake.rb +0 -94
  38. data/lib/dump_rake/rails_root.rb +0 -13
  39. data/spec/lib/dump_rake/dump_spec.rb +0 -289
  40. data/spec/lib/dump_rake/env_spec.rb +0 -139
  41. data/spec/lib/dump_rake_spec.rb +0 -326
  42. data/spec/spec.opts +0 -4
@@ -0,0 +1,290 @@
1
+ require 'spec_helper'
2
+ require 'dump/snapshot'
3
+
4
+ describe Dump::Snapshot do
5
+ def dump_path(file_name)
6
+ File.join(Dump.rails_root, 'dump', file_name)
7
+ end
8
+
9
+ def new_dump(file_name)
10
+ Dump::Snapshot.new(dump_path(file_name))
11
+ end
12
+
13
+ describe 'lock' do
14
+ before do
15
+ @yield_receiver = double('yield_receiver')
16
+ end
17
+
18
+ it 'does not yield if file does not exist' do
19
+ expect(@yield_receiver).not_to receive(:fire)
20
+
21
+ described_class.new('hello').lock do
22
+ @yield_receiver.fire
23
+ end
24
+ end
25
+
26
+ it 'does not yield if file can not be locked' do
27
+ expect(@yield_receiver).not_to receive(:fire)
28
+
29
+ @file = double('file')
30
+ expect(@file).to receive(:flock).with(File::LOCK_EX | File::LOCK_NB).and_return(nil)
31
+ expect(@file).to receive(:flock).with(File::LOCK_UN)
32
+ expect(@file).to receive(:close)
33
+ expect(File).to receive(:open).and_return(@file)
34
+
35
+ described_class.new('hello').lock do
36
+ @yield_receiver.fire
37
+ end
38
+ end
39
+
40
+ it 'yields if file can not be locked' do
41
+ expect(@yield_receiver).to receive(:fire)
42
+
43
+ @file = double('file')
44
+ expect(@file).to receive(:flock).with(File::LOCK_EX | File::LOCK_NB).and_return(true)
45
+ expect(@file).to receive(:flock).with(File::LOCK_UN)
46
+ expect(@file).to receive(:close)
47
+ expect(File).to receive(:open).and_return(@file)
48
+
49
+ described_class.new('hello').lock do
50
+ @yield_receiver.fire
51
+ end
52
+ end
53
+ end
54
+
55
+ describe 'new' do
56
+ it 'inits with path if String sent' do
57
+ expect(described_class.new('hello').path).to eq(Pathname('hello'))
58
+ end
59
+
60
+ it 'inits with path if Pathname sent' do
61
+ expect(described_class.new(Pathname('hello')).path).to eq(Pathname('hello'))
62
+ end
63
+
64
+ describe 'with options' do
65
+ before do
66
+ @time = double('time')
67
+ allow(@time).to receive(:utc).and_return(@time)
68
+ allow(@time).to receive(:strftime).and_return('19650414065945')
69
+ allow(Time).to receive(:now).and_return(@time)
70
+ end
71
+
72
+ it 'generates path with no options' do
73
+ expect(described_class.new.path).to eq(Pathname('19650414065945.tgz'))
74
+ end
75
+
76
+ it 'generates with dir' do
77
+ expect(described_class.new(:dir => 'dump_dir').path).to eq(Pathname('dump_dir/19650414065945.tgz'))
78
+ end
79
+
80
+ it 'generates path with description' do
81
+ expect(described_class.new(:dir => 'dump_dir', :desc => 'hello world').path).to eq(Pathname('dump_dir/19650414065945-hello world.tgz'))
82
+ end
83
+
84
+ it 'generates path with tags' do
85
+ expect(described_class.new(:dir => 'dump_dir', :tags => ' mirror, hello world ').path).to eq(Pathname('dump_dir/19650414065945@hello world,mirror.tgz'))
86
+ end
87
+
88
+ it 'generates path with description and tags' do
89
+ expect(described_class.new(:dir => 'dump_dir', :desc => 'Anniversary backup', :tags => ' mirror, hello world ').path).to eq(Pathname('dump_dir/19650414065945-Anniversary backup@hello world,mirror.tgz'))
90
+ end
91
+ end
92
+ end
93
+
94
+ describe 'versions' do
95
+ describe 'list' do
96
+ def stub_glob
97
+ paths = %w[123 345 567].map do |name|
98
+ path = dump_path("#{name}.tgz")
99
+ expect(File).to receive(:file?).with(path).at_least(1).and_return(true)
100
+ path
101
+ end
102
+ allow(Dir).to receive(:[]).and_return(paths)
103
+ end
104
+
105
+ it 'searches for files in dump dir when asked for list' do
106
+ expect(Dir).to receive(:[]).with(dump_path('*.tgz')).and_return([])
107
+ described_class.list
108
+ end
109
+
110
+ it 'returns instances for each found file' do
111
+ stub_glob
112
+ described_class.list.all?{ |dump| expect(dump).to be_a(described_class) }
113
+ end
114
+
115
+ it 'returns dumps with name containting :like' do
116
+ stub_glob
117
+ expect(described_class.list(:like => '3')).to eq(described_class.list.values_at(0, 1))
118
+ end
119
+ end
120
+
121
+ describe 'with tags' do
122
+ before do
123
+ # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
124
+ dumps_tags = [''] + %w[a a,d a,d,o a,d,s a,d,s,o a,o a,s a,s,o d d,o d,s d,s,o o s s,o z]
125
+ paths = dumps_tags.each_with_index.map do |dump_tags, i|
126
+ path = dump_path("196504140659#{10 + i}@#{dump_tags}.tgz")
127
+ expect(File).to receive(:file?).with(path).at_least(1).and_return(true)
128
+ path
129
+ end
130
+ allow(Dir).to receive(:[]).and_return(paths)
131
+ end
132
+
133
+ it 'returns all dumps if no tags send' do
134
+ expect(described_class.list(:tags => '')).to eq(described_class.list)
135
+ end
136
+
137
+ {
138
+ 'x' => [],
139
+ '+x' => [],
140
+ 'z' => [16],
141
+ 'a,d,s,o' => [1..15],
142
+ '+a,+d,+s,+o' => [5],
143
+ '-o' => [0, 1, 2, 4, 7, 9, 11, 14, 16],
144
+ 'a,b,c,+s,-o' => [4, 7],
145
+ '+a,+d' => [2, 3, 4, 5],
146
+ '+d,+a' => [2, 3, 4, 5],
147
+ }.each do |tags, ids|
148
+ it "returns dumps filtered by #{tags}" do
149
+ expect(described_class.list(:tags => tags)).to eq(described_class.list.values_at(*ids))
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+ describe 'name' do
156
+ it 'returns file name' do
157
+ expect(new_dump('19650414065945.tgz').name).to eq('19650414065945.tgz')
158
+ end
159
+ end
160
+
161
+ describe 'parts' do
162
+ before do
163
+ @time = Time.utc(1965, 4, 14, 6, 59, 45)
164
+ end
165
+
166
+ def dump_name_parts(name)
167
+ dump = new_dump(name)
168
+ [dump.time, dump.description, dump.tags, dump.ext]
169
+ end
170
+
171
+ %w[tmp tgz].each do |ext|
172
+ it 'returns empty results for dump with wrong name' do
173
+ expect(dump_name_parts("196504140659.#{ext}")).to eq([nil, '', [], nil])
174
+ expect(dump_name_parts("196504140659-lala.#{ext}")).to eq([nil, '', [], nil])
175
+ expect(dump_name_parts("196504140659@lala.#{ext}")).to eq([nil, '', [], nil])
176
+ expect(dump_name_parts('19650414065945.ops')).to eq([nil, '', [], nil])
177
+ end
178
+
179
+ it 'returns tags for dump with tags' do
180
+ expect(dump_name_parts("19650414065945.#{ext}")).to eq([@time, '', [], ext])
181
+ expect(dump_name_parts("19650414065945- Hello world &&& .#{ext}")).to eq([@time, 'Hello world _', [], ext])
182
+ expect(dump_name_parts("19650414065945- Hello world &&& @ test , hello world , bad tag ~~~~.#{ext}")).to eq([@time, 'Hello world _', ['bad tag _', 'hello world', 'test'], ext])
183
+ expect(dump_name_parts("19650414065945@test, test , hello world , bad tag ~~~~.#{ext}")).to eq([@time, '', ['bad tag _', 'hello world', 'test'], ext])
184
+ expect(dump_name_parts("19650414065945-Hello world@test,super tag.#{ext}")).to eq([@time, 'Hello world', ['super tag', 'test'], ext])
185
+ end
186
+ end
187
+ end
188
+
189
+ describe 'path' do
190
+ it 'returns path' do
191
+ expect(new_dump('19650414065945.tgz').path).to eq(Pathname(File.join(Dump.rails_root, 'dump', '19650414065945.tgz')))
192
+ end
193
+ end
194
+
195
+ describe 'tgz_path' do
196
+ it 'returns path if extension is already tgz' do
197
+ expect(new_dump('19650414065945.tgz').tgz_path).to eq(new_dump('19650414065945.tgz').path)
198
+ end
199
+
200
+ it 'returns path with tgz extension' do
201
+ expect(new_dump('19650414065945.tmp').tgz_path).to eq(new_dump('19650414065945.tgz').path)
202
+ end
203
+ end
204
+
205
+ describe 'tmp_path' do
206
+ it 'returns path if extension is already tmp' do
207
+ expect(new_dump('19650414065945.tmp').tmp_path).to eq(new_dump('19650414065945.tmp').path)
208
+ end
209
+
210
+ it 'returns path with tmp extension' do
211
+ expect(new_dump('19650414065945.tgz').tmp_path).to eq(new_dump('19650414065945.tmp').path)
212
+ end
213
+ end
214
+
215
+ describe 'clean_description' do
216
+ it "shortens string to 50 chars and replace special symblos with '-'" do
217
+ expect(described_class.new('').send(:clean_description, 'Special Dump #12837192837 (before fixind *&^*&^ photos)')).to eq('Special Dump #12837192837 (before fixind _ photos)')
218
+ expect(described_class.new('').send(:clean_description, "To#{'o' * 100} long description")).to eq("T#{'o' * 49}")
219
+ end
220
+
221
+ it 'accepts non string' do
222
+ expect(described_class.new('').send(:clean_description, nil)).to eq('')
223
+ end
224
+ end
225
+
226
+ describe 'clean_tag' do
227
+ it "shortens string to 20 chars and replace special symblos with '-'" do
228
+ expect(described_class.new('').send(:clean_tag, 'Very special tag #12837192837 (fixind *&^*&^)')).to eq('very special tag _12')
229
+ expect(described_class.new('').send(:clean_tag, "To#{'o' * 100} long tag")).to eq("t#{'o' * 19}")
230
+ end
231
+
232
+ it "does not allow '-' or '+' to be first symbol" do
233
+ expect(described_class.new('').send(:clean_tag, ' Very special tag')).to eq('very special tag')
234
+ expect(described_class.new('').send(:clean_tag, '-Very special tag')).to eq('very special tag')
235
+ expect(described_class.new('').send(:clean_tag, '-----------')).to eq('')
236
+ expect(described_class.new('').send(:clean_tag, '+Very special tag')).to eq('_very special tag')
237
+ expect(described_class.new('').send(:clean_tag, '+++++++++++')).to eq('_')
238
+ end
239
+
240
+ it 'accepts non string' do
241
+ expect(described_class.new('').send(:clean_tag, nil)).to eq('')
242
+ end
243
+ end
244
+
245
+ describe 'clean_tags' do
246
+ it 'splits string and returns uniq non blank sorted tags' do
247
+ expect(described_class.new('').send(:clean_tags, ' perfect tag , hello,Hello,this is (*^(*&')).to eq(['hello', 'perfect tag', 'this is _'])
248
+ expect(described_class.new('').send(:clean_tags, "l#{'o' * 100}ng tag")).to eq(["l#{'o' * 19}"])
249
+ end
250
+
251
+ it 'accepts non string' do
252
+ expect(described_class.new('').send(:clean_tags, nil)).to eq([])
253
+ end
254
+ end
255
+
256
+ describe 'get_filter_tags' do
257
+ it 'splits string and returns uniq non blank sorted tags' do
258
+ expect(described_class.new('').send(:get_filter_tags, 'a,+b,+c,-d')).to eq({:simple => %w[a], :mandatory => %w[b c], :forbidden => %w[d]})
259
+ expect(described_class.new('').send(:get_filter_tags, ' a , + b , + c , - d ')).to eq({:simple => %w[a], :mandatory => %w[b c], :forbidden => %w[d]})
260
+ expect(described_class.new('').send(:get_filter_tags, ' a , + c , + b , - d ')).to eq({:simple => %w[a], :mandatory => %w[b c], :forbidden => %w[d]})
261
+ expect(described_class.new('').send(:get_filter_tags, ' a , + b , + , - ')).to eq({:simple => %w[a], :mandatory => %w[b], :forbidden => []})
262
+ expect(described_class.new('').send(:get_filter_tags, ' a , a , + b , + b , - d , - d ')).to eq({:simple => %w[a], :mandatory => %w[b], :forbidden => %w[d]})
263
+ expect{ described_class.new('').send(:get_filter_tags, 'a,+a') }.not_to raise_error
264
+ expect{ described_class.new('').send(:get_filter_tags, 'a,-a') }.to raise_error
265
+ expect{ described_class.new('').send(:get_filter_tags, '+a,-a') }.to raise_error
266
+ end
267
+
268
+ it 'accepts non string' do
269
+ expect(described_class.new('').send(:get_filter_tags, nil)).to eq({:simple => [], :mandatory => [], :forbidden => []})
270
+ end
271
+ end
272
+
273
+ describe 'assets_root_link' do
274
+ it 'creates temp dir, chdirs there, symlinks rails app root to assets, yields and unlinks assets even if something was raised' do
275
+ expect(Dir).to receive(:mktmpdir).and_yield('/tmp/abc')
276
+ expect(Dir).to receive(:chdir).with('/tmp/abc').and_yield
277
+ expect(File).to receive(:symlink).with(Dump.rails_root, 'assets')
278
+ expect(File).to receive(:unlink).with('assets')
279
+ expect do
280
+ described_class.new('').send(:assets_root_link) do |dir, prefix|
281
+ expect(dir).to eq('/tmp/abc')
282
+ expect(prefix).to eq('assets')
283
+ @yielded = true
284
+ fail 'just test'
285
+ end
286
+ end.to raise_error('just test')
287
+ expect(@yielded).to eq(true)
288
+ end
289
+ end
290
+ end
@@ -1,71 +1,70 @@
1
1
  require 'spec_helper'
2
- require 'dump_rake'
2
+ require 'dump/table_manipulation'
3
3
 
4
- TableManipulation = DumpRake::TableManipulation
5
- describe TableManipulation do
6
- include TableManipulation
4
+ describe Dump::TableManipulation do
5
+ include described_class
7
6
 
8
7
  describe 'schema_tables' do
9
- it 'should return schema_tables' do
8
+ it 'returns schema_tables' do
10
9
  expect(schema_tables).to eq(%w[schema_info schema_migrations])
11
10
  end
12
11
  end
13
12
 
14
13
  describe 'verify_connection' do
15
- it 'should return result of ActiveRecord::Base.connection.verify!' do
16
- expect(ActiveRecord::Base.connection).to receive(:verify!).and_return(:result)
14
+ it 'returns result of connection.verify!' do
15
+ expect(connection).to receive(:verify!).and_return(:result)
17
16
  expect(verify_connection).to eq(:result)
18
17
  end
19
18
  end
20
19
 
21
20
  describe 'quote_table_name' do
22
- it 'should return result of ActiveRecord::Base.connection.quote_table_name' do
23
- expect(ActiveRecord::Base.connection).to receive(:quote_table_name).with('first').and_return('`first`')
21
+ it 'returns result of connection.quote_table_name' do
22
+ expect(connection).to receive(:quote_table_name).with('first').and_return('`first`')
24
23
  expect(quote_table_name('first')).to eq('`first`')
25
24
  end
26
25
  end
27
26
 
28
27
  describe 'quote_column_name' do
29
- it 'should return result of ActiveRecord::Base.connection.quote_column_name' do
30
- expect(ActiveRecord::Base.connection).to receive(:quote_column_name).with('first').and_return('`first`')
28
+ it 'returns result of connection.quote_column_name' do
29
+ expect(connection).to receive(:quote_column_name).with('first').and_return('`first`')
31
30
  expect(quote_column_name('first')).to eq('`first`')
32
31
  end
33
32
  end
34
33
 
35
34
  describe 'quote_value' do
36
- it 'should return result of ActiveRecord::Base.connection.quote_value' do
37
- expect(ActiveRecord::Base.connection).to receive(:quote).with('first').and_return('`first`')
35
+ it 'returns result of connection.quote_value' do
36
+ expect(connection).to receive(:quote).with('first').and_return('`first`')
38
37
  expect(quote_value('first')).to eq('`first`')
39
38
  end
40
39
  end
41
40
 
42
41
  describe 'clear_table' do
43
- it 'should call ActiveRecord::Base.connection.delete with sql for deleting everything from table' do
44
- expect(ActiveRecord::Base.connection).to receive(:delete).with('DELETE FROM `first`', anything)
42
+ it 'calls connection.delete with sql for deleting everything from table' do
43
+ expect(connection).to receive(:delete).with('DELETE FROM `first`', anything)
45
44
  clear_table('`first`')
46
45
  end
47
46
  end
48
47
 
49
48
  describe 'insert_into_table' do
50
- it 'should call ActiveRecord::Base.connection.insert with sql for insert if values is string' do
51
- expect(ActiveRecord::Base.connection).to receive(:insert).with('INSERT INTO `table` (`c1`,`c2`) VALUES (`v1`,`v2`)', anything)
49
+ it 'calls connection.insert with sql for insert if values is string' do
50
+ expect(connection).to receive(:insert).with('INSERT INTO `table` (`c1`,`c2`) VALUES (`v1`,`v2`)', anything)
52
51
  insert_into_table('`table`', '(`c1`,`c2`)', '(`v1`,`v2`)')
53
52
  end
54
53
 
55
- it 'should call ActiveRecord::Base.connection.insert with sql for insert if values is array' do
56
- expect(ActiveRecord::Base.connection).to receive(:insert).with('INSERT INTO `table` (`c1`,`c2`) VALUES (`v11`,`v12`),(`v21`,`v22`)', anything)
54
+ it 'calls connection.insert with sql for insert if values is array' do
55
+ expect(connection).to receive(:insert).with('INSERT INTO `table` (`c1`,`c2`) VALUES (`v11`,`v12`),(`v21`,`v22`)', anything)
57
56
  insert_into_table('`table`', '(`c1`,`c2`)', ['(`v11`,`v12`)', '(`v21`,`v22`)'])
58
57
  end
59
58
  end
60
59
 
61
60
  describe 'join_for_sql' do
62
- it "should convert array ['`a`', '`b`'] to \"(`a`,`b`)\"" do
61
+ it "converts array ['`a`', '`b`'] to \"(`a`,`b`)\"" do
63
62
  expect(join_for_sql(%w[`a` `b`])).to eq('(`a`,`b`)')
64
63
  end
65
64
  end
66
65
 
67
66
  describe 'columns_insert_sql' do
68
- it 'should return columns sql part for insert' do
67
+ it 'returns columns sql part for insert' do
69
68
  expect(self).to receive(:quote_column_name).with('a').and_return('`a`')
70
69
  expect(self).to receive(:quote_column_name).with('b').and_return('`b`')
71
70
 
@@ -74,7 +73,7 @@ describe TableManipulation do
74
73
  end
75
74
 
76
75
  describe 'values_insert_sql' do
77
- it 'should return values sql part for insert' do
76
+ it 'returns values sql part for insert' do
78
77
  expect(self).to receive(:quote_value).with('a').and_return('`a`')
79
78
  expect(self).to receive(:quote_value).with('b').and_return('`b`')
80
79
 
@@ -83,47 +82,47 @@ describe TableManipulation do
83
82
  end
84
83
 
85
84
  describe 'tables_to_dump' do
86
- it 'should call ActiveRecord::Base.connection.tables' do
87
- expect(ActiveRecord::Base.connection).to receive(:tables).and_return([])
85
+ it 'calls connection.tables' do
86
+ expect(connection).to receive(:tables).and_return([])
88
87
  tables_to_dump
89
88
  end
90
89
 
91
- it 'should exclude sessions table from result' do
92
- expect(ActiveRecord::Base.connection).to receive(:tables).and_return(%w[first second schema_info schema_migrations sessions])
90
+ it 'excludes sessions table from result' do
91
+ expect(connection).to receive(:tables).and_return(%w[first second schema_info schema_migrations sessions])
93
92
  expect(tables_to_dump).to eq(%w[first second schema_info schema_migrations])
94
93
  end
95
94
 
96
95
  describe 'with user defined tables' do
97
96
  before do
98
- expect(ActiveRecord::Base.connection).to receive(:tables).and_return(%w[first second schema_info schema_migrations sessions])
97
+ expect(connection).to receive(:tables).and_return(%w[first second schema_info schema_migrations sessions])
99
98
  end
100
99
 
101
- it 'should select certain tables' do
102
- DumpRake::Env.with_env(:tables => 'first,third,-fifth') do
100
+ it 'selects certain tables' do
101
+ Dump::Env.with_env(:tables => 'first,third,-fifth') do
103
102
  expect(tables_to_dump).to eq(%w[first schema_info schema_migrations])
104
103
  end
105
104
  end
106
105
 
107
- it 'should select skip certain tables' do
108
- DumpRake::Env.with_env(:tables => '-first,third,-fifth') do
106
+ it 'selects skip certain tables' do
107
+ Dump::Env.with_env(:tables => '-first,third,-fifth') do
109
108
  expect(tables_to_dump).to eq(%w[second schema_info schema_migrations sessions])
110
109
  end
111
110
  end
112
111
 
113
- it 'should not exclude sessions table from result if asked to exclude nothing' do
114
- DumpRake::Env.with_env(:tables => '-') do
112
+ it 'does not exclude sessions table from result if asked to exclude nothing' do
113
+ Dump::Env.with_env(:tables => '-') do
115
114
  expect(tables_to_dump).to eq(%w[first second schema_info schema_migrations sessions])
116
115
  end
117
116
  end
118
117
 
119
- it 'should not exclude schema tables' do
120
- DumpRake::Env.with_env(:tables => '-second,schema_info,schema_migrations') do
118
+ it 'does not exclude schema tables' do
119
+ Dump::Env.with_env(:tables => '-second,schema_info,schema_migrations') do
121
120
  expect(tables_to_dump).to eq(%w[first schema_info schema_migrations sessions])
122
121
  end
123
122
  end
124
123
 
125
- it 'should not exclude schema tables ever if asked to dump only certain tables' do
126
- DumpRake::Env.with_env(:tables => 'second') do
124
+ it 'does not exclude schema tables ever if asked to dump only certain tables' do
125
+ Dump::Env.with_env(:tables => 'second') do
127
126
  expect(tables_to_dump).to eq(%w[second schema_info schema_migrations])
128
127
  end
129
128
  end
@@ -131,46 +130,46 @@ describe TableManipulation do
131
130
  end
132
131
 
133
132
  describe 'table_row_count' do
134
- it 'should ruturn row count for table' do
135
- expect(ActiveRecord::Base.connection).to receive(:select_value).with("SELECT COUNT(*) FROM #{quote_table_name('first')}").and_return('666')
133
+ it 'ruturns row count for table' do
134
+ expect(connection).to receive(:select_value).with("SELECT COUNT(*) FROM #{quote_table_name('first')}").and_return('666')
136
135
  expect(table_row_count('first')).to eq(666)
137
136
  end
138
137
  end
139
138
 
140
139
  describe 'table_chunk_size' do
141
- it 'should return chunk_size based on estimated average for row size' do
140
+ it 'returns chunk_size based on estimated average for row size' do
142
141
  expect(self).to receive(:table_columns).with('first').and_return(
143
142
  [double(:column, :type => :integer, :limit => nil)] * 3 +
144
143
  [double(:column, :type => :string, :limit => nil)] * 3 +
145
144
  [double(:column, :type => :text, :limit => nil)])
146
145
  expect(table_chunk_size('first')).to satisfy{ |n|
147
- (TableManipulation::CHUNK_SIZE_MIN..TableManipulation::CHUNK_SIZE_MAX).include?(n)
146
+ (described_class::CHUNK_SIZE_MIN..described_class::CHUNK_SIZE_MAX).include?(n)
148
147
  }
149
148
  end
150
149
 
151
- it 'should not return value less than CHUNK_SIZE_MIN' do
150
+ it 'does not return value less than CHUNK_SIZE_MIN' do
152
151
  expect(self).to receive(:table_columns).with('first').and_return(
153
152
  [double(:column, :type => :text, :limit => nil)] * 100)
154
- expect(table_chunk_size('first')).to eq(TableManipulation::CHUNK_SIZE_MIN)
153
+ expect(table_chunk_size('first')).to eq(described_class::CHUNK_SIZE_MIN)
155
154
  end
156
155
 
157
- it 'should not return value more than CHUNK_SIZE_MAX' do
156
+ it 'does not return value more than CHUNK_SIZE_MAX' do
158
157
  expect(self).to receive(:table_columns).with('first').and_return(
159
158
  [double(:column, :type => :boolean, :limit => 1)] * 10)
160
- expect(table_chunk_size('first')).to eq(TableManipulation::CHUNK_SIZE_MAX)
159
+ expect(table_chunk_size('first')).to eq(described_class::CHUNK_SIZE_MAX)
161
160
  end
162
161
  end
163
162
 
164
163
  describe 'table_columns' do
165
- it 'should return table column definitions' do
164
+ it 'returns table column definitions' do
166
165
  columns = [double(:column), double(:column), double(:column)]
167
- expect(ActiveRecord::Base.connection).to receive(:columns).with('first').and_return(columns)
166
+ expect(connection).to receive(:columns).with('first').and_return(columns)
168
167
  expect(table_columns('first')).to eq(columns)
169
168
  end
170
169
  end
171
170
 
172
171
  describe 'table_has_primary_column?' do
173
- it 'should return true only if table has column with name id and type :integer' do
172
+ it 'returns true only if table has column with name id and type :integer' do
174
173
  expect(self).to receive(:table_primary_key).at_least(3).times.and_return('id')
175
174
 
176
175
  expect(self).to receive(:table_columns).with('first').and_return([double(:column, :name => 'id', :type => :integer), double(:column, :name => 'title', :type => :integer)])
@@ -185,7 +184,7 @@ describe TableManipulation do
185
184
  end
186
185
 
187
186
  describe 'table_primary_key' do
188
- it 'should return id' do
187
+ it 'returns id' do
189
188
  expect(table_primary_key('first')).to eq('id')
190
189
  expect(table_primary_key(nil)).to eq('id')
191
190
  end
@@ -206,7 +205,7 @@ describe TableManipulation do
206
205
  expect(i).to eq(@row_count)
207
206
  end
208
207
 
209
- it 'should get rows in chunks if table has primary column and chunk size is less than row count' do
208
+ it 'gets rows in chunks if table has primary column and chunk size is less than row count' do
210
209
  expect(self).to receive(:table_has_primary_column?).with('first').and_return(true)
211
210
  expect(self).to receive(:table_chunk_size).with('first').and_return(100)
212
211
  quoted_table_name = quote_table_name('first')
@@ -227,23 +226,23 @@ describe TableManipulation do
227
226
  verify_getting_rows
228
227
  end
229
228
 
230
- it 'should get rows in one pass if table has primary column but chunk size is not less than row count' do
229
+ it 'gets rows in one pass if table has primary column but chunk size is not less than row count' do
231
230
  expect(self).to receive(:table_has_primary_column?).with('first').and_return(true)
232
231
  expect(self).to receive(:table_chunk_size).with('first').and_return(3_000)
233
232
  verify_getting_rows_in_one_pass
234
233
  end
235
234
 
236
- it 'should get rows in one pass if table has no primary column' do
235
+ it 'gets rows in one pass if table has no primary column' do
237
236
  expect(self).to receive(:table_has_primary_column?).with('first').and_return(false)
238
- expect(self).to_not receive(:table_chunk_size)
237
+ allow(self).to receive(:table_chunk_size).with('first').and_return(10_000)
239
238
  verify_getting_rows_in_one_pass
240
239
  end
241
240
  end
242
241
 
243
242
  describe 'select_all_by_sql' do
244
- it 'should return all rows returned by database' do
243
+ it 'returns all rows returned by database' do
245
244
  rows = [double(:row), double(:row), double(:row)]
246
- expect(ActiveRecord::Base.connection).to receive(:select_all).with('SELECT * FROM abc WHERE x = y').and_return(rows)
245
+ expect(connection).to receive(:select_all).with('SELECT * FROM abc WHERE x = y').and_return(rows)
247
246
  expect(select_all_by_sql('SELECT * FROM abc WHERE x = y')).to eq(rows)
248
247
  end
249
248
  end