{"action":"created","comment":{"url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/comments/59193335","id":59193335,"diff_hunk":"@@ -0,0 +1,154 @@\n+---\n+layout: post\n+cover: 'assets/images/general-cover-3.jpg'\n+title: Extension Framework Game Plan\n+tags: docs\n+subclass: 'post tag-docs'\n+categories: 'elixir'\n+author: 'Pikender'\n+navigation: true\n+logo: 'assets/images/nectar-cart.png'\n+---\n+\n+>\n+The post belongs to _NectarCommerce and Extension Framework Awareness_ Series\n+>\n+1. _[NectarCommerce Vision](http://vinsol.com/blog/2016/04/08/nectarcommerce-vision/)_\n+1. **Extension Framework Game Plan**\n+1. Introduction to Writing Macros\n+1. Running Multiple Phoenix Apps Together\n+1. Ecto Model Extension\n+1. Phoenix Router Extension\n+1. Phoenix View Extension\n+1. Extension Approach Explained\n+1. Developer Experience and Workflow developing Favorite Product Extension\n+1. Developer Experience and Workflow testing Favorite Product Extension\n+\n+## What will be NectarCommerce\n+\n+>\n+Off-the-shelf Opensource E-commerce application for building online store.\n+>\n+Provides an Extension Framework to support features not included in core as extensions.\n+>\n+Strives for un-obstrusive parallel development of NectarCommerce and Extensions\n+\n+NectarCommerce is committed to provide a ready-to-use e-commerce solution but definition of 100% is different under different business domains. It aims to solve common use-cases as part of the project and relying on extension framework to tap the rest.\n+\n+## Extension Framework Game Plan\n+\n+Let's validate and list the capabilities needed in Extension Framework through an **extension** which provides feature **to favorite products by Users.**\n+\n+_**Favorite Product Extension Requirements:**_\n+\n+- **Ability to mark and unmark a Product as favorite**\n+  - a View _probably_ showing all products with Ability to mark/unmark product as favorite\n+  - a controller action preparing the view\n+  - a route exposing the controller / view through Web\n+  - a controller action handling mark product as favorite\n+  - a route exposing the controller / view through Web\n+  - a controller action handling unmark already favorited product\n+  - a route exposing the controller / view through Web\n+  - a model interfacing with database to store product favorited by user\n+  - a migration to create join table in database\n+  - a join table storing product\\_id and user\\_id\n+- **Showing All Products liked by a User**\n+  - association in User to get favorite products\n+  - a View showing list of Favorite Products\n+  - a controller preparing the view\n+  - a route exposing    the controller / view through Web\n+- **Showing Users who favorited a particular Product**\n+  - association in Product to get users who favorited\n+  - a View showing list of Users who favorited\n+  - a controller preparing the view\n+  - a Route exposing the controller / view through Web\n+- Ability to Test all the integration above","path":"_posts/2016-04-05-extension-framework-game-plan.md","position":65,"original_position":65,"commit_id":"cdbde8b71a65edb4aad8352de9975a535ea61845","original_commit_id":"cdbde8b71a65edb4aad8352de9975a535ea61845","user":{"login":"preetibhalla","id":15337755,"avatar_url":"https://avatars.githubusercontent.com/u/15337755?v=3","gravatar_id":"","url":"https://api.github.com/users/preetibhalla","html_url":"https://github.com/preetibhalla","followers_url":"https://api.github.com/users/preetibhalla/followers","following_url":"https://api.github.com/users/preetibhalla/following{/other_user}","gists_url":"https://api.github.com/users/preetibhalla/gists{/gist_id}","starred_url":"https://api.github.com/users/preetibhalla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/preetibhalla/subscriptions","organizations_url":"https://api.github.com/users/preetibhalla/orgs","repos_url":"https://api.github.com/users/preetibhalla/repos","events_url":"https://api.github.com/users/preetibhalla/events{/privacy}","received_events_url":"https://api.github.com/users/preetibhalla/received_events","type":"User","site_admin":false},"body":"Ability to test the integration of above mentioned requirements.","created_at":"2016-04-11T12:09:35Z","updated_at":"2016-04-11T12:09:35Z","html_url":"https://github.com/vinsol/nectarcommerce/pull/50#discussion_r59193335","pull_request_url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50","_links":{"self":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/comments/59193335"},"html":{"href":"https://github.com/vinsol/nectarcommerce/pull/50#discussion_r59193335"},"pull_request":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50"}}},"pull_request":{"url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50","id":65330284,"html_url":"https://github.com/vinsol/nectarcommerce/pull/50","diff_url":"https://github.com/vinsol/nectarcommerce/pull/50.diff","patch_url":"https://github.com/vinsol/nectarcommerce/pull/50.patch","issue_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues/50","number":50,"state":"open","locked":false,"title":"[Blog] Extension Framework Game Plan","user":{"login":"pikender","id":804609,"avatar_url":"https://avatars.githubusercontent.com/u/804609?v=3","gravatar_id":"","url":"https://api.github.com/users/pikender","html_url":"https://github.com/pikender","followers_url":"https://api.github.com/users/pikender/followers","following_url":"https://api.github.com/users/pikender/following{/other_user}","gists_url":"https://api.github.com/users/pikender/gists{/gist_id}","starred_url":"https://api.github.com/users/pikender/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pikender/subscriptions","organizations_url":"https://api.github.com/users/pikender/orgs","repos_url":"https://api.github.com/users/pikender/repos","events_url":"https://api.github.com/users/pikender/events{/privacy}","received_events_url":"https://api.github.com/users/pikender/received_events","type":"User","site_admin":false},"body":"Review and Feedback Awaited","created_at":"2016-04-05T16:00:20Z","updated_at":"2016-04-11T12:09:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cbaa061eb31263d25838ff282ec7d6828935e19e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50/commits","review_comments_url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50/comments","review_comment_url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues/50/comments","statuses_url":"https://api.github.com/repos/vinsol/nectarcommerce/statuses/cdbde8b71a65edb4aad8352de9975a535ea61845","head":{"label":"vinsol:gh-page/extension-framework-game-plan","ref":"gh-page/extension-framework-game-plan","sha":"cdbde8b71a65edb4aad8352de9975a535ea61845","user":{"login":"vinsol","id":72388,"avatar_url":"https://avatars.githubusercontent.com/u/72388?v=3","gravatar_id":"","url":"https://api.github.com/users/vinsol","html_url":"https://github.com/vinsol","followers_url":"https://api.github.com/users/vinsol/followers","following_url":"https://api.github.com/users/vinsol/following{/other_user}","gists_url":"https://api.github.com/users/vinsol/gists{/gist_id}","starred_url":"https://api.github.com/users/vinsol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vinsol/subscriptions","organizations_url":"https://api.github.com/users/vinsol/orgs","repos_url":"https://api.github.com/users/vinsol/repos","events_url":"https://api.github.com/users/vinsol/events{/privacy}","received_events_url":"https://api.github.com/users/vinsol/received_events","type":"Organization","site_admin":false},"repo":{"id":50830234,"name":"nectarcommerce","full_name":"vinsol/nectarcommerce","owner":{"login":"vinsol","id":72388,"avatar_url":"https://avatars.githubusercontent.com/u/72388?v=3","gravatar_id":"","url":"https://api.github.com/users/vinsol","html_url":"https://github.com/vinsol","followers_url":"https://api.github.com/users/vinsol/followers","following_url":"https://api.github.com/users/vinsol/following{/other_user}","gists_url":"https://api.github.com/users/vinsol/gists{/gist_id}","starred_url":"https://api.github.com/users/vinsol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vinsol/subscriptions","organizations_url":"https://api.github.com/users/vinsol/orgs","repos_url":"https://api.github.com/users/vinsol/repos","events_url":"https://api.github.com/users/vinsol/events{/privacy}","received_events_url":"https://api.github.com/users/vinsol/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vinsol/nectarcommerce","description":"Quest for customizable E-commerce - the Elixir way","fork":false,"url":"https://api.github.com/repos/vinsol/nectarcommerce","forks_url":"https://api.github.com/repos/vinsol/nectarcommerce/forks","keys_url":"https://api.github.com/repos/vinsol/nectarcommerce/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vinsol/nectarcommerce/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vinsol/nectarcommerce/teams","hooks_url":"https://api.github.com/repos/vinsol/nectarcommerce/hooks","issue_events_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues/events{/number}","events_url":"https://api.github.com/repos/vinsol/nectarcommerce/events","assignees_url":"https://api.github.com/repos/vinsol/nectarcommerce/assignees{/user}","branches_url":"https://api.github.com/repos/vinsol/nectarcommerce/branches{/branch}","tags_url":"https://api.github.com/repos/vinsol/nectarcommerce/tags","blobs_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/refs{/sha}","trees_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vinsol/nectarcommerce/statuses/{sha}","languages_url":"https://api.github.com/repos/vinsol/nectarcommerce/languages","stargazers_url":"https://api.github.com/repos/vinsol/nectarcommerce/stargazers","contributors_url":"https://api.github.com/repos/vinsol/nectarcommerce/contributors","subscribers_url":"https://api.github.com/repos/vinsol/nectarcommerce/subscribers","subscription_url":"https://api.github.com/repos/vinsol/nectarcommerce/subscription","commits_url":"https://api.github.com/repos/vinsol/nectarcommerce/commits{/sha}","git_commits_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/commits{/sha}","comments_url":"https://api.github.com/repos/vinsol/nectarcommerce/comments{/number}","issue_comment_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues/comments{/number}","contents_url":"https://api.github.com/repos/vinsol/nectarcommerce/contents/{+path}","compare_url":"https://api.github.com/repos/vinsol/nectarcommerce/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vinsol/nectarcommerce/merges","archive_url":"https://api.github.com/repos/vinsol/nectarcommerce/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vinsol/nectarcommerce/downloads","issues_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues{/number}","pulls_url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls{/number}","milestones_url":"https://api.github.com/repos/vinsol/nectarcommerce/milestones{/number}","notifications_url":"https://api.github.com/repos/vinsol/nectarcommerce/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vinsol/nectarcommerce/labels{/name}","releases_url":"https://api.github.com/repos/vinsol/nectarcommerce/releases{/id}","deployments_url":"https://api.github.com/repos/vinsol/nectarcommerce/deployments","created_at":"2016-02-01T09:51:47Z","updated_at":"2016-04-03T08:08:12Z","pushed_at":"2016-04-11T09:26:26Z","git_url":"git://github.com/vinsol/nectarcommerce.git","ssh_url":"git@github.com:vinsol/nectarcommerce.git","clone_url":"https://github.com/vinsol/nectarcommerce.git","svn_url":"https://github.com/vinsol/nectarcommerce","homepage":"","size":4547,"stargazers_count":51,"watchers_count":51,"language":"Elixir","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5,"mirror_url":null,"open_issues_count":7,"forks":5,"open_issues":7,"watchers":51,"default_branch":"master"}},"base":{"label":"vinsol:gh-pages","ref":"gh-pages","sha":"9e22effd4491f347c40cda74fc6c472e0cff705a","user":{"login":"vinsol","id":72388,"avatar_url":"https://avatars.githubusercontent.com/u/72388?v=3","gravatar_id":"","url":"https://api.github.com/users/vinsol","html_url":"https://github.com/vinsol","followers_url":"https://api.github.com/users/vinsol/followers","following_url":"https://api.github.com/users/vinsol/following{/other_user}","gists_url":"https://api.github.com/users/vinsol/gists{/gist_id}","starred_url":"https://api.github.com/users/vinsol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vinsol/subscriptions","organizations_url":"https://api.github.com/users/vinsol/orgs","repos_url":"https://api.github.com/users/vinsol/repos","events_url":"https://api.github.com/users/vinsol/events{/privacy}","received_events_url":"https://api.github.com/users/vinsol/received_events","type":"Organization","site_admin":false},"repo":{"id":50830234,"name":"nectarcommerce","full_name":"vinsol/nectarcommerce","owner":{"login":"vinsol","id":72388,"avatar_url":"https://avatars.githubusercontent.com/u/72388?v=3","gravatar_id":"","url":"https://api.github.com/users/vinsol","html_url":"https://github.com/vinsol","followers_url":"https://api.github.com/users/vinsol/followers","following_url":"https://api.github.com/users/vinsol/following{/other_user}","gists_url":"https://api.github.com/users/vinsol/gists{/gist_id}","starred_url":"https://api.github.com/users/vinsol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vinsol/subscriptions","organizations_url":"https://api.github.com/users/vinsol/orgs","repos_url":"https://api.github.com/users/vinsol/repos","events_url":"https://api.github.com/users/vinsol/events{/privacy}","received_events_url":"https://api.github.com/users/vinsol/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vinsol/nectarcommerce","description":"Quest for customizable E-commerce - the Elixir way","fork":false,"url":"https://api.github.com/repos/vinsol/nectarcommerce","forks_url":"https://api.github.com/repos/vinsol/nectarcommerce/forks","keys_url":"https://api.github.com/repos/vinsol/nectarcommerce/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vinsol/nectarcommerce/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vinsol/nectarcommerce/teams","hooks_url":"https://api.github.com/repos/vinsol/nectarcommerce/hooks","issue_events_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues/events{/number}","events_url":"https://api.github.com/repos/vinsol/nectarcommerce/events","assignees_url":"https://api.github.com/repos/vinsol/nectarcommerce/assignees{/user}","branches_url":"https://api.github.com/repos/vinsol/nectarcommerce/branches{/branch}","tags_url":"https://api.github.com/repos/vinsol/nectarcommerce/tags","blobs_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/refs{/sha}","trees_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vinsol/nectarcommerce/statuses/{sha}","languages_url":"https://api.github.com/repos/vinsol/nectarcommerce/languages","stargazers_url":"https://api.github.com/repos/vinsol/nectarcommerce/stargazers","contributors_url":"https://api.github.com/repos/vinsol/nectarcommerce/contributors","subscribers_url":"https://api.github.com/repos/vinsol/nectarcommerce/subscribers","subscription_url":"https://api.github.com/repos/vinsol/nectarcommerce/subscription","commits_url":"https://api.github.com/repos/vinsol/nectarcommerce/commits{/sha}","git_commits_url":"https://api.github.com/repos/vinsol/nectarcommerce/git/commits{/sha}","comments_url":"https://api.github.com/repos/vinsol/nectarcommerce/comments{/number}","issue_comment_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues/comments{/number}","contents_url":"https://api.github.com/repos/vinsol/nectarcommerce/contents/{+path}","compare_url":"https://api.github.com/repos/vinsol/nectarcommerce/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vinsol/nectarcommerce/merges","archive_url":"https://api.github.com/repos/vinsol/nectarcommerce/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vinsol/nectarcommerce/downloads","issues_url":"https://api.github.com/repos/vinsol/nectarcommerce/issues{/number}","pulls_url":"https://api.github.com/repos/vinsol/nectarcommerce/pulls{/number}","milestones_url":"https://api.github.com/repos/vinsol/nectarcommerce/milestones{/number}","notifications_url":"https://api.github.com/repos/vinsol/nectarcommerce/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vinsol/nectarcommerce/labels{/name}","releases_url":"https://api.github.com/repos/vinsol/nectarcommerce/releases{/id}","deployments_url":"https://api.github.com/repos/vinsol/nectarcommerce/deployments","created_at":"2016-02-01T09:51:47Z","updated_at":"2016-04-03T08:08:12Z","pushed_at":"2016-04-11T09:26:26Z","git_url":"git://github.com/vinsol/nectarcommerce.git","ssh_url":"git@github.com:vinsol/nectarcommerce.git","clone_url":"https://github.com/vinsol/nectarcommerce.git","svn_url":"https://github.com/vinsol/nectarcommerce","homepage":"","size":4547,"stargazers_count":51,"watchers_count":51,"language":"Elixir","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5,"mirror_url":null,"open_issues_count":7,"forks":5,"open_issues":7,"watchers":51,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50"},"html":{"href":"https://github.com/vinsol/nectarcommerce/pull/50"},"issue":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/issues/50"},"comments":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/issues/50/comments"},"review_comments":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50/comments"},"review_comment":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/pulls/50/commits"},"statuses":{"href":"https://api.github.com/repos/vinsol/nectarcommerce/statuses/cdbde8b71a65edb4aad8352de9975a535ea61845"}}}}