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
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
- class DumpRake
3
+ module Dump
4
4
  module Env
5
5
  # Filter strings by simple pattern:
6
6
  # 'a,b,c' will pass only 'a', 'b' and 'c'
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+
3
+ module Dump
4
+ # Get rails app root (Rails.root or RAILS_ROOT or fail)
5
+ module RailsRoot
6
+ def rails_root
7
+ case
8
+ when defined?(Rails)
9
+ Rails.root
10
+ when defined?(RAILS_ROOT)
11
+ RAILS_ROOT
12
+ else
13
+ fail 'Unknown rails app root'
14
+ end.to_s
15
+ end
16
+
17
+ Dump.extend RailsRoot
18
+ end
19
+ end
@@ -1,6 +1,14 @@
1
- class DumpRake
1
+ require 'dump/snapshot'
2
+ require 'dump/archive_tar_minitar'
3
+ require 'dump/assets'
4
+ require 'progress'
5
+ require 'rake'
6
+ require 'zlib'
7
+ require 'tempfile'
8
+
9
+ module Dump
2
10
  # Reading dump
3
- class DumpReader < Dump
11
+ class Reader < Snapshot
4
12
  attr_reader :stream, :config
5
13
 
6
14
  def self.restore(path)
@@ -118,10 +126,10 @@ class DumpRake
118
126
 
119
127
  def migrate_down
120
128
  case
121
- when DumpRake::Env.downcase(:migrate_down) == 'reset'
129
+ when Dump::Env.downcase(:migrate_down) == 'reset'
122
130
  Rake::Task['db:drop'].invoke
123
131
  Rake::Task['db:create'].invoke
124
- when !DumpRake::Env.no?(:migrate_down)
132
+ when !Dump::Env.no?(:migrate_down)
125
133
  return unless avaliable_tables.include?('schema_migrations')
126
134
  find_entry('schema_migrations.dump') do |entry|
127
135
  migrated = table_rows('schema_migrations').map{ |row| row['version'] }
@@ -134,7 +142,7 @@ class DumpRake
134
142
 
135
143
  unless migrate_down.empty?
136
144
  migrate_down.reverse.with_progress('Migrating down') do |version|
137
- DumpRake::Env.with_env('VERSION' => version) do
145
+ Dump::Env.with_env('VERSION' => version) do
138
146
  Rake::Task['db:migrate:down'].tap do |task|
139
147
  begin
140
148
  task.invoke
@@ -151,13 +159,13 @@ class DumpRake
151
159
  end
152
160
 
153
161
  def restore_schema?
154
- !DumpRake::Env.no?(:restore_schema)
162
+ !Dump::Env.no?(:restore_schema)
155
163
  end
156
164
 
157
165
  def read_schema
158
166
  return unless restore_schema?
159
167
  read_entry_to_file('schema.rb') do |f|
160
- DumpRake::Env.with_env('SCHEMA' => f.path) do
168
+ Dump::Env.with_env('SCHEMA' => f.path) do
161
169
  Rake::Task['db:schema:load'].invoke
162
170
  end
163
171
  Rake::Task['db:schema:dump'].invoke
@@ -169,10 +177,10 @@ class DumpRake
169
177
  end
170
178
 
171
179
  def read_tables
172
- return if DumpRake::Env[:restore_tables] && DumpRake::Env[:restore_tables].empty?
180
+ return if Dump::Env[:restore_tables] && Dump::Env[:restore_tables].empty?
173
181
  verify_connection
174
182
  config[:tables].with_progress('Tables') do |table, rows|
175
- if (restore_schema? && schema_tables.include?(table)) || DumpRake::Env.filter(:restore_tables).pass?(table)
183
+ if (restore_schema? && schema_tables.include?(table)) || Dump::Env.filter(:restore_tables).pass?(table)
176
184
  read_table(table, rows)
177
185
  end
178
186
  end
@@ -208,7 +216,7 @@ class DumpRake
208
216
  end
209
217
 
210
218
  def read_assets
211
- return if DumpRake::Env[:restore_assets] && DumpRake::Env[:restore_assets].empty?
219
+ return if Dump::Env[:restore_assets] && Dump::Env[:restore_assets].empty?
212
220
  return if config[:assets].blank?
213
221
 
214
222
  assets = config[:assets]
@@ -219,10 +227,10 @@ class DumpRake
219
227
  assets_count, assets_paths = nil, assets
220
228
  end
221
229
 
222
- if DumpRake::Env[:restore_assets]
230
+ if Dump::Env[:restore_assets]
223
231
  assets_paths.each do |asset|
224
- DumpRake::Assets.glob_asset_children(asset, '**/*').reverse.each do |child|
225
- next unless read_asset?(child, DumpRake::RailsRoot)
232
+ Dump::Assets.glob_asset_children(asset, '**/*').reverse.each do |child|
233
+ next unless read_asset?(child, Dump.rails_root)
226
234
  case
227
235
  when File.file?(child)
228
236
  File.unlink(child)
@@ -236,20 +244,20 @@ class DumpRake
236
244
  end
237
245
  end
238
246
  else
239
- DumpRake::Env.with_env(:assets => assets_paths.join(':')) do
247
+ Dump::Env.with_env(:assets => assets_paths.join(':')) do
240
248
  Rake::Task['assets:delete'].invoke
241
249
  end
242
250
  end
243
251
 
244
252
  read_assets_entries(assets_paths, assets_count) do |stream, root, entry, prefix|
245
- if !DumpRake::Env[:restore_assets] || read_asset?(entry.full_name, prefix)
253
+ if !Dump::Env[:restore_assets] || read_asset?(entry.full_name, prefix)
246
254
  stream.extract_entry(root, entry)
247
255
  end
248
256
  end
249
257
  end
250
258
 
251
259
  def read_asset?(path, prefix)
252
- DumpRake::Env.filter(:restore_assets, DumpRake::Assets::SPLITTER).custom_pass? do |value|
260
+ Dump::Env.filter(:restore_assets, Dump::Assets::SPLITTER).custom_pass? do |value|
253
261
  File.fnmatch(File.join(prefix, value), path) ||
254
262
  File.fnmatch(File.join(prefix, value, '**'), path)
255
263
  end
@@ -266,7 +274,7 @@ class DumpRake
266
274
  end
267
275
  Archive::Tar::Minitar.open(assets_tar) do |inp|
268
276
  inp.each do |entry|
269
- yield inp, DumpRake::RailsRoot, entry, nil
277
+ yield inp, Dump.rails_root, entry, nil
270
278
  Progress.step if assets_count
271
279
  end
272
280
  end
@@ -1,11 +1,15 @@
1
1
  # encoding: UTF-8
2
2
 
3
- class DumpRake
3
+ require 'dump/rails_root'
4
+ require 'dump/table_manipulation'
5
+ require 'pathname'
6
+
7
+ module Dump
4
8
  # Base class for dump
5
- class Dump
9
+ class Snapshot
6
10
  include TableManipulation
7
11
  def self.list(options = {})
8
- dumps = Dir[File.join(DumpRake::RailsRoot, 'dump', options[:all] ? '*.*' : '*.tgz')].sort.select{ |path| File.file?(path) }.map{ |path| new(path) }
12
+ dumps = Dir[File.join(Dump.rails_root, 'dump', options[:all] ? '*.*' : '*.tgz')].sort.select{ |path| File.file?(path) }.map{ |path| new(path) }
9
13
  dumps = dumps.select{ |dump| dump.name[options[:like]] } if options[:like]
10
14
  if options[:tags]
11
15
  tags = get_filter_tags(options[:tags])
@@ -128,9 +132,9 @@ class DumpRake
128
132
 
129
133
  def assets_root_link
