{"action":"created","issue":{"url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/issues/4553","labels_url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/issues/4553/labels{/name}","comments_url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/issues/4553/comments","events_url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/issues/4553/events","html_url":"https://github.com/ets-berkeley-edu/calcentral/pull/4553","id":118130333,"number":4553,"title":"CLC-6031 Protect merged models against provider-specific errors","user":{"login":"paulkerschen","id":2413467,"avatar_url":"https://avatars.githubusercontent.com/u/2413467?v=3","gravatar_id":"","url":"https://api.github.com/users/paulkerschen","html_url":"https://github.com/paulkerschen","followers_url":"https://api.github.com/users/paulkerschen/followers","following_url":"https://api.github.com/users/paulkerschen/following{/other_user}","gists_url":"https://api.github.com/users/paulkerschen/gists{/gist_id}","starred_url":"https://api.github.com/users/paulkerschen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paulkerschen/subscriptions","organizations_url":"https://api.github.com/users/paulkerschen/orgs","repos_url":"https://api.github.com/users/paulkerschen/repos","events_url":"https://api.github.com/users/paulkerschen/events{/privacy}","received_events_url":"https://api.github.com/users/paulkerschen/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-11-20T21:32:54Z","updated_at":"2015-11-20T22:49:59Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/pulls/4553","html_url":"https://github.com/ets-berkeley-edu/calcentral/pull/4553","diff_url":"https://github.com/ets-berkeley-edu/calcentral/pull/4553.diff","patch_url":"https://github.com/ets-berkeley-edu/calcentral/pull/4553.patch"},"body":"https://jira.ets.berkeley.edu/jira/browse/CLC-6031 briefly explains why this turned into such a big PR. As it turned out, all six of our big `My\\w+::Merged` models required protection similar to that intended for `MyAcademics::Merged`. Once that was set up, there seemed to be no reason not to standardize a bit further.\r\n\r\nThe new `MergedModel` module allows classes to wrap their merging logic inside an error handler, just as our proxies wrap their network calls. Errors are logged and the feed does its best to keep building, with the names of any misbehaving providers added to an `errors` array. At present nothing is done with the values in that array, but they might come in handy down the road for front-end messaging, targeted cache expiration, etc.\r\n\r\nBamboo at work: https://bamboo.ets.berkeley.edu/bamboo/browse/CPB-CPT223-1/"},"comment":{"url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/issues/comments/158548698","html_url":"https://github.com/ets-berkeley-edu/calcentral/pull/4553#issuecomment-158548698","issue_url":"https://api.github.com/repos/ets-berkeley-edu/calcentral/issues/4553","id":158548698,"user":{"login":"raydavis","id":98528,"avatar_url":"https://avatars.githubusercontent.com/u/98528?v=3","gravatar_id":"","url":"https://api.github.com/users/raydavis","html_url":"https://github.com/raydavis","followers_url":"https://api.github.com/users/raydavis/followers","following_url":"https://api.github.com/users/raydavis/following{/other_user}","gists_url":"https://api.github.com/users/raydavis/gists{/gist_id}","starred_url":"https://api.github.com/users/raydavis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raydavis/subscriptions","organizations_url":"https://api.github.com/users/raydavis/orgs","repos_url":"https://api.github.com/users/raydavis/repos","events_url":"https://api.github.com/users/raydavis/events{/privacy}","received_events_url":"https://api.github.com/users/raydavis/received_events","type":"User","site_admin":false},"created_at":"2015-11-20T22:49:59Z","updated_at":"2015-11-20T22:49:59Z","body":"Needs more refactor."}}