seed_dump 0.6.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|