{"action":"closed","issue":{"url":"https://api.github.com/repos/dojo/core/issues/172","repository_url":"https://api.github.com/repos/dojo/core","labels_url":"https://api.github.com/repos/dojo/core/issues/172/labels{/name}","comments_url":"https://api.github.com/repos/dojo/core/issues/172/comments","events_url":"https://api.github.com/repos/dojo/core/issues/172/events","html_url":"https://github.com/dojo/core/issues/172","id":161389457,"number":172,"title":"Unregistered has() features fail silently...","user":{"login":"kitsonk","id":1282577,"avatar_url":"https://avatars.githubusercontent.com/u/1282577?v=3","gravatar_id":"","url":"https://api.github.com/users/kitsonk","html_url":"https://github.com/kitsonk","followers_url":"https://api.github.com/users/kitsonk/followers","following_url":"https://api.github.com/users/kitsonk/following{/other_user}","gists_url":"https://api.github.com/users/kitsonk/gists{/gist_id}","starred_url":"https://api.github.com/users/kitsonk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kitsonk/subscriptions","organizations_url":"https://api.github.com/users/kitsonk/orgs","repos_url":"https://api.github.com/users/kitsonk/repos","events_url":"https://api.github.com/users/kitsonk/events{/privacy}","received_events_url":"https://api.github.com/users/kitsonk/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dojo/core/labels/bug","name":"bug","color":"fc2929"},{"url":"https://api.github.com/repos/dojo/core/labels/discussion","name":"discussion","color":"d4c5f9"}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/dojo/core/milestones/11","html_url":"https://github.com/dojo/core/milestones/2016.08","labels_url":"https://api.github.com/repos/dojo/core/milestones/11/labels","id":1692736,"number":11,"title":"2016.08","description":"","creator":{"login":"kitsonk","id":1282577,"avatar_url":"https://avatars.githubusercontent.com/u/1282577?v=3","gravatar_id":"","url":"https://api.github.com/users/kitsonk","html_url":"https://github.com/kitsonk","followers_url":"https://api.github.com/users/kitsonk/followers","following_url":"https://api.github.com/users/kitsonk/following{/other_user}","gists_url":"https://api.github.com/users/kitsonk/gists{/gist_id}","starred_url":"https://api.github.com/users/kitsonk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kitsonk/subscriptions","organizations_url":"https://api.github.com/users/kitsonk/orgs","repos_url":"https://api.github.com/users/kitsonk/repos","events_url":"https://api.github.com/users/kitsonk/events{/privacy}","received_events_url":"https://api.github.com/users/kitsonk/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":15,"state":"open","created_at":"2016-04-08T09:46:27Z","updated_at":"2016-10-04T20:16:09Z","due_on":"2016-08-30T23:00:00Z","closed_at":null},"comments":4,"created_at":"2016-06-21T09:32:37Z","updated_at":"2016-10-04T20:16:10Z","closed_at":"2016-10-04T20:16:09Z","body":"Three challenges with the `has()` API:\r\n\r\n* If a feature is not registered, it just fails silently returning `undefined`.  This leads to potential logic errors, assuming a feature is being properly detected when in fact it isn't.  We should throw.\r\n* Features are case sensitive, and while by convention, we keep labels all lower case, consumers of the API may unintentionally make mistakes... if we coerced the features to lowercase, it would avoid mistakes and errors.\r\n* When `add` is passed with `override = false` it simply returns a `false` if the `add` fails because it is already present.  The way we currently consume the API, we don't handle those failures and it is likely that those downstream using the API will do the same.  We should consider throwing when the override fails, as it is clearly again something someone should be explicit about, instead of unintentional behaviour.\r\n"}}
{"actor":{"display_login":"kitsonk"}}