populate 0.0.2
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/.gitignore +4 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/lib/populate.rb +14 -0
- data/lib/populate/base.rb +124 -0
- data/lib/populate/version.rb +3 -0
- data/populate.gemspec +24 -0
- data/readme.md +22 -0
- metadata +87 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3@populate --create --install
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/populate.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
module Populate
|
2
|
+
class Base
|
3
|
+
def initialize(klass, amount = 100)
|
4
|
+
@klass = klass
|
5
|
+
@amount = amount
|
6
|
+
end
|
7
|
+
|
8
|
+
def populate!
|
9
|
+
truncate!
|
10
|
+
header "Populating #{quantity} #{@klass.to_s.pluralize}"
|
11
|
+
|
12
|
+
quantity.times do
|
13
|
+
models << model = @klass.create{|m| populate_attributes(m)}
|
14
|
+
status(model)
|
15
|
+
end
|
16
|
+
|
17
|
+
puts
|
18
|
+
models
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def populate_attributes(model)
|
24
|
+
columns.each do |column|
|
25
|
+
model.send("#{column.name}=", data_for_attribute(column))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def data_for_attribute(column)
|
30
|
+
case column.type
|
31
|
+
when :boolean
|
32
|
+
[true, false].sample
|
33
|
+
when :datetime
|
34
|
+
case column.name
|
35
|
+
when /_at$/
|
36
|
+
rand(3.years.ago..Time.now)
|
37
|
+
else
|
38
|
+
rand(3.years.ago..3.years.from_now)
|
39
|
+
end
|
40
|
+
when :date
|
41
|
+
case column.name
|
42
|
+
when /dob|date_of_birth/
|
43
|
+
rand(90.years.ago.to_date..13.years.ago.to_date)
|
44
|
+
else
|
45
|
+
rand(3.years.ago.to_date..3.years.from_now.to_date)
|
46
|
+
end
|
47
|
+
when :string
|
48
|
+
word_count = [*1..10].sample
|
49
|
+
str = Faker::Lorem.words(word_count).join(' ')
|
50
|
+
|
51
|
+
case column.name
|
52
|
+
when /title|subject/
|
53
|
+
str.titleize
|
54
|
+
when /first_name/
|
55
|
+
Faker::Name.first_name
|
56
|
+
when /last_name|surname/
|
57
|
+
Faker::Name.last_name
|
58
|
+
when /email/
|
59
|
+
Faker::Internet.email
|
60
|
+
when /url|website/
|
61
|
+
Faker::Internet.http_url
|
62
|
+
when /user_?name|login|screen_?name/
|
63
|
+
Faker::Internet.user_name
|
64
|
+
when /phone|mobile/
|
65
|
+
Faker::PhoneNumber.phone_number
|
66
|
+
when /gender/
|
67
|
+
['male', 'female'].sample
|
68
|
+
else
|
69
|
+
str
|
70
|
+
end
|
71
|
+
when :text
|
72
|
+
paragraph_count = [*1..4].sample
|
73
|
+
Faker::Lorem.paragraphs(paragraph_count).join("\n\n")
|
74
|
+
when :integer
|
75
|
+
case column.name
|
76
|
+
when /_id$/
|
77
|
+
reflection_name = column.name[/(.*)_id/, 1].to_sym
|
78
|
+
reflection = @klass.reflections[reflection_name]
|
79
|
+
active_record = (reflection.options[:class_name] || reflection.name.to_s.classify).constantize
|
80
|
+
(cached_ids[reflection_name] ||= active_record.pluck(:id)).sample
|
81
|
+
else
|
82
|
+
rand(1..999)
|
83
|
+
end
|
84
|
+
when :float
|
85
|
+
case column.name
|
86
|
+
when /price|cost/
|
87
|
+
("%.2f" % rand(0.0..500.0)).to_f
|
88
|
+
else
|
89
|
+
rand(0.0..10.0)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def cached_ids
|
95
|
+
@cached_ids ||= {}
|
96
|
+
end
|
97
|
+
|
98
|
+
def columns
|
99
|
+
@klass.columns.select do |column|
|
100
|
+
!column.name[/^id|updated_at$/]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def status(model)
|
105
|
+
print model.valid? ? '.' : 'F'.color(:red)
|
106
|
+
end
|
107
|
+
|
108
|
+
def models
|
109
|
+
@models ||= []
|
110
|
+
end
|
111
|
+
|
112
|
+
def truncate!
|
113
|
+
@klass.delete_all
|
114
|
+
end
|
115
|
+
|
116
|
+
def quantity
|
117
|
+
@quantity ||= [*@amount].sample
|
118
|
+
end
|
119
|
+
|
120
|
+
def header(str)
|
121
|
+
puts str.bright.color(:green)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
data/populate.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "populate/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "populate"
|
7
|
+
s.version = Populate::VERSION
|
8
|
+
s.authors = ["Jim Neath"]
|
9
|
+
s.email = ["jimneath@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Populates your development database with fake data}
|
12
|
+
s.description = %q{Populates your development database with fake data}
|
13
|
+
|
14
|
+
s.rubyforge_project = "populate"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'ffaker', '>= 1.13.0'
|
22
|
+
s.add_dependency 'rainbow', '>= 1.1.3'
|
23
|
+
s.add_dependency 'activerecord', '>= 3.1.0'
|
24
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Populate
|
2
|
+
|
3
|
+
Populates your database with lovely fake data automatically.
|
4
|
+
|
5
|
+
## Prequisites
|
6
|
+
|
7
|
+
Populate has only been tested with Ruby 1.9.3 and Rails 3.1+. As such, it probably won't work with anything else.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
gem 'populate'
|
12
|
+
|
13
|
+
## Useage
|
14
|
+
|
15
|
+
task :populate => :environment do
|
16
|
+
populate User, 10..50
|
17
|
+
populate Article, 100..500
|
18
|
+
end
|
19
|
+
|
20
|
+
## Credits
|
21
|
+
|
22
|
+
Jim Neath
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: populate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jim Neath
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ffaker
|
16
|
+
requirement: &70291254508000 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.13.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70291254508000
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rainbow
|
27
|
+
requirement: &70291254506800 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.1.3
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70291254506800
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: activerecord
|
38
|
+
requirement: &70291254505360 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.1.0
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70291254505360
|
47
|
+
description: Populates your development database with fake data
|
48
|
+
email:
|
49
|
+
- jimneath@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- .rvmrc
|
56
|
+
- Gemfile
|
57
|
+
- Rakefile
|
58
|
+
- lib/populate.rb
|
59
|
+
- lib/populate/base.rb
|
60
|
+
- lib/populate/version.rb
|
61
|
+
- populate.gemspec
|
62
|
+
- readme.md
|
63
|
+
homepage: ''
|
64
|
+
licenses: []
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project: populate
|
83
|
+
rubygems_version: 1.8.16
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: Populates your development database with fake data
|
87
|
+
test_files: []
|