Un bijou : Opal, un runtime ruby en javascript
Sur le mĂȘme principe que CoffeeScript, Opal est un runtime ruby Ă©crit en JS. Vous pouvez compiler le code ruby en JS, ou lâutiliser directement dans votre navigateur avec le runtime et le parser (ça va ĂȘtre un peu lent mais ça reste utilisable). Câest ce 2Ăšme mode que nous allons tester.
Mise en oeuvre, Classes et héritage
Récupérez http://adambeynon.github.com/opal/js/opal.js et http://adambeynon.github.com/opal/js/opal-parser.js.
Puis créez une page comme ci-dessous :
<!DOCTYPE HTML>
<html>
<head>
    <title></title>
    <script src="opal.js"></script>
    <script src="opal-parser.js"></script>
</head>
<body>
</body>
<script type="text/ruby" charset="utf-8">
    class Human
        def initialize(firstname, lastname)
            @firstname = firstname
            @lastname = lastname
        end
        def setFirstName(firstname)
            @firstname = firstname
        end
        def setLastName(lastname)
            @lastname = lastname
        end
        def getFirstName
            return @firstname
        end
        def getLastName
            return @lastname
        end
    end
    Bob = Human.new "Bob", "Morane"
    puts Bob.getFirstName + " " + Bob.getLastName
    Bob.setLastName "MORANE"
    puts Bob.getFirstName + " " + Bob.getLastName
    Sam = Human.new "Sam", "LePirate"
    puts Sam.getFirstName + " " + Sam.getLastName
    puts Bob.getFirstName + " " + Bob.getLastName
    class SuperHeroe < Human
        def fly
            return @firstname + " " + @lastname + " is flying"
        end
    end
    Clark = SuperHeroe.new "Clark", "Kent"
    puts Clark.fly
</script>
</html>
Lancez dans le navigateur, avec la console ouverte, vous devriez voir apparaĂźtre ceci :
Bob Morane
Bob MORANE
Sam LePirate
Bob MORANE
Clark Kent is flying
Funny !, non ?
Interagir avec javascript
Modifiez ou créez une nouvelle page, comme celle ci :
<!DOCTYPE HTML>
<html>
<head>
    <title></title>
    <script src="opal.js"></script>
    <script src="opal-parser.js"></script>
</head>
<body>
</body>
<script>
    function test(args) {
        console.log(args);
    }
</script>
<script type="text/ruby" charset="utf-8">
    # Bridge between JS and Ruby
    # exec global js code
    def tryThat(args)
        `test(args);`
    end
    tryThat "Hello, i'm called by Opal"
</script>
</html>
Lancez dans le navigateur, avec la console ouverte, vous devriez voir apparaĂźtre ceci :
Hello, i'm called by Opal
REMARQUE IMPORTANTE :
Pour appeler du code js âinlineâ, il faut lâentourer de backticks, Ă ne pas confondre avec des guillemets simples :
donc `test(args);` et pas 'test(args);'
Interagir avec le dom
Si, câest possible aussi!
Modifiez ou créez une nouvelle page, comme celle ci :
<!DOCTYPE HTML>
<html>
<head>
    <title></title>
    <script src="opal.js"></script>
    <script src="opal-parser.js"></script>
</head>
<body>
    <h1>---Hello---</h1>
</body>
<script type="text/ruby" charset="utf-8">
    # Bridge between JS and Ruby
    class rQuery
        def setHtml(selector,txt)
            `document.querySelector(selector).innerHTML = txt;`
        end
        def getHtml(selector)
            `return document.querySelector(selector).innerHTML;`
        end
    end
    rq = rQuery.new
    rq.setHtml "h1", "Playing with Opal"
</script>
</html>
Lancez dans le navigateur, une fois le runtime chargé, le contenu de la balise <h1></h1> devrait changer.
Conclusion
Opal est assez jeune, mais Ă suivre pour les rubyâs lovers. Une fois de plus, cela dĂ©montre la puissance de JS (non ce nâest pas du troll)
Allez, bon dimanche Ă tous.
Tweet