130
134
  prefix = 'assets'
131
- Dir.mktmpdir('assets', File.join(DumpRake::RailsRoot, 'tmp')) do |dir|
135
+ Dir.mktmpdir('assets', File.join(Dump.rails_root, 'tmp')) do |dir|
132
136
  Dir.chdir(dir) do
133
- File.symlink(DumpRake::RailsRoot, prefix)
137
+ File.symlink(Dump.rails_root, prefix)
134
138
  begin
135
139
  yield dir, prefix
136
140
  ensure
@@ -1,4 +1,6 @@
1
- class DumpRake
1
+ require 'dump/env'
2
+
3
+ module Dump
2
4
  # Methods to work with db using ActiveRecord
3
5
  module TableManipulation
4
6
  protected
@@ -29,7 +31,8 @@ class DumpRake
29
31
 
30
32
  def insert_into_table(table_sql, columns_sql, values_sql)
31
33
  values_sql = values_sql.join(',') if values_sql.is_a?(Array)
32
- connection.insert("INSERT INTO #{table_sql} #{columns_sql} VALUES #{values_sql}", 'Loading dump')
34
+ sql = "INSERT INTO #{table_sql} #{columns_sql} VALUES #{values_sql}"
35
+ connection.insert(sql, 'Loading dump')
33
36
  end
34
37
 
35
38
  def fix_sequence!(table)
@@ -54,9 +57,10 @@ class DumpRake
54
57
  end
55
58
 
56
59
  def tables_to_dump
57
- if DumpRake::Env[:tables]
60
+ if Dump::Env[:tables]
58
61
  avaliable_tables.select do |table|
59
- schema_tables.include?(table) || DumpRake::Env.filter(:tables).pass?(table)
62
+ schema_tables.include?(table) ||
63
+ Dump::Env.filter(:tables).pass?(table)
60
64
  end
61
65
  else
62
66
  avaliable_tables - %w[sessions]
@@ -64,13 +68,14 @@ class DumpRake
64
68
  end
65
69
 
66
70
  def table_row_count(table)
67
- connection.select_value("SELECT COUNT(*) FROM #{quote_table_name(table)}").to_i
71
+ sql = "SELECT COUNT(*) FROM #{quote_table_name(table)}"
72
+ connection.select_value(sql).to_i
68
73
  end
69
74
 
70
- CHUNK_SIZE_MIN = 100 unless const_defined?(:CHUNK_SIZE_MIN)
71
- CHUNK_SIZE_MAX = 3_000 unless const_defined?(:CHUNK_SIZE_MAX)
75
+ CHUNK_SIZE_MIN = 100
76
+ CHUNK_SIZE_MAX = 3_000
72
77
  def table_chunk_size(table)
73
- expected_row_size = table_columns(table).map do |column|
78
+ expected_row_size = table_columns(table).sum do |column|
74
79
  case column.type
75
80
  when :text
76
81
  Math.sqrt(column.limit || 2_147_483_647)
@@ -79,8 +84,12 @@ class DumpRake
79
84
  else
80
85
  column.limit || 10
81
86
  end
82
- end.sum
83
- [[(10_000_000 / expected_row_size).round, CHUNK_SIZE_MIN].max, CHUNK_SIZE_MAX].min
87
+ end
88
+ [
89
+ CHUNK_SIZE_MIN,
90
+ (10_000_000 / expected_row_size).round,
91
+ CHUNK_SIZE_MAX,
92
+ ].sort[1]
84
93
  end
85
94
 
86
95
  def table_columns(table)
@@ -89,7 +98,9 @@ class DumpRake
89
98
 
90
99
  def table_has_primary_column?(table)
91
100
  # bad test for primary column, but primary even for primary column is nil
92
- table_columns(table).any?{ |column| column.name == table_primary_key(table) && column.type == :integer }
101
+ table_columns(table).any? do |column|
102
+ column.name == table_primary_key(table) && column.type == :integer
103
+ end
93
104
  end
