Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 13 janvier 2012

Faire un zip d'une arborescence en ruby avec rubyzip

Donc le petit code cadeau du jour : faire un zip d'une arborescence en ruby (1.8 et 1.9) avec rubyzip.

require 'rubygems'
require 'zip/zip'
require 'zip/zipfilesystem'
# Dossier à explorer
rootdir = "Mon_dossier"
base_path = [rootdir]
base_zip_path = [rootdir]
# Fonction qui explore une arborescence et ajoute les fichiers dans un zip
def explore_and_add(zipf, pathrep, zippathrep)
  zipf.mkdir(File.join(zippathrep))
  
  (Dir.entries(File.join(pathrep)) - ['.', '..']).each{ |entry|
    diskpath = File.join(pathrep, entry)
    if not File.directory?(diskpath) then
      # Ajoute le fichier dans le zip avec la même structure
      zipdiskpath = File.join(pathrep, entry)
      puts diskpath
      zipf.add(
        diskpath,
        zipdiskpath
      )
    else
      # Ajoute le répertoire et descend dans l'arborescence
      pathrep << entry
      zippathrep << entry
      zipf = explore_and_add(zipf, pathrep, zippathrep)
      pathrep.delete_at(-1)
      zippathrep.delete_at(-1)
    end
  }
  return zipf
end
filename = "zip_" + Time.now.to_i.to_s + ".zip"
Zip::ZipFile.open(filename, Zip::ZipFile::CREATE) { |zipfile|
  zipfile = explore_and_add(zipfile, base_path, base_zip_path)
}

jeudi 12 janvier 2012

Barre de progression en html, css3

Ca vous dit une petite barre de progression (progress bar) ? Certain diront qu'il existe <progress> et <meter> d'html5, c'est juste utilisez-les ! Là il s'agit plus de l'aspect (css) que de la sémantique (html). Donc vous pouvez également utiliser ce css avec les balises sémantique html5...

Voilà pour l'HTML

<div class="barre">
    <div class="progress"></div>
</div>

Voilà pour le CSS3

body{
    background-color:black;
}

.barre{
    height:3px;
    width:300px;
    border-radius:3px;
    border:1px solid #111;
    border-bottom:1px solid #111;
    margin:10px;
}

.progress{
    margin-top:2px;
    margin:0;
    padding:0;
    background-color:#2B85C1;
    height:1px;
    width:200px;
    box-shadow:0px 0px 15px 1px #2B85C1,0px 0px 10px 1px black;
}

Voici le jsfiddle qui va avec : http://jsfiddle.net/yQUHc/2/

mercredi 11 janvier 2012

Effet de vignettage en CSS3

Suite à la demande de Geoffrey Dorne sur twitter, je me suis dit que ça devait intéresser d'autres personnes. Voici la ligne de css à mettre dans une class ou un id pour obtenir un effet de vignettage sur une image ou un élément html :

box-shadow:0px 0px 163px 20px black inset;

Oups pardon si vous ne connaissez pas le terme "Vignettage" cliquez-ici.

L'intégration c'est cool et amusant... quand c'est pas pour IE !

mardi 10 janvier 2012

Les Antipattern : Alors lesquels utilisez-vous ?

Voici un article de wikipedia très intéressant, il concerne les anti-patternshttp://fr.wikipedia.org/wiki/Antipattern

Bien que tout à fait sérieux l'article m'a bien fait rire ! Je suis un spécialiste de l'ancre de bateau, mais rassurez-vous je me soigne...

mardi 20 décembre 2011

Vos sessions sont trop grosses ! (Erreur : TypeError (can't dump File))

Voici l'erreur que j'ai obtenu sur du vieux code :

TypeError (can't dump File):

  activerecord (3.X.X) lib/active_record/session_store.rb:54:in `dump'

Cela viendrait de la taille des sessions (ça peut également des données non-sérialisables). A la fin de la méthode :
session[:qqch] = nil
Résoud le problème, il ne reste plus qu'à refactoriser votre code pour ne plus stocker des objets ruby mais plutôt des identifiants vers ces objets.

Voici l'article à lire : http://www.freezzo.com/2008/06/18/rails-typeerror-cant-dump-file/

mercredi 14 décembre 2011

Timecop : le gem qui permet de voyager dans le temps et le stopper comme Hiro Nakamura

Timecop est donc un gem qui permet de voyager dans le temps et le stopper. De la même manière que FakeWeb, j'ai découvert Timecop sur http://railscasts.com/episodes/276-testing-time-web-requests?view=asciicast

Page de doc et source : https://github.com/jtrupiano/timecop

Très pratique pour les tests, mais également pour effectuer des simulations utilisant le temps.

Article à lire sur les mocks (http://fr.wikipedia.org/wiki/Mock_(programmation_orient%C3%A9e_objet)).

Bon code.

mardi 13 décembre 2011

Puts ne vous suffit plus, pretty print pp est là

Quand on n'utilise pas de débuggeur, Puts est très pratique. Il peut également être intéressant de pretty_printer dans un fichier :

require 'pp'

# Pour afficher en console (ou dans le log du serveur en dev)

pp la_variable

# De cette manière vous pouvez écrire dans le fichier "un_fichier.txt" (pratique pour comparer des fichiers avec meld après...)

# 100 représente la longueur des lignes dans le fichier texte en nombre de caractères.

PP.pp(la_variable, File.open("un_fichier.txt","w"),100)

C'était l'astuce Ruby du mardi matin !

- page 2 de 39 -