document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-33418\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"c1\"># we want /posts, /posts/published, /posts/drafts, etc. without too much duplication<\/span><\/div><div class=\"line\" id=\"LC2\">&nbsp;<\/div><div class=\"line\" id=\"LC3\"><span class=\"c1\"># model<\/span><\/div><div class=\"line\" id=\"LC4\"><span class=\"k\">class<\/span> <span class=\"nc\">Post<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ActiveRecord<\/span><span class=\"o\">::<\/span><span class=\"no\">Base<\/span><\/div><div class=\"line\" id=\"LC5\">&nbsp;&nbsp;<span class=\"n\">named_scope<\/span> <span class=\"ss\">:published<\/span><span class=\"p\">,<\/span> <span class=\"nb\">lambda<\/span> <span class=\"p\">{{<\/span><span class=\"ss\">:conditions<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">.<\/span><span class=\"n\">.<\/span><span class=\"o\">.<\/span><span class=\"p\">}}<\/span><\/div><div class=\"line\" id=\"LC6\">&nbsp;&nbsp;<span class=\"n\">named_scope<\/span> <span class=\"ss\">:draft<\/span><span class=\"p\">,<\/span> <span class=\"nb\">lambda<\/span> <span class=\"p\">{{<\/span><span class=\"ss\">:conditions<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">.<\/span><span class=\"n\">.<\/span><span class=\"o\">.<\/span><span class=\"p\">}}<\/span><\/div><div class=\"line\" id=\"LC7\">&nbsp;&nbsp;<span class=\"n\">named_scope<\/span> <span class=\"ss\">:expired<\/span><span class=\"p\">,<\/span> <span class=\"nb\">lambda<\/span> <span class=\"p\">{{<\/span><span class=\"ss\">:conditions<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">.<\/span><span class=\"n\">.<\/span><span class=\"o\">.<\/span><span class=\"p\">}}<\/span><\/div><div class=\"line\" id=\"LC8\">&nbsp;&nbsp;<span class=\"n\">named_scope<\/span> <span class=\"ss\">:upcoming<\/span><span class=\"p\">,<\/span> <span class=\"nb\">lambda<\/span> <span class=\"p\">{{<\/span><span class=\"ss\">:conditions<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">.<\/span><span class=\"n\">.<\/span><span class=\"o\">.<\/span><span class=\"p\">}}<\/span><\/div><div class=\"line\" id=\"LC9\"><span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC10\">&nbsp;<\/div><div class=\"line\" id=\"LC11\"><span class=\"c1\"># app controller<\/span><\/div><div class=\"line\" id=\"LC12\"><span class=\"k\">class<\/span> <span class=\"nc\">ApplicationController<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ActionController<\/span><span class=\"o\">::<\/span><span class=\"no\">Base<\/span><\/div><div class=\"line\" id=\"LC13\">&nbsp;<\/div><div class=\"line\" id=\"LC14\"><span class=\"kp\">protected<\/span><\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;<\/div><div class=\"line\" id=\"LC16\">&nbsp;&nbsp;<span class=\"c1\"># this creates actions for each publish status, which call find_resources with the correct scope<\/span><\/div><div class=\"line\" id=\"LC17\">&nbsp;&nbsp;<span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">publish_status_actions<\/span><\/div><div class=\"line\" id=\"LC18\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">[<\/span><span class=\"ss\">:published<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:draft<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:expired<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:upcoming<\/span><span class=\"o\">].<\/span><span class=\"n\">each<\/span> <span class=\"k\">do<\/span> <span class=\"o\">|<\/span><span class=\"n\">action<\/span><span class=\"o\">|<\/span><\/div><div class=\"line\" id=\"LC19\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">define_method<\/span> <span class=\"n\">action<\/span> <span class=\"k\">do<\/span><\/div><div class=\"line\" id=\"LC20\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"nb\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">resources<\/span> <span class=\"o\">=<\/span> <span class=\"n\">find_resources<\/span><span class=\"p\">(<\/span><span class=\"n\">action<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC21\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">render<\/span> <span class=\"ss\">:action<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"ss\">:index<\/span><\/div><div class=\"line\" id=\"LC22\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC23\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;&nbsp;<span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;<\/div><div class=\"line\" id=\"LC26\">&nbsp;&nbsp;<span class=\"k\">def<\/span> <span class=\"nf\">find_resources<\/span><span class=\"p\">(<\/span><span class=\"n\">scope<\/span> <span class=\"o\">=<\/span> <span class=\"ss\">:all<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">resource_service<\/span><span class=\"o\">.<\/span><span class=\"n\">send<\/span><span class=\"p\">(<\/span><span class=\"n\">scope<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">paginate<\/span><span class=\"p\">(<\/span><span class=\"ss\">:page<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"n\">params<\/span><span class=\"o\">[<\/span><span class=\"ss\">:page<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;<span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC29\">&nbsp;<\/div><div class=\"line\" id=\"LC30\"><span class=\"k\">end<\/span><\/div><div class=\"line\" id=\"LC31\">&nbsp;<\/div><div class=\"line\" id=\"LC32\"><span class=\"c1\"># posts controller<\/span><\/div><div class=\"line\" id=\"LC33\"><span class=\"k\">class<\/span> <span class=\"nc\">PostsController<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">ApplicationController<\/span><\/div><div class=\"line\" id=\"LC34\">&nbsp;&nbsp;<span class=\"n\">resources_controller<\/span> <span class=\"ss\">:posts<\/span><\/div><div class=\"line\" id=\"LC35\">&nbsp;&nbsp;<span class=\"n\">publish_status_actions<\/span><\/div><div class=\"line\" id=\"LC36\"><span class=\"k\">end<\/span><\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/33418/c669f86d63a5a52cee1a98e58a9eeccc38dba507/gistfile1.rb\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/33418#file_gistfile1.rb\" style=\"float:right;margin-right:10px;color:#666\">gistfile1.rb<\/a>\n          <a href=\"http://gist.github.com/33418\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
