{"action":"created","comment":{"url":"https://api.github.com/repos/meteor/guide/pulls/comments/47209477","id":47209477,"diff_hunk":"@@ -0,0 +1,172 @@\n+---\n+title: Code style\n+---\n+\n+After reading this article, you'll know:\n+\n+1. The benefits of having a consistent code style across your organization and the Meteor community\n+2. Meteor's recommended JavaScript code style\n+3. How to set up JavaScript linting for your code\n+4. How to name all of the different parts of a Meteor app\n+\n+<h2 id=\"benefits-consistent-style\">Benefits of consistent style</h2>\n+\n+Countless hours have been spent by developers throughout the years arguing over single vs. double quotes, where to put brackets, how many spaces to type, and all kinds of other cosmetic code style questions. These are all questions that have at best a tangential relationship to code quality, but are very easy to have opinions about because they are so visual.\n+\n+While it's not necessarily important whether your code base uses single or double quotes for string literals, there are huge benefits to making that decision once and having it be consistent across your organization. These benefits also apply to the Meteor and JavaScript development communities as a whole.\n+\n+<h3 id=\"easy-to-read\">Easy to read code</h3>\n+\n+The same way that you don't read English sentences one word at a time, you don't read code one token at a time. Mostly you just look at the shape of a certain expression, or the way it highlights in your editor, and assume what it does. If the style of every bit of code is consistent, that ensures that bits of code that look the same actually _are_ the same - there isn't any hidden punctuation or gotchas that you don't expect, so you can focus on understanding the logic instead of the symbols. One example of this is indentation - while in JavaScript, indentation is not meaningful, it's helpful to have all of your code consistently indented so that you don't need to read all of the brackets in detail to see what is going on.\n+\n+```js\n+// This code is misleading because it looks like both statements\n+// are inside the conditional.\n+if (condition)\n+  firstStatement();\n+  secondStatement();\n+```\n+\n+```js\n+// Much clearer!\n+if (condition) {\n+  firstStatement();\n+}\n+\n+secondStatement();\n+```\n+\n+<h3 id=\"standard-tools\">Use standard tools</h3>\n+\n+Having a consistent style means that it's easier to adopt standard tools for error checking. For example, if you adopt a convention that you must always use `let` or `const` instead of `var`, you can now use a tool to ensure all of your variables are block-scoped. That means one less thing to thing about when reading code.\n+\n+If your whole organization uses the same tool to check code, you can more easily read code written by anyone else. If we can standardize across the Meteor community, this will also be the case for open source projects and tutorials! In this article, we'll give suggestions for standard linter and transpiler configurations for Meteor.\n+\n+<h3 id=\"code-samples\">Use code samples directly</h3>\n+\n+If you're using the standard Meteor style guide, you can more easily understand and copy code samples from the Meteor Guide, documentation, tutorials, example apps, and more, without having to reformat them first.\n+\n+For the reasons above and more, we believe that the overall benefits of having a consistent style outweigh opinions on the individual decisions. For this reason, we've adopted a very popular JavaScript style guide from AirBnB basically as-is. We think the Meteor version is a bit clearer and removes some unnecessary content, but most things are the same.\n+\n+<h2 id=\"javascript\">JavaScript style</h2>\n+\n+Here at Meteor, we strongly believe that JavaScript is the best language to build web applications, for a variety of reasons. JavaScript is constantly improving, and the standards around ES2015 have really brought together the JavaScript community. Here are our recommendations about how to use ES2015 JavaScript in your app today.\n+\n+[XXX Ben's .gif of ecmascript here]\n+\n+<h3 id=\"ecmascript\">Use the `ecmascript` package</h3>\n+\n+Meteor comes with a core package called `ecmascript` that transpiles all `.js` files in your app to support a stable list of modern JavaScript standards that are reliable for production use. This means that not all cutting-edge features, like function decorators or generators, are supported; we think it's best to only build your app on standards that are good bets for future browser support.\n+\n+For a complete list of ES2015 features we support, consult the [`ecmascript` package README](https://atmospherejs.com/meteor/ecmascript).\n+\n+<h3 id=\"style-guide\">Follow the Meteor JavaScript style guide</h3>\n+\n+We have a JavaScript style guide which is heavily based on the popular AirBnB style guide, but has been content edited to include only essential rules. If you would like to follow this style guide in your non-Meteor applications, you will need to enable the same Babel features as supported by the `ecmascript` package linked above.\n+\n+[Read the Meteor JavaScript style guide.](https://github.com/meteor/javascript)\n+\n+<h2 id=\"eslint\">Check your code with ESLint</h2>\n+\n+\"Code linting\" is the process of automatically checking your code for common errors or style problems. For example, ESLint can determine if you have made a typo in a variable name, or some part of your code is unreachable because of a poorly written `if` condition.\n+\n+We have a standard ESLint configuration that verifies as much as possible of the Meteor JavaScript style guide.\n+\n+[Get the Meteor `.eslintrc` here.](XXX)\n+\n+Below, you can find directions for setting up automatic linting at many different stages of development. In general, you want to run the linter as often as possible, because it's the fastest and easiest way to identify typos and small errors.\n+\n+<h3 id=\"eslint-installing\">Installing and running ESLint</h3>\n+\n+XXX do you need global NPM for this?\n+\n+<h3 id=\"eslint-editor\">Integrating ESLint with your editor</h3>\n+\n+XXX\n+\n+<h3 id=\"eslint-commit-hook\">Setting up a commit hook for linting</h3>\n+\n+XXX\n+\n+<h3 id=\"eslint-ci\">Running ESLint in your CI environment</h3>\n+\n+XXX\n+\n+<h2 id=\"meteor-features\">Meteor features</h2>\n+\n+The section above talked about JavaScript code in general - you can easily apply it in any JavaScript application, not just with Meteor apps. However, there are some style questions that are Meteor-specific, in particular how to name and structure all of the different components of your app.\n+\n+<h3 id=\"collections\">Collections</h3>\n+\n+Collections should be named as a plural noun, in PascalCase. The name of the collection in the database (the first argument to the collection constructor) should be the same as the name of the JavaScript symbol.\n+\n+```js\n+// Defining a collection\n+Lists = new Mongo.Collection('Lists');\n+```\n+\n+Fields in the database should be camelCased just like your JavaScript variable names.\n+\n+```js\n+// Inserting a document with camelCased field names\n+Widgets.insert({\n+  myFieldName: 'Hello, world!',\n+  otherFieldName: 'Goodbye.'\n+});\n+```\n+\n+<h3 id=\"methods-and-publications\">Methods and publications</h3>\n+\n+Method and publication names should be camelCased and namespaced to a module or collection. For example, if you have a Method related to the Todos collection:\n+\n+```js\n+// Naming a method\n+Todos.methods.updateText = new ValidatedMethod({\n+  name: 'Todos.methods.updateText',\n+  // ...\n+});\n+```\n+\n+Note that this code sample uses the [ValidatedMethod package recommended in the Methods article](methods.html#XXX). If you aren't using that package, you can use the name as the property passed to `Meteor.methods`.\n+\n+Here's how this naming convention looks when applied to a publication:\n+\n+```js\n+// Naming a publication\n+Meteor.publish('Lists.public', function() {\n+  // ...\n+});\n+```\n+\n+<h3 id=\"files-and-exports\">Files, exports, and packages</h3>\n+\n+You should use the ES2015 `import` and `export` features to manage your code. This will let you better understand the dependencies between different parts of your code, and it will be easy to know where to look if you need to read the source code of a dependency.\n+\n+Each file in your app should represent one logical module. Avoid having catch-all utility modules that export a variety of unrelated functions and symbols. Often, this can mean that it's good to have one class, UI component, or collection per file, but there are cases where it is OK to make an exception, for example if you have a UI component with a small sub-component that isn't used outside of that file.\n+\n+When a file represents a single class or UI component, the file should be named the same as the thing it defines, with the same capitalization. So if you have a file that exports a class:\n+\n+```js\n+export class ClickCounter { ... }\n+```\n+\n+This class should be defined inside a file called `ClickCounter.js`. When you import it, it'll look like this:\n+\n+```js\n+import ClickCounter from './ClickCounter.js';\n+```\n+\n+Note that imports use relative paths, and include the file extension at the end of the file name.\n+\n+<h3 id=\"templates-and-components\">Templates and components</h3>\n+\n+Often when you are dealing with templates or UI components, you'll have several closely coupled files to manage. They could be two or more of HTML, CSS, and JavaScript. In this case, we recommend putting the files together in the same directory with the same name:\n+\n+```\n+# The listShow template from the Todos example app has 3 files:\n+listShow.html","path":"content/code-style.md","position":167,"original_position":167,"commit_id":"5aa3aa2f98456211dd9aa6b5fa1c43814244877f","original_commit_id":"5aa3aa2f98456211dd9aa6b5fa1c43814244877f","user":{"login":"tmeasday","id":132554,"avatar_url":"https://avatars.githubusercontent.com/u/132554?v=3","gravatar_id":"","url":"https://api.github.com/users/tmeasday","html_url":"https://github.com/tmeasday","followers_url":"https://api.github.com/users/tmeasday/followers","following_url":"https://api.github.com/users/tmeasday/following{/other_user}","gists_url":"https://api.github.com/users/tmeasday/gists{/gist_id}","starred_url":"https://api.github.com/users/tmeasday/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmeasday/subscriptions","organizations_url":"https://api.github.com/users/tmeasday/orgs","repos_url":"https://api.github.com/users/tmeasday/repos","events_url":"https://api.github.com/users/tmeasday/events{/privacy}","received_events_url":"https://api.github.com/users/tmeasday/received_events","type":"User","site_admin":false},"body":"It's `listsShow`. Should we be renaming this to `lists.show`?","created_at":"2015-12-10T10:23:24Z","updated_at":"2015-12-10T10:23:24Z","html_url":"https://github.com/meteor/guide/pull/153#discussion_r47209477","pull_request_url":"https://api.github.com/repos/meteor/guide/pulls/153","_links":{"self":{"href":"https://api.github.com/repos/meteor/guide/pulls/comments/47209477"},"html":{"href":"https://github.com/meteor/guide/pull/153#discussion_r47209477"},"pull_request":{"href":"https://api.github.com/repos/meteor/guide/pulls/153"}}},"pull_request":{"url":"https://api.github.com/repos/meteor/guide/pulls/153","id":53193868,"html_url":"https://github.com/meteor/guide/pull/153","diff_url":"https://github.com/meteor/guide/pull/153.diff","patch_url":"https://github.com/meteor/guide/pull/153.patch","issue_url":"https://api.github.com/repos/meteor/guide/issues/153","number":153,"state":"open","locked":false,"title":"Code style content [WIP]","user":{"login":"stubailo","id":448783,"avatar_url":"https://avatars.githubusercontent.com/u/448783?v=3","gravatar_id":"","url":"https://api.github.com/users/stubailo","html_url":"https://github.com/stubailo","followers_url":"https://api.github.com/users/stubailo/followers","following_url":"https://api.github.com/users/stubailo/following{/other_user}","gists_url":"https://api.github.com/users/stubailo/gists{/gist_id}","starred_url":"https://api.github.com/users/stubailo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stubailo/subscriptions","organizations_url":"https://api.github.com/users/stubailo/orgs","repos_url":"https://api.github.com/users/stubailo/repos","events_url":"https://api.github.com/users/stubailo/events{/privacy}","received_events_url":"https://api.github.com/users/stubailo/received_events","type":"User","site_admin":false},"body":"There's a big gap around linting. @timbotnik, any thoughts on when you'll be able to spend some time on that? The sections we still need are:\r\n\r\n1. Installing and running ESLint\r\n1. Setting up linting in your editor\r\n1. Setting up a linter commit hook\r\n1. Adding linting to your CI alongside tests\n<a href='#crh-start'></a><a href='#crh-data-%7B%22processed%22%3A%20%5B%22https%3A//github.com/meteor/guide/pull/153%23issuecomment-163500547%22%2C%20%22https%3A//github.com/meteor/guide/pull/153%23issuecomment-163509190%22%2C%20%22https%3A//github.com/meteor/guide/pull/153%23issuecomment-163524974%22%2C%20%22https%3A//github.com/meteor/guide/pull/153%23discussion_r47209298%22%5D%2C%20%22comments%22%3A%20%7B%22General%20Comment%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/meteor/guide/pull/153%23issuecomment-163500547%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22I%20think%20we%20could%20nail%20down%20the%20implementation%20of%20installing%20/%20using%20a%20linter%20pretty%20easily%2C%20however%20I%20think%20we%20should%20try%20to%20answer%20the%20question%20%5C%22do%20we%20recommend%20using%20an%20%60npm%20install...%60%20solution%20vs%20a%20%60meteor%20add%20...%60%20solution%5C%22.%20%20I%20think%20in%20the%20context%20of%20native%20NPM%20support%2C%20we%20might%20be%20able%20to%20recommend%20the%20npm%20version%2C%20I%20just%20don%27t%20know%20enough%20about%20the%201.3%20release%20/%20timeline%20to%20determine%20what%20makes%20sense.%20%20%5Cr%5CnIf%20we%20want%20to%20get%20this%20out%20ahead%20of%201.3%2C%20we%20could%20outline%20both%20approaches%20and%20talk%20about%20the%20pro%27s%20and%20con%27s.%20%20I%20would%20also%20suggest%20that%20we%20see%20if%20%40rdickert%20is%20available%20to%20help%20with%20some%20of%20the%20content%20since%20he%20has%20already%20written%20a%20nice%20blog%20post%20and%20is%20also%20interested%20in%20seeing%20this%20happen.%5Cr%5Cn%5Cr%5Cn%22%2C%20%22created_at%22%3A%20%222015-12-10T06%3A00%3A16Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1831709%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/timbotnik%22%7D%7D%2C%20%7B%22body%22%3A%20%22Great%20content%20BTW%21%20%20I%20would%20maybe%20trade%20some%20of%20the%20justification%20text%20from%20focusing%20on%20consistency%20to%20also%20include%20some%20tangible%20rationale%3A%5Cr%5Cn%2A%20identification%20of%20potential%20run-time%20errors%20before%20they%20happen%5Cr%5Cn%2A%20promotion%20of%20best-practices%20that%20are%20trusted%20by%20the%20greater%20JS%20community%5Cr%5Cn%2A%20become%20a%20more%20awesome%20programmer%20because%20you%20know%20about%20language%20nuances%20and%20pitfalls%5Cr%5Cn%22%2C%20%22created_at%22%3A%20%222015-12-10T06%3A10%3A24Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/1831709%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/timbotnik%22%7D%7D%2C%20%7B%22body%22%3A%20%22%3E%20however%20I%20think%20we%20should%20try%20to%20answer%20the%20question%20%5C%22do%20we%20recommend%20using%20an%20npm%20install...%20solution%20vs%20a%20meteor%20add%20...%20solution%5C%22%5Cr%5Cn%5Cr%5CnPersonally%20I%20am%20very%20sure%20we%20should%20recommend%20the%20npm%20install%20solution.%20I%20can%27t%20imagine%20a%20world%20where%20the%20meteor%20add%20solution%20is%20easy%20to%20integrate%20with%20CI%2C%20people%27s%20editors%2C%20different%20ways%20of%20loading%20ESLint%20configs%2C%20etc%20etc.%20I%27d%20say%20we%20can%20confidently%20just%20use%20the%20%5C%22regular%5C%22%20ESLint%20experience%20and%20people%20will%20be%20fine.%5Cr%5Cn%5Cr%5Cn%3E%20I%20would%20maybe%20trade%20some%20of%20the%20justification%20text%20from%20focusing%20on%20consistency%20to%20also%20include%20some%20tangible%20rationale%3A%5Cr%5Cn%5Cr%5CnTotally%20a%20great%20idea.%20I%27ll%20add%20some%20of%20this%20stuff.%22%2C%20%22created_at%22%3A%20%222015-12-10T07%3A42%3A18Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/448783%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/stubailo%22%7D%7D%5D%2C%20%22title%22%3A%20%22General%20Comment%22%7D%2C%20%22Pull%205aa3aa2f98456211dd9aa6b5fa1c43814244877f%20content/code-style.md%2059%22%3A%20%7B%22html_url%22%3A%20%22https%3A//github.com/meteor/guide/pull/153%23discussion_r47209298%22%2C%20%22comments%22%3A%20%5B%7B%22body%22%3A%20%22I%20think%20maybe%20an%20extra%20sentence%20explaining%20what%20this%20means%20in%20fact%20%28%5C%22the%20package%20takes%20an%20input%20file%20in%20ES2015%20syntax%2C%20which%20includes%20contructs%20that%20are%20not%20supported%20by%20all%20modern%20browsers%2C%20such%20as%20arrow%20functions%20%60%28%29%20%3D%3E%20%7B%7D%60%2C%20and%20compiles%20them%20into%20ES5%20compliant%20code%20that%20will%20run%20without%20a%20hitch.%20Thanks%20to%20source%20maps%2C%20you%20can%20debug%20the%20original%20source%20easily%5C%22%20or%20so%29%22%2C%20%22created_at%22%3A%20%222015-12-10T10%3A21%3A08Z%22%2C%20%22user%22%3A%20%7B%22avatar_url%22%3A%20%22https%3A//avatars.githubusercontent.com/u/132554%3Fv%3D3%22%2C%20%22html_url%22%3A%20%22https%3A//github.com/tmeasday%22%7D%7D%5D%2C%20%22title%22%3A%20%22File%3A%20content/code-style.md%3AL1-173%22%7D%7D%7D'></a>\n<a href='https://www.codereviewhub.com/'><img src='http://www.codereviewhub.com/site/github-bar.png' height=40></a>\n- [ ] <a href='#crh-comment-General Comment'></a> <img src='http://www.codereviewhub.com/site/github-remaining.png' height=16 width=60>&nbsp;<b><a href='https://github.com/meteor/guide/pull/153#issuecomment-163500547'>General Comment</a></b>\n- <a href='https://github.com/timbotnik'><img border=0 src='https://avatars.githubusercontent.com/u/1831709?v=3' height=16 width=16'></a> I think we could nail down the implementation of installing / using a linter pretty easily, however I think we should try to answer the question \"do we recommend using an `npm install...` solution vs a `meteor add ...` solution\".  I think in the context of native NPM support, we might be able to recommend the npm version, I just don't know enough about the 1.3 release / timeline to determine what makes sense.\nIf we want to get this out ahead of 1.3, we could outline both approaches and talk about the pro's and con's.  I would also suggest that we see if @rdickert is available to help with some of the content since he has already written a nice blog post and is also interested in seeing this happen.\n- <a href='https://github.com/timbotnik'><img border=0 src='https://avatars.githubusercontent.com/u/1831709?v=3' height=16 width=16'></a> Great content BTW!  I would maybe trade some of the justification text from focusing on consistency to also include some tangible rationale:\n* identification of potential run-time errors before they happen\n* promotion of best-practices that are trusted by the greater JS community\n* become a more awesome programmer because you know about language nuances and pitfalls\n- <a href='https://github.com/stubailo'><img border=0 src='https://avatars.githubusercontent.com/u/448783?v=3' height=16 width=16'></a> > however I think we should try to answer the question \"do we recommend using an npm install... solution vs a meteor add ... solution\"\nPersonally I am very sure we should recommend the npm install solution. I can't imagine a world where the meteor add solution is easy to integrate with CI, people's editors, different ways of loading ESLint configs, etc etc. I'd say we can confidently just use the \"regular\" ESLint experience and people will be fine.\n> I would maybe trade some of the justification text from focusing on consistency to also include some tangible rationale:\nTotally a great idea. I'll add some of this stuff.\n- [ ] <a href='#crh-comment-Pull 5aa3aa2f98456211dd9aa6b5fa1c43814244877f content/code-style.md 59'></a> <img src='http://www.codereviewhub.com/site/github-remaining.png' height=16 width=60>&nbsp;<b><a href='https://github.com/meteor/guide/pull/153#discussion_r47209298'>File: content/code-style.md:L1-173</a></b>\n- <a href='https://github.com/tmeasday'><img border=0 src='https://avatars.githubusercontent.com/u/132554?v=3' height=16 width=16'></a> I think maybe an extra sentence explaining what this means in fact (\"the package takes an input file in ES2015 syntax, which includes contructs that are not supported by all modern browsers, such as arrow functions `() => {}`, and compiles them into ES5 compliant code that will run without a hitch. Thanks to source maps, you can debug the original source easily\" or so)\n\n\n<a href='https://www.codereviewhub.com/meteor/guide/pull/153?mark_as_completed=1'><img src='http://www.codereviewhub.com/site/github-mark-as-completed.png' height=26></a>&nbsp;<a href='https://www.codereviewhub.com/meteor/guide/pull/153?approve=1'><img src='http://www.codereviewhub.com/site/github-approve.png' height=26></a>&nbsp;<a href='https://github.com/meteor/guide/pull/153'><img src='http://www.codereviewhub.com/site/github-refresh.png' height=26></a>\n<a href='#crh-end'></a>","created_at":"2015-12-09T23:22:35Z","updated_at":"2015-12-10T10:23:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2d02b2b851fedb94c7cdae16125798d02a95b817","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/meteor/guide/pulls/153/commits","review_comments_url":"https://api.github.com/repos/meteor/guide/pulls/153/comments","review_comment_url":"https://api.github.com/repos/meteor/guide/pulls/comments{/number}","comments_url":"https://api.github.com/repos/meteor/guide/issues/153/comments","statuses_url":"https://api.github.com/repos/meteor/guide/statuses/5aa3aa2f98456211dd9aa6b5fa1c43814244877f","head":{"label":"meteor:code-style-content","ref":"code-style-content","sha":"5aa3aa2f98456211dd9aa6b5fa1c43814244877f","user":{"login":"meteor","id":789528,"avatar_url":"https://avatars.githubusercontent.com/u/789528?v=3","gravatar_id":"","url":"https://api.github.com/users/meteor","html_url":"https://github.com/meteor","followers_url":"https://api.github.com/users/meteor/followers","following_url":"https://api.github.com/users/meteor/following{/other_user}","gists_url":"https://api.github.com/users/meteor/gists{/gist_id}","starred_url":"https://api.github.com/users/meteor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meteor/subscriptions","organizations_url":"https://api.github.com/users/meteor/orgs","repos_url":"https://api.github.com/users/meteor/repos","events_url":"https://api.github.com/users/meteor/events{/privacy}","received_events_url":"https://api.github.com/users/meteor/received_events","type":"Organization","site_admin":false},"repo":{"id":43717321,"name":"guide","full_name":"meteor/guide","owner":{"login":"meteor","id":789528,"avatar_url":"https://avatars.githubusercontent.com/u/789528?v=3","gravatar_id":"","url":"https://api.github.com/users/meteor","html_url":"https://github.com/meteor","followers_url":"https://api.github.com/users/meteor/followers","following_url":"https://api.github.com/users/meteor/following{/other_user}","gists_url":"https://api.github.com/users/meteor/gists{/gist_id}","starred_url":"https://api.github.com/users/meteor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meteor/subscriptions","organizations_url":"https://api.github.com/users/meteor/orgs","repos_url":"https://api.github.com/users/meteor/repos","events_url":"https://api.github.com/users/meteor/events{/privacy}","received_events_url":"https://api.github.com/users/meteor/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/meteor/guide","description":"How do I use Meteor? (Work in progress)","fork":false,"url":"https://api.github.com/repos/meteor/guide","forks_url":"https://api.github.com/repos/meteor/guide/forks","keys_url":"https://api.github.com/repos/meteor/guide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/meteor/guide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/meteor/guide/teams","hooks_url":"https://api.github.com/repos/meteor/guide/hooks","issue_events_url":"https://api.github.com/repos/meteor/guide/issues/events{/number}","events_url":"https://api.github.com/repos/meteor/guide/events","assignees_url":"https://api.github.com/repos/meteor/guide/assignees{/user}","branches_url":"https://api.github.com/repos/meteor/guide/branches{/branch}","tags_url":"https://api.github.com/repos/meteor/guide/tags","blobs_url":"https://api.github.com/repos/meteor/guide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/meteor/guide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/meteor/guide/git/refs{/sha}","trees_url":"https://api.github.com/repos/meteor/guide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/meteor/guide/statuses/{sha}","languages_url":"https://api.github.com/repos/meteor/guide/languages","stargazers_url":"https://api.github.com/repos/meteor/guide/stargazers","contributors_url":"https://api.github.com/repos/meteor/guide/contributors","subscribers_url":"https://api.github.com/repos/meteor/guide/subscribers","subscription_url":"https://api.github.com/repos/meteor/guide/subscription","commits_url":"https://api.github.com/repos/meteor/guide/commits{/sha}","git_commits_url":"https://api.github.com/repos/meteor/guide/git/commits{/sha}","comments_url":"https://api.github.com/repos/meteor/guide/comments{/number}","issue_comment_url":"https://api.github.com/repos/meteor/guide/issues/comments{/number}","contents_url":"https://api.github.com/repos/meteor/guide/contents/{+path}","compare_url":"https://api.github.com/repos/meteor/guide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/meteor/guide/merges","archive_url":"https://api.github.com/repos/meteor/guide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/meteor/guide/downloads","issues_url":"https://api.github.com/repos/meteor/guide/issues{/number}","pulls_url":"https://api.github.com/repos/meteor/guide/pulls{/number}","milestones_url":"https://api.github.com/repos/meteor/guide/milestones{/number}","notifications_url":"https://api.github.com/repos/meteor/guide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/meteor/guide/labels{/name}","releases_url":"https://api.github.com/repos/meteor/guide/releases{/id}","created_at":"2015-10-05T22:26:02Z","updated_at":"2015-12-10T01:44:04Z","pushed_at":"2015-12-10T05:10:39Z","git_url":"git://github.com/meteor/guide.git","ssh_url":"git@github.com:meteor/guide.git","clone_url":"https://github.com/meteor/guide.git","svn_url":"https://github.com/meteor/guide","homepage":"http://guide.meteor.com/","size":3970,"stargazers_count":412,"watchers_count":412,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"open_issues_count":81,"forks":30,"open_issues":81,"watchers":412,"default_branch":"master"}},"base":{"label":"meteor:master","ref":"master","sha":"1de3c5f4220fd61bf8778994de02fc7cecd7a3f9","user":{"login":"meteor","id":789528,"avatar_url":"https://avatars.githubusercontent.com/u/789528?v=3","gravatar_id":"","url":"https://api.github.com/users/meteor","html_url":"https://github.com/meteor","followers_url":"https://api.github.com/users/meteor/followers","following_url":"https://api.github.com/users/meteor/following{/other_user}","gists_url":"https://api.github.com/users/meteor/gists{/gist_id}","starred_url":"https://api.github.com/users/meteor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meteor/subscriptions","organizations_url":"https://api.github.com/users/meteor/orgs","repos_url":"https://api.github.com/users/meteor/repos","events_url":"https://api.github.com/users/meteor/events{/privacy}","received_events_url":"https://api.github.com/users/meteor/received_events","type":"Organization","site_admin":false},"repo":{"id":43717321,"name":"guide","full_name":"meteor/guide","owner":{"login":"meteor","id":789528,"avatar_url":"https://avatars.githubusercontent.com/u/789528?v=3","gravatar_id":"","url":"https://api.github.com/users/meteor","html_url":"https://github.com/meteor","followers_url":"https://api.github.com/users/meteor/followers","following_url":"https://api.github.com/users/meteor/following{/other_user}","gists_url":"https://api.github.com/users/meteor/gists{/gist_id}","starred_url":"https://api.github.com/users/meteor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meteor/subscriptions","organizations_url":"https://api.github.com/users/meteor/orgs","repos_url":"https://api.github.com/users/meteor/repos","events_url":"https://api.github.com/users/meteor/events{/privacy}","received_events_url":"https://api.github.com/users/meteor/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/meteor/guide","description":"How do I use Meteor? (Work in progress)","fork":false,"url":"https://api.github.com/repos/meteor/guide","forks_url":"https://api.github.com/repos/meteor/guide/forks","keys_url":"https://api.github.com/repos/meteor/guide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/meteor/guide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/meteor/guide/teams","hooks_url":"https://api.github.com/repos/meteor/guide/hooks","issue_events_url":"https://api.github.com/repos/meteor/guide/issues/events{/number}","events_url":"https://api.github.com/repos/meteor/guide/events","assignees_url":"https://api.github.com/repos/meteor/guide/assignees{/user}","branches_url":"https://api.github.com/repos/meteor/guide/branches{/branch}","tags_url":"https://api.github.com/repos/meteor/guide/tags","blobs_url":"https://api.github.com/repos/meteor/guide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/meteor/guide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/meteor/guide/git/refs{/sha}","trees_url":"https://api.github.com/repos/meteor/guide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/meteor/guide/statuses/{sha}","languages_url":"https://api.github.com/repos/meteor/guide/languages","stargazers_url":"https://api.github.com/repos/meteor/guide/stargazers","contributors_url":"https://api.github.com/repos/meteor/guide/contributors","subscribers_url":"https://api.github.com/repos/meteor/guide/subscribers","subscription_url":"https://api.github.com/repos/meteor/guide/subscription","commits_url":"https://api.github.com/repos/meteor/guide/commits{/sha}","git_commits_url":"https://api.github.com/repos/meteor/guide/git/commits{/sha}","comments_url":"https://api.github.com/repos/meteor/guide/comments{/number}","issue_comment_url":"https://api.github.com/repos/meteor/guide/issues/comments{/number}","contents_url":"https://api.github.com/repos/meteor/guide/contents/{+path}","compare_url":"https://api.github.com/repos/meteor/guide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/meteor/guide/merges","archive_url":"https://api.github.com/repos/meteor/guide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/meteor/guide/downloads","issues_url":"https://api.github.com/repos/meteor/guide/issues{/number}","pulls_url":"https://api.github.com/repos/meteor/guide/pulls{/number}","milestones_url":"https://api.github.com/repos/meteor/guide/milestones{/number}","notifications_url":"https://api.github.com/repos/meteor/guide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/meteor/guide/labels{/name}","releases_url":"https://api.github.com/repos/meteor/guide/releases{/id}","created_at":"2015-10-05T22:26:02Z","updated_at":"2015-12-10T01:44:04Z","pushed_at":"2015-12-10T05:10:39Z","git_url":"git://github.com/meteor/guide.git","ssh_url":"git@github.com:meteor/guide.git","clone_url":"https://github.com/meteor/guide.git","svn_url":"https://github.com/meteor/guide","homepage":"http://guide.meteor.com/","size":3970,"stargazers_count":412,"watchers_count":412,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"open_issues_count":81,"forks":30,"open_issues":81,"watchers":412,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/meteor/guide/pulls/153"},"html":{"href":"https://github.com/meteor/guide/pull/153"},"issue":{"href":"https://api.github.com/repos/meteor/guide/issues/153"},"comments":{"href":"https://api.github.com/repos/meteor/guide/issues/153/comments"},"review_comments":{"href":"https://api.github.com/repos/meteor/guide/pulls/153/comments"},"review_comment":{"href":"https://api.github.com/repos/meteor/guide/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/meteor/guide/pulls/153/commits"},"statuses":{"href":"https://api.github.com/repos/meteor/guide/statuses/5aa3aa2f98456211dd9aa6b5fa1c43814244877f"}}}}