Advanced RESTful Rails

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    4 Favorites

    Advanced RESTful Rails - Presentation Transcript

    1. Advanced RESTful Rails Ben Scofield
    2. Constraints
    3. Shall I compare thee to a summer's day? Thou art more lovely and more temperate. Rough winds do shake the darling buds of May, And summer's lease hath all too short a date. Sometime too hot the eye of heaven shines, And often is his gold complexion dimm'd; And every fair from fair some time declines, By chance, or nature's changing course, untrimm'd; But thy eternal summer shall not fade ...
    4. app controllers helpers models views config environments initializers db doc lib tasks log public images javascripts stylesheets script performance process test fixtures functional integration unit ...
    5. exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/users exists test/functional/ exists test/unit/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/user.rb create test/unit/user_test.rb create test/fixtures/users.yml create db/migrate create db/migrate/20080531002035_create_users.rb create app/controllers/users_controller.rb create test/functional/users_controller_test.rb create app/helpers/users_helper.rb route map.resources :users
    6. REST
    7. Audience Participation! who is building restful applications?
    8. 212,000 Results
    9. How do I handle ...
    10. Difficult even for the pros
    11. class UsersController < ApplicationController # ... def activate self.current_user = params[:activation_code].blank? ? false : # ... if logged_in? && !current_user.active? current_user.activate! flash[:notice] = \"Signup complete!\" end redirect_back_or_default('/') end def suspend @user.suspend! redirect_to users_path end def unsuspend @user.unsuspend! redirect_to users_path end def destroy @user.delete! redirect_to users_path end def purge @user.destroy redirect_to users_path Restful Authentication end end
    12. What is REST?
    13. Resources hey-helen - flickr
    14. Addressability memestate - flickr
    15. Representations stevedave - flickr
    16. Stateless* http://www1.ncdc.noaa.gov/pub/data/images/usa-avhrr.gif
    17. Audience Participation! why care?
    18. Process
    19. tiptoe - flickr
    20. Domain ejpphoto - flickr
    21. Modeled kerim - flickr
    22. ?
    23. Identify resources
    24. Select methods to expose
    25. Respect the middleman
    26. Simple
    27. My Pull List
    28. Releases
    29. ActionController::Routing::Routes.draw do |map| map.releases 'releases/:year/:month/:day', :controller => 'items', :action => 'index' end class ItemsController < ApplicationController # release listing page; filters on year/month/day from params def index; end end
    30. Issues
    31. ActionController::Routing::Routes.draw do |map| map.resources :issues end class IssuesController < ApplicationController # issue detail page def show; end end
    32. Series
    33. ActionController::Routing::Routes.draw do |map| map.resources :titles end class TitlesController < ApplicationController # title detail page def show; end end
    34. ActionController::Routing::Routes.draw do |map| map.resources :titles, :has_many => [:issues] end class IssuesController < ApplicationController # issue listing page; could be series page def index; end end
    35. Users
    36. ActionController::Routing::Routes.draw do |map| map.resources :users end class UsersController < ApplicationController before_filter :require_login, :only => [:edit, :update] # edit account def edit; end # update account def update; end end
    37. Lists
    38. ActionController::Routing::Routes.draw do |map| map.resources :users end class UsersController < ApplicationController # public view - pull list def show; end end
    39. ActionController::Routing::Routes.draw do |map| map.resources :users, :has_many => [:titles] end class TitlesController < ApplicationController # public view - pull list, given a user_id def index; end end
    40. Advanced
    41. Login* mc - flickr
    42. ActionController::Routing::Routes.draw do |map| map.resource :session end class SessionsController < ApplicationController # login form def new; end # login action def create; end # logout action def destroy; end end
    43. Homepage seandreilinger - flickr
    44. ActionController::Routing::Routes.draw do |map| map.resource :homepage map.root :homepage end class HomepagesController < ApplicationController # homepage def show; end end
    45. ActionController::Routing::Routes.draw do |map| map.resources :contents map.root :controller => ‘contents’, :action => ‘show’, :page => ‘homepage’ end class ContentsController < ApplicationController # static content def show # code to find a template named according to params[:page] end end
    46. ActionController::Routing::Routes.draw do |map| map.resources :ads map.root :ads end class AdsController < ApplicationController # ad index - the million dollar homepage def index; end end
    47. Dashboard hel2005 - flickr
    48. ActionController::Routing::Routes.draw do |map| map.resource :dashboard end class DashboardsController < ApplicationController before_filter :require_login # dashboard def show; end end
    49. ActionController::Routing::Routes.draw do |map| map.resources :instruments end class InstrumentsController < ApplicationController before_filter :require_login # dashboard def index @instruments = current_user.instruments end end
    50. Preview ashoe - flickr
    51. ActionController::Routing::Routes.draw do |map| map.resources :posts, :has_one => [:preview] end class PreviewsController < ApplicationController def create @post = Post.find(params[:post_id]) @post.attributes = params[:post] render :template => 'posts/show' end end
    52. ActionController::Routing::Routes.draw do |map| map.resources :posts map.resource :preview end class PreviewsController < ApplicationController def create @post = Post.new(params[:post]) render :template => 'posts/show' end end
    53. Search seandreilinger - flickr
    54. ActionController::Routing::Routes.draw do |map| map.resources :posts end class PostsController < ApplicationController def index if params[:query].blank? @posts = Post.find(:all) else @posts = Post.find_for_query(params[:query]) end end end
    55. ActionController::Routing::Routes.draw do |map| map.resource :search end class SearchesController < ApplicationController def show @results = Searcher.find(params[:query]) end end
    56. Wizards dunechaser - flickr
    57. /galleries/new
    58. /restaurants/:id/photos/new
    59. /restaurants/:id/photos/edit
    60. ActionController::Routing::Routes.draw do |map| map.resources :galleries map.resources :galleries map.resources :restaurants, :has_many => [:photos] map.with_options :controller => 'photos' do |p| p.edit_restaurant_photos 'restaurants/:restaurant_id/photos/edit', :action => 'edit' p.update_restaurant_photos 'restaurants/:restaurant_id/photos/update', :action => 'update', :conditions => {:method => :put} end end
    61. Collections wooandy - flickr
    62. Web Services josefstuefer - flickr
    63. Staff Directory Inventory Search Application Text RESTful API HR etc.
    64. RESTful API Staff Directory RESTful API Inventory Search Application Text RESTful API HR RESTful API etc.
    65. this slide left intentionally blank Administration
    66. ActionController::Routing::Routes.draw do |map| map.namespace :admin do |admin| admin.resources :invitations admin.resources :emails admin.resources :users admin.resources :features end end
    67. Audience Participation! what gives you fits?
    68. Rails, Specifically
    69. <%= link_to 'Delete', record, :method => 'delete', :confirm => 'Are you sure?' %> <a href=\"/records/1\" onclick=\"if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);f.submit(); };return false;\">Delete</a> Accessibility
    70. ActionController::Routing::Routes.draw do |map| map.users 'users', :controller => ‘users’, :action => ‘index’ map.users 'users', :controller => ‘users’, :action => ‘create’ end Hand-Written Routes
    71. ActionController::Routing::Routes.draw do |map| map.resources :users # Install the default route as the lowest priority. map.connect ':controller/:action/:id' end Default Routing
    72. Collections wooandy - flickr
    73. ActionController::Routing::Routes.draw do |map| map.resources :records end class RecordsController < ApplicationController def index; end def show; end # ... end Mixed
    74. ActionController::Routing::Routes.draw do |map| map.resource :record_list map.resources :records end class RecordListsController < ApplicationController def show; end # ... end class RecordsController < ApplicationController def show; end # ... end Separated
    75. Audience Participation! where’s rails bitten you?
    76. Thanks! ben scofield ben.scofield@viget.com http://www.viget.com/extend http://www.culann.com

    + Ben ScofieldBen Scofield, 2 years ago

    custom

    2345 views, 4 favs, 1 embeds more stats

    Slides from Ben Scofield's session on Advanced REST more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 2345
      • 2343 on SlideShare
      • 2 from embeds
    • Comments 0
    • Favorites 4
    • Downloads 85
    Most viewed embeds
    • 2 views on http://cloudblog.dev.cloudraker.com

    more

    All embeds
    • 2 views on http://cloudblog.dev.cloudraker.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories