mixonic-seed-fu 1.1.0 → 1.2.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/README +71 -3
- data/lib/seed-fu.rb +1 -1
- data/lib/seed-fu/writer.rb +3 -0
- data/lib/seed-fu/writer/abstract.rb +57 -0
- data/lib/seed-fu/writer/seed.rb +23 -0
- data/lib/seed-fu/writer/seed_many.rb +33 -0
- data/seed-fu.gemspec +6 -2
- data/tasks/seed_fu_tasks.rake +0 -2
- metadata +6 -2
data/README
CHANGED
@@ -10,8 +10,8 @@ If you have suggestions or come across problems, please report them on
|
|
10
10
|
the Lighthouse project for Seed Fu:
|
11
11
|
http://mbleigh.lighthouseapp.com/projects/10223-seed-fu/overview
|
12
12
|
|
13
|
-
Usage
|
14
|
-
|
13
|
+
Simple Usage
|
14
|
+
============
|
15
15
|
|
16
16
|
Seed data is taken from the db/fixtures directory. Simply make descriptive .rb
|
17
17
|
files in that directory (they can be named anything, but users.rb for the User
|
@@ -63,4 +63,72 @@ duplication. By default, seed data will constrain to the id like so:
|
|
63
63
|
Note that any constraints that are passed in must be present in the subsequent
|
64
64
|
seed data setting.
|
65
65
|
|
66
|
-
|
66
|
+
Seed-many Usage
|
67
|
+
===============
|
68
|
+
|
69
|
+
Seed files can get pretty large. One way to keep down the file size is to use
|
70
|
+
the seed_many syntax. An example re-using the first seed usage example above:
|
71
|
+
|
72
|
+
User.seed_many(:login, :email, [
|
73
|
+
{ :login => "bob", :email => "bob@bobson.com", :first_name => "Bob", :last_name = "Bobson" },
|
74
|
+
{ :login => "bob", :email => "bob@stevenson.com", :first_name => "Bob", :last_name = "Stevenson" }
|
75
|
+
])
|
76
|
+
|
77
|
+
Not as pretty, but much more concise.
|
78
|
+
|
79
|
+
Generating SeedFu Files
|
80
|
+
=======================
|
81
|
+
|
82
|
+
Say you have a CSV you need to massage and store as seed files. You can create
|
83
|
+
an import script using SeedFu::Writer.
|
84
|
+
|
85
|
+
# script/generate_cities_seed_from_csv
|
86
|
+
require 'rubygems'
|
87
|
+
require 'fastercsv'
|
88
|
+
require File.join( File.dirname(__FILE__), '..', 'vendor/plugins/seed-fu/lib/seed-fu/writer' )
|
89
|
+
|
90
|
+
CITY_CSV = File.join( File.dirname(__FILE__), '..', 'city.csv' )
|
91
|
+
SEED_FILE = File.join( File.dirname(__FILE__), '..', 'db', 'fixtures', 'cities.rb' )
|
92
|
+
|
93
|
+
# Create a seed_writer, walk the CSV, add to the file.
|
94
|
+
#
|
95
|
+
|
96
|
+
seed_writer = SeedFu::Writer::SeedMany.new(
|
97
|
+
:seed_file => SEED_FILE,
|
98
|
+
:seed_model => 'City',
|
99
|
+
:seed_by => [ :city, :state ]
|
100
|
+
)
|
101
|
+
|
102
|
+
FasterCSV.foreach( CITY_CSV,
|
103
|
+
:return_headers => false,
|
104
|
+
:headers => :first_row
|
105
|
+
) do |row|
|
106
|
+
|
107
|
+
# Skip all but the US
|
108
|
+
#
|
109
|
+
next unless row['country_code'] == 'US'
|
110
|
+
|
111
|
+
unless us_state
|
112
|
+
puts "No State Match for #{row['region_name']}"
|
113
|
+
next
|
114
|
+
end
|
115
|
+
|
116
|
+
# Write the seed
|
117
|
+
#
|
118
|
+
seed_writer.add_seed({
|
119
|
+
:zip => row['zipcode'],
|
120
|
+
:state => row['state'],
|
121
|
+
:city => row['city'],
|
122
|
+
:latitude => row['latitude'],
|
123
|
+
:longitude => row['longitude']
|
124
|
+
})
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
seed_writer.finish
|
129
|
+
|
130
|
+
There is also a SeedFu::Writer::Seed in case you don't want to seed_many syntax.
|
131
|
+
Easy-peasy.
|
132
|
+
|
133
|
+
|
134
|
+
Copyright (c) 2008 Michael Bleigh, Matthew Beale released under the MIT license
|
data/lib/seed-fu.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
module SeedFu
|
2
|
+
|
3
|
+
module Writer
|
4
|
+
|
5
|
+
class Abstract
|
6
|
+
attr_accessor :seed_handle, :config, :after_first_line
|
7
|
+
|
8
|
+
def initialize(options={})
|
9
|
+
self.config = options
|
10
|
+
|
11
|
+
self.seed_handle = File.new(self.config[:seed_file], 'w')
|
12
|
+
|
13
|
+
write_header
|
14
|
+
end
|
15
|
+
|
16
|
+
def header
|
17
|
+
<<-END
|
18
|
+
# DO NOT MODIFY THIS FILE, it was auto-generated.
|
19
|
+
#
|
20
|
+
# Date: #{DateTime.now}
|
21
|
+
# Using #{self.class} to seed #{config[:seed_model]}
|
22
|
+
# Written with the command:
|
23
|
+
#
|
24
|
+
# #{$0} #{$*.join}
|
25
|
+
#
|
26
|
+
END
|
27
|
+
end
|
28
|
+
|
29
|
+
def footer
|
30
|
+
<<-END
|
31
|
+
# End auto-generated file.
|
32
|
+
END
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_seed(hash)
|
36
|
+
$stdout.puts "Added #{hash.inspect}" unless config[:quiet]
|
37
|
+
self.after_first_line = true
|
38
|
+
end
|
39
|
+
|
40
|
+
def write_header
|
41
|
+
seed_handle.syswrite header
|
42
|
+
end
|
43
|
+
|
44
|
+
def write_footer
|
45
|
+
seed_handle.syswrite footer
|
46
|
+
end
|
47
|
+
|
48
|
+
def finish
|
49
|
+
write_footer
|
50
|
+
seed_handle.close
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SeedFu
|
2
|
+
|
3
|
+
module Writer
|
4
|
+
|
5
|
+
class Seed < Abstract
|
6
|
+
|
7
|
+
# This method uses the :seed_by set earlier.
|
8
|
+
#
|
9
|
+
def add_seed(hash, seed_by=nil)
|
10
|
+
seed_by ||= config[:seed_by]
|
11
|
+
seed_handle.syswrite( <<-END
|
12
|
+
#{config[:seed_model]}.seed(#{seed_by.collect{|s| ":#{s}"}.join(',')}) { |s|
|
13
|
+
#{hash.collect{|k,v| " s.#{k} = '#{v.to_s.gsub("'", "\'")}'\n"}.join}}
|
14
|
+
END
|
15
|
+
)
|
16
|
+
super(hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SeedFu
|
2
|
+
|
3
|
+
module Writer
|
4
|
+
|
5
|
+
class SeedMany < Abstract
|
6
|
+
|
7
|
+
def add_seed(hash)
|
8
|
+
seed_handle.syswrite( (<<-END
|
9
|
+
#{',' if self.after_first_line}
|
10
|
+
{ #{hash.collect{|k,v| ":#{k} => '#{v.to_s.gsub("'", "\'")}'"}.join(', ')} }
|
11
|
+
END
|
12
|
+
).chomp )
|
13
|
+
super(hash)
|
14
|
+
end
|
15
|
+
|
16
|
+
def write_header
|
17
|
+
super
|
18
|
+
seed_handle.syswrite( (<<-END
|
19
|
+
#{config[:seed_model]}.seed_many(#{config[:seed_by].collect{|s| ":#{s}"}.join(',')},[
|
20
|
+
END
|
21
|
+
).chomp )
|
22
|
+
end
|
23
|
+
|
24
|
+
def write_footer
|
25
|
+
seed_handle.syswrite "\n])\n"
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
data/seed-fu.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'seed-fu'
|
3
|
-
s.version = '1.
|
4
|
-
s.date = '2009-
|
3
|
+
s.version = '1.2.0'
|
4
|
+
s.date = '2009-08-14'
|
5
5
|
|
6
6
|
s.summary = "Allows easier database seeding of tables."
|
7
7
|
s.description = "Seed Fu is an attempt to once and for all solve the problem of inserting and maintaining seed data in a database. It uses a variety of techniques gathered from various places around the web and combines them to create what is hopefully the most robust seed data system around."
|
@@ -20,6 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
"Rakefile",
|
21
21
|
"init.rb",
|
22
22
|
"lib/seed-fu.rb",
|
23
|
+
"lib/seed-fu/writer.rb",
|
24
|
+
"lib/seed-fu/writer/abstract.rb",
|
25
|
+
"lib/seed-fu/writer/seed.rb",
|
26
|
+
"lib/seed-fu/writer/seed_many.rb",
|
23
27
|
"rails/init.rb",
|
24
28
|
"seed-fu.gemspec",
|
25
29
|
"spec/schema.rb",
|
data/tasks/seed_fu_tasks.rake
CHANGED
@@ -41,13 +41,11 @@ namespace :db do
|
|
41
41
|
|
42
42
|
old_level = ActiveRecord::Base.logger.level
|
43
43
|
begin
|
44
|
-
ActiveRecord::Base.validation_disabled = true
|
45
44
|
ActiveRecord::Base.logger.level = 7
|
46
45
|
ActiveRecord::Base.transaction do
|
47
46
|
load file
|
48
47
|
end
|
49
48
|
ensure
|
50
|
-
ActiveRecord::Base.validation_disabled = false
|
51
49
|
ActiveRecord::Base.logger.level = old_level
|
52
50
|
end
|
53
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixonic-seed-fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Bleigh
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-08-14 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -36,6 +36,10 @@ files:
|
|
36
36
|
- Rakefile
|
37
37
|
- init.rb
|
38
38
|
- lib/seed-fu.rb
|
39
|
+
- lib/seed-fu/writer.rb
|
40
|
+
- lib/seed-fu/writer/abstract.rb
|
41
|
+
- lib/seed-fu/writer/seed.rb
|
42
|
+
- lib/seed-fu/writer/seed_many.rb
|
39
43
|
- rails/init.rb
|
40
44
|
- seed-fu.gemspec
|
41
45
|
- spec/schema.rb
|