En la Pizzaconf Uruguay, presentaron Sinatra y lo encontré ideal para armar una aplicación de ejemplo para Open Flash Chart Lazy. Ya lo puse en marcha y estoy trabajando en armar los tutoriales para el plugin. Pueden ver algo acá (no esta listo, falta bastante)

Sample App Open Flash Chart Lazy

Sources de la sample app en Sinatra

Saluti

P

Tuve que incluír un gráfico de barras, asi que ahora está incluído, también revisé la doc (primitiva) y faltaba especificar la ruta dentro de un hash.

Algunas mejoras:

  • Corrección de la documentación (actualizado en el anuncio original).
  • Bar chart fue incorporado.
  • Atributos generales del gráfico pueden ser especificados ahora.

Próximos pasos:

  • Más ejemplos
  • Más de un gráfico inline (en lo posible sin tocar open_flash_chart_2)

Seguiremos mejorándolo.

Si alguien lo usó y tiene alguna idea o sugerencia, bienvenido!

P

Hace tiempo que no hacía un plugin. Surgió la necesidad de hacer un dashboard con gráficos de usuarios, suscripciones, participación etc. Estuvimos analizando varias opciones y quedó OpenFlashChart les recomiendo miren los samples, no estan nada mal.

El foco fue puesto en escribir poco código y hacerlo flexible a posibles cambios en open_flash_chart que esta en beta.

Inicialmente solo soporta gráficos de líneas, pero debería ser fácil agregar soporte para otros gráficos. Fué pensado para resolver un problema, no para resolverlos todos ;-)

Todo

  • More doc
  • Support for other graphs
  • Label annotation for pies
  • May be more specs? mmm
  • Add series matcher block to allow any kind of matcher for series
  • Avoid to specify the start_date for time series for each serie
  • Add periodically_call_remote_graph (rodrigo orrego chileonrails)

Known issues

  • No soporta dos gráficos inline por vez.
  • Los gráficos Inline no son compatibles con prototype.js

Instalación

cd vendor/plugins
git clone git://github.com/peterpunk/open_flash_chart_lazy.git
cd ..
cd ..
rake open_flash_chart_lazy:install

Desinstalación

rake open_flash_chart_lazy:remove

Ejemplos

Accediendo a datos remotos

En el controller …
def progress
  bar_graph = OpenFlashChartLazy::Line.new("The title of the graph")
  first_serie = OpenFlashChartLazy::Serie.new(
  [["2008-1",100],["2008-2",120],["2008-3",130]],
  {:title=>"Argentina",:start_date=>Time.mktime(2008,1,1),:items=>8})

  second_serie = OpenFlashChartLazy::Serie.new(
  [["2008-1",50],["2008-2",40],["2008-3",90]],
  {:title=>"Tupungato",:start_date=>Time.mktime(2008,1,1),:items=>8})

  bar_graph.add_serie(first_serie)
  bar_graph.add_serie(second_serie)

  render :text=>bar_graph.to_graph_json
end
En la vista …
<%= remote_graph("my_chart",{:route=>"/admin/dashboard/progress"}) %>

Con datos en la página

En el controller …
def show
  @pie_chart = OpenFlashChartLazy::Pie.new("Channels")
  channels=OpenFlashChartLazy::Serie.new([["Wealth",34],["Financial",45]])
  @pie_chart.add_serie(channels)
end
En la vista …
<%= inline_graph(@pie_chart) %>

Personalizando el gráfico

Todos los atributos son asignados a un hash en general, podes agregar los que sean necesarios para que tu gráfico sea lo que necesitas.


bar_graph.x_axis[:labels][:rotate]="vertical" 
bar_graph.x_axis[:labels][:rotate]="vertical" 
bar_graph.x_axis[:colour]="#808080" 
bar_graph.x_axis["grid-colour"]="#A0A0A0" 
bar_graph.x_axis[:stroke]=0.5

bar_graph.y_axis[:colour]="#808080" 
bar_graph.y_axis[:stroke]=0.5
bar_graph.y_axis["grid-colour"]="#A0A0A0" 

Personalizando el Background

Se puede tambien agregar cualquier atributo al gráfico ya que esto es manejado por method missing.


bar_graph.bg_colour="#FFFFFF" 

Otras implementaciones para la versión 2

http://github.com/korin/open_flash_chart_2/tree/master may be not working yet

Otras implementaciones para la versión 1

PullMonkey http://github.com/markcatley/open_flash_chart/tree/master

P

Hace tiempo hablamos de FixtureReplacement . En ese entonces tuve toda la intensión de utilizarlo, pero me encontré con un dilema. No soportaba namespaces. Le escribí el flaco que lo desarrlló, intercambiamos algunas líneas, y al mes me comentó la novedad: Finalmente soporta namespaces.

O sea que si ahora tenemos un modelo Admin::Rol, podemos especificar la factory de la siguiente manera:

