Skip to content

Instantly share code, notes, and snippets.

@theo-bittencourt
Created November 3, 2012 04:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theo-bittencourt/4005863 to your computer and use it in GitHub Desktop.
Save theo-bittencourt/4005863 to your computer and use it in GitHub Desktop.
rake colecao verão
#encoding: utf-8
desc "cria produtos da coleção verão 2013 - viajantes"
task :create_products_viajantes => :environment do
@count = 0
@colecao = Colecao.where(:nome => "Viajantes").first
Produto.where(:colecao_id => @colecao.id).each do |p|
puts "Destruindo subprodutos de #{p.referencia}"
Subproduto.where(referencia: p.referencia).delete_all
puts "Restando #{Subproduto.count} subprodutos"
p.destroy
puts "Restando #{Produto.count} produtos"
end
def cria_produto(ref, categoria, file_path)
ref = ref || "sem-ref-#{@count += 1}"
novo_produto = Produto.new({
:categoria_id => categoria.id,
:colecao_id => @colecao.id,
:image => File.open( file_path),
:referencia => ref,
})
if novo_produto.save
puts "Produto criado, referencia #{novo_produto.referencia}, categoria #{categoria.titulo}"
else
puts "Erro ao criar #{novo_produto.referencia}"
puts "Erros: \n #{novo_produto.errors.messages}"
end
end
def cria_subproduto(ref, nome, file_path)
novo_subproduto = Subproduto.new({
:referencia => ref,
:nome => nome,
:image => File.open(file_path)
})
if novo_subproduto.save
puts "Subproduto criado, referencia #{novo_subproduto.referencia}, nome de variante #{nome}"
else
puts "Erro ao criar #{novo_subproduto.referencia}"
puts "Erros: \n #{novo_subproduto.errors.messages}"
end
end
Dir.glob(File.join(Rails.root, 'lib/tasks/viajantes/**/*')) do |entry|
next if entry.match('^\.')
file_name = File.basename(entry).sub(File.extname(entry), '')
puts "lendo: #{file_name}"
ref = file_name.match('^\d{6}') ? file_name.match('^\d{6}')[0] : nil
nome_variante = file_name.match('^\d{6}.(.+)\.[jJ]') ? file_name.match('^\d{6}.(.+)\.[jJ]')[1] : nil
if Produto.find_by_referencia(ref) || nome_variante
cria_subproduto(
ref,
nome_variante,
File.expand_path("lib/tasks/viajantes/#{cat_file_name}/#{file_name}")
)
else
categoria = Categoria.find_by_titulo(cat_file_name.match('^_(.+)')[1])
if categoria.present?
cria_produto(
ref,
categoria,
File.expand_path("lib/tasks/viajantes/#{cat_file_name}/#{file_name}")
)
else
puts "Não foi possível criar o produto pois a categoria #{cat_file_name.match('^_(.+)')[1]} não existe."
end
end
}
}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment