database-cloner-rails 1.0.1 → 1.1.1
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dc94354b2c948d5addf6fbdbcc07c5aed5cb0eb51634c7f1eb833c51db69ddd4
|
|
4
|
+
data.tar.gz: d81c9f8e62c3b345c32c764c211cafa9354bdfb5436aa9d3b7c52d465fb1104b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 32bce3e7c948f19abdcdeef30da3692c91f24793a6b9c56900bbe1b77f9d5a6294aeed3f5053d1a6f73ab4ccb67a3e0217f10e9dfaac951521008f636057e72b
|
|
7
|
+
data.tar.gz: b13fe3645897b05c6c94f502ead3b83648dca421732ee7d9102075814d525980d8f207197323ac8d260538a52ef04f81167e6fcb95eaeda50e201ab0cc3c64d2
|
|
@@ -5,12 +5,30 @@ Gem::Specification.new do |spec|
|
|
|
5
5
|
spec.version = DatabaseClonerRails::VERSION
|
|
6
6
|
spec.authors = ["Abhishek Sharma"]
|
|
7
7
|
spec.email = ["abhsss96@gmail.com"]
|
|
8
|
-
spec.summary = "Rake tasks to
|
|
9
|
-
spec.description =
|
|
8
|
+
spec.summary = "Rake tasks to dump and restore ActiveRecord data across Rails environments"
|
|
9
|
+
spec.description = <<~DESC
|
|
10
|
+
database-cloner-rails provides two rake tasks for moving database records between
|
|
11
|
+
Rails environments. `rake database:download` dumps all ActiveRecord model records
|
|
12
|
+
to plain Ruby files (Model.create(...) statements). `rake database:upload` replays
|
|
13
|
+
those files to restore records in the target database.
|
|
14
|
+
|
|
15
|
+
Useful for seeding a staging environment from production data, creating snapshots
|
|
16
|
+
before destructive migrations, or sharing realistic test data across a team.
|
|
17
|
+
|
|
18
|
+
Supports optional MODELS filtering: `rake database:download MODELS=users,posts`
|
|
19
|
+
to dump only specific tables. The dump directory is created automatically.
|
|
20
|
+
DESC
|
|
10
21
|
spec.homepage = "https://github.com/abhsss96/database-cloner-rails"
|
|
11
22
|
spec.license = "MIT"
|
|
12
23
|
spec.required_ruby_version = ">= 2.7"
|
|
13
24
|
|
|
25
|
+
spec.metadata = {
|
|
26
|
+
"homepage_uri" => "https://github.com/abhsss96/database-cloner-rails",
|
|
27
|
+
"source_code_uri" => "https://github.com/abhsss96/database-cloner-rails",
|
|
28
|
+
"bug_tracker_uri" => "https://github.com/abhsss96/database-cloner-rails/issues",
|
|
29
|
+
"changelog_uri" => "https://github.com/abhsss96/database-cloner-rails/releases"
|
|
30
|
+
}
|
|
31
|
+
|
|
14
32
|
spec.files = Dir["lib/**/*", "README.md", "*.gemspec"]
|
|
15
33
|
spec.require_paths = ["lib"]
|
|
16
34
|
|
|
@@ -1,19 +1,26 @@
|
|
|
1
|
+
require "fileutils"
|
|
2
|
+
require "json"
|
|
3
|
+
|
|
1
4
|
module DatabaseClonerRails
|
|
2
5
|
class Downloader
|
|
3
|
-
def self.run(dump_dir: default_dump_dir)
|
|
4
|
-
new(dump_dir: dump_dir).run
|
|
6
|
+
def self.run(dump_dir: default_dump_dir, only: nil)
|
|
7
|
+
new(dump_dir: dump_dir, only: only).run
|
|
5
8
|
end
|
|
6
9
|
|
|
7
10
|
def self.default_dump_dir
|
|
8
11
|
File.join(Rails.root, "lib", "tasks", "database_cloner", "db_dump")
|
|
9
12
|
end
|
|
10
13
|
|
|
11
|
-
def initialize(dump_dir: self.class.default_dump_dir)
|
|
14
|
+
def initialize(dump_dir: self.class.default_dump_dir, only: nil)
|
|
12
15
|
@dump_dir = dump_dir
|
|
16
|
+
@only = Array(only).map(&:to_s).reject(&:empty?)
|
|
13
17
|
end
|
|
14
18
|
|
|
15
19
|
def run
|
|
16
|
-
|
|
20
|
+
FileUtils.mkdir_p(@dump_dir)
|
|
21
|
+
tables = ActiveRecord::Base.connection.tables
|
|
22
|
+
tables = tables.select { |t| @only.include?(t) } if @only.any?
|
|
23
|
+
tables.each do |table|
|
|
17
24
|
model = table.classify.safe_constantize
|
|
18
25
|
next unless model.present?
|
|
19
26
|
dump_table(table, model)
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
module DatabaseClonerRails
|
|
2
2
|
class Uploader
|
|
3
|
-
def self.run
|
|
4
|
-
new.run
|
|
3
|
+
def self.run(only: nil)
|
|
4
|
+
new(only: only).run
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def initialize(only: nil)
|
|
8
|
+
@only = Array(only).map(&:to_s).reject(&:empty?)
|
|
5
9
|
end
|
|
6
10
|
|
|
7
11
|
def run
|
|
8
|
-
ActiveRecord::Base.connection.tables
|
|
12
|
+
tables = ActiveRecord::Base.connection.tables
|
|
13
|
+
tables = tables.select { |t| @only.include?(t) } if @only.any?
|
|
14
|
+
tables.each do |table|
|
|
9
15
|
next unless table.classify.safe_constantize.present?
|
|
10
16
|
begin
|
|
11
17
|
require "tasks/database_cloner/db_dump/#{table}"
|
data/lib/tasks/database.rake
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
namespace :database do
|
|
2
|
-
desc "Dump all model records to Ruby files in lib/tasks/database_cloner/db_dump
|
|
2
|
+
desc "Dump all model records to Ruby files in lib/tasks/database_cloner/db_dump/. Use MODELS=users,posts to filter."
|
|
3
3
|
task download: :environment do
|
|
4
|
-
|
|
4
|
+
only = ENV["MODELS"]&.split(",")&.map(&:strip)
|
|
5
|
+
DatabaseClonerRails::Downloader.run(only: only)
|
|
5
6
|
end
|
|
6
7
|
|
|
7
|
-
desc "Restore model records from dumped Ruby files"
|
|
8
|
+
desc "Restore model records from dumped Ruby files. Use MODELS=users,posts to filter."
|
|
8
9
|
task upload: :environment do
|
|
9
|
-
|
|
10
|
+
only = ENV["MODELS"]&.split(",")&.map(&:strip)
|
|
11
|
+
DatabaseClonerRails::Uploader.run(only: only)
|
|
10
12
|
end
|
|
11
13
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: database-cloner-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Abhishek Sharma
|
|
@@ -80,8 +80,17 @@ dependencies:
|
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '1.7'
|
|
83
|
-
description:
|
|
84
|
-
|
|
83
|
+
description: |
|
|
84
|
+
database-cloner-rails provides two rake tasks for moving database records between
|
|
85
|
+
Rails environments. `rake database:download` dumps all ActiveRecord model records
|
|
86
|
+
to plain Ruby files (Model.create(...) statements). `rake database:upload` replays
|
|
87
|
+
those files to restore records in the target database.
|
|
88
|
+
|
|
89
|
+
Useful for seeding a staging environment from production data, creating snapshots
|
|
90
|
+
before destructive migrations, or sharing realistic test data across a team.
|
|
91
|
+
|
|
92
|
+
Supports optional MODELS filtering: `rake database:download MODELS=users,posts`
|
|
93
|
+
to dump only specific tables. The dump directory is created automatically.
|
|
85
94
|
email:
|
|
86
95
|
- abhsss96@gmail.com
|
|
87
96
|
executables: []
|
|
@@ -102,7 +111,11 @@ files:
|
|
|
102
111
|
homepage: https://github.com/abhsss96/database-cloner-rails
|
|
103
112
|
licenses:
|
|
104
113
|
- MIT
|
|
105
|
-
metadata:
|
|
114
|
+
metadata:
|
|
115
|
+
homepage_uri: https://github.com/abhsss96/database-cloner-rails
|
|
116
|
+
source_code_uri: https://github.com/abhsss96/database-cloner-rails
|
|
117
|
+
bug_tracker_uri: https://github.com/abhsss96/database-cloner-rails/issues
|
|
118
|
+
changelog_uri: https://github.com/abhsss96/database-cloner-rails/releases
|
|
106
119
|
post_install_message:
|
|
107
120
|
rdoc_options: []
|
|
108
121
|
require_paths:
|
|
@@ -121,5 +134,5 @@ requirements: []
|
|
|
121
134
|
rubygems_version: 3.5.22
|
|
122
135
|
signing_key:
|
|
123
136
|
specification_version: 4
|
|
124
|
-
summary: Rake tasks to
|
|
137
|
+
summary: Rake tasks to dump and restore ActiveRecord data across Rails environments
|
|
125
138
|
test_files: []
|