module FixtureReplacement
    attributes_for :admin_rol, :class => Admin::Rol do |rol|
      rol.nombre = "Guarda"
      rol.permisos << create_admin_permiso
      rol.permisos << create_admin_permiso(:nombre => "Sonar Silbato")
    end

    attributes_for :admin_permiso, :class => Admin::Permiso do |p|
      p.nombre = "Cortar Boletos"
    end
  end

Esto hace la práctica de BDD y TDD mucho más amena.

Más información aquí

Para la PizzaConf armamos este plugin para registración de usuarios.

svn://svn.virtualizar.com.ar/projects/plugins/mephisto_reg/

Esta basado en el de feedback, corre en Mephisto Trunk y Rails Edge.

Es un buen startup para armar plugin de mephisto con la nueva arquitectura de plugins.

Temas a tener en cuenta:

Agregar a config/initalizers/custom.rb ActionController::Routing::Routes.reload! al final

Que estas haciendo con RoR?

October 2nd, 2007

En mi caso estoy en una empresa armando un plugin de Autorización basado en plugin de ModelSecurity con algunos cambios que necesito, como que se declaren los permisos en ActiveRecord y no en el código, que tenga auditoría y permita tambien aplicar permisos sobre ActionController. Lo enganche con acts_as_paranoid.

Un requerimiento importante es que solo sea autorización y no autenticación, montandose sobre un sistema de autenticación existente de forma transparente, solamente indicando el objeto que tiene el usario y el metodo para obtenerlo.

Tambien algunas modificaciones a in_place_controls para integrar el autorizador.

Antes de fin de año lo hare público.

Ustedes en que andan?

Acts_as_trackable Plugin

June 3rd, 2007

Este plugin fue escrito con la intención de llevar un tracking de cambio de estados en modelos.

El codigo esta escrito en ingles pero los comentarios y los specs son bilingües ingles/español Es compatible con acts_as_state_machine

Si tienes un modelo que va cambiando de estado a través del tiempo y quieres rastrear esos cambios, este plugin te lo facilita.

El uso es simple:

class Orden < ActiveRecord::Base
  acts_as_trackable, :track_method => :estado
end

Indicando :track_method le estaremos diciendo que metodo nos devolvera el estado de la instancia de nuestro modelo y en el before_save si es distinto del anterior se creara un nuevo track.

Fue desarrollado utilizando rspec aqui van los specs:

describe "Cuando genero una order. When an order is created" do

  before(:each) do
    @order = Order.new(:customer=>"Capitan Piluso",:state=>"created")
  end
  it "Deberia tener un track asociado cuando se graba. Should have a new track associated" do
    @order.should have(0).tracks
    @order.save
    @order.should have(1).tracks
    @order.tracks[0].should be_an_instance_of(Track)
  end
  it "Deberia guardar la instancia serializada en track. Should save the instance serialized" do
    @order.save
    @order.tracks.last.retrieve_old_instance.should be_an_instance_of(Order)
  end

end

describe "Cuando cambia el estado de una order existente. When an order state is changed" do
  before(:each) do
    @order = Order.create(:customer=>"El Manosanta",:state=>"created")
    @order.state = "shipped"
    @order.save
  end
  it "Deberia crear otro track. Should create another track" do
    @order.should have(2).tracks
    @order.current_track.state.should == "shipped"
    @order.tracks.first.state.should == "created"
  end
end

describe "Con varios tracks. With several tracks" do
  fixtures :orders
  it "deberia poder recuperar la instancia de order en otro momento, should retrieve an old instance of order" do
    @order = orders(:created_1)
    @old_order = orders(:created_1)
    @order.customer = "Dentaduras Sonria Ya"
    @order.state = "shipped"
    @order.save
    @order.state = "returned"
    @order.save
    @order.tracks[0].retrieve_old_instance.should eql(@old_order)
    @order.tracks[1].retrieve_old_instance.should !eql(@old_order)
    @order.tracks[1].retrieve_old_instance.should eql(@order)
  end

end

Lo pueden encontrar en

svn://svn.virtualizar.com.ar/projects/plugins/acts_as_trackable/

Aqui escribi un artículo sobre BDD y rspec, el código esta outdated, pero el concepto esta bien. BDD – La evolucion natural del TDD

Esperamos les sea de utilidad

El plugin más chico?

May 15th, 2007

Muchas veces nos sirve saber cual es la versión o release que tenemos en producción y no queremos hacer un svn info, asi también nos puede pasar que cuando algo no anda bien queremos estar seguros de que estamos corriendo el ambiente esperado.

Este plugin, mal nombrado “acts_as_releaseable” nos agrega en nuestro html un comentario con la revisión de svn que esta corriendo y el environment sin tener que hacer un ssh.

Si no usan subversion o capistrano para subir los releases de su aplicación, no tiene ningún sentido ;-)

svn://svn.virtualizar.com.ar/projects/plugins/acts_as_releaseable

La utilización es simple, en nuestro/s layout donde más nos guste, ponemos <%= release %>

Le agregarían algo mas, como lo mejorarían?

Espero les sea de utilidad.