Recommend Me


Samedi 29 septembre 2007

SOAP::LC 0.0.1

Classé dans : Projets, Ruby — greg @ 19:19

Non, elle n’est pas dispo… Mais j’y aie travaillé, et pour le moment cela fonctionne plutôt bien malgré le fait que je ne gère que les parties de messages type simpleType. Il me reste à ajouter la gestion des types complexes et des éléments. N’étant pas un pro des Schéma XML, je me suis commandé un petit livre sur le sujet… Cela laisse présager de bonnes soirées en perspectives ! Je pense avoir quelque chose de fonctionnel rapidement, mais si je met à disposition une première version avant d’avoir parcouru les 412 pages, j’ai peur que cela soit un peu du bricolage ;)

• • •

Vendredi 28 septembre 2007

SOAP::LC et Rails

Classé dans : Projets, Ruby — greg @ 0:54

Le développement de SOAP::LC avance doucement (il est 0h54 aussi, c’est Ruby time!) Je me suis, pour le moment, beaucoup amusé avec les WebServices Rails. Ils présentent une particularité gênante. En effet une méthode déclarée hello_world sera rendu, via la WSDL générée par Rails, sous le nom HelloWorld. Ceci implique donc d’avoir un appel sous la forme :

s = SOAP::LC.new( ).wsdl( "http://localhost:3000/sample/wsdl" ).HelloWorld( :from => "Greg" )

L’appel à HelloWorld est bien récupéré via method_missing. La preuve :

>> class Test
>>   def method_missing( id, *args )
>>     puts "Appel de #{id.id2name}(#{args.join( ", " )})"
>>   end
>> end
=> nil
>> t = Test::new
=> #<Test:0×598684>
>> t.HelloWorld( "Greg", 2 )
Appel de HelloWorld(Greg, 2)
=> nil

C’est une bonne nouvelle… Surtout pour moi qui aie toujours pensé qu’il n’était pas possible de déclarer de méthode dont le nom commence par une majuscule :

>> class Test2
>>   def HelloWorld( from )
>>     puts "Hello World par #{from}"
>>   end
>> end
=> nil
>> t2=Test2.new
=> #<Test2:0×58fdf4>
>> t2.HelloWorld( "Greg" )
Hello World par Greg

Ha ben si ! En effet la méthode HelloWorld a bien été référencé au niveau de la classe comme méthode publique d’instance :

>> Test2.public_instance_methods
=> ["inspect", "clone", "method", "public_methods", "instance_variable_defined?", "equal?", "freeze", "to_yaml_style", "methods", "respond_to?", "dup", "to_yaml", "instance_variables", "__id__", "object_id", "eql?", "to_yaml_properties", "require", "id", "singleton_methods", "send", "taint", "frozen?", "instance_variable_get", "require_gem", "__send__", "instance_of?", "taguri", "to_a", "type", "taguri=", "protected_methods", "gem", "instance_eval", "==", "display", "===", "instance_variable_set", "kind_of?", "extend", "to_s", "HelloWorld", "hash", "class", "private_methods", "tainted?", "=~", "untaint", "nil?", "is_a?"]

Mais que se passe-t-il ?
- Mais que se passe-t-il ?
- Mais qu’est-ce qui se passe ?

J’en était resté à la sacro-sainte règle de Ruby in a Nutshell disant que si un identifiant commence par une majuscule, c’est une constante. Puis j’ai relu un peu de documentation et j’ai compris que j’avais tout faux. Et c’est logique en fait : un nom de méthode c’ets bien constant. Cela dit cette permissivité du langage est dangereuse. J’ai donc ajouté une méthode call à la classe SOAP::LC::Request permettant de faire le même appel sous la forme :

s = SOAP::LC.new( ).wsdl( "http://localhost:3000/sample/wsdl" ).call( "HelloWorld", :from => "Greg" )

Au moins cela permet de conserver les conventions. et puis j’ai appris quelque chose…

Moi qui avais placé en priorité basse la relecture approfondie de Programming Ruby, je vais immédiatement la remettre en priorité 1… Enfin si Monsieur est d’accord !

• • •

Mercredi 26 septembre 2007

SOAP::LC

Classé dans : Projets, Ruby — greg @ 20:53

Le projet est déposé sur RubyForge. Il ne me reste plus qu’a bosser. Ce Week End, après un passage à l’Apple Expo, je vais essayer de packager une première version… D’ici là, il faut quand même que je purge un peu mon code…

En attendant voici un petit exemple de ce que cela donne(ra) :

require ’soap/lc’
require ‘pp’

wsdl_uri = "http://www.example.com/service?wsdl"
s = SOAP::LC.new( ).wsdl( wsdl_uri ).getStock( :owner => "Apple", :product => "iPhone" )
pp s.result( ).to_hash

• • •

Camping 1.6… Bientôt !

Classé dans : Projets, Ruby — greg @ 13:34

De: Jonas Pfenniger
A : camping-list
Date : 23 sept. 2007 21:58
Objet : Next camping release

Dear camping users,

having been contacted by Julian Tarkhanov, I am willing to prepare the
next camping release. _why has given me his friendly approval, with
the reserve that camping.rb should be lower than 4k. He also told me
that he wanted to remove the ActiveSupport and Markaby dependencies.

I am writing here to get the users input so that I don’t do any
mistake. So far, my plans are to :
- solve all remaining bugs in the tracker
- remove the unused #errors_for method. Please give some input if you do !
- add some unit-tests.

This will result in a short-term release with not too much changes,
used for code stabilization.

When this is done, I will embark on 2.0 for bigger changes like
Markaby and AR removal.

Cheers,
zimbatm

• • •

Mardi 25 septembre 2007

Je déteste SOAP4R

Classé dans : Projets, Ruby — greg @ 0:41

Je passe beaucoup de temps à faire des tests d’API SOAP en ce moment. Naturellement, j’ai opté pour des tests en Ruby. Et bien ma conclusion est sans appel : je déteste SOAP4R !!!

De tout ce que j’ai vu dans ma vie, ce package est peut-être le pire. La documentation est inexistante et il faut se tordre les cheveux en 4 pour essayer de faire quelque chose de simple. Au final, j’ai préféré opter pour une solution radicale consistant à écrire à la main les enveloppes SOAP et utiliser net/http pour communiquer avec le serveur. C’est brutal, mais ça fonctionne à tout les coups !

Le bon côté des choses, c’est que cela m’a forcé à regarder attentivement les spécifications SOAP et WSDL. Dés que j’aurai un peu de temps libre, je vais me lancer dans l’écriture d’un package genre SOAP::Lite, en me concentrant sur la partie client (pour la partie serveur Rails me va très bien ;) ).

On en reparle…

• • •

Jeudi 20 septembre 2007

Bivouac 0.0.8

Classé dans : Projets, Ruby — greg @ 18:52

La version 0.0.8 de Bivouac est disponible. Pas de gros changement, mais une correction de bug qui bloquait le démarrage des applications avec WEBrick et une modification de template qui permet d’indenter le code HTML généré.

• • •

Mercredi 19 septembre 2007

iPhone Web Test

Classé dans : Apple, Web, Windows — greg @ 18:47

Alors que je travaillais sur une application Web pour iPhone, je me suis subitement rappelé qu’il n’y a pas encore (officiellement) d’iPhone en France. Heureusement pour tester il existe iPhoney

Tout cela est fort bien mais reste réservé aux seuls utilisateurs de MacOSX. N’étant pas de nature sectaire, je me suis dit qu’il serait bien que mes amis Windoziens puissent tester également le fruit de mon travail. J’ai donc développé iPhone Web Test.

Il s’agit d’une petite application Web permettant de tester un site Web comme si vous y accédiez via un iPhone. En fait ce n’est rien de plus qu’un navigateur dans un navigateur. Mais si vous faîtes le test en utilisant Safari sur votre Windows, vous pourrez presque vous y croire… Rotation de l’iPhone inclus…

Bon, j’entends maintenant les Linuxiens râler qu’encore une fois on ne pense pas à eux… Je n’ai pas essayé, mais Safari, finalement, c’est du KHTML non ?

• • •

Mercredi 12 septembre 2007

Bivouac 0.0.7… Enfin

Classé dans : Projets, Ruby, Uncategorized — greg @ 19:22

Ca y est, la version 0.0.7 de Bivouac est disponible. J’ai également ajouté, sur RubyForge, un bundle pour TextMate.

Cette nouvelle version apporte pas mal d’améliorations, dont un grand nombre d’Helpers qui permettent de donner “facilement” un petit côté AJAX à vos applications. Vous trouverez donc des méthodes calquées sur celles de Rails : draggable_element, sortable_element, visual_effect, … Si pour beaucoup de ces méthodes, l’utilisation est la même que dans Rails, il existe cependant quelques différences. Reportez-vous à la documentation pour plus d’info.

• • •

Lundi 10 septembre 2007

Liste triable avec Bivouac

Classé dans : Projets, Ruby — greg @ 19:18

Je progresse lentement… Le Helper Javascript permet maintenant de créer des listes triables. Voici un petit exemple de vue permettant de rendre, alternativement, une liste triable ou non.

module TestsAjax::Views
  def toggle_sort
    html do
      head do
        javascript_include_tag :defaults
      end
      body do
        # Creation de la liste
        ul( :id => ‘my_list’ ) do
          li( "Google", :id => "li_1" )
          li( "Yahoo", :id => "li_2" )
          li( "Accoona", :id => "li_3" )
          li( "Ask.com", :id => "li_4" )
          li( "Baidu", :id => "li_5" )
          li( "Exalead", :id => "li_6" )
          li( "Voila", :id => "li_7" )
          li( "Lycos", :id => "li_8" )
        end
       
        # Ce DIV est affiché lors du chargement de la page
        div( :id => "sortable" ) do
          # Il contient un bouton.
          button_to_function "Rendre la liste triable" do |page|
            # En cliquant sur ce bouton on masque le DIV conteneur et on
            # affiche les DIV d’ids "unsortable" et "result"
            page.toggle "sortable", "unsortable", "result"
            # Et on rend la liste triable.
            page.sortable( ‘my_list’, :onChange => {
              :update => ‘result’,
              :url => R(Sortable)
            } )
          end
        end
       
        # Ce DIV est masqué au chargement de la page
        div( :id => "unsortable", :style => "display: none;" ) do
          # Il contient un bouton.
          button_to_function "Rendre la liste non triable" do |page|
            # En cliquant sur ce bouton on masque le DIV conteneur et le DIV
            # d’id "result" et on rend visible de DIV d’id "sortable"
            page.toggle "sortable", "unsortable", "result"
            # On rend egalement la liste non triable
            page.unsortable( ‘my_list’ )
          end
        end
       
        # Ce DIV, affiché que quand la liste est triable, est mis à jour
        # chaque fois que l’ordre des éléments de la liste change. Il
        # contient le résultat renvoyé par l’appel à R(Sortable)
        div( :id => ‘result’, :style => "display: none;" )do; end
       
      end
    end
  end
end

Il est bien entendu possible de faire plus simple en rendant une liste triable avec la méthode sortable_element. Reportez-vous à la documentation de Ruby On Rails. Cela fonctionne exactement de la même façon.

• • •

Vendredi 7 septembre 2007

Bivouac 0.0.7… bientôt

Classé dans : Projets, Ruby — greg @ 19:28

Le développement de Bivouac 0.0.7 avance (lentement, mais sûrement). Il est maintenant possible de faire de l’autocomplession. Pour vous mettre en haleine, voici un petit bout de code illustrant la chose :

# app/views/test.rb
module AjaxTest::Views
  def test
    html do
      head do
        javascript_include_tag :defaults
        stylesheet_link_tag "autocomplete"
      end
      body do
       
        span "Recherche : "
        text_field( "test", "", :autocomplete => R(Autocomplete), :indicator => "Search…" )
       
      end
    end
  end
end
# app/controllers/autocomplete.rb
module AjaxTest::Controllers
  class Autocomplete < R ‘/autocomplete’
    def post
      search_data = input.test
     
      data = [
        "Gregoire Lejeune",
        "Arthur Lejeune",
        "Colyne Lejeune",
        "Benedict Lejeune",
        "John Doe"
      ]
     
      @results = []
      data.each do |n|
        @results << n if n.downcase.include?( search_data.downcase )
      end
     
      render :autocomplete
    end
   
    alias_method :get, :post
  end
end
# app/views/autocomplete.rb
module AjaxTest::Views
  def autocomplete
    ul do
      @results.each do |n|
        li n
      end
    end
  end
end

Et voici le résultat :

bivouac/autocomplete

• • •
Page suivante »
Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS