Enter the app era with ruby on rails (rubyday)

6,020 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,020
On SlideShare
0
From Embeds
0
Number of Embeds
3,458
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Enter the app era with ruby on rails (rubyday)

    1. 1. Enter the App Erawith Ruby on Rails @matteocollina
    2. 2. How is built an App? http://www.flickr.com/photos/dschulian/3173331821/
    3. 3. Code Icons by Fasticon
    4. 4. Code Run Icons by Fasticon
    5. 5. Code Run Server Icons by Fasticon
    6. 6. Code Run Server Icons by Fasticon
    7. 7. Code Run Server Icons by Fasticon
    8. 8. Code I need to serve Run Server my data toWeb and Mobile Apps Icons by Fasticon
    9. 9. We need an API
    10. 10. We need an APIWho has APIs?
    11. 11. Who has APIs?
    12. 12. Who has APIs?
    13. 13. Who has APIs?And many many others..
    14. 14. We will develop an API
    15. 15. We need to be fast! http://www.flickr.com/photos/oneaustin/1261907803
    16. 16. We have justtwenty minutes http://www.flickr.com/photos/oneaustin/1261907803
    17. 17. What do wewant to build? http://www.flickr.com/photos/oberazzi/318947873/
    18. 18. Another tool for nerds? http://www.flickr.com/photos/eyesontheroad/2260731457/
    19. 19. Another Todo List? http://www.flickr.com/photos/eyesontheroad/2260731457/
    20. 20. Enter MCDo.http://github.com/mcollina/mcdo
    21. 21. Enter MCDo.The first Todo List delivered as a REST API
    22. 22. The first Todo List delivered as a REST API
    23. 23. Signup APIhttp://github.com/mcollina/mcdo
    24. 24. Signup APIFeature: Signup API As a MCDO developer In order to develop apps I want to register new users Scenario: Succesful signup When I call "/users.json" in POST with: """ { "user": { "email": "hello@abc.org", "password": "abcde", "password_confirmation": "abcde" } } """ Then the JSON should be: """ { "id": 1, "email": "hello@abc.org" } """
    25. 25. Signup APIScenario: signup fails with a wrong password_confirmation When I call "/users.json" in POST with: """ { "user": { "email": "hello@abc.org", "password": "abcde", "password_confirmation": "abcde1" } } """ Then the JSON should be: """ { "errors": { "password": ["doesnt match confirmation"] } } """
    26. 26. How?
    27. 27. How?Ruby on RailsCucumberRSpecJSON-spec
    28. 28. How? Ruby on RailsLet’s see some code! Cucumber RSpec JSON-spec
    29. 29. Login APIhttp://github.com/mcollina/mcdo
    30. 30. Login APIFeature: Login API As a MCDO developer In order to develop apps I want to login with an existing user Background: Given there is the following user: | email | password | password_confirmation | | abcd@org.it | aa | aa | Scenario: Succesful login When I call "/session.json" in POST with: """ { "email": "abcd@org.it", "password": "aa" } """ Then the JSON should be: """ { "status": "authenticated" } """
    31. 31. Login APIScenario: Failed login When I call "/session.json" in POST with: """ { "email": "abcd@org.it", "password": "bb" } """ Then the JSON should be: """ { "status": "not authenticated" } """
    32. 32. Login APIScenario: Validating an active session Given I call "/session.json" in POST with: """ { "email": "abcd@org.it", "password": "aa" } """ When I call "/session.json" in GET Then the JSON should be: """ { "status": "authenticated" } """
    33. 33. Login API Scenario: Validating an active session Given I call "/session.json" in POST with: """ { "email": "abcd@org.it", "password": "aa" }Let’s see some code! """ When I call "/session.json" in GET Then the JSON should be: """ { "status": "authenticated" } """
    34. 34. Lists APIhttp://github.com/mcollina/mcdo
    35. 35. Lists APIFeature: Lists API As a MCDO developer In order to develop apps I want to manage a users lists Background: Given I login succesfully with user "aaa@abc.org" Scenario: Default lists When I call "/lists.json" in GET Then the JSON should be: """ { "lists": [{ "id": 1, "name": "Personal", "link": "http://www.example.com/lists/1", "items_link": "http://www.example.com/lists/1/items" }] } """
    36. 36. Lists APIScenario: Creating a list When I call "/lists.json" in POST with: """ { "list": { "name": "foobar" } } """ Then the JSON should be: """ { "name": "foobar", "items_link": "http://www.example.com/lists/1/items" } """
    37. 37. Lists APIScenario: Creating a list should add it to the index Given I call "/lists.json" in POST with: """ { "list": { "name": "foobar" } } """ When I call "/lists.json" in GET Then the JSON should be: """ { "lists": [{ "id": 2, "name": "foobar", "link": "http://www.example.com/lists/2", "items_link": "http://www.example.com/lists/2/items" }, { "id": 1, "name": "Personal", "link": "http://www.example.com/lists/1", "items_link": "http://www.example.com/lists/1/items" }] } """
    38. 38. Lists APIScenario: Removing a list (and the index is empty) Given I call "/lists/1.json" in DELETE When I call "/lists.json" Then the JSON should be: """ { "lists": [] } """Scenario: Updating a lists name When I call "/lists/1.json" in PUT with: """ { "list": { "name": "foobar" } } """ Then the JSON should be: """ { "name": "foobar", "items_link": "http://www.example.com/lists/1/items" } """
    39. 39. Lists API Scenario: Removing a list (and the index is empty) Given I call "/lists/1.json" in DELETE When I call "/lists.json" Then the JSON should be: """ { "lists": [] } """Let’s see some code! Scenario: Updating a lists name When I call "/lists/1.json" in PUT with: """ { "list": { "name": "foobar" } } """ Then the JSON should be: """ { "name": "foobar", "items_link": "http://www.example.com/lists/1/items" } """
    40. 40. Items APIhttp://github.com/mcollina/mcdo
    41. 41. Items APIFeature: Manage a lists items As a developer In order to manipulate the lists item I want to access them through APIs Background: Given I login succesfully with user "aaa@abc.org" Scenario: Default items When I call "/lists/1/items.json" in GET Then the JSON should be: """ { "items": [{ "name": "Insert your items!", "position": 0 }], "list_link": "http://www.example.com/lists/1" } """
    42. 42. Items APIScenario: Moving an element to the top Given I call "/lists/1/items.json" in POST with: ... And I call "/lists/1/items.json" in POST with: ... When I call "/lists/1/items/2/move.json" in PUT with: """ { "position": 0 } """ Then the JSON should be: """ { "items": [{ "name": "b", "position": 0 }, { "name": "Insert your items!", "position": 1 }, { "name": "c", "position": 2 }], "list_link": "http://www.example.com/lists/1" } """
    43. 43. Items API Scenario: Moving an element to the top Given I call "/lists/1/items.json" in POST with: ... And I call "/lists/1/items.json" in POST with: ... When I call "/lists/1/items/2/move.json" in PUT with: """ { "position": 0 }Let’s see some code! """ Then the JSON should be: """ { "items": [{ "name": "b", "position": 0 }, { "name": "Insert your items!", "position": 1 }, { "name": "c", "position": 2 }], "list_link": "http://www.example.com/lists/1" } """
    44. 44. Do we needan admin panel?
    45. 45. Do we needan admin panel?
    46. 46. Do we need an admin panel?Put in your Gemfile: gem activeadmin gem meta_search, >= 1.1.0.preThen run: $ bundle install $ rails g active_admin:install $ rails g active_admin:resource users $ rails g active_admin:resource lists $ rails g active_admin:resource items $ rake db:migrate
    47. 47. Do we need an admin panel?Put in your Gemfile:Let’s see some code! gem activeadmin gem meta_search, >= 1.1.0.preThen run: $ bundle install $ rails g active_admin:install $ rails g active_admin:resource users $ rails g active_admin:resource lists $ rails g active_admin:resource items $ rake db:migrate
    48. 48. Build a JS App!
    49. 49. Do you likeSpaghetti Code?JavaScript Apps areoften a messWe mix logic withpresentation withpersistance.Packaging is hard. http://www.flickr.com/photos/mpirotta/4944504834
    50. 50. What we want http://www.flickr.com/photos/bob_u/208396193
    51. 51. Rethinking MVC MVC pattern was introduced with Smalltalk too many years ago. In “true” MVC the “View” updates itself when the model changes. We could not port it to the Rails world. http://www.flickr.com/photos/wbaiv/2554954565
    52. 52. Build a JS App the Rails Way! Backbone.js: MVC in the browser Rails asset pipeline concatenate and minifies our JS automatically We can even write our app in CoffeeScript: it works out of the box.
    53. 53. Build a JS App the Rails Way! Backbone.js: MVC in the browser to Rails asset pipeline concatenate the code.. again? and minifies our JS automatically We can even write our app in CoffeeScript: it works out of the box.
    54. 54. http://www.flickr.com/photos/oneaustin/1261907803
    55. 55. We are late, the #rubydaycrew are kicking me out! http://www.flickr.com/photos/oneaustin/1261907803
    56. 56. TL;DR http://www.flickr.com/photos/evilaugust/3307382858
    57. 57. TL;DR Mobile Apps need an API Ruby on Rails is good for writing APIs You can build nice admin interfaceswith ActiveAdmin You can craft Javascript Apps easilyusing the asset pipeline.
    58. 58. Any Questions?
    59. 59. Matteo CollinaSoftware Engineer@matteocollinamatteocollina.com
    60. 60. www.mavigex.com www.wemobi.it
    61. 61. Thank You!

    ×