rails-backup-migrate 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -34,7 +34,7 @@ module RailsBackupMigrate
34
34
  # list the tables we should backup, excluding ones we can ignore
35
35
  def interesting_tables
36
36
  ActiveRecord::Base.connection.tables.sort.reject do |tbl|
37
- ['schema_migrations', 'sessions', 'public_exceptions'].include?(tbl)
37
+ %w(schema_migrations sessions public_exceptions).include?(tbl)
38
38
  end
39
39
  end
40
40
 
@@ -77,10 +77,10 @@ module RailsBackupMigrate
77
77
  @temp_dir = nil
78
78
  @files_to_delete_on_cleanup ||= []
79
79
  @files_to_delete_on_cleanup.each do |f|
80
- unless File::directory? f
81
- FileUtils.rm f
82
- else
80
+ if File::directory? f
83
81
  FileUtils.rm_r f
82
+ else
83
+ FileUtils.rm f
84
84
  end
85
85
  end
86
86
  @files_to_delete_on_cleanup = []
@@ -102,10 +102,30 @@ module RailsBackupMigrate
102
102
  FileUtils.chdir 'db/backup'
103
103
 
104
104
  @files_to_delete_on_cleanup ||= []
105
-
105
+
106
+ @mysql = ActiveRecord::Base.connection.class.to_s =~ /mysql/i
107
+
106
108
  interesting_tables.each do |tbl|
107
109
  puts "Writing #{tbl}..." if VERBOSE
108
- File.open("#{tbl}.yml", 'w+') { |f| f << YAML.dump(ActiveRecord::Base.connection.select_all("SELECT * FROM #{tbl}")) }
110
+ File.open("#{tbl}.yml", 'w+') do |f|
111
+ records = ActiveRecord::Base.connection.select_all("SELECT * FROM #{tbl}")
112
+ if @mysql
113
+ # we need to convert Mysql::Time objects into standard ruby time objects because they do not serialise
114
+ # into YAML on their own at all, let alone in a way that would be compatible with other databases
115
+ records.map! do |record|
116
+ record.inject({}) do |memo, (k,v)|
117
+ memo[k] = case v
118
+ when Mysql::Time
119
+ datetime_from_mysql_time v
120
+ else
121
+ v
122
+ end
123
+ memo
124
+ end
125
+ end
126
+ end
127
+ f << YAML.dump(records)
128
+ end
109
129
  @files_to_delete_on_cleanup << File::expand_path("#{tbl}.yml")
110
130
  end
111
131
 
@@ -135,6 +155,16 @@ module RailsBackupMigrate
135
155
  # so we'll ensure we have a string
136
156
  Rails.root.to_s
137
157
  end
158
+
159
+ private
160
+
161
+ def datetime_from_mysql_time(mysql_time)
162
+ year = mysql_time.year
163
+ month = [1,mysql_time.month].max
164
+ day = [1,mysql_time.day].max
165
+ DateTime.new year, month, day, mysql_time.hour, mysql_time.minute, mysql_time.second
166
+ end
167
+
138
168
  end
139
169
  end
140
170
 
@@ -1,3 +1,3 @@
1
1
  module RailsBackupMigrate
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.version = RailsBackupMigrate::VERSION
8
8
  s.authors = ["Matt Connolly"]
9
9
  s.email = ["matt@soundevolution.com.au"]
10
- s.homepage = ""
10
+ s.homepage = "http://github.com/mattconnolly/rails-backup-migrate"
11
11
  s.summary = %q{Backup and restore a rails application including database data and files}
12
12
  s.description = %q{Creates a directory db/backup in the rails app and creates / loads YML files from there.
13
13
  After a backup, the db/backups directory is archived into a .tgz file and then deleted.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-backup-migrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-13 00:00:00.000000000 Z
12
+ date: 2012-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70155964458440 !ruby/object:Gem::Requirement
16
+ requirement: &70221255923620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '2.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70155964458440
24
+ version_requirements: *70221255923620
25
25
  description: ! "Creates a directory db/backup in the rails app and creates / loads
26
26
  YML files from there. \n After a backup, the db/backups directory is archived
27
27
  into a .tgz file and then deleted.\n When restoring, the db/backup directory
@@ -50,7 +50,7 @@ files:
50
50
  - lib/rails-backup-migrate/version.rb
51
51
  - lib/tasks/rails-backup-migrate.rake
52
52
  - rails-backup-migrate.gemspec
53
- homepage: ''
53
+ homepage: http://github.com/mattconnolly/rails-backup-migrate
54
54
  licenses: []
55
55
  post_install_message:
56
56
  rdoc_options: []
@@ -70,9 +70,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  version: '0'
71
71
  requirements: []
72
72
  rubyforge_project: rails-backup-migrate
73
- rubygems_version: 1.8.10
73
+ rubygems_version: 1.8.17
74
74
  signing_key:
75
75
  specification_version: 3
76
76
  summary: Backup and restore a rails application including database data and files
77
77
  test_files: []
78
- has_rdoc: