dump 1.0.5 → 1.0.6

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.
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