lib/tasks/adminpanel/adminpanel.rake
namespace :adminpanel do
desc 'Interact with adminpanel models :D'
task :section, [:name, :section, :type] => :environment do |t, args|
args.with_defaults(:section => "home", :name => "greeting", :type => "")
puts "Creating #{args[:name]} in #{args[:section]} section" unless Rails.env.test?
page_name = args[:section].capitalize
order = Adminpanel::Section.find_by(:page => page_name)
s = Adminpanel::Section.new(
name: args[:name].titleize,
has_description: false,
description: "",
key: (args[:name].downcase.tr(' ','_')),
page: page_name,
has_image: false
)
if order.nil?
s.order = Adminpanel::Section.count + 1
else
s.order = order.order
end
args[:type].split(" ").each do |type|
case type
when "wysiwyg" || "description"
s.has_description = true
when "images"
s.has_image = true
end
end
s.save
end
task user: :environment do |t|
characters = []
characters.concat(("a".."z").to_a)
characters.concat(("A".."Z").to_a)
characters.concat((0..9).to_a)
characters.concat(%w[! @ \# $ % ^ & * , _ - + =])
password = ''
8.times do
password = password + "#{characters.sample}"
end
puts "Creating/overwriting webmaster@codn.mx with password #{password}" unless Rails.env.test?
user = Adminpanel::User.find_by_email('webmaster@codn.mx')
if !user.nil?
user.delete
end
role = Adminpanel::Role.find_by_name('Admin')
if role.nil?
role = Adminpanel::Role.new(name: 'Admin')
role.save
end
Adminpanel::User.new(
email: 'webmaster@codn.mx',
name: 'Webmaster',
password: password,
password_confirmation: password,
role_id: role.id
).save
end
task :populate, [:times, :model, :attributes] => :environment do |t, args|
require 'faker'
I18n.reload!
puts "Generating #{args[:times]} records of #{args[:model]}" unless Rails.env.test?
@model = "adminpanel/#{args[:model]}".classify.constantize
attributes = args[:attributes].split(" ")
args[:times].to_i.times do |time|
instance = @model.new
attributes.each do |attribute|
field = attribute.split(":").first
type = attribute.split(":").second
case type
when 'name' #generate a name
value = Faker::Name.name
when 'category' || 'category_name' #generate a category name
value = Faker::Commerce.product_name
when 'lorem' || 'description' #large paragraph.
value = Faker::Lorem.paragraph([*1..10].sample)
when 'number' #generate a number
value = [*1..7000].sample
when 'url' #generate an url
value = Faker::Internet.url
when 'id' #assign field_id it to a random instance of Adminpanel::field
field = field.downcase.singularize
value = "adminpanel/#{field}".classify.constantize.order('RAND()').first.id
field = "#{field}_id"
when 'email' #generates a random email
value = Faker::Internet.email
when 'lat_mid' #latitude for merida, yucatan, mx.
value = float_random(21.046929, 20.903954)
when 'lng_mid' #longitude for merida, yucatan, mx.
value = float_random(-89.699819, -89.567296)
when 'lat'
value = Faker::Address.latitude
when 'lng'
value = Faker::Address.longitude
when 'image' || 'images'
3.times do
instance.send("#{@model.name.demodulize.downcase}files").build
end
else #no type || not found
value = Faker::Lorem.words([*1..6].sample).join(' ') #lorem random short sentence
end
if(type != 'image')
instance.send("#{field}=", value)
end
end
instance.save(:validate => false)
change_dates(instance)
end
end
end
private
def change_dates(instance)
date = rand(Date.parse('2010-01-01')..Date.today)
instance.update_attribute(:created_at, date)
instance.update_attribute(:updated_at, date)
end
def float_random(min_number, max_number)
width = max_number - min_number
return (rand*width) + min_number
end