94
105
 
95
106
  def table_primary_key(_table)
@@ -97,10 +108,12 @@ class DumpRake
97
108
  end
98
109
 
99
110
  def each_table_row(table, row_count, &block)
100
- if table_has_primary_column?(table) && row_count > (chunk_size = table_chunk_size(table))
111
+ chunk_size = table_chunk_size(table)
112
+ if table_has_primary_column?(table) && row_count > chunk_size
101
113
  # adapted from ActiveRecord::Batches
102
114
  primary_key = table_primary_key(table)
103
- quoted_primary_key = "#{quote_table_name(table)}.#{quote_column_name(primary_key)}"
115
+ quoted_primary_key =
116
+ "#{quote_table_name(table)}.#{quote_column_name(primary_key)}"
104
117
  select_where_primary_key =
105
118
  "SELECT * FROM #{quote_table_name(table)}" \
106
119
  " WHERE #{quoted_primary_key} %s" \
@@ -110,7 +123,8 @@ class DumpRake
110
123
  until rows.blank?
111
124
  rows.each(&block)
112
125
  break if rows.count < chunk_size
113
- rows = select_all_by_sql(select_where_primary_key % "> #{rows.last[primary_key].to_i}")
126
+ sql = select_where_primary_key % "> #{rows.last[primary_key].to_i}"
127
+ rows = select_all_by_sql(sql)
114
128
  end
115
129
  else
116
130
  table_rows(table).each(&block)
@@ -1,6 +1,14 @@
1
- class DumpRake
1
+ require 'dump/snapshot'
2
+ require 'dump/archive_tar_minitar'
3
+ require 'dump/assets'
4
+ require 'progress'
5
+ require 'rake'
6
+ require 'zlib'
7
+ require 'tempfile'
8
+
9
+ module Dump
2
10
  # Creating dump
3
- class DumpWriter < Dump
11
+ class Writer < Snapshot
4
12
  attr_reader :stream, :config
5
13
 
6
14
  def self.create(path)
@@ -42,7 +50,7 @@ class DumpRake
42
50
 
43
51
  def write_schema
44
52
  create_file('schema.rb') do |f|
45
- DumpRake::Env.with_env('SCHEMA' => f.path) do
53
+ Dump::Env.with_env('SCHEMA' => f.path) do
46
54
  Rake::Task['db:schema:dump'].invoke
47
55
  end
48
56
  end
@@ -83,7 +91,7 @@ class DumpRake
83
91
  return if assets.blank?
84
92
 
85
93
  config[:assets] = {}
86
- Dir.chdir(DumpRake::RailsRoot) do
94
+ Dir.chdir(Dump.rails_root) do
87
95
  assets = Dir[*assets].uniq
88
96
  assets.with_progress('Assets') do |asset|
89
97
  paths = Dir[File.join(asset, '**/*')]
@@ -110,7 +118,7 @@ class DumpRake
110
118
 
111
119
  def assets_to_dump
112
120
  Rake::Task['assets'].invoke
113
- DumpRake::Env[:assets].split(DumpRake::Assets::SPLITTER)
121
+ Dump::Env[:assets].split(Dump::Assets::SPLITTER)
114
122
  rescue
115
123
  []
116
124
  end
@@ -1,14 +1,14 @@
1
- require 'dump_rake'
1
+ require 'dump'
2
2
 
3
3
  task :assets do
4
- ENV['ASSETS'] ||= DumpRake::Assets.assets
4
+ ENV['ASSETS'] ||= Dump::Assets.assets
5
5
  end
6
6
 
7
7
  namespace :assets do
8
- desc 'Delete assets' << DumpRake::Env.explain_variables_for_command(:assets)
8
+ desc 'Delete assets' << Dump::Env.explain_variables_for_command(:assets)
9
9
  task :delete => :assets do
10
10
  ENV['ASSETS'].split(':').each do |asset|
11
- DumpRake::Assets.glob_asset_children(asset, '*').each do |child|
11
+ Dump::Assets.glob_asset_children(asset, '*').each do |child|
12
12
  FileUtils.remove_entry(child)
13
13
  end
14
14
  end
@@ -1,26 +1,26 @@
1
- require 'dump_rake'
1
+ require 'dump'
2
2
 
3
- desc 'Short for dump:create' << DumpRake::Env.explain_variables_for_command(:create)
3
+ desc 'Short for dump:create' << Dump::Env.explain_variables_for_command(:create)
4
4
  task :dump => 'dump:create'
5
5
 
6
6
  namespace :dump do
7
- desc 'Show avaliable versions' << DumpRake::Env.explain_variables_for_command(:versions)
7
+ desc 'Show avaliable versions' << Dump::Env.explain_variables_for_command(:versions)
8
8
  task :versions => :environment do
9
- DumpRake.versions(DumpRake::Env.for_command(:versions))
9
+ Dump.versions(Dump::Env.for_command(:versions))
10
10
  end
11
11
 
12
- desc 'Create dump' << DumpRake::Env.explain_variables_for_command(:create)
12
+ desc 'Create dump' << Dump::Env.explain_variables_for_command(:create)
13
13
  task :create => :environment do
14
- DumpRake.create(DumpRake::Env.for_command(:create))
14
+ Dump.create(Dump::Env.for_command(:create))
15
15
  end
16
16
 
17
- desc 'Restore dump' << DumpRake::Env.explain_variables_for_command(:restore)
17
+ desc 'Restore dump' << Dump::Env.explain_variables_for_command(:restore)
18
18
  task :restore => :environment do
19
- DumpRake.restore(DumpRake::Env.for_command(:restore))
19
+ Dump.restore(Dump::Env.for_command(:restore))
20
20
  end
21
21
 
22
- desc 'Cleanup dumps' << DumpRake::Env.explain_variables_for_command(:cleanup)
22
+ desc 'Cleanup dumps' << Dump::Env.explain_variables_for_command(:cleanup)
23
23
  task :cleanup => :environment do
24
- DumpRake.cleanup(DumpRake::Env.for_command(:cleanup))
24
+ Dump.cleanup(Dump::Env.for_command(:cleanup))
25
25
  end
26
26
  end
@@ -4,17 +4,17 @@
4
4
  require 'bundler/setup'
5
5
 
6
6
  require 'pathname'
7
- require 'dump_rake/env'
7
+ require 'dump/env'
8
8
 
9
9
  readme = Pathname('README.markdown')
10
10
  lines = readme.readlines.map(&:rstrip)
11
11
  readme.open('w') do |f|
12
12
  lines.each do |line|
13
13
  line.sub!(/^`(.+?)`.*—.*$/) do
14
- key, names = DumpRake::Env::DICTIONARY.find{ |_key, values| values.include?(Regexp.last_match[1]) }
14
+ key, names = Dump::Env::DICTIONARY.find{ |_key, values| values.include?(Regexp.last_match[1]) }
15
15
  if key
16
16
  names = names.map{ |name| "`#{name}`" }.join(', ')
17
- explanation = DumpRake::Env::EXPLANATIONS[key]
17
+ explanation = Dump::Env::EXPLANATIONS[key]
18
18
  "#{names} — #{explanation}"
19
19
  end
20
20
  end
@@ -1,10 +1,12 @@
1
1
  require 'spec_helper'
2
- require 'dump_rake'
2
+ require 'dump'
3
3
  require 'tmpdir'
4
4
 
5
5
  class Chicken < ActiveRecord::Base
6
6
  end
7
7
 
8
+ ActiveRecord::Base.logger = Logger.new(File.join(Dump.rails_root, 'log/dump.log'))
9
+
8
10
  def database_configs
9
11
  YAML.load(IO.read(File.expand_path('../db/database.yml', __FILE__)))
10
12
  end
@@ -56,17 +58,6 @@ def load_schema
56
58
  end
57
59
  end
58
60
 
59
- def in_temp_rails_app
60
- old_rails_root = DumpRake::RailsRoot.dup
61
- Dir.mktmpdir do |dir|
62
- DumpRake::RailsRoot.replace(dir)
63
- allow(Progress).to receive(:io).and_return(StringIO.new)
64
- yield
65
- end
66
- ensure
67
- DumpRake::RailsRoot.replace(old_rails_root)
68
- end
69
-
70
61
  def create_chickens!(options = {})
71
62
  time = Time.local(2000, 'jan', 1, 20, 15, 1)
72
63
  data = {
@@ -131,113 +122,116 @@ end
131
122
 
132
123
  def call_rake_create(*args)
133
124
  call_rake do
134
- DumpRake.create(*args)
125
+ Dump.create(*args)
135
126
  end
136
127
  end
137
128
 
138
129
  def call_rake_restore(*args)
139
130
  call_rake do
140
- DumpRake.restore(*args)
131
+ Dump.restore(*args)
141
132
  end
142
133
  end
143
134
 
144
135
  describe 'full cycle' do
136
+ around do |example|
137
+ Dir.mktmpdir do |dir|
138
+ @tmp_dir = dir
139
+ example.run
140
+ end
141
+ end
142
+ before do
143
+ allow(Dump).to receive(:rails_root).and_return(@tmp_dir)
144
+ allow(Progress).to receive(:io).and_return(StringIO.new)
145
+ end
146
+
145
147
  begin
146
148
  database_configs
147
149
 
148
150
  adapters.each do |adapter|
149
- it "should dump and restore using #{adapter}" do
150
- in_temp_rails_app do
151
- use_adapter(adapter) do
152
- # add chickens store their attributes and create dump
153
- create_chickens!(:random => 100)
154
- saved_chicken_data = chicken_data
155
- call_rake_create(:description => 'chickens')
156
-
157
- # clear database
158
- load_schema
159
- expect(Chicken.all).to eq([])
160
-
161
- # restore dump and verify equality
162
- call_rake_restore(:version => 'chickens')
163
- expect(chicken_data).to eq(saved_chicken_data)
164
-
165
- # go throught create/restore cycle and verify equality
166
- call_rake_create
167
- load_schema
168
- expect(Chicken.all).to be_empty
169
- call_rake_restore
170
- expect(chicken_data).to eq(saved_chicken_data)
171
- end
151
+ it "dumps and restores using #{adapter}" do
152
+ use_adapter(adapter) do
153
+ # add chickens store their attributes and create dump
154
+ create_chickens!(:random => 100)
155
+ saved_chicken_data = chicken_data
156
+ call_rake_create(:description => 'chickens')
157
+
158
+ # clear database
159
+ load_schema
160
+ expect(Chicken.all).to eq([])
161
+
162
+ # restore dump and verify equality
163
+ call_rake_restore(:version => 'chickens')
164
+ expect(chicken_data).to eq(saved_chicken_data)
165
+
166
+ # go throught create/restore cycle and verify equality
167
+ call_rake_create
168
+ load_schema
169
+ expect(Chicken.all).to be_empty
170
+ call_rake_restore
171
+ expect(chicken_data).to eq(saved_chicken_data)
172
172
  end
173
173
  end
174
174
  end
175
175
 
176
176
  adapters.each do |adapter|
177
- it "should not break id incrementing using #{adapter}" do
178
- in_temp_rails_app do
179
- use_adapter(adapter) do
180
- create_chickens!(:random => 100)
181
- call_rake_create(:description => 'chickens')
182
- load_schema
183
- call_rake_restore(:version => 'chickens')
184
- create_chickens!
185
- end
177
+ it "does not break id incrementing using #{adapter}" do
178
+ use_adapter(adapter) do
179
+ create_chickens!(:random => 100)
180
+ call_rake_create(:description => 'chickens')
181
+ load_schema
182
+ call_rake_restore(:version => 'chickens')
183
+ create_chickens!
186
184
  end
187
185
  end
188
186
  end
189
187
 
190
188
  adapters.combination(2) do |adapter_src, adapter_dst|
191
- it "should dump using #{adapter_src} and restore using #{adapter_dst}" do
192
- in_temp_rails_app do
193
- saved_chicken_data = nil
194
- use_adapter(adapter_src) do
195
- expect(Chicken.all).to be_empty
196
-
197
- create_chickens!(:random => 100)
198
- saved_chicken_data = chicken_data
199
- call_rake_create
200
- end
189
+ it "dumps using #{adapter_src} and restores using #{adapter_dst}" do
190
+ saved_chicken_data = nil
191
+ use_adapter(adapter_src) do
192
+ expect(Chicken.all).to be_empty
193
+
194
+ create_chickens!(:random => 100)
195
+ saved_chicken_data = chicken_data
196
+ call_rake_create
197
+ end
201
198
 
202
- use_adapter(adapter_dst) do
203
- expect(Chicken.all).to be_empty
199
+ use_adapter(adapter_dst) do
200
+ expect(Chicken.all).to be_empty
204
201
 
205
- call_rake_restore
206
- expect(chicken_data).to eq(saved_chicken_data)
207
- end
202
+ call_rake_restore
203
+ expect(chicken_data).to eq(saved_chicken_data)
208
204
  end
209
205
  end
210
206
  end
211
207
 
212
- it 'should create same dump for all adapters' do
213
- in_temp_rails_app do
214
- dumps = []
215
- adapters.each do |adapter|
216
- use_adapter(adapter) do
217
- dump_name = call_rake_create(:desc => adapter)[:stdout].strip
218
- dump_path = File.join(DumpRake::RailsRoot, 'dump', dump_name)
219
-
220
- data = []
221
- Zlib::GzipReader.open(dump_path) do |gzip|
222
- Archive::Tar::Minitar.open(gzip, 'r') do |stream|
223
- stream.each do |entry|
224
- entry_data = if entry.full_name == 'schema.rb'
225
- entry.read
226
- else
227
- Marshal.load(entry.read)
228
- end
229
- data << [entry.full_name, entry_data]
208
+ it 'creates same dump for all adapters' do
209
+ dumps = []
210
+ adapters.each do |adapter|
211
+ use_adapter(adapter) do
212
+ dump_name = call_rake_create(:desc => adapter)[:stdout].strip
213
+ dump_path = File.join(Dump.rails_root, 'dump', dump_name)
214
+
215
+ data = []
216
+ Zlib::GzipReader.open(dump_path) do |gzip|
217
+ Archive::Tar::Minitar.open(gzip, 'r') do |stream|
218
+ stream.each do |entry|
219
+ entry_data = if entry.full_name == 'schema.rb'
220
+ entry.read
221
+ else
222
+ Marshal.load(entry.read)
230
223
  end
224
+ data << [entry.full_name, entry_data]
231
225
  end
232
226
  end
233
- dumps << {:path => dump_path, :data => data.sort}
234
227
  end
228
+ dumps << {:path => dump_path, :data => data.sort}
235
229
  end
230
+ end
236
231
 
237
- dumps.combination(2) do |dump_a, dump_b|
238
- expect(dump_a[:path]).not_to eq(dump_b[:path])
239
- expect(dump_a[:data]).to eq(dump_b[:data])
240
- end
232
+ dumps.combination(2) do |dump_a, dump_b|
233
+ expect(dump_a[:path]).not_to eq(dump_b[:path])
234
+ expect(dump_a[:data]).to eq(dump_b[:data])
241
235
  end
242
236
  end
243
237
  rescue Errno::ENOENT => e