{"action":"created","comment":{"url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/comments/87283083","pull_request_review_id":7902128,"id":87283083,"diff_hunk":"@@ -0,0 +1,100 @@\n+=encoding utf8\n+\n+=head1 Medium-Scale Dancer, Part 1: Modules\n+\n+=head2 Or: How to Get Beyond Small-Scale in Dancer Application Design\n+\n+When you generate a Dancer app with C<dancer2 -a App>, you get a very\n+nicely structured and useful starting point. As long as your app remains\n+fairly small, you can work with this structure as-is clear through to\n+completion. In that sense, the generated app is production-ready.\n+\n+The problem comes when you start getting to thousands of lines of Perl\n+code, dozens of view files, and hundreds of routes, stretching the stock\n+app design beyond its natural limits. This series of articles gives you\n+one way to extend beyond this base.","path":"danceradvent/public/articles/2015/3-medium-scale-part-1.pod","position":null,"original_position":15,"commit_id":"cc8d0fa31f8a22f0e70dbdd660f844eb2ecdba06","original_commit_id":"510df171902127cbf4165c47ef5633a89ee7f5de","user":{"login":"wyoung","id":5193164,"avatar_url":"https://avatars.githubusercontent.com/u/5193164?v=3","gravatar_id":"","url":"https://api.github.com/users/wyoung","html_url":"https://github.com/wyoung","followers_url":"https://api.github.com/users/wyoung/followers","following_url":"https://api.github.com/users/wyoung/following{/other_user}","gists_url":"https://api.github.com/users/wyoung/gists{/gist_id}","starred_url":"https://api.github.com/users/wyoung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wyoung/subscriptions","organizations_url":"https://api.github.com/users/wyoung/orgs","repos_url":"https://api.github.com/users/wyoung/repos","events_url":"https://api.github.com/users/wyoung/events{/privacy}","received_events_url":"https://api.github.com/users/wyoung/received_events","type":"User","site_admin":false},"body":"I backed off on the \"hundreds of routes\" bit. On re-reading it, it's bothered me a bit because it implies that the number of routes might reasonably exceed the number of template files by an order of magnitude.\r\n\r\nI don't find that to be the case; in fact, the ratio of routes to template files happens to be within a few percent of 50/50 in my Dancer application. I find that the pressures pushing for imbalance in one direction are met by opposing pressures: for every route that pulls in multiple templates to build the final page, there are multiple routes that don't use template files at all.","created_at":"2016-11-09T21:41:45Z","updated_at":"2016-11-09T21:41:45Z","html_url":"https://github.com/PerlDancer/advent-calendar/pull/28#discussion_r87283083","pull_request_url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28","_links":{"self":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/comments/87283083"},"html":{"href":"https://github.com/PerlDancer/advent-calendar/pull/28#discussion_r87283083"},"pull_request":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28"}}},"pull_request":{"url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28","id":50887069,"html_url":"https://github.com/PerlDancer/advent-calendar/pull/28","diff_url":"https://github.com/PerlDancer/advent-calendar/pull/28.diff","patch_url":"https://github.com/PerlDancer/advent-calendar/pull/28.patch","issue_url":"https://api.github.com/repos/PerlDancer/advent-calendar/issues/28","number":28,"state":"open","locked":false,"title":"Added \"Medium-Scale Dancer\" article series originally posted to the Dancer mailing list","user":{"login":"wyoung","id":5193164,"avatar_url":"https://avatars.githubusercontent.com/u/5193164?v=3","gravatar_id":"","url":"https://api.github.com/users/wyoung","html_url":"https://github.com/wyoung","followers_url":"https://api.github.com/users/wyoung/followers","following_url":"https://api.github.com/users/wyoung/following{/other_user}","gists_url":"https://api.github.com/users/wyoung/gists{/gist_id}","starred_url":"https://api.github.com/users/wyoung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wyoung/subscriptions","organizations_url":"https://api.github.com/users/wyoung/orgs","repos_url":"https://api.github.com/users/wyoung/repos","events_url":"https://api.github.com/users/wyoung/events{/privacy}","received_events_url":"https://api.github.com/users/wyoung/received_events","type":"User","site_admin":false},"body":"I chose to insert these articles starting on December 3, to leave the first two spots for the introductory and \"state of Dancer\" articles I see in past years. Beware that if you move this series within the month that there are several hyperlinks interconnecting these articles that need to be updated, too.\n\nIncidentally, the shuffled grid view of the articles breaks the continuity of the series. Maybe for 2015, the grid could change to a proper calendar view, with leading cells skipped so that December 1 appears in the Tuesday column in 2015.\n","created_at":"2015-11-17T00:18:23Z","updated_at":"2016-11-09T21:41:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c60c017fea49d50e30107f9ef8a362c25aa5f238","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28/commits","review_comments_url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28/comments","review_comment_url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PerlDancer/advent-calendar/issues/28/comments","statuses_url":"https://api.github.com/repos/PerlDancer/advent-calendar/statuses/cc8d0fa31f8a22f0e70dbdd660f844eb2ecdba06","head":{"label":"wyoung:master","ref":"master","sha":"cc8d0fa31f8a22f0e70dbdd660f844eb2ecdba06","user":{"login":"wyoung","id":5193164,"avatar_url":"https://avatars.githubusercontent.com/u/5193164?v=3","gravatar_id":"","url":"https://api.github.com/users/wyoung","html_url":"https://github.com/wyoung","followers_url":"https://api.github.com/users/wyoung/followers","following_url":"https://api.github.com/users/wyoung/following{/other_user}","gists_url":"https://api.github.com/users/wyoung/gists{/gist_id}","starred_url":"https://api.github.com/users/wyoung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wyoung/subscriptions","organizations_url":"https://api.github.com/users/wyoung/orgs","repos_url":"https://api.github.com/users/wyoung/repos","events_url":"https://api.github.com/users/wyoung/events{/privacy}","received_events_url":"https://api.github.com/users/wyoung/received_events","type":"User","site_admin":false},"repo":{"id":46311475,"name":"advent-calendar","full_name":"wyoung/advent-calendar","owner":{"login":"wyoung","id":5193164,"avatar_url":"https://avatars.githubusercontent.com/u/5193164?v=3","gravatar_id":"","url":"https://api.github.com/users/wyoung","html_url":"https://github.com/wyoung","followers_url":"https://api.github.com/users/wyoung/followers","following_url":"https://api.github.com/users/wyoung/following{/other_user}","gists_url":"https://api.github.com/users/wyoung/gists{/gist_id}","starred_url":"https://api.github.com/users/wyoung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wyoung/subscriptions","organizations_url":"https://api.github.com/users/wyoung/orgs","repos_url":"https://api.github.com/users/wyoung/repos","events_url":"https://api.github.com/users/wyoung/events{/privacy}","received_events_url":"https://api.github.com/users/wyoung/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/wyoung/advent-calendar","description":"Articles for the advent calendar","fork":true,"url":"https://api.github.com/repos/wyoung/advent-calendar","forks_url":"https://api.github.com/repos/wyoung/advent-calendar/forks","keys_url":"https://api.github.com/repos/wyoung/advent-calendar/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wyoung/advent-calendar/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wyoung/advent-calendar/teams","hooks_url":"https://api.github.com/repos/wyoung/advent-calendar/hooks","issue_events_url":"https://api.github.com/repos/wyoung/advent-calendar/issues/events{/number}","events_url":"https://api.github.com/repos/wyoung/advent-calendar/events","assignees_url":"https://api.github.com/repos/wyoung/advent-calendar/assignees{/user}","branches_url":"https://api.github.com/repos/wyoung/advent-calendar/branches{/branch}","tags_url":"https://api.github.com/repos/wyoung/advent-calendar/tags","blobs_url":"https://api.github.com/repos/wyoung/advent-calendar/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wyoung/advent-calendar/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wyoung/advent-calendar/git/refs{/sha}","trees_url":"https://api.github.com/repos/wyoung/advent-calendar/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wyoung/advent-calendar/statuses/{sha}","languages_url":"https://api.github.com/repos/wyoung/advent-calendar/languages","stargazers_url":"https://api.github.com/repos/wyoung/advent-calendar/stargazers","contributors_url":"https://api.github.com/repos/wyoung/advent-calendar/contributors","subscribers_url":"https://api.github.com/repos/wyoung/advent-calendar/subscribers","subscription_url":"https://api.github.com/repos/wyoung/advent-calendar/subscription","commits_url":"https://api.github.com/repos/wyoung/advent-calendar/commits{/sha}","git_commits_url":"https://api.github.com/repos/wyoung/advent-calendar/git/commits{/sha}","comments_url":"https://api.github.com/repos/wyoung/advent-calendar/comments{/number}","issue_comment_url":"https://api.github.com/repos/wyoung/advent-calendar/issues/comments{/number}","contents_url":"https://api.github.com/repos/wyoung/advent-calendar/contents/{+path}","compare_url":"https://api.github.com/repos/wyoung/advent-calendar/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wyoung/advent-calendar/merges","archive_url":"https://api.github.com/repos/wyoung/advent-calendar/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wyoung/advent-calendar/downloads","issues_url":"https://api.github.com/repos/wyoung/advent-calendar/issues{/number}","pulls_url":"https://api.github.com/repos/wyoung/advent-calendar/pulls{/number}","milestones_url":"https://api.github.com/repos/wyoung/advent-calendar/milestones{/number}","notifications_url":"https://api.github.com/repos/wyoung/advent-calendar/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wyoung/advent-calendar/labels{/name}","releases_url":"https://api.github.com/repos/wyoung/advent-calendar/releases{/id}","deployments_url":"https://api.github.com/repos/wyoung/advent-calendar/deployments","created_at":"2015-11-17T00:08:26Z","updated_at":"2016-11-09T21:20:36Z","pushed_at":"2016-11-09T21:30:46Z","git_url":"git://github.com/wyoung/advent-calendar.git","ssh_url":"git@github.com:wyoung/advent-calendar.git","clone_url":"https://github.com/wyoung/advent-calendar.git","svn_url":"https://github.com/wyoung/advent-calendar","homepage":"","size":2824,"stargazers_count":5,"watchers_count":5,"language":"Perl","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":5,"default_branch":"master"}},"base":{"label":"PerlDancer:master","ref":"master","sha":"fa75f4f52c2e02c3fcf46a3b007c929249e2a78b","user":{"login":"PerlDancer","id":409763,"avatar_url":"https://avatars.githubusercontent.com/u/409763?v=3","gravatar_id":"","url":"https://api.github.com/users/PerlDancer","html_url":"https://github.com/PerlDancer","followers_url":"https://api.github.com/users/PerlDancer/followers","following_url":"https://api.github.com/users/PerlDancer/following{/other_user}","gists_url":"https://api.github.com/users/PerlDancer/gists{/gist_id}","starred_url":"https://api.github.com/users/PerlDancer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PerlDancer/subscriptions","organizations_url":"https://api.github.com/users/PerlDancer/orgs","repos_url":"https://api.github.com/users/PerlDancer/repos","events_url":"https://api.github.com/users/PerlDancer/events{/privacy}","received_events_url":"https://api.github.com/users/PerlDancer/received_events","type":"Organization","site_admin":false},"repo":{"id":978591,"name":"advent-calendar","full_name":"PerlDancer/advent-calendar","owner":{"login":"PerlDancer","id":409763,"avatar_url":"https://avatars.githubusercontent.com/u/409763?v=3","gravatar_id":"","url":"https://api.github.com/users/PerlDancer","html_url":"https://github.com/PerlDancer","followers_url":"https://api.github.com/users/PerlDancer/followers","following_url":"https://api.github.com/users/PerlDancer/following{/other_user}","gists_url":"https://api.github.com/users/PerlDancer/gists{/gist_id}","starred_url":"https://api.github.com/users/PerlDancer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PerlDancer/subscriptions","organizations_url":"https://api.github.com/users/PerlDancer/orgs","repos_url":"https://api.github.com/users/PerlDancer/repos","events_url":"https://api.github.com/users/PerlDancer/events{/privacy}","received_events_url":"https://api.github.com/users/PerlDancer/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PerlDancer/advent-calendar","description":"Articles for the advent calendar","fork":false,"url":"https://api.github.com/repos/PerlDancer/advent-calendar","forks_url":"https://api.github.com/repos/PerlDancer/advent-calendar/forks","keys_url":"https://api.github.com/repos/PerlDancer/advent-calendar/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PerlDancer/advent-calendar/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PerlDancer/advent-calendar/teams","hooks_url":"https://api.github.com/repos/PerlDancer/advent-calendar/hooks","issue_events_url":"https://api.github.com/repos/PerlDancer/advent-calendar/issues/events{/number}","events_url":"https://api.github.com/repos/PerlDancer/advent-calendar/events","assignees_url":"https://api.github.com/repos/PerlDancer/advent-calendar/assignees{/user}","branches_url":"https://api.github.com/repos/PerlDancer/advent-calendar/branches{/branch}","tags_url":"https://api.github.com/repos/PerlDancer/advent-calendar/tags","blobs_url":"https://api.github.com/repos/PerlDancer/advent-calendar/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PerlDancer/advent-calendar/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PerlDancer/advent-calendar/git/refs{/sha}","trees_url":"https://api.github.com/repos/PerlDancer/advent-calendar/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PerlDancer/advent-calendar/statuses/{sha}","languages_url":"https://api.github.com/repos/PerlDancer/advent-calendar/languages","stargazers_url":"https://api.github.com/repos/PerlDancer/advent-calendar/stargazers","contributors_url":"https://api.github.com/repos/PerlDancer/advent-calendar/contributors","subscribers_url":"https://api.github.com/repos/PerlDancer/advent-calendar/subscribers","subscription_url":"https://api.github.com/repos/PerlDancer/advent-calendar/subscription","commits_url":"https://api.github.com/repos/PerlDancer/advent-calendar/commits{/sha}","git_commits_url":"https://api.github.com/repos/PerlDancer/advent-calendar/git/commits{/sha}","comments_url":"https://api.github.com/repos/PerlDancer/advent-calendar/comments{/number}","issue_comment_url":"https://api.github.com/repos/PerlDancer/advent-calendar/issues/comments{/number}","contents_url":"https://api.github.com/repos/PerlDancer/advent-calendar/contents/{+path}","compare_url":"https://api.github.com/repos/PerlDancer/advent-calendar/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PerlDancer/advent-calendar/merges","archive_url":"https://api.github.com/repos/PerlDancer/advent-calendar/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PerlDancer/advent-calendar/downloads","issues_url":"https://api.github.com/repos/PerlDancer/advent-calendar/issues{/number}","pulls_url":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls{/number}","milestones_url":"https://api.github.com/repos/PerlDancer/advent-calendar/milestones{/number}","notifications_url":"https://api.github.com/repos/PerlDancer/advent-calendar/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PerlDancer/advent-calendar/labels{/name}","releases_url":"https://api.github.com/repos/PerlDancer/advent-calendar/releases{/id}","deployments_url":"https://api.github.com/repos/PerlDancer/advent-calendar/deployments","created_at":"2010-10-11T13:50:04Z","updated_at":"2016-11-05T14:07:49Z","pushed_at":"2016-11-09T21:30:46Z","git_url":"git://github.com/PerlDancer/advent-calendar.git","ssh_url":"git@github.com:PerlDancer/advent-calendar.git","clone_url":"https://github.com/PerlDancer/advent-calendar.git","svn_url":"https://github.com/PerlDancer/advent-calendar","homepage":"","size":2814,"stargazers_count":30,"watchers_count":30,"language":"Perl","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":3,"forks":20,"open_issues":3,"watchers":30,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28"},"html":{"href":"https://github.com/PerlDancer/advent-calendar/pull/28"},"issue":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/issues/28"},"comments":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/issues/28/comments"},"review_comments":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28/comments"},"review_comment":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/pulls/28/commits"},"statuses":{"href":"https://api.github.com/repos/PerlDancer/advent-calendar/statuses/cc8d0fa31f8a22f0e70dbdd660f844eb2ecdba06"}}}}
{"actor":{"display_login":"wyoung"}}