jueves, 12 de mayo de 2011

Generar pdf con wicked_pdf en Rails

Wicked PDF usa un ejecutable llamado wkhtmltopdf para generar un fichero PDF desde un fichero HTML. Nos bajamos el conversor que le corresponda a nuestra maquina y lo ponemos en /usr/local/bin/. Como he descomprimido el ficher en mi HOME, el comando es:

sudo mv wkhtmltopdf-tu_version /usr/local/bin/

Instalamos la gema como plugin en nuestra aplicacion Rails:

script/plugin install git://github.com/mileszs/wicked_pdf.git
script/generate wicked_pdf

Tenemos que configurar el plugin para que sepa que versión del Wicked hemos instalado y donde esta. Para ello en config/enviroments.rb (rails 1.x), o donde corresponda en tu aplicación, ponemos algo así:


WickedPdf.config = {
:exe_path => '/usr/local/bin/wkhtmltopdf-amd64',
:zoom => 1.0,
:margin => { :top => 10,:bottom => 10, :left => 10, :right => 10},
:outline => { :outline => true },
:disable_smart_shrinking => false
}


Hay muchas mas posibles opciones, que también se pueden cambiar cuando llamamos a la vista desde el controlador:

def show
respond_to do |format|
format.html
format.pdf do
render :pdf => "file_name"
end
end
end


Fuentes: github, bunario wkhtmltopdf, uso y configuracion por snikt

miércoles, 27 de abril de 2011

jueves, 14 de abril de 2011

Gmate, Gedit como TextMate con Ubuntu

Paso 1: Agregar el repositorio de Ubuntu on Rails

sudo apt-add-repository ppa:ubuntu-on-rails/ppa
sudo apt-get update

Paso 2: Instalar el paquete

sudo aptitude install gedit-gmate

Paso 3: Instalar otros plugins

sudo apt-get install gedit-plugins

nueva ruta gedit3: ~/.local/share/gedit/plugins

Paso 4: Uso y configuración de algunos plugins sacado de josemariaberlanga

  1. Align: alinea bloques de texto en columnas

  2. Class Browser: en ruby y RoR usamos clases, nos será muy útil este navegador de clases para manejar funciones y variables.

  3. Document Statistics: no es primordial pero me gusta saber el número de lineas que llevo escritas, número de palabras, espacios en blanco, etc.

  4. External Tools: añade una nueva opción al menú Tools, desde ahi podremos ejecutar comandos como en un shell, muy útil para ejecutar todas las posibilidades de un proyecto Ruby on Rails.

  5. File Browser Pane: fundamental. Un navegador de archivos para movernos rapidamente por las carpetas del proyecto.

  6. Find in Files: encuentra en todos los archivos de tu root de proyecto (busca en todos los archivos dentro de la carpeta donde te encuentres en el navegador de archivos).

  7. Gemini: útil si te acostumbras, cierra parentesis, corchetes y comillas dobles.

  8. Go to File: una forma fácil para moverte entre archivos. Potente si lo manejas desde el teclado.

  9. Rails Extract Partial: un plugin que nos facilita sacar parciales con sólo pulsar un botón. Muy útil en ciertos momentos.

  10. Rails File Loader: identifica si un archivo es parte de un proyecto Ruby on Rails y lo señala como lenguaje.

  11. Rails Hot Command: una opción que se nos abre con todas las opciones de comandos que dispone Rails, muy útil si estamos empezando y aún no los sabemos. Aún después nos será de ayuda a veces jeje

  12. TabSwitch: se nos activa la posibilidad de cambiar de pestaña con Ctrl-tab.

  13. Word Completion: completa la palabra que estemos escribiendo. Es útil pero hay que tener cuidado de no caer demasiado, pues a veces las sugerencias pueden dar caso a error. Es un plugins que necesita aún mejorar.

  14. TextMate Style Autocompletion: completa la palabra que estemos escribiendo pulsando Esc, con cada pulsación muestra una nueva palabra, necesita configuración y no es compatible con Word Completion

  15. Zen Coding: Este plugins es útil sobretodo si no usamos gemas como haml -el cual recomiendo-. No ayudará a escribir código html, hay varios tutoriales por internet pero basicamente escibes la palabra clave y pulsando Ctrl+E se escribe el codigo HTML.

  16. Comentar codigo: comentamos el texto seleccionado con Ctrl-M, descomentamos con Ctrl-Mays-M

  17. Mostrar espacios: dibuja los espacio con un punto, interesante para ver sangria


Fuentes: gmate, josemariaberlanga, joserojas

viernes, 18 de marzo de 2011

Instalar jQuery and jQuery UI en Rails 3

Bajamos jQuery UI. Viene en un zip. Extraemos el contenido del directorio js a ~/public/javascripts de nuestra aplicación.

Necesitaremos también los CSS del zip que están localizados en /css/[nombre_del_tema] del zip y los copiamos en ~/public/stylesheets. Finalmente copiamos el contenido de las imagenes en el directorio ~/public/images.

Por lo visto hay que editar el css y reemplazar donde aparece 'mages/' por '/images/'.

Una vez hecho esto hay que indicarle a rails que los use, para ello editamos application.html.erb en ~/views/layouts y le añadimos la siguiente linea dentro de la etiqueta head:

<%= stylesheet_link_tag :all, 'jquery-ui-1.8.custom' %>
<%= javascript_include_tag 'jquery-1.4.2.min', 'jquery-ui-1.8.custom.min', 'rails' %>
<%= csrf_meta_tag %>
Ya solo me falta que esto ande en Refinery-CMS Refinery-Core 0.9.9.4

Fuente y enlaces: eddorre gem rails3-jquery-autocomplete * jquery-ujs rails-jquery-autocomplete-tutorial

domingo, 13 de marzo de 2011

Repasando: Partials

Render genera una vista a partir de una plantilla, cuando ejecutamos una acción de un controlador, sino se le indica que plantilla tiene que mostrar como vista (si no se le pasan parámetros), busca por defecto una con el mismo nombre.

Los partial son pequeñas plantillas que se pueden insertar en otras vistas, esta plantilla puede aparecer en varias vistas, asi ahorramos tener que escribirla varias veces. El nombre de estas vistas parciales comienzan con un guión bajo. Un ejemplo de partial:

# _book.erb.html
<%= book.title %>, <%= book.author %>

Con solo invocarlo desde otra planatilla (vista) es suficiente. Un ejemplo de llamada:

<%= render :partial => "book" %> #fallaria, el partial usa una variable que no es global


Estos partials pueden necesitas variables. Se puede pasarle un objeto

render(:partial => "book", :object => @my_book)#el partial usa una var. que se llama como el


Si existe @book, podemos omitir el pará́metro :object

render(:partial => "book")


Tambien se pueden pasar valores adicionales, que estarán disponibles como variables locales

render(:partial => "book",:locals => { :owner => "Hermenegildo" })


Enlace API Rails, Banot.net

sábado, 5 de marzo de 2011

Aplicación Refinerycms en Heroku con SQLite


#0. Prerrequisitos
# http://devcenter.heroku.com/articles/quickstart#prerequisites
# instalar git y crear un clave ssh [MaCaCoDer]
# crear una cuenta en Heroku
# instalar y configuras RVM
# http://rvm.beginrescueend.com/
# instalamos SQLite database Browser por ejemplo

#1. instalamos en rvm la versión 1.9.2

rvm install ruby-1.9.2-p180

#2. cambiamos a este ruby

rvm 1.9.2

#3. creamos el gemset de la aplicación

rvm gemset create gemset_my_app

#4. nos movemos al nuevo gemset

rvm gemset use gemset_my_app

#5. instalamos rails, no se si refiney te lo instala sino lo tienes en el gemset

gem install rails -v=3.0.3

# me ha instalado la versión 3.0.5 ¿?

#6. instalamos refinerycms y lo que haga falta para heroku
# http://refinerycms.com/guides/how-to-install-refinery-on-heroku

gem install refinerycms -v=0.9.9.4
gem install heroku -v=1.18.2

#7. Configuracion de la gema de Heroku

heroku list
heroku help # ayuda

#8. creamos nuestra aplicación refinery para heroku
# esto te crea la aplicación (como rails)
# instala bundler, ejecuta bundle install
# instala mas gemas como aws-s3 para poner fotos en amazone
# http://amedrodriguez.com/blog/2010/09/configurando-amazon-s3-en-rails/
# crea la BBDD SQLite y te migra
# te inicia git, te hace un comit y un push a heroku

refinerycms myapp --heroku

#9. [OPCIONAL] creamos cuenta en amazone web service http://aws.amazon.com/es/
# email: un_correo@dominio.dom
# pass: mycalve#####
# luego habrá que configurar la aplicación para su uso

#10. Como no quiero trabajar con la cuenta que me acabo de crear para el proyecto
# entramos en Heroku y añado como colaborador otra cuenta que tengo.
# Pasos para bajarse el proyecto.
# http://devcenter.heroku.com/articles/sharing

heroku info --app myapp # que sera en la que colaboro
heroku login # me logo
heroku keys:add # añado mi clave publica ssh (hay que crearla antes)

# bajamos el repositorio

git clone git@heroku.com:septimodia.git -o production

# ahora trabajamos con git:

git commit -a -m "log of the changes I made"
git push production master
-----> Heroku receiving push
-----> Launching.... done

#11. [OPCIONAL:ME PETA]
# No se si es que ya tenia el repositorio, o porque había renombrado la app *
# pero se ve esto:

git push production master
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@heroku.com:myapp.git'

! No such app as empty-journey-445

fatal: The remote end hung up unexpectedly

# http://getsatisfaction.com/railstutorial/topics/problem_pushing_to_heroku
# edito .git/config del directorio de mi aplicacion "myapp"

[remote "production"]
fetch = +refs/heads/*:refs/remotes/production/*
url = git@heroku.com:myapp.git # edito esta linea

# repito el commit y el push, parece que funciona

#12. migramos en producción.

heroku rake db:migrate

# voy a ver si funciona la aplicación

http://myapp.heroku.com/ # funciona!!

miércoles, 23 de febrero de 2011

Tareas RAKE definidas en Rails


  • rake -T # Imprime en pantalla un listado de las tareas por defecto de tu aplicación Rail

  • rake about # List versions of all Rails frameworks and the environment
  • rake db:create # Crea la BD según config/database.yml para el actual modo de trabajo (desarrollo, testeo o producción) de tu aplicacion Rail (si se usa db:create:all crea todas las BD de la configuracion)
  • rake db:drop # Borra la BD, también se puede usar db:drop:all
  • rake db:structure:dump # Descarga la base de datos con estructura de SQL.
  • rake db:migrate # Migración de la base de datos a través del script db-migrate, para especificar la versión añada VERSION =X.
  • rake db:migrate:status # Vemos el satado de las migraciones.
  • rake rollback # Restaura a la última versión antes de la actual.
  • rake db:test:clone # Recrea la base de datos de prueba del esquema de la base de datos

  • rake routes # Imprime en pantalla todas las rutas definidas

  • rake db:sessions:clear # Borra las sesiones
  • rake db:sessions:create # Crea una table para usar con CGI::Session::ActiveRecordStore
  • rake rails:update # Actualiza configuraciones, scripts y los javascripts de Rails.
  • rake rails:update:configs # Actualiza config/boot.rb de la instalación actual de Rails.
  • rake stats # Reporta las estadísticas de código de la aplicación.
  • rake test # Prueba todas las unidades y funciones.
  • rake log:clear # Borra todos los datos en /log.
  • rake tmp:cache:clear # Borra todos los archivos y directorios en tmp/cache.
  • rake tmp:clear # Borra sessiones, cache y archivos socket de folder /tmp.
  • rake doc:rails # Crea lo archivos HTML de Rails.

Enlaces stuartellis jasonseifer rails-db-rake-tasks rodolinux rake.rb
Más mesmarty

sábado, 29 de enero de 2011

Rdoc. Documentar programas Ruby.

¿Que es Rdoc?

RDoc es el generador de documentación de Ruby por defecto a partir de la version 1.8.2, diseñado por Dave Thomas. Analiza el código fuente Ruby generando una estructura de las colecciones de paquetes para los objetos y métodos. Es capaz de realizar un análisis sintáctico recursivo de un directorio y encontrar todos los archivos .rb, .rbw y .c en busca de comentarios encima de la definición de cada función y al inicio del fichero. El formato de salida es HTML y crea el archivo en el subdirectorio doc.

RDOC es útil incluso si el código fuente de destino no contiene comentarios explícitos. RDOC aún analizará las clases, módulos y métodos, y la lista de ellos en los archivos generados de la API.

RDOC también proporciona el motor para la creación de archivos Ruby ri. ri es la versión de Ruby de páginas de manual, que sirve de información de la API de la línea de comandos.

RDOC y ri actualmente son mantenidos por Eric Hodel y Ryan Davis.

Instalación con RVM

$ gem install rdoc

Ejecución

Para ejecutar RDoc hay que llamarlo con el siguiente comando rdoc y se pueden utilizar algunos flags:

  • --main [PATH a un fichero], hará que el fichero apuntado sea el que aparezca como inicio en la documentación generada.
  • --all, incluye también métodos privados en la documentación (por defecto solo incluye los públicos).
  • --op [PATH a un directorio], utiliza este directorio para guardar la documentación en lugar de "doc".
  • --o [PATH a un directorio], directorio origen, sino toma desde donde se le llama.
  • --inline-source, incluye el código fuente de cada método en la documentación.


Ejecución con RVM

$ rdoc
+ tabulador
rdoc rdoc-ruby-1.8.7-p302@global
rdoc-data rdoc-ruby-1.8.7-p302@gemset2l
rdoc-ruby-1.8.7-p302 rdoc-ruby-1.9.2-p0
rdoc-ruby-1.8.7-p302@gemset1 rdoc-ruby-1.9.2-p0@global

Documentar nuestra aplicación Rails

rake doc:app

Generating HTML...

Files: 28
Classes: 17
Modules: 12
Methods: 108
Elapsed: 1.914s


Reglas basicas de marcado

  • = cabecera de nivel 1.
  • == cabecera de nivel 2.
  • === Cabecera de nivel 3
  • etiqueta:: para hacer referencia a una etiqueta o label
  • * o - crea un elemento de una lista.
  • # crea un elemento de una lista numerada.
  • Con las palabras se puede hacer: *negrita*, _itálica_ y +codigo+.
  • Tambien podemos usar <b></b> , <em></em> , <tt></tt>

Otras marcas:
  • :title: MyClase
  • :include: Incluye el contenido de un archivo especifico en la documentación. La sangría se ajustara para tener consistencia.
  • :main: Establecer la página inicial que aparecen en la salida.
  • :nodoc: No documentamos algo
  • :nodoc: all No se documentara algo, ni lo que contenga. (recursivo)

Ejemplo práctico

# = ejemplo_rdoc.rb
#
# Autor:: Daniel Martin Maldonado
# Web:: http://www.elcodigok.com.ar
#
# == Ejemplo
#
# Con este pequeño ejemplo pretendemos:
# - Dar a conocer la herramient *rdoc*
# - Mostrar como se utilizan los Markpu
# - Mostrar la sencillez de su implementación en pequeños y grandes proyectos
#
# === Clase Persona
#
# Definición de la clase _Persona_ compuesta por
# * metodo initialize
# * metodo saludar
#

class Persona
def initialize(nombre)
@nombre = nombre
end
def saludar
puts "Hola, me llamo #{@nombre}"
end
end

daniel = Persona.new("Daniel")
daniel.saludar


Para obtener su documentación podemos hacerlo de la siguiente manera:

$ rdoc --main -o documento ejemplo_rdoc.rb --op ~/destino_ejemplo_rdoc/

Parsing sources with 2 thread(s)...
100% [ 1/ 1] ejemplo_rdoc.rb
Generating Darkfish...
Files: 1
Classes: 1
Modules: 0
Methods: 2
Elapsed: 0.4s


Fuentes
wikipedia spejman maestrosdelweb rdoc rdoc v3 elcodigok handy rails

Otro ejemplo
http://socios.aditel.org/~andreu/ruby/rdoc_example/
http://socios.aditel.org/~andreu/ruby/apuntes.pdf

lunes, 24 de enero de 2011

Chuleta Git

  • Crear una rama foo

  • $ git branch foo

  • Movernos a la rama foo

  • $ git checkout foo

  • Uniendo ramas en git (merge) [draxus]

  • si tenemos dos ramas de desarrollo de un mismo proyecto en un repositorio git y llegado a un punto queremos juntarlas, podemos hacer lo siguiente:

    $ git checkout foo
    $ git pull . bar

    Siendo bar el nombre de la rama que queremos unir con la rama foo.

    Ahora es posible que existan conflictos entre ficheros que hayamos modificado en ambas ramas, para corregirlos, usaremos:

    $ git mergetool -t herramienta_diff


    En Linux podemos usar meld como herramienta, instalación:

    $ sudo aptitude install meld

  • Pausar desarrollo (git stash) [malev's blog]

    git stash
    git pull
    # working on changes
    git add .
    git commit -m “a message”
    git stash pop
    # continue as nothing has happened


Fuentes:
ProGit draxus malev's blog

jueves, 20 de enero de 2011

Mostrar la rama de Git en el Prompt con Ruby

Con Ruby instalado añadimos al fichero ~/.bashrc el código de abajo:

export PS1="\[\033[38m\]\u@\h\[\033[01;34m\] \w \[\033[31m\]\`ruby -e \"print (%x{git branch 2> /dev/null}.grep(/^\*/).first || '').gsub(/^\* (.+)$/, '(\1) ')\"\`\[\033[37m\]$\[\033[00m\] "


Es todo una sola linea.

Edito:

El método grep no está definido en ruby 1.9.2, una alternativa sin usar ruby:

export PS1="\[\033[38m\]\u@\h\[\033[01;34m\] \w \[\033[31m\]\`git branch 2> /dev/null | grep -e ^* | sed -E s/^\\\\\\\\\*\ \(.+\)$/\(\\\\\\\\\1\)\ /\`\[\033[37m\]$\[\033[00m\] "


Enlace: asemanfar

Como importar tus helpers a script/console

>> foo = ActionView::Base.new
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={},

@helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>

>> foo.extend YourHelperModule
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={},

@helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>

>> foo.your_helper_method(args)
=> "<html>created by your helper</html>"

Fuente Atlantageek