seed_dump 0.2.4 → 0.3.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.
- data/CHANGELOG.rdoc +4 -0
- data/VERSION +1 -1
- data/lib/seed_dump.rb +1 -0
- data/lib/seed_dump/perform.rb +84 -0
- data/lib/tasks/seed_dump.rake +1 -66
- data/seed_dump.gemspec +2 -1
- metadata +2 -1
data/CHANGELOG.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/seed_dump.rb
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
module SeedDump
|
2
|
+
class Perform
|
3
|
+
|
4
|
+
@opts = {}
|
5
|
+
@ar_options = {}
|
6
|
+
@indent = ""
|
7
|
+
@models = []
|
8
|
+
@seed_rb = ""
|
9
|
+
@id_set_string = ""
|
10
|
+
@verbose = true
|
11
|
+
|
12
|
+
def self.setup(env)
|
13
|
+
# config
|
14
|
+
@opts['with_id'] = !env["WITH_ID"].nil?
|
15
|
+
@opts['no-data'] = !env['NO_DATA'].nil?
|
16
|
+
@opts['models'] = env['MODELS'] || (env['MODEL'] ? env['MODEL'] : "")
|
17
|
+
@opts['file'] = env['FILE'] || "#{Rails.root}/db/seeds.rb"
|
18
|
+
@opts['append'] = (!env['APPEND'].nil? && File.exists?(opts['file']) )
|
19
|
+
@ar_options = env['LIMIT'].to_i > 0 ? { :limit => env['LIMIT'].to_i } : {}
|
20
|
+
@indent = " " * (env['INDENT'].nil? ? 2 : env['INDENT'].to_i)
|
21
|
+
@opts['models'] = @opts['models'].split(',').collect {|x| x.underscore.singularize.camelize.constantize }
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.loadModels
|
25
|
+
Dir['app/models/*.rb'].sort.each do |f|
|
26
|
+
model = File.basename(f, '.*').camelize.constantize
|
27
|
+
@models.push model if @opts['models'].include?(model) || @opts['models'].empty?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.dumpAttribute(a_s,r,k,v)
|
32
|
+
v = r.attribute_for_inspect(k)
|
33
|
+
if k == 'id' && @opts['with_id']
|
34
|
+
@id_set_string = "{ |c| c.#{k} = #{v} }.save"
|
35
|
+
else
|
36
|
+
a_s.push("#{k.to_sym.inspect} => #{v}") unless k == 'id' && !@opts['with_id']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.dumpModel(model)
|
41
|
+
create_hash = ""
|
42
|
+
arr = []
|
43
|
+
arr = model.find(:all, @ar_options) unless @opts['no-data']
|
44
|
+
arr = arr.empty? ? [model.new] : arr
|
45
|
+
arr.each_with_index { |r,i|
|
46
|
+
attr_s = [];
|
47
|
+
r.attributes.each { |k,v| dumpAttribute(attr_s,r,k,v) }
|
48
|
+
create_hash << "\n#{model}.create" << '( ' << attr_s.join(', ') << ' )' << @id_set_string
|
49
|
+
}
|
50
|
+
create_hash
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.dumpModels
|
54
|
+
@seed_rb = ""
|
55
|
+
@models.sort.each do |model|
|
56
|
+
@id_set_string = ''
|
57
|
+
puts "Adding #{model} seeds." if @verbose
|
58
|
+
@seed_rb << dumpModel(model) << "\n\n"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.writeFile
|
63
|
+
File.open(@opts['file'], (@opts['append'] ? "a" : "w")) { |f|
|
64
|
+
f << "# Autogenerated by the db:seed:dump task\n# Do not hesitate to tweak this to your needs\n" unless @opts['append']
|
65
|
+
f << "#{@seed_rb}"
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.run(env)
|
70
|
+
|
71
|
+
setup env
|
72
|
+
|
73
|
+
loadModels
|
74
|
+
|
75
|
+
puts "Appending seeds to #{@opts['file']}." if @opts['append']
|
76
|
+
dumpModels
|
77
|
+
|
78
|
+
puts "Writing #{@opts['file']}."
|
79
|
+
writeFile
|
80
|
+
|
81
|
+
puts "Done."
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/tasks/seed_dump.rake
CHANGED
@@ -3,73 +3,8 @@ namespace :db do
|
|
3
3
|
desc "Dump records from the database into db/seeds.rb"
|
4
4
|
task :dump => :environment do
|
5
5
|
|
6
|
-
|
7
|
-
opts = {}
|
8
|
-
opts['with_id'] = !ENV["WITH_ID"].nil?
|
9
|
-
opts['no-data'] = !ENV['NO_DATA'].nil?
|
10
|
-
opts['models'] = ENV['MODELS'] || (ENV['MODEL'] ? ENV['MODEL'] : "")
|
11
|
-
opts['file'] = ENV['FILE'] || "#{Rails.root}/db/seeds.rb"
|
12
|
-
opts['append'] = (!ENV['APPEND'].nil? && File.exists?(opts['file']) )
|
13
|
-
ar_options = ENV['LIMIT'].to_i > 0 ? { :limit => ENV['LIMIT'].to_i } : {}
|
14
|
-
indent = " " * (ENV['INDENT'].nil? ? 2 : ENV['INDENT'].to_i)
|
6
|
+
SeedDump::Perform::run(ENV)
|
15
7
|
|
16
|
-
models = opts['models'].split(',').collect {|x| x.underscore.singularize }
|
17
|
-
|
18
|
-
new_line = "\n"
|
19
|
-
puts "Appending seeds to #{opts['file']}." if opts['append']
|
20
|
-
|
21
|
-
seed_rb = ""
|
22
|
-
Dir['app/models/*.rb'].sort.each do |f|
|
23
|
-
model_name = File.basename(f, '.*')
|
24
|
-
if models.include?(model_name) || models.empty?
|
25
|
-
|
26
|
-
puts "Adding #{model_name.camelize} seeds."
|
27
|
-
|
28
|
-
create_hash = ""
|
29
|
-
|
30
|
-
model = model_name.camelize.constantize
|
31
|
-
arr = []
|
32
|
-
arr = model.find(:all, ar_options) unless opts['no-data']
|
33
|
-
arr = arr.empty? ? [model.new] : arr
|
34
|
-
arr.each_with_index { |r,i|
|
35
|
-
|
36
|
-
attr_s = [];
|
37
|
-
|
38
|
-
id_set_string = ''
|
39
|
-
r.attributes.each { |k,v|
|
40
|
-
v = r.attribute_for_inspect(k)
|
41
|
-
if k == 'id' && opts['with_id']
|
42
|
-
id_set_string = "{ |c| c.#{k} = #{v} }.save"
|
43
|
-
else
|
44
|
-
attr_s.push("#{k.to_sym.inspect} => #{v}") unless k == 'id' && !opts['with_id']
|
45
|
-
end
|
46
|
-
}
|
47
|
-
create_hash << (i > 0 ? "#{new_line}" : new_line) << "#{model_name.camelize}.create" << '( ' << attr_s.join(', ') << ' )' << id_set_string
|
48
|
-
}
|
49
|
-
seed_rb << "#{create_hash}#{new_line}#{new_line}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
File.open(opts['file'], (opts['append'] ? "a" : "w")) { |f|
|
54
|
-
|
55
|
-
puts "Writing #{opts['file']}."
|
56
|
-
|
57
|
-
unless opts['append']
|
58
|
-
cont =<<HERE
|
59
|
-
# Autogenerated by the db:seed:dump task
|
60
|
-
# Do not hesitate to tweak this to your needs
|
61
|
-
HERE
|
62
|
-
f << cont
|
63
|
-
end
|
64
|
-
|
65
|
-
cont =<<HERE
|
66
|
-
#{seed_rb}
|
67
|
-
HERE
|
68
|
-
f << cont
|
69
|
-
|
70
|
-
puts "Done."
|
71
|
-
|
72
|
-
}
|
73
8
|
end
|
74
9
|
end
|
75
10
|
end
|
data/seed_dump.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{seed_dump}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.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"]
|
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
"Rakefile",
|
23
23
|
"VERSION",
|
24
24
|
"lib/seed_dump.rb",
|
25
|
+
"lib/seed_dump/perform.rb",
|
25
26
|
"lib/seed_dump/railtie.rb",
|
26
27
|
"lib/tasks/seed_dump.rake",
|
27
28
|
"seed_dump.gemspec",
|
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: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- Rakefile
|
27
27
|
- VERSION
|
28
28
|
- lib/seed_dump.rb
|
29
|
+
- lib/seed_dump/perform.rb
|
29
30
|
- lib/seed_dump/railtie.rb
|
30
31
|
- lib/tasks/seed_dump.rake
|
31
32
|
- seed_dump.gemspec
|