seed_dump 0.6.0 → 1.0.0
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 +4 -4
- data/.rspec +2 -0
- data/Gemfile +13 -0
- data/README.md +89 -0
- data/Rakefile +4 -24
- data/VERSION +1 -1
- data/lib/seed_dump/perform.rb +34 -36
- data/seed_dump.gemspec +30 -11
- data/{test → spec}/models/abstract_sample.rb +0 -0
- data/{test → spec}/models/child_sample.rb +0 -1
- data/{test → spec}/models/nested/sample.rb +0 -1
- data/spec/models/sample.rb +2 -0
- data/spec/seed_dump_perform_spec.rb +118 -0
- data/spec/spec_helper.rb +15 -0
- metadata +55 -12
- data/README.rdoc +0 -114
- data/test/fixtures/samples.yml +0 -54
- data/test/models/sample.rb +0 -3
- data/test/seed_dump_test.rb +0 -77
- data/test/test_helper.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6af3d1433e6c77d4aa40fa1ea392cc9ac21ee728
|
4
|
+
data.tar.gz: eb9a5434bc51a69c1f24828c91be082679bf6668
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a995c0615b35cc3a7332a8d2eef59dea404ece69fa9b8ec10ab46ff3c0338fed07de039c14673ec582fa4cb86877ad90c5f6f81c1ac5a76cb30e60e282546595
|
7
|
+
data.tar.gz: 59aeb2c7666dfba8471406b8428598025f2e3a522f15fdd6419a06179c4671bfce6ca89eb14ee121a12522b0e1923200f9ba728737136903d077b234ce4c0921
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
Seed Dump
|
2
|
+
========
|
3
|
+
|
4
|
+
Seed Dump is a Rails 4 plugin that adds a rake task named `db:seed:dump`.
|
5
|
+
|
6
|
+
It allows you to create a `db/seeds.rb` from the existing data in your database.
|
7
|
+
|
8
|
+
Note: if you want to use Seed Dump with Rails 3 or earlier, use [version 0.5.3](http://rubygems.org/gems/seed_dump/versions/0.5.3) or earlier.
|
9
|
+
|
10
|
+
Example Usage
|
11
|
+
-------------
|
12
|
+
|
13
|
+
Dump all data directly to `db/seeds.rb`:
|
14
|
+
|
15
|
+
$ rake db:seed:dump
|
16
|
+
|
17
|
+
Dump only data from the users and products table and dump a maximum amount of 2 records:
|
18
|
+
|
19
|
+
$ rake db:seed:dump MODELS=User,Product LIMIT=2
|
20
|
+
|
21
|
+
Result:
|
22
|
+
|
23
|
+
$ cat db/seeds.rb
|
24
|
+
# Autogenerated by the db:seed:dump task
|
25
|
+
# Do not hesitate to tweak this to your needs
|
26
|
+
|
27
|
+
products = Product.create([
|
28
|
+
{ :category_id => 1, :description => "Long Sleeve Shirt", :name => "Long Sleeve Shirt" },
|
29
|
+
{ :category_id => 3, :description => "Plain White Tee Shirt", :name => "Plain T-Shirt" }
|
30
|
+
])
|
31
|
+
|
32
|
+
users = User.create([
|
33
|
+
{ :id => 1, :password => "123456", :username => "test_1" },
|
34
|
+
{ :id => 2, :password => "234567", :username => "tes2" }
|
35
|
+
])
|
36
|
+
|
37
|
+
Append to `db/seeds.rb` instead of overwriting it:
|
38
|
+
|
39
|
+
rake db:seed:dump APPEND=true
|
40
|
+
|
41
|
+
Use another output file instead of `db/seeds.rb`:
|
42
|
+
|
43
|
+
rake db:seed:dump FILE=db/categories.rb
|
44
|
+
|
45
|
+
If you want the dump to use `create!` rather than `create`:
|
46
|
+
|
47
|
+
rake db:seed:dump CREATE_METHOD='create!'
|
48
|
+
|
49
|
+
There are more environment variables that can be set— see below for all of them.
|
50
|
+
|
51
|
+
|
52
|
+
Installation
|
53
|
+
------------
|
54
|
+
|
55
|
+
Add it to your Gemfile with:
|
56
|
+
|
57
|
+
gem 'seed_dump'
|
58
|
+
|
59
|
+
Or install it by hand:
|
60
|
+
|
61
|
+
$ gem install seed_dump
|
62
|
+
|
63
|
+
|
64
|
+
All environment variables
|
65
|
+
-------------------------
|
66
|
+
|
67
|
+
`APPEND`: Append the data to the file instead of overwriting it.
|
68
|
+
|
69
|
+
`CREATE_METHOD`: Use the specified create method rather than `create` (the default). Note: if you are using bash and want to use `create!`, be sure to use single quotes on the command line (i.e. `CREATE_METHOD='create!'`).
|
70
|
+
|
71
|
+
`FILE`: Use a different output file. Default: `db/seeds.rb`.
|
72
|
+
|
73
|
+
`LIMIT`: Dump no more then this amount of data. Default: no limit.
|
74
|
+
|
75
|
+
`MAX`: Split one create action per model into several create actions with MAX elements in each. Default: no limit. Useful for large data dumping to reduce memory usage.
|
76
|
+
|
77
|
+
`MODEL[S]`: A model name or a comma-separated list of models. Default: all models.
|
78
|
+
|
79
|
+
`NO_DATA`: Don't dump any data from the db, instead generate empty `create` options.
|
80
|
+
|
81
|
+
`WITH_ID`: Include the `:id` in the `create` options.
|
82
|
+
|
83
|
+
`TIMESTAMPS`: If true, include the `:created_by` and `:updated_by` timestamps. If false, don't include them. Default: true.
|
84
|
+
|
85
|
+
`SKIP_CALLBACKS`: Deactivate callbacks while importing.
|
86
|
+
|
87
|
+
`PG_SCHEMA`: Postgres schema support.
|
88
|
+
|
89
|
+
`MODEL_DIR`: Specify an alternate model dir.
|
data/Rakefile
CHANGED
@@ -16,30 +16,6 @@ rescue LoadError
|
|
16
16
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
17
17
|
end
|
18
18
|
|
19
|
-
require 'rake/testtask'
|
20
|
-
Rake::TestTask.new(:test) do |test|
|
21
|
-
test.libs << 'lib' << 'test'
|
22
|
-
test.pattern = 'test/*_test.rb'
|
23
|
-
test.verbose = true
|
24
|
-
end
|
25
|
-
|
26
|
-
begin
|
27
|
-
require 'rcov/rcovtask'
|
28
|
-
Rcov::RcovTask.new do |test|
|
29
|
-
test.libs << 'test'
|
30
|
-
test.pattern = 'test/**/test_*.rb'
|
31
|
-
test.verbose = true
|
32
|
-
end
|
33
|
-
rescue LoadError
|
34
|
-
task :rcov do
|
35
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
task :test => :check_dependencies
|
40
|
-
|
41
|
-
task :default => :test
|
42
|
-
|
43
19
|
require 'rdoc/task'
|
44
20
|
Rake::RDocTask.new do |rdoc|
|
45
21
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
@@ -49,3 +25,7 @@ Rake::RDocTask.new do |rdoc|
|
|
49
25
|
rdoc.rdoc_files.include('README*')
|
50
26
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
27
|
end
|
28
|
+
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
RSpec::Core::RakeTask.new(:spec)
|
31
|
+
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/lib/seed_dump/perform.rb
CHANGED
@@ -22,7 +22,6 @@ module SeedDump
|
|
22
22
|
@opts['with_id'] = env["WITH_ID"].true?
|
23
23
|
@opts['timestamps'] = env["TIMESTAMPS"].true? || env["TIMESTAMPS"].nil?
|
24
24
|
@opts['no-data'] = env['NO_DATA'].true?
|
25
|
-
@opts['without_protection'] = env['WITHOUT_PROTECTION'].true? || (env['WITHOUT_PROTECTION'].nil? && @opts['timestamps'])
|
26
25
|
@opts['skip_callbacks'] = env['SKIP_CALLBACKS'].true?
|
27
26
|
@opts['models'] = env['MODELS'] || (env['MODEL'] ? env['MODEL'] : "")
|
28
27
|
@opts['file'] = env['FILE'] || "#{Rails.root}/db/seeds.rb"
|
@@ -34,41 +33,46 @@ module SeedDump
|
|
34
33
|
@opts['schema'] = env['PG_SCHEMA']
|
35
34
|
@opts['model_dir'] = env['MODEL_DIR'] || @model_dir
|
36
35
|
@opts['create_method'] = env['CREATE_METHOD'] || 'create'
|
37
|
-
@opts['rails4'] = env['RAILS4'].true?
|
38
|
-
monkeypatch_AR if @opts['rails4']
|
39
36
|
end
|
40
37
|
|
41
|
-
def
|
42
|
-
|
43
|
-
def attr_accessible(*opts)
|
44
|
-
nil
|
45
|
-
end
|
46
|
-
end
|
38
|
+
def log(msg)
|
39
|
+
puts msg if @opts['debug']
|
47
40
|
end
|
48
41
|
|
49
42
|
def load_models
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
43
|
+
log("Searching in #{@opts['model_dir']} for models")
|
44
|
+
|
45
|
+
Dir[File.join(Dir.pwd, @opts['model_dir'])].sort.each do |f|
|
46
|
+
log("Processing file #{f}")
|
47
|
+
|
48
|
+
dirname, basename = File.split(f)
|
49
|
+
|
50
|
+
dir_array = dirname.split(File::SEPARATOR)
|
51
|
+
|
52
|
+
# Find index of last occurence of 'models' in path
|
53
|
+
models_index = nil
|
54
|
+
dir_array.each_with_index {|x, i| models_index = i if x == 'models'}
|
55
|
+
|
56
|
+
model_dir_array = dir_array[models_index + 1..-1]
|
57
57
|
|
58
58
|
# Initialize nested model namespaces
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
model_dir_array.inject(Object) do |parent, child|
|
60
|
+
child = child.camelize
|
61
|
+
|
62
|
+
if parent.const_defined?(child)
|
63
|
+
parent.const_get(child)
|
62
64
|
else
|
63
|
-
|
65
|
+
parent.const_set(child, Module.new)
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
67
|
-
model = parts.join("::")
|
68
69
|
require f
|
69
70
|
|
70
|
-
|
71
|
-
|
71
|
+
model = File.join(model_dir_array + [File.basename(basename, '.rb')]).camelize
|
72
|
+
|
73
|
+
log("Detected model #{model}")
|
74
|
+
|
75
|
+
@models << model if @opts['models'].include?(model) || @opts['models'].empty?
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
@@ -103,25 +107,22 @@ module SeedDump
|
|
103
107
|
create_hash = ""
|
104
108
|
options = ''
|
105
109
|
rows = []
|
106
|
-
arr =
|
107
|
-
|
110
|
+
arr = nil
|
111
|
+
unless @opts['no-data']
|
112
|
+
arr = model.all
|
113
|
+
arr.limit(@ar_options[:limit]) if @ar_options[:limit]
|
114
|
+
end
|
108
115
|
arr = arr.empty? ? [model.new] : arr
|
109
116
|
|
110
117
|
arr.each_with_index { |r,i|
|
111
118
|
attr_s = [];
|
112
119
|
r.attributes.each do |k,v|
|
113
|
-
|
114
|
-
|
115
|
-
@last_record.push k if pushed_key
|
116
|
-
end
|
120
|
+
pushed_key = dump_attribute(attr_s,r,k,v)
|
121
|
+
@last_record.push k if pushed_key
|
117
122
|
end
|
118
123
|
rows.push "#{@indent}{ " << attr_s.join(', ') << " }"
|
119
124
|
}
|
120
125
|
|
121
|
-
if @opts['without_protection']
|
122
|
-
options = ', :without_protection => true '
|
123
|
-
end
|
124
|
-
|
125
126
|
if @opts['max']
|
126
127
|
splited_rows = rows.each_slice(@opts['max']).to_a
|
127
128
|
maxsarr = []
|
@@ -182,11 +183,8 @@ module SeedDump
|
|
182
183
|
end
|
183
184
|
|
184
185
|
def run(env)
|
185
|
-
|
186
186
|
setup env
|
187
187
|
|
188
|
-
puts "Protection is disabled." if @opts['verbose'] && @opts['without_protection']
|
189
|
-
|
190
188
|
set_search_path @opts['schema'] if @opts['schema']
|
191
189
|
|
192
190
|
load_models
|
data/seed_dump.gemspec
CHANGED
@@ -5,20 +5,22 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "seed_dump"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rob Halff", "Ryan Oblak"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-09-18"
|
13
13
|
s.description = "Dump (parts) of your database to db/seeds.rb to get a headstart creating a meaningful seeds.rb file"
|
14
14
|
s.email = "rroblak@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
|
-
"README.
|
16
|
+
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
|
+
".rspec",
|
19
20
|
"CHANGELOG.rdoc",
|
21
|
+
"Gemfile",
|
20
22
|
"MIT-LICENSE",
|
21
|
-
"README.
|
23
|
+
"README.md",
|
22
24
|
"Rakefile",
|
23
25
|
"VERSION",
|
24
26
|
"lib/clip.rb",
|
@@ -28,17 +30,34 @@ Gem::Specification.new do |s|
|
|
28
30
|
"lib/tasks/seed_dump.rake",
|
29
31
|
"lib/true.rb",
|
30
32
|
"seed_dump.gemspec",
|
31
|
-
"
|
32
|
-
"
|
33
|
-
"
|
34
|
-
"
|
35
|
-
"
|
36
|
-
"
|
37
|
-
"test/test_helper.rb"
|
33
|
+
"spec/models/abstract_sample.rb",
|
34
|
+
"spec/models/child_sample.rb",
|
35
|
+
"spec/models/nested/sample.rb",
|
36
|
+
"spec/models/sample.rb",
|
37
|
+
"spec/seed_dump_perform_spec.rb",
|
38
|
+
"spec/spec_helper.rb"
|
38
39
|
]
|
39
40
|
s.homepage = "https://github.com/rroblak/seed_dump"
|
40
41
|
s.require_paths = ["lib"]
|
41
42
|
s.rubygems_version = "2.0.3"
|
42
43
|
s.summary = "{Seed Dumper for Rails}"
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
s.specification_version = 4
|
47
|
+
|
48
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
50
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 0"])
|
51
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
52
|
+
else
|
53
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
54
|
+
s.add_dependency(%q<activerecord>, [">= 0"])
|
55
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
56
|
+
end
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
59
|
+
s.add_dependency(%q<activerecord>, [">= 0"])
|
60
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
61
|
+
end
|
43
62
|
end
|
44
63
|
|
File without changes
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SeedDump::Perform do
|
4
|
+
before(:all) do
|
5
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
6
|
+
|
7
|
+
ActiveRecord::Schema.define(:version => 1) do
|
8
|
+
create_table 'child_samples', :force => true do |t|
|
9
|
+
t.string 'name'
|
10
|
+
t.datetime 'created_at', :null => false
|
11
|
+
t.datetime 'updated_at', :null => false
|
12
|
+
end
|
13
|
+
|
14
|
+
create_table 'samples', :force => true do |t|
|
15
|
+
t.string 'string'
|
16
|
+
t.text 'text'
|
17
|
+
t.integer 'integer'
|
18
|
+
t.float 'float'
|
19
|
+
t.decimal 'decimal'
|
20
|
+
t.datetime 'datetime'
|
21
|
+
t.datetime 'timestamp'
|
22
|
+
t.time 'time'
|
23
|
+
t.date 'date'
|
24
|
+
t.binary 'binary'
|
25
|
+
t.boolean 'boolean'
|
26
|
+
t.datetime 'created_at', :null => false
|
27
|
+
t.datetime 'updated_at', :null => false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
before do
|
33
|
+
@sd = SeedDump::Perform.new
|
34
|
+
|
35
|
+
@env = {'MODEL_DIR' => 'spec/models/*.rb',
|
36
|
+
'FILE' => Dir.pwd + '/spec/db/seeds.rb',
|
37
|
+
'VERBOSE' => false,
|
38
|
+
'DEBUG' => false}
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should load models from the specified directory' do
|
42
|
+
@sd.setup(@env)
|
43
|
+
|
44
|
+
@sd.load_models
|
45
|
+
|
46
|
+
@sd.models.should eq(["AbstractSample", "ChildSample", "Sample"])
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should support nested models' do
|
50
|
+
@env['MODEL_DIR'] = 'spec/models/**/*.rb'
|
51
|
+
|
52
|
+
@sd.setup @env
|
53
|
+
|
54
|
+
@sd.load_models
|
55
|
+
|
56
|
+
@sd.models.should eq(['AbstractSample', 'ChildSample', 'Nested::Sample', 'Sample'])
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should not include timestamps if the TIMESTAMPS parameter is false' do
|
60
|
+
@env['TIMESTAMPS'] = false
|
61
|
+
|
62
|
+
@sd.setup @env
|
63
|
+
|
64
|
+
@sd.load_models
|
65
|
+
|
66
|
+
@sd.dump_models
|
67
|
+
|
68
|
+
@sd.last_record.should_not include('created_at')
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should include timestamps if the TIMESTAMPS parameter is true' do
|
72
|
+
@env['TIMESTAMPS'] = true
|
73
|
+
|
74
|
+
@sd.setup @env
|
75
|
+
|
76
|
+
@sd.load_models
|
77
|
+
|
78
|
+
@sd.dump_models
|
79
|
+
|
80
|
+
@sd.last_record.should include('created_at')
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should include ids if the WITH_ID parameter is true' do
|
84
|
+
@env['WITH_ID'] = true
|
85
|
+
|
86
|
+
@sd.setup @env
|
87
|
+
|
88
|
+
@sd.load_models
|
89
|
+
|
90
|
+
@sd.dump_models
|
91
|
+
|
92
|
+
@sd.last_record.should include('id')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should skip abstract models' do
|
96
|
+
@env['MODELS'] = 'AbstractSample'
|
97
|
+
|
98
|
+
@sd.setup @env
|
99
|
+
|
100
|
+
@sd.load_models
|
101
|
+
|
102
|
+
@sd.dump_models
|
103
|
+
|
104
|
+
@sd.last_record.should eq([])
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should use the create method specified in the CREATE_METHOD parameter' do
|
108
|
+
@env['CREATE_METHOD'] = 'create!'
|
109
|
+
|
110
|
+
@sd.setup @env
|
111
|
+
|
112
|
+
@sd.load_models
|
113
|
+
|
114
|
+
@sd.dump_models
|
115
|
+
|
116
|
+
@sd.instance_variable_get(:@seed_rb).should include('create!')
|
117
|
+
end
|
118
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'seed_dump/perform'
|
2
|
+
require 'active_support/core_ext/string'
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
6
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
7
|
+
config.run_all_when_everything_filtered = true
|
8
|
+
config.filter_run :focus
|
9
|
+
|
10
|
+
# Run specs in random order to surface order dependencies. If you find an
|
11
|
+
# order dependency and want to debug it, you can fix the order by providing
|
12
|
+
# the seed, which is printed after each run.
|
13
|
+
# --seed 1234
|
14
|
+
config.order = 'random'
|
15
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seed_dump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Halff
|
@@ -9,19 +9,63 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
-
dependencies:
|
12
|
+
date: 2013-09-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: activerecord
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: jeweler
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
14
56
|
description: Dump (parts) of your database to db/seeds.rb to get a headstart creating
|
15
57
|
a meaningful seeds.rb file
|
16
58
|
email: rroblak@gmail.com
|
17
59
|
executables: []
|
18
60
|
extensions: []
|
19
61
|
extra_rdoc_files:
|
20
|
-
- README.
|
62
|
+
- README.md
|
21
63
|
files:
|
64
|
+
- .rspec
|
22
65
|
- CHANGELOG.rdoc
|
66
|
+
- Gemfile
|
23
67
|
- MIT-LICENSE
|
24
|
-
- README.
|
68
|
+
- README.md
|
25
69
|
- Rakefile
|
26
70
|
- VERSION
|
27
71
|
- lib/clip.rb
|
@@ -31,13 +75,12 @@ files:
|
|
31
75
|
- lib/tasks/seed_dump.rake
|
32
76
|
- lib/true.rb
|
33
77
|
- seed_dump.gemspec
|
34
|
-
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
-
|
40
|
-
- test/test_helper.rb
|
78
|
+
- spec/models/abstract_sample.rb
|
79
|
+
- spec/models/child_sample.rb
|
80
|
+
- spec/models/nested/sample.rb
|
81
|
+
- spec/models/sample.rb
|
82
|
+
- spec/seed_dump_perform_spec.rb
|
83
|
+
- spec/spec_helper.rb
|
41
84
|
homepage: https://github.com/rroblak/seed_dump
|
42
85
|
licenses: []
|
43
86
|
metadata: {}
|
data/README.rdoc
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
= SeedDump
|
2
|
-
|
3
|
-
Seed dump is a Rails plugin that adds a rake task named db:seed:dump.
|
4
|
-
|
5
|
-
It allows you to create a db/seeds.rb from your existing data in the database.
|
6
|
-
When there is no data in the database it will generate empty create statements.
|
7
|
-
|
8
|
-
It mainly exists for people who are too lazy writing create statements in db/seeds.rb themselves
|
9
|
-
and need something to dump data from their existing database data into seeds.rb
|
10
|
-
|
11
|
-
Note: for Rails 4 compatibility please add "RAILS4=true WITHOUT_PROTECTION=false". This will be cleaned up in the future.
|
12
|
-
|
13
|
-
== Example Usage
|
14
|
-
|
15
|
-
Dump all data directly to db/seeds.rb:
|
16
|
-
|
17
|
-
rake db:seed:dump
|
18
|
-
|
19
|
-
Dump only data from the users and products table and dump a maximum amount of 2 records:
|
20
|
-
|
21
|
-
$ rake db:seed:dump MODELS=User,Product LIMIT=2
|
22
|
-
|
23
|
-
Result:
|
24
|
-
|
25
|
-
$ cat db/seeds.rb
|
26
|
-
# Autogenerated by the db:seed:dump task
|
27
|
-
# Do not hesitate to tweak this to your needs
|
28
|
-
|
29
|
-
products = Product.create([
|
30
|
-
{ :category_id => 1, :description => "Long Sleeve Shirt", :name => "Long Sleeve Shirt" },
|
31
|
-
{ :category_id => 3, :description => "Plain White Tee Shirt", :name => "Plain T-Shirt" }
|
32
|
-
])
|
33
|
-
|
34
|
-
users = User.create([
|
35
|
-
{ :id => 1, :password => "123456", :username => "test_1" },
|
36
|
-
{ :id => 2, :password => "234567", :username => "tes2" }
|
37
|
-
])
|
38
|
-
|
39
|
-
Append to db/seeds.rb instead of overwriting it:
|
40
|
-
|
41
|
-
rake db:seed:dump APPEND=true
|
42
|
-
|
43
|
-
Use another output file instead of db/seeds.rb
|
44
|
-
|
45
|
-
rake db:seed:dump FILE=db/categories.rb
|
46
|
-
|
47
|
-
By default the :id column will not be added to the generated create statements.
|
48
|
-
If you do want the :id to be included use WITH_ID:
|
49
|
-
|
50
|
-
rake db:seed:dump WITH_ID=1
|
51
|
-
|
52
|
-
If you don't want +seed_dump+ to dump any data allready available in the database use NO_DATA.
|
53
|
-
|
54
|
-
This will generate the dump with only 1 empty create statement.
|
55
|
-
It's up to you to edit these and change the values into something meaningful:
|
56
|
-
|
57
|
-
rake db:seed:dump MODEL=User NO_DATA=1 APPEND=true
|
58
|
-
|
59
|
-
If you want the dump to use `create!` rather than `create`:
|
60
|
-
|
61
|
-
rake db:seed:dump CREATE_METHOD='create!'
|
62
|
-
|
63
|
-
Here is a full example using all of the options above:
|
64
|
-
|
65
|
-
rake db:seed:dump MODELS=Category LIMIT=10 APPEND=true FILE=db/categories.rb WITH_ID=1 NO_DATA=1 CREATE_METHOD='create!'
|
66
|
-
|
67
|
-
== All environment variables
|
68
|
-
|
69
|
-
RAILS4:
|
70
|
-
Specify as "true" for Rails 4 compatibility.
|
71
|
-
|
72
|
-
APPEND:
|
73
|
-
Append the data to db/seeds.rb instead of overwriting it.
|
74
|
-
|
75
|
-
CREATE_METHOD:
|
76
|
-
Use the specified create method rather than 'create' (the default). Note: if you are using bash and want to use 'create!', be sure to use single quotes on the command line (i.e. CREATE_METHOD='create!').
|
77
|
-
|
78
|
-
FILE:
|
79
|
-
Use a different output file, default: db/seeds.rb
|
80
|
-
|
81
|
-
LIMIT:
|
82
|
-
Dump no more then this amount of data, default: no limit
|
83
|
-
|
84
|
-
MAX:
|
85
|
-
Split one create action per model to several create actions with MAX elements in each, default: no limit
|
86
|
-
It usefull for large data dumping to reduce memory usage
|
87
|
-
|
88
|
-
MODEL(S):
|
89
|
-
A model name or a comma seperated list of models, default: all models
|
90
|
-
|
91
|
-
NO_DATA:
|
92
|
-
Don't dump any data from the db, instead generate empty Create options
|
93
|
-
|
94
|
-
WITH_ID:
|
95
|
-
Inlcude the +:id+ in the create options
|
96
|
-
|
97
|
-
TIMESTAMPS:
|
98
|
-
Include the :created_by and :updated_by timestamps (default)
|
99
|
-
|
100
|
-
SKIP_CALLBACKS:
|
101
|
-
Deactivate callbacks while importing.
|
102
|
-
|
103
|
-
PG_SCHEMA:
|
104
|
-
Postgres schema support
|
105
|
-
|
106
|
-
WITHOUT_PROTECTION:
|
107
|
-
Skip protection for columns that are protected by default.
|
108
|
-
Note : WITH_ID and TIMESTAMPS automatically override protection
|
109
|
-
|
110
|
-
MODEL_DIR:
|
111
|
-
Specify an alternative model dir
|
112
|
-
|
113
|
-
|
114
|
-
Copyright (c) 2010 Rob Halff, released under the MIT license
|
data/test/fixtures/samples.yml
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
2
|
-
|
3
|
-
bharathiyar:
|
4
|
-
string: Poetry of Subramaniya Bharathiyar
|
5
|
-
text: யாமறிந்த மொழிகளிலே தமிழ்மொழி போல் இனிதாவது எங்கும் காணோம்,
|
6
|
-
பாமரராய் விலங்குகளாய், உலகனைத்தும் இகழ்ச்சிசொலப் பான்மை கெட்டு,
|
7
|
-
நாமமது தமிழரெனக் கொண்டு இங்கு வாழ்ந்திடுதல் நன்றோ? சொல்லீர்!
|
8
|
-
தேமதுரத் தமிழோசை உலகமெலாம் பரவும்வகை செய்தல் வேண்டும்.
|
9
|
-
integer: 1
|
10
|
-
float: 3.3333
|
11
|
-
decimal: 9.99
|
12
|
-
datetime: 1902-07-21 17:01:31
|
13
|
-
timestamp: 1900-07-21 17:01:31
|
14
|
-
time: 1903-07-21 17:01:31
|
15
|
-
date: 1904-07-21
|
16
|
-
binary:
|
17
|
-
boolean: false
|
18
|
-
|
19
|
-
pushkin:
|
20
|
-
string: Pushkin's Bronze Horseman
|
21
|
-
text: На берегу пустынных волн
|
22
|
-
Стоял он, дум великих полн,
|
23
|
-
И вдаль глядел. Пред ним широко
|
24
|
-
Река неслася; бедный чёлн
|
25
|
-
По ней стремился одиноко.
|
26
|
-
По мшистым, топким берегам
|
27
|
-
Чернели избы здесь и там,
|
28
|
-
Приют убогого чухонца;
|
29
|
-
И лес, неведомый лучам
|
30
|
-
В тумане спрятанного солнца,
|
31
|
-
Кругом шумел.
|
32
|
-
integer: 1
|
33
|
-
float: 1.5
|
34
|
-
decimal: 9.99
|
35
|
-
datetime: 2012-07-21 17:01:31
|
36
|
-
timestamp: 2012-07-21 17:01:31
|
37
|
-
time: 2012-07-21 17:01:31
|
38
|
-
date: 2012-07-21
|
39
|
-
binary:
|
40
|
-
boolean: false
|
41
|
-
poem:
|
42
|
-
string: Anglo-Saxon Rune Poem
|
43
|
-
text: ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ
|
44
|
-
ᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ
|
45
|
-
ᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ
|
46
|
-
integer: 1
|
47
|
-
float: 1.9
|
48
|
-
decimal: 4.55
|
49
|
-
datetime: 2012-07-21 17:01:31
|
50
|
-
timestamp: 2012-07-21 17:01:31
|
51
|
-
time: 2012-07-21 17:01:31
|
52
|
-
date: 2012-07-21
|
53
|
-
binary:
|
54
|
-
boolean: false
|
data/test/models/sample.rb
DELETED
data/test/seed_dump_test.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require "seed_dump/perform"
|
3
|
-
|
4
|
-
class SeedDumpTest < ActiveSupport::TestCase
|
5
|
-
|
6
|
-
setup do
|
7
|
-
@sd = SeedDump::Perform.new
|
8
|
-
# universial options for every test
|
9
|
-
@env = {
|
10
|
-
"MODEL_DIR" => 'test/models/**.rb',
|
11
|
-
"FILE" => Dir.pwd + '/test/db/seeds.rb',
|
12
|
-
"VERBOSE" => false,
|
13
|
-
"DEBUG" => false,
|
14
|
-
"RAILS4" => ENV['RAILS4']
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
test "load sample model" do
|
19
|
-
@env['MODEL_DIR'] = 'test/models/*.rb'
|
20
|
-
@sd.setup @env
|
21
|
-
@sd.load_models
|
22
|
-
assert_equal ["AbstractSample", "ChildSample", "Sample"], @sd.models
|
23
|
-
end
|
24
|
-
|
25
|
-
test "support nested models" do
|
26
|
-
@env['MODEL_DIR'] = 'test/models/**/*.rb'
|
27
|
-
@sd.setup @env
|
28
|
-
@sd.load_models
|
29
|
-
assert_equal ["AbstractSample", "ChildSample", "Nested::Sample", "Sample"], @sd.models
|
30
|
-
end
|
31
|
-
|
32
|
-
test "without timestamps" do
|
33
|
-
@env['MODEL_DIR'] = 'test/models/*.rb'
|
34
|
-
@env['TIMESTAMPS'] = false
|
35
|
-
@sd.setup @env
|
36
|
-
@sd.load_models
|
37
|
-
@sd.dump_models
|
38
|
-
assert !@sd.last_record.include?("created_at"), "Should not include created_at if timestamps are off"
|
39
|
-
end
|
40
|
-
|
41
|
-
test "with timestamps" do
|
42
|
-
@env['MODEL_DIR'] = 'test/models/*.rb'
|
43
|
-
@env['TIMESTAMPS'] = true
|
44
|
-
@sd.setup @env
|
45
|
-
@sd.load_models
|
46
|
-
@sd.dump_models
|
47
|
-
assert @sd.last_record.include?("created_at"), "Must include created_at if timestamps are desired"
|
48
|
-
end
|
49
|
-
|
50
|
-
test "with id" do
|
51
|
-
@env['MODEL_DIR'] = 'test/models/*.rb'
|
52
|
-
@env['WITH_ID'] = true
|
53
|
-
@sd.setup @env
|
54
|
-
@sd.load_models
|
55
|
-
@sd.dump_models
|
56
|
-
assert @sd.last_record.include?("id"), "WITH_ID must include id"
|
57
|
-
end
|
58
|
-
|
59
|
-
test "skip abstract model" do
|
60
|
-
@env['MODELS'] = "AbstractSample"
|
61
|
-
@env['MODEL_DIR'] = 'test/models/*.rb'
|
62
|
-
@env['TIMESTAMPS'] = false
|
63
|
-
@sd.setup @env
|
64
|
-
@sd.load_models
|
65
|
-
@sd.dump_models
|
66
|
-
assert_equal [], @sd.last_record
|
67
|
-
end
|
68
|
-
|
69
|
-
test "create method" do
|
70
|
-
@env['MODEL_DIR'] = 'test/models/*.rb'
|
71
|
-
@env['CREATE_METHOD'] = 'create!'
|
72
|
-
@sd.setup @env
|
73
|
-
@sd.load_models
|
74
|
-
@sd.dump_models
|
75
|
-
assert @sd.instance_variable_get(:@seed_rb) =~ /create!/, 'CREATE_METHOD must specify the creation method'
|
76
|
-
end
|
77
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
-
require 'rubygems'
|
3
|
-
require 'test/unit'
|
4
|
-
require 'active_support'
|
5
|
-
require 'active_record'
|
6
|
-
|
7
|
-
#require 'your_thing'
|
8
|
-
|
9
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
10
|
-
|
11
|
-
ActiveRecord::Schema.define(:version => 1) do
|
12
|
-
create_table "child_samples", :force => true do |t|
|
13
|
-
t.string "name"
|
14
|
-
t.datetime "created_at", :null => false
|
15
|
-
t.datetime "updated_at", :null => false
|
16
|
-
end
|
17
|
-
|
18
|
-
create_table "samples", :force => true do |t|
|
19
|
-
t.string "string"
|
20
|
-
t.text "text"
|
21
|
-
t.integer "integer"
|
22
|
-
t.float "float"
|
23
|
-
t.decimal "decimal"
|
24
|
-
t.datetime "datetime"
|
25
|
-
t.datetime "timestamp"
|
26
|
-
t.time "time"
|
27
|
-
t.date "date"
|
28
|
-
t.binary "binary"
|
29
|
-
t.boolean "boolean"
|
30
|
-
t.datetime "created_at", :null => false
|
31
|
-
t.datetime "updated_at", :null => false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
#class Sample < ActiveRecord::Base
|
36
|
-
#end
|