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: 2894784ecfef1a9062058766e1c00c741a570daafa530b834d5b6107ca91919f
4
- data.tar.gz: b5c02fde16a181427e684a4bb5075a54741789e95c14843890070f79be16acff
3
+ metadata.gz: dc94354b2c948d5addf6fbdbcc07c5aed5cb0eb51634c7f1eb833c51db69ddd4
4
+ data.tar.gz: d81c9f8e62c3b345c32c764c211cafa9354bdfb5436aa9d3b7c52d465fb1104b
5
5
  SHA512:
6
- metadata.gz: faf0e1434b290814d8cb10c2f46ccd3e50546edd97da67e0bb07274d0d726be2c2bb57392e271d904dea95781df8e6649fb8008bab681d2b768cd8955ddc64c8
7
- data.tar.gz: 3d073850db2e76aec441781a9a0f33da8f0ff33dd426b5837fcebc9dd0fadca337bc0420a5c8e0bd3c99c33720cd6c8ec24580d894b2d00247390ce8a49833f9
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 back up and restore database records in Rails"
9
- spec.description = "Provides rake tasks to dump all ActiveRecord model records to Ruby files and restore them — useful for seeding staging from production data."
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
- ActiveRecord::Base.connection.tables.each do |table|
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.each do |table|
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}"
@@ -1,3 +1,3 @@
1
1
  module DatabaseClonerRails
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -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
- DatabaseClonerRails::Downloader.run
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
- DatabaseClonerRails::Uploader.run
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.0.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: Provides rake tasks to dump all ActiveRecord model records to Ruby files
84
- and restore them useful for seeding staging from production data.
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 back up and restore database records in Rails
137
+ summary: Rake tasks to dump and restore ActiveRecord data across Rails environments
125
138
  test_files: []