Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby & Elixir - Real time applications

Ruby & Elixir - Real time applications

Real time applications

Tiago Bastos

August 30, 2013
Tweet

More Decks by Tiago Bastos

Other Decks in Programming

Transcript

  1. Elixir has a non-scary syntax and combines the good features

    of Ruby and Erlang. It’s not Erlang and it’s not Ruby and it has ideas of its own. Joe Armstrong
  2. fun

  3. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  4. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  5. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  6. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  7. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  8. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  9. require  'beaker' class  MathService    def  sum(a,  b)    

       a  +  b    end end Beaker.boot  path:  './',  env:  'development'  do  |app|    app.map  :math,  controller:  MathService end Beaker.application.run! Ruby/Beaker
  10. Ruby/Beaker Beaker.boot  path:  APP_PATH,  port:  APP_PORT  do  |app|    app.map

     :messages,  controller:  MessagesController end   class  MessagesController  <  ApplicationController            def  index(repo_id)                repository  =  Repository.find(repo_id)                if  repository.present?                    messages  =  Message.where(repository:  repository)                    t[:ok,  {  messages:  messages.map(&:to_hash)  }  ]                else                    t[:not_found,  {  error:  "Repository  not  found"  }  ]                end            end        end
  11. Ruby/Beaker Beaker.boot  path:  APP_PATH,  port:  APP_PORT  do  |app|    app.map

     :messages,  controller:  MessagesController end   class  MessagesController  <  ApplicationController            def  index(repo_id)                repository  =  Repository.find(repo_id)                if  repository.present?                    messages  =  Message.where(repository:  repository)                    t[:ok,  {  messages:  messages.map(&:to_hash)  }  ]                else                    t[:not_found,  {  error:  "Repository  not  found"  }  ]                end            end        end
  12. Ruby/Beaker Beaker.boot  path:  APP_PATH,  port:  APP_PORT  do  |app|    app.map

     :messages,  controller:  MessagesController end   class  MessagesController  <  ApplicationController            def  index(repo_id)                repository  =  Repository.find(repo_id)                if  repository.present?                    messages  =  Message.where(repository:  repository)                    t[:ok,  {  messages:  messages.map(&:to_hash)  }  ]                else                    t[:not_found,  {  error:  "Repository  not  found"  }  ]                end            end        end
  13. Ruby/Beaker Beaker.boot  path:  APP_PATH,  port:  APP_PORT  do  |app|    app.map

     :messages,  controller:  MessagesController end   class  MessagesController  <  ApplicationController            def  index(repo_id)                repository  =  Repository.find(repo_id)                if  repository.present?                    messages  =  Message.where(repository:  repository)                    t[:ok,  {  messages:  messages.map(&:to_hash)  }  ]                else                    t[:not_found,  {  error:  "Repository  not  found"  }  ]                end            end        end
  14. Elixir/Cowboy defmodule  Octalkin.MessagesHandler  do    def  get(req,  {_token,  repo_id})  do

           {:ok,  response}  =  BertrpcEx.call(:messages,  :index,  [repo_id])        {JSEX.encode!(response[:messages]),  req,  nil}    end end
  15. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  16. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  17. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  18. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  19. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  20. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  21. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  22. RubyMotion/AFMotion class  Repository        def  fetch_messages(&callback)    

       repo  =  self        AFMotion::Client.shared.get(url  +  "/messages")  do  |result|            if  result.success?                result.object.each  do  |m|                    repo.messages  <<  Message.create_with_api_hash(m)                end                callback.call(result,  repo)            elsif  result.failure?                #  Log/Alert/Etc                callback.call(result,  repo)            end        end    end end
  23. 17x