Skip to content

Instantly share code, notes, and snippets.

@mindtonic
Created August 24, 2011 00:36

Revisions

  1. mindtonic created this gist Aug 24, 2011.
    98 changes: 98 additions & 0 deletions seed.rake
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,98 @@
    require 'active_record'
    require 'lib/seeder'

    namespace :seed do

    #
    # All
    #

    task(:all => :environment) do
    Seeder.seed
    end

    #
    # Admins
    #

    task(:admin_users => :environment) do
    Seeder.admin_users
    end

    task(:reset_admin_users => :environment) do
    Seeder.truncate_table :users
    Seeder.admin_users
    end

    #
    # Users
    #

    task(:users => :environment) do
    Seeder.users
    end

    task(:reset_users => :environment) do
    User.delete_all
    Seeder.truncate_table :users
    Seeder.users
    end

    task(:delete_users => :environment) do
    User.delete_all
    Seeder.truncate_table :users
    end

    #
    # Countries
    #

    task(:countries => :environment) do
    Seeder.countries
    end

    task(:reset_countries => :environment) do
    Seeder.truncate_table :countries
    Seeder.countries
    end

    #
    # Topics
    #

    task(:topics => :environment) do
    Seeder.topics
    end

    task(:reset_topics => :environment) do
    Topic.delete_all
    Seeder.truncate_table :topics
    Seeder.topics
    end

    #
    # Posts
    #

    task(:posts => :environment) do
    Seeder.posts
    end

    task(:reset_posts => :environment) do
    Seeder.truncate_table :posts
    Seeder.posts
    end

    #
    # Forum
    #

    task(:reset_forum => :environment) do
    Topic.delete_all
    Seeder.truncate_table :topics
    Seeder.truncate_table :posts
    Seeder.topics
    Seeder.posts
    end

    end
    167 changes: 167 additions & 0 deletions seeder.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,167 @@
    require 'ffaker'
    include ActionDispatch::TestProcess
    include FileUtils

    class Seeder

    def seed
    puts "===== Adding Seed Data ====="
    housekeeping
    rebuild_database
    countries
    admin_users
    users
    topics
    posts
    end

    #
    # Housekeeping
    #

    def housekeeping
    puts "Removing old system (Paperclip) images"
    FileUtils.remove_dir('public/system') if File.exists?('public/system')
    end

    #
    # Countries
    #

    def countries
    puts "===== COUNTRIES ====="
    puts "Adding Countries"

    File.open("fixtures/countries.txt", "r") do |file|
    while name = file.gets
    country = Country.create(:name => name)
    report country
    end
    end

    count_records Country
    end

    #
    # USERS
    #

    def admin_users
    puts "===== ADMIN USERS ====="

    spacemonkey = User.create( :email => "[email protected]",
    :password => "123456",
    :password_confirmation => "123456",
    :avatar => fixture_file_upload("fixtures/avatars/spacemonkey.jpg", 'image/jpeg'),
    :phone => Faker::PhoneNumber.short_phone_number,
    :country => Country.random.first )
    report(spacemonkey)

    spartacus = User.create( :email => "[email protected]",
    :password => "spartacus",
    :password_confirmation => "spartacus",
    :avatar => fixture_file_upload("fixtures/avatars/spartacus.jpg", 'image/jpeg'),
    :phone => Faker::PhoneNumber.short_phone_number,
    :country => Country.random.first )
    report(spartacus)

    count_records User
    end

    def users
    puts "==== RANDOM USERS ===="

    50.times do
    begin
    user = User.create( :email => Faker::Internet.email,
    :password => '123456',
    :password_confirmation => '123456',
    :avatar => fixture_file_upload("fixtures/headshots/#{rand(19)+1}.jpg", 'image/jpeg'),
    :phone => Faker::PhoneNumber.short_phone_number,
    :country => Country.random.first )
    report(user)
    rescue => e
    puts "Something went wrong => #{e}"
    end
    end

    count_records User
    end

    #
    # FORUM
    #

    def topics
    puts "===== TOPICS ====="
    puts "Adding 100 Topics"
    50.times do
    topic = Topic.create(:title => Faker::Company.bs, :user => User.random.first, :sticky => randbool)
    report topic
    end

    count_records Topic
    end

    def posts
    puts "===== POSTS ====="
    puts "Adding 1000 Posts"
    3000.times do
    post = Post.create(:body => Faker::Lorem.paragraphs.join("\n\n"), :user => User.random.first, :topic => Topic.random.first)
    report post
    end

    count_records Post
    end

    #
    # Utilities
    #

    def mime_type filepath
    `file -Ib #{filepath}`.gsub(/\n/,"").split(';').first
    end

    def truncate_table(table_name)
    ActiveRecord::Base.connection.execute("DELETE FROM #{table_name}")
    ActiveRecord::Base.connection.execute("VACUUM")
    puts "XXX Truncated Table #{table_name}"
    end

    def rebuild_database
    puts "rewinding database"
    `rake db:migrate VERSION=0`
    puts "rebuilding database"
    `rake db:migrate`
    end

    def count_records(element, title = false)
    puts "### COUNT #{title || element.to_s} -> #{element.count}"
    end

    def report(element)
    case element.class.to_s
    when "User"
    puts "Added User #{element.email} from #{element.country.name}"
    when "Country"
    puts "Added Country #{element.name}"
    when "Topic"
    puts "Added Topic #{element.title}"
    when "Post"
    puts "Added Post to Topic #{element.topic.title} by #{element.user.email}"
    end
    end

    def randbool
    rand(2) == 1 ? true : false
    end

    #
    # Method Missing
    #

    def self.method_missing(name, *args, &block)
    Seeder.new.send(name, *args, &block)
    end

    end
    2 changes: 2 additions & 0 deletions seeds.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    require 'lib/seeder'
    Seeder.seed