{"action":"created","comment":{"url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/comments/76892116","id":76892116,"diff_hunk":"@@ -50,168 +51,195 @@ public class ADDR_Contact_TDTM extends TDTM_Runnable {\n     * @return dmlWrapper.  \n     ********************************************************************************************************/\n     public override DmlWrapper run(List<SObject> listNew, List<SObject> listOld, \n-        TDTM_Runnable.Action triggerAction, Schema.DescribeSObjectResult objResult) {\n+    TDTM_Runnable.Action triggerAction, Schema.DescribeSObjectResult objResult) {\n             \n-        DmlWrapper dmlWrapper = new DmlWrapper();        \n-        list<Contact> listConAddrSet = new list<Contact>(); \n-        list<Contact> listConCreateAddr = new list<Contact>();\n-        map<Id, boolean> mapAddrIdIsOverride = new map<Id, boolean>();\n-        list<Contact> listConAddrReset = new list<Contact>();\n-        Map<Id,Account> mapAccountIdAccount = null;\n-        \n-        // bail out if address mgmt turned off.\n-        if (String.isBlank(UTIL_CustomSettingsFacade.getSettings().Accounts_Addresses_Enabled__c))\n-            return dmlWrapper;\n-                \n-        // Rules:\n-        // inserting new contact - make their address a new default address, unless they say it is an override\n-        // updating an existing contact - make their address a new default address, unless they say it is an override\n-        \n-        boolean isBefore = (triggerAction == TDTM_Runnable.Action.BeforeUpdate || triggerAction == TDTM_Runnable.Action.BeforeInsert);\n-        if (isBefore) { \n-            // need to query account fields we need to look at\n-            Set<Id> setAccountId = new Set<Id>();\n-            for (SObject so : listNew) {\n-                Contact con = (Contact)so;\n-                if (con.AccountId != null)\n-                    setAccountId.add(con.AccountId);\n-            }\n-            mapAccountIdAccount = new Map<Id,Account>([select Id, RecordTypeId from Account where Id IN :setAccountId]);\n-        }        \n+        DmlWrapper dmlWrapper = new DmlWrapper();  \n+        List<Contact> listcontactCreateAddr = new List<Contact>();      \n+        List<Contact> listContactsAddrInfoCleared = new List<Contact>();\n        \n-        integer i = -1;        \n+        Integer i = -1;        \n         for (SObject so : listNew) {\n-            i++;  \n-            Contact con = (Contact)so;\n-\n-            // we only support address management with HH Accounts being used\n-            if (con.AccountId == null)\n-                continue;               \n-\n-            // BEFORE INSERT\n-            if (triggerAction == TDTM_Runnable.Action.BeforeInsert) {\n-                if (con.Current_Address__c != null) {\n-                    // remember which contacts will need their address set\n-                    listConAddrSet.add(con);\n-                    if (con.is_Address_Override__c)\n-                        // track which address's need their dates updated\n-                        mapAddrIdIsOverride.put(con.Current_Address__c, true);\n-                } else if (isContactAddressEmpty(con)) {\n-                    // if the contact has no address specified, pick up the hh default.\n-                    listConAddrReset.add(con);                  \n-                }\n-            }\n+            Contact contact = (Contact)so;\n+            i++;\n             \n             // BEFORE UPDATE\n             if (triggerAction == TDTM_Runnable.Action.BeforeUpdate) {\n-                // there can be four different types of changes we need to consider\n-                // A. changes to isAddressOverride\n-                // B. changes to CurrentAddress\n-                // C. changes to MailingAddress fields\n-                // D. changes to Account (ie switching accounts)\n-                //\n-                // that leads to 16 permutations! \n-                // (it's actually more permutations, since we need to take into account what\n-                // the change in isAddressOverride or CurrentAddress is).\n-                //\n-                // A,B,C       if (CurrentAddress) refill to it, else update/new address object     \n-                // A,!B,!C     if !isAddrOverride, refill contact from Default Address\n-                // A,!B,C      if isAddrOverride, update/new addr object and refresh CurrentAddress, else update/new address object\n-                // A,B,!C      if (CurrentAddress) refill to it, else refill from Default Address\n-                // !A,B,C      if (CurrentAddress) refill to it, else update/new address object\n-                // !A,!B,C     update/new address object\n-                // !A,B,!C     if (CurrentAddress) refill to it, else refill from Default Address\n-                // !A,!B,!C    nothing!\n-                // *,*,*,D     if no override, refill from Default Address, else update/new address object \n-                //\n-                // simplifying this to some precedence rules:\n-                //     - if Account changes && no override && no MailingAddress field changes, refill from Default Address\n-                //     - if CurrentAddress changes to a new non-null value, refill to it.\n-                //     - if isAddressOverride changes to false, refill from Default Address\n-                //     - if MailingAddress field changes, update/new address object\n-                \n-                Contact conOld = (Contact)listOld[i];\n-                \n-                // new highest priority! if Account changes... \n-                if (conOld != null && con.AccountId != conOld.AccountId) {\n-                    // if no override, refill from the Default Address\n-                    if (!con.is_Address_Override__c && !isContactAddressChanged(con, conOld)) {\n-                        listConAddrReset.add(con);\n-                    } else { // create a new address on the account\n-                        listConCreateAddr.add(con);    \n-                    }\n-                } else {    \n-\t                // highest priority. if they are changing to a new Current Address, refill from it.\n-\t                if (con.Current_Address__c != conOld.Current_Address__c && con.Current_Address__c != null) {\n-\t                    listConAddrSet.add(con);\n-\t                    if (con.is_Address_Override__c)\n-\t                        // track which address's need their dates updated\n-\t                        mapAddrIdIsOverride.put(con.Current_Address__c, true);                    \n-\t                }\n-\t                \n-\t                // second priority.  if they are clearing isAddressOverride, refill from the Default Address\n-\t                if (con.is_Address_Override__c != conOld.is_Address_Override__c && !con.is_Address_Override__c) {\n-\t                    listConAddrReset.add(con);\n-\t                    if (conOld.Current_Address__c != null)\n-\t                        // track which address's need their dates updated\n-\t                        mapAddrIdIsOverride.put(conOld.Current_Address__c, false);\n-\t                }\n-\t                \n-\t                // third priority.  if MailingAddress fields changed, update the existing address object or create a new one.\n-\t                // this is handled in the next block, since we do it for both new contacts and updated contacts.\n-                }                             \n+                manageHouseholdAddrs(contact, i, listOld, dmlWrapper);\n+            }\n+            \n+            // AFTER INSERT\n+            if (triggerAction == TDTM_Runnable.Action.AfterInsert) {\n+                // for new Contacts that are using address management, create the address object.\n+                if (UTIL_CustomSettingsFacade.getSettings().Contacts_Addresses_Enabled__c == true) {\n+                    if (!ADDR_Addresses_UTIL.isContactAddressEmpty(contact))\n+                        listcontactCreateAddr.add(contact);\n+                }\n             }\n     \n-            // BEFORE UPDATE & AFTER UPDATE & BEFORE INSERT && AFTER INSERT\n-            // our functionality for dealing with contact address changes requires some trickery!\n-            // if the contact doesn't have an address override, we create (or match) a default address,\n-            // which requires us to do the work in the AfterUpdate (or else we can't propagate the default address).\n-            // but if the contact has an address override, we are supposed to create (or match) a non default address override.\n-            // in order to update the contact with the new address override's Id, we have to do it in the BeforeUpdate.\n-            if (triggerAction == TDTM_Runnable.Action.BeforeUpdate ||\n-               triggerAction == TDTM_Runnable.Action.BeforeInsert ||  \n-               triggerAction == TDTM_Runnable.Action.AfterInsert || \n-               triggerAction == TDTM_Runnable.Action.AfterUpdate\n-               ) {\n-                // note that we detect whether the address change is coming from the address trigger,\n-                // in which case we don't want to create a new address.\n-                if (ADDR_Addresses_TDTM.hasRunAddrTrigger) {\n-                    //UTIL_Debug.debug('DJH**** stop Addr Trigger recursion in ADDR_Contact_TDTM');\n-                    continue;\n+            // AFTER UPDATE\n+            if (triggerAction == TDTM_Runnable.Action.AfterUpdate) {  \n+                // if address change is coming from the address trigger we don't want to create a new address   \n+                if (!ADDR_Addresses_TDTM.hasRunAddrTrigger) {\n+                    if (UTIL_CustomSettingsFacade.getSettings().Contacts_Addresses_Enabled__c == true) {\n+                        Contact contactOld = (Contact)listOld[i];\n+                        // if the address info has been removed\n+                        if(!ADDR_Addresses_UTIL.iscontactAddressEmpty(contactOld) && ADDR_Addresses_UTIL.iscontactAddressEmpty(contact))\n+                            listContactsAddrInfoCleared.add(contact);\n+                        // if the address changed, remember the Contact we want to add a new address for    \n+                        else if (ADDR_Addresses_UTIL.isContactAddressChanged(contact, contactOld)) \n+                            listcontactCreateAddr.add(contact);\n+                    }\n                 }\n-\n-                // if the address changed, remember the contact we want to add a new address for    \n-                Contact conOld = (listOld != null ? (Contact)listOld[i] : null);\n-                if (isContactAddressChanged(con, conOld)) \n-                    listConCreateAddr.add(con);\n-            }             \n+            }                \n         }\n+\n+        // create any new Address objects\n+        if (listcontactCreateAddr.size() > 0)\n+            createAddrFromContact(listContactCreateAddr, dmlWrapper);\n         \n-        // set the mailing address for contacts who specify an address lookup or override\n-        if (listConAddrSet.size() > 0) {\n-            setConAddrFromLookup(listConAddrSet);\n-            // to avoid pushing these address changes to the HH.\n-            ADDR_Addresses_TDTM.hasRunAddrTrigger = true;\n-        }\n+        // handle Contacts with address info removed\n+        if(listContactsAddrInfoCleared.size() > 0)\n+            addrInfoDeleted(listContactsAddrInfoCleared, dmlWrapper);\n         \n-        // reset the mailing address for contacts who no longer have an address override\n-        if (listConAddrReset.size() > 0) {\n-            resetConAddr(listConAddrReset);\n-            // to avoid pushing these address changes to the HH.\n-            ADDR_Addresses_TDTM.hasRunAddrTrigger = true;\n-        }\n+        hasRunAddrTrigger = true;\n+                            \n+        return dmlWrapper;\n+    }\n+    \n+    private DmlWrapper manageHouseholdAddrs(Contact con, Integer i, List<SObject> listOld, DmlWrapper dmlWrapper) {\n+        \n+        list<Contact> listConAddrSet = new list<Contact>(); \n+        list<Contact> listConAddrCreate = new list<Contact>();\n+        list<Contact> listConAddrReset = new list<Contact>();\n+        \n+        map<Id, boolean> mapAddrIdIsOverride = new map<Id, boolean>();\n         \n-        // update the Latest date fields on any address overrides\n-        if (mapAddrIdIsOverride.size() > 0) \n-            updateAddrIsOverride(mapAddrIdIsOverride, dmlWrapper);\n+        // there can be four different types of changes we need to consider\n+        // A. changes to isAddressOverride\n+        // B. changes to CurrentAddress\n+        // C. changes to MailingAddress fields\n+        // D. changes to Account (ie switching accounts)\n+        //\n+        // that leads to 16 permutations! \n+        // (it's actually more permutations, since we need to take into account what\n+        // the change in isAddressOverride or CurrentAddress is).\n+        //\n+        // A,B,C       if (CurrentAddress) refill to it, else update/new address object     \n+        // A,!B,!C     if !isAddrOverride, refill contact from Default Address\n+        // A,!B,C      if isAddrOverride, update/new addr object and refresh CurrentAddress, else update/new address object\n+        // A,B,!C      if (CurrentAddress) refill to it, else refill from Default Address\n+        // !A,B,C      if (CurrentAddress) refill to it, else update/new address object\n+        // !A,!B,C     update/new address object\n+        // !A,B,!C     if (CurrentAddress) refill to it, else refill from Default Address\n+        // !A,!B,!C    nothing!\n+        // *,*,*,D     if no override, refill from Default Address, else update/new address object \n+        //\n+        // simplifying this to some precedence rules:\n+        //     - if Account changes && no override && no MailingAddress field changes, refill from Default Address\n+        //     - if CurrentAddress changes to a new non-null value, refill to it.\n+        //     - if isAddressOverride changes to false, refill from Default Address\n+        //     - if MailingAddress field changes, update/new address object\n+        \n+        Contact conOld = (Contact)listOld[i];\n+        \n+        // new highest priority! if Account changes... \n+        if (conOld != null && con.AccountId != conOld.AccountId) {\n+            // if no override, refill from the Default Address\n+            if (!con.is_Address_Override__c && !ADDR_Addresses_UTIL.isContactAddressChanged(con, conOld)) {\n+                listConAddrReset.add(con);\n+            } else { // create a new address on the account\n+                listConAddrCreate.add(con);    \n+            }\n+        } else {    \n+            // highest priority. if they are changing to a new Current Address, refill from it.\n+            if (con.Current_Address__c != conOld.Current_Address__c && con.Current_Address__c != null) {\n+                listConAddrSet.add(con);\n+                if (con.is_Address_Override__c)\n+                    // track which address's need their dates updated\n+                    mapAddrIdIsOverride.put(con.Current_Address__c, true);                    \n+            }\n             \n-        // create any new Default Address objects\n-        if (listConCreateAddr.size() > 0)\n-            createAddrFromCon(listConCreateAddr, dmlWrapper, triggerAction);\n+            // second priority.  if they are clearing isAddressOverride, refill from the Default Address\n+            if (con.is_Address_Override__c != conOld.is_Address_Override__c && !con.is_Address_Override__c) {\n+                listConAddrReset.add(con);\n+                if (conOld.Current_Address__c != null)\n+                    // track which address's need their dates updated\n+                    mapAddrIdIsOverride.put(conOld.Current_Address__c, false);\n+            }\n+            \n+            // third priority.  if MailingAddress fields changed, update the existing address object or create a new one.\n+            // this is handled in the next block, since we do it for both new contacts and updated contacts.\n             \n-        return dmlWrapper;    \n+            // reset the mailing address for contacts who no longer have an address override\n+\t        if (listConAddrReset.size() > 0) {\n+\t            resetConAddr(listConAddrReset, dmlWrapper);\n+\t            // to avoid pushing these address changes to the HH.\n+\t            ADDR_Addresses_TDTM.hasRunAddrTrigger = true;\n+\t        }\n+\t        \n+\t        // set the mailing address for contacts who specify an address lookup or override\n+\t        if (listConAddrSet.size() > 0) {\n+\t            setConAddrFromLookup(listConAddrSet);\n+\t            // to avoid pushing these address changes to the HH.\n+\t            ADDR_Addresses_TDTM.hasRunAddrTrigger = true;\n+\t        }\n+    \n+\t        // update the Latest date fields on any address overrides\n+\t        if (mapAddrIdIsOverride.size() > 0) \n+\t            ADDR_Addresses_UTIL.updateAddrIsOverride(mapAddrIdIsOverride, dmlWrapper);\n+\t            \n+\t        // create any new Default Address objects\n+\t        if (listConAddrCreate.size() > 0)\n+\t            createAddrFromContact(listConAddrCreate, dmlWrapper);                              \n+        }\n+        return dmlWrapper;\n     }\n-\n+    \n+    /*******************************************************************************************************\n+    * @description for each Contact, create a new default address and add it to dmlWrapper\n+    * @param Listcontact a List of Contacts\n+    * @param dmlWrapper to hold the Addresses that need creating\n+    * @return void\n+    ********************************************************************************************************/\n+    private void createAddrFromContact(List<Contact> listContact, DmlWrapper dmlWrapper) {\n+        List<Address__c> listAddr = new List<Address__c>();\n+        for (Contact contact : listContact) {\n+            Address__c addr = new Address__c();\n+            addr.Parent_Contact__c = contact.Id;\n+            addr.Default_Address__c = true;\n+            addr.Latest_Start_Date__c = system.today();\n+            addr.Latest_End_Date__c = null;\n+            ADDR_Addresses_UTIL.copyAddressStdSObjAddr(contact, 'Mailing', addr, null);            \n+            ListAddr.add(addr);\n+            UTIL_Debug.debug('****New address record: ' + JSON.serializePretty(addr));\n+        }\n+        //since coming from an Contact address, there is no Address Type, so exclude it from the match testing.\n+        List<Address__c> newAddrs = ADDR_Addresses_UTIL.createNonDuplicateAddresses(ListAddr, dmlWrapper, false);\n+        \n+        //Match each Contact with each new address\n+        List<ID> contactIDsToUpdate = new List<ID>();\n+        Map<ID, Address__c> parentcontactIdToAddrMap = new Map<ID, Address__c>();\n+        for(Address__c addr : newAddrs) {\n+            if(addr.Parent_Contact__c != null) {\n+               contactIDsToUpdate.add(addr.Parent_Contact__c);\n+               parentcontactIdToAddrMap.put(addr.Parent_Contact__c, addr);  \n+            }\n+        }\n+        \n+        //We need to re-query before we are in the \"after\" part of the trigger. We cannot change it to before because\n+        //we need the Contact ID to have a value when populating the addr.Parent_Contact__c field above.\n+        List<Contact> parentContacts = [select is_Address_Override__c, Current_Address__c from Contact where ID in :contactIDsToUpdate];\n+        List<Contact> ContactsToUpdate = new List<Contact>();","path":"src/classes/ADDR_Contact_TDTM.cls","position":353,"original_position":353,"commit_id":"02c93308a503a044001c9cdbca054998f9ae4c84","original_commit_id":"02c93308a503a044001c9cdbca054998f9ae4c84","user":{"login":"eroispaziali","id":1273282,"avatar_url":"https://avatars.githubusercontent.com/u/1273282?v=3","gravatar_id":"","url":"https://api.github.com/users/eroispaziali","html_url":"https://github.com/eroispaziali","followers_url":"https://api.github.com/users/eroispaziali/followers","following_url":"https://api.github.com/users/eroispaziali/following{/other_user}","gists_url":"https://api.github.com/users/eroispaziali/gists{/gist_id}","starred_url":"https://api.github.com/users/eroispaziali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eroispaziali/subscriptions","organizations_url":"https://api.github.com/users/eroispaziali/orgs","repos_url":"https://api.github.com/users/eroispaziali/repos","events_url":"https://api.github.com/users/eroispaziali/events{/privacy}","received_events_url":"https://api.github.com/users/eroispaziali/received_events","type":"User","site_admin":false},"body":"Variables should use the `lowerCamelCase` naming convention. Please rename accordingly.","created_at":"2016-08-30T22:30:40Z","updated_at":"2016-08-30T22:30:40Z","html_url":"https://github.com/eroispaziali/HEDAP/pull/2#discussion_r76892116","pull_request_url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/comments/76892116"},"html":{"href":"https://github.com/eroispaziali/HEDAP/pull/2#discussion_r76892116"},"pull_request":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2","id":76068551,"html_url":"https://github.com/eroispaziali/HEDAP/pull/2","diff_url":"https://github.com/eroispaziali/HEDAP/pull/2.diff","patch_url":"https://github.com/eroispaziali/HEDAP/pull/2.patch","issue_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues/2","number":2,"state":"open","locked":false,"title":"Feature/245 contact addresses","user":{"login":"eroispaziali","id":1273282,"avatar_url":"https://avatars.githubusercontent.com/u/1273282?v=3","gravatar_id":"","url":"https://api.github.com/users/eroispaziali","html_url":"https://github.com/eroispaziali","followers_url":"https://api.github.com/users/eroispaziali/followers","following_url":"https://api.github.com/users/eroispaziali/following{/other_user}","gists_url":"https://api.github.com/users/eroispaziali/gists{/gist_id}","starred_url":"https://api.github.com/users/eroispaziali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eroispaziali/subscriptions","organizations_url":"https://api.github.com/users/eroispaziali/orgs","repos_url":"https://api.github.com/users/eroispaziali/repos","events_url":"https://api.github.com/users/eroispaziali/events{/privacy}","received_events_url":"https://api.github.com/users/eroispaziali/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-07-02T16:14:15Z","updated_at":"2016-08-30T22:30:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"59f0c32def2d333e0e9fc9b2f0112f90e77326e4","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2/commits","review_comments_url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2/comments","review_comment_url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues/2/comments","statuses_url":"https://api.github.com/repos/eroispaziali/HEDAP/statuses/02c93308a503a044001c9cdbca054998f9ae4c84","head":{"label":"eroispaziali:feature/245-contact-addresses","ref":"feature/245-contact-addresses","sha":"02c93308a503a044001c9cdbca054998f9ae4c84","user":{"login":"eroispaziali","id":1273282,"avatar_url":"https://avatars.githubusercontent.com/u/1273282?v=3","gravatar_id":"","url":"https://api.github.com/users/eroispaziali","html_url":"https://github.com/eroispaziali","followers_url":"https://api.github.com/users/eroispaziali/followers","following_url":"https://api.github.com/users/eroispaziali/following{/other_user}","gists_url":"https://api.github.com/users/eroispaziali/gists{/gist_id}","starred_url":"https://api.github.com/users/eroispaziali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eroispaziali/subscriptions","organizations_url":"https://api.github.com/users/eroispaziali/orgs","repos_url":"https://api.github.com/users/eroispaziali/repos","events_url":"https://api.github.com/users/eroispaziali/events{/privacy}","received_events_url":"https://api.github.com/users/eroispaziali/received_events","type":"User","site_admin":false},"repo":{"id":62459018,"name":"HEDAP","full_name":"eroispaziali/HEDAP","owner":{"login":"eroispaziali","id":1273282,"avatar_url":"https://avatars.githubusercontent.com/u/1273282?v=3","gravatar_id":"","url":"https://api.github.com/users/eroispaziali","html_url":"https://github.com/eroispaziali","followers_url":"https://api.github.com/users/eroispaziali/followers","following_url":"https://api.github.com/users/eroispaziali/following{/other_user}","gists_url":"https://api.github.com/users/eroispaziali/gists{/gist_id}","starred_url":"https://api.github.com/users/eroispaziali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eroispaziali/subscriptions","organizations_url":"https://api.github.com/users/eroispaziali/orgs","repos_url":"https://api.github.com/users/eroispaziali/repos","events_url":"https://api.github.com/users/eroispaziali/events{/privacy}","received_events_url":"https://api.github.com/users/eroispaziali/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eroispaziali/HEDAP","description":"Higher Education Data Architecture Package","fork":true,"url":"https://api.github.com/repos/eroispaziali/HEDAP","forks_url":"https://api.github.com/repos/eroispaziali/HEDAP/forks","keys_url":"https://api.github.com/repos/eroispaziali/HEDAP/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eroispaziali/HEDAP/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eroispaziali/HEDAP/teams","hooks_url":"https://api.github.com/repos/eroispaziali/HEDAP/hooks","issue_events_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues/events{/number}","events_url":"https://api.github.com/repos/eroispaziali/HEDAP/events","assignees_url":"https://api.github.com/repos/eroispaziali/HEDAP/assignees{/user}","branches_url":"https://api.github.com/repos/eroispaziali/HEDAP/branches{/branch}","tags_url":"https://api.github.com/repos/eroispaziali/HEDAP/tags","blobs_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/refs{/sha}","trees_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eroispaziali/HEDAP/statuses/{sha}","languages_url":"https://api.github.com/repos/eroispaziali/HEDAP/languages","stargazers_url":"https://api.github.com/repos/eroispaziali/HEDAP/stargazers","contributors_url":"https://api.github.com/repos/eroispaziali/HEDAP/contributors","subscribers_url":"https://api.github.com/repos/eroispaziali/HEDAP/subscribers","subscription_url":"https://api.github.com/repos/eroispaziali/HEDAP/subscription","commits_url":"https://api.github.com/repos/eroispaziali/HEDAP/commits{/sha}","git_commits_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/commits{/sha}","comments_url":"https://api.github.com/repos/eroispaziali/HEDAP/comments{/number}","issue_comment_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues/comments{/number}","contents_url":"https://api.github.com/repos/eroispaziali/HEDAP/contents/{+path}","compare_url":"https://api.github.com/repos/eroispaziali/HEDAP/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eroispaziali/HEDAP/merges","archive_url":"https://api.github.com/repos/eroispaziali/HEDAP/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eroispaziali/HEDAP/downloads","issues_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues{/number}","pulls_url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls{/number}","milestones_url":"https://api.github.com/repos/eroispaziali/HEDAP/milestones{/number}","notifications_url":"https://api.github.com/repos/eroispaziali/HEDAP/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eroispaziali/HEDAP/labels{/name}","releases_url":"https://api.github.com/repos/eroispaziali/HEDAP/releases{/id}","deployments_url":"https://api.github.com/repos/eroispaziali/HEDAP/deployments","created_at":"2016-07-02T16:07:23Z","updated_at":"2016-07-02T16:07:25Z","pushed_at":"2016-07-02T16:14:16Z","git_url":"git://github.com/eroispaziali/HEDAP.git","ssh_url":"git@github.com:eroispaziali/HEDAP.git","clone_url":"https://github.com/eroispaziali/HEDAP.git","svn_url":"https://github.com/eroispaziali/HEDAP","homepage":"","size":13459,"stargazers_count":0,"watchers_count":0,"language":"Apex","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"eroispaziali:master","ref":"master","sha":"5e9b95eb2b8728819171cb0bc7852db3e957c321","user":{"login":"eroispaziali","id":1273282,"avatar_url":"https://avatars.githubusercontent.com/u/1273282?v=3","gravatar_id":"","url":"https://api.github.com/users/eroispaziali","html_url":"https://github.com/eroispaziali","followers_url":"https://api.github.com/users/eroispaziali/followers","following_url":"https://api.github.com/users/eroispaziali/following{/other_user}","gists_url":"https://api.github.com/users/eroispaziali/gists{/gist_id}","starred_url":"https://api.github.com/users/eroispaziali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eroispaziali/subscriptions","organizations_url":"https://api.github.com/users/eroispaziali/orgs","repos_url":"https://api.github.com/users/eroispaziali/repos","events_url":"https://api.github.com/users/eroispaziali/events{/privacy}","received_events_url":"https://api.github.com/users/eroispaziali/received_events","type":"User","site_admin":false},"repo":{"id":62459018,"name":"HEDAP","full_name":"eroispaziali/HEDAP","owner":{"login":"eroispaziali","id":1273282,"avatar_url":"https://avatars.githubusercontent.com/u/1273282?v=3","gravatar_id":"","url":"https://api.github.com/users/eroispaziali","html_url":"https://github.com/eroispaziali","followers_url":"https://api.github.com/users/eroispaziali/followers","following_url":"https://api.github.com/users/eroispaziali/following{/other_user}","gists_url":"https://api.github.com/users/eroispaziali/gists{/gist_id}","starred_url":"https://api.github.com/users/eroispaziali/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eroispaziali/subscriptions","organizations_url":"https://api.github.com/users/eroispaziali/orgs","repos_url":"https://api.github.com/users/eroispaziali/repos","events_url":"https://api.github.com/users/eroispaziali/events{/privacy}","received_events_url":"https://api.github.com/users/eroispaziali/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eroispaziali/HEDAP","description":"Higher Education Data Architecture Package","fork":true,"url":"https://api.github.com/repos/eroispaziali/HEDAP","forks_url":"https://api.github.com/repos/eroispaziali/HEDAP/forks","keys_url":"https://api.github.com/repos/eroispaziali/HEDAP/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eroispaziali/HEDAP/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eroispaziali/HEDAP/teams","hooks_url":"https://api.github.com/repos/eroispaziali/HEDAP/hooks","issue_events_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues/events{/number}","events_url":"https://api.github.com/repos/eroispaziali/HEDAP/events","assignees_url":"https://api.github.com/repos/eroispaziali/HEDAP/assignees{/user}","branches_url":"https://api.github.com/repos/eroispaziali/HEDAP/branches{/branch}","tags_url":"https://api.github.com/repos/eroispaziali/HEDAP/tags","blobs_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/refs{/sha}","trees_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eroispaziali/HEDAP/statuses/{sha}","languages_url":"https://api.github.com/repos/eroispaziali/HEDAP/languages","stargazers_url":"https://api.github.com/repos/eroispaziali/HEDAP/stargazers","contributors_url":"https://api.github.com/repos/eroispaziali/HEDAP/contributors","subscribers_url":"https://api.github.com/repos/eroispaziali/HEDAP/subscribers","subscription_url":"https://api.github.com/repos/eroispaziali/HEDAP/subscription","commits_url":"https://api.github.com/repos/eroispaziali/HEDAP/commits{/sha}","git_commits_url":"https://api.github.com/repos/eroispaziali/HEDAP/git/commits{/sha}","comments_url":"https://api.github.com/repos/eroispaziali/HEDAP/comments{/number}","issue_comment_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues/comments{/number}","contents_url":"https://api.github.com/repos/eroispaziali/HEDAP/contents/{+path}","compare_url":"https://api.github.com/repos/eroispaziali/HEDAP/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eroispaziali/HEDAP/merges","archive_url":"https://api.github.com/repos/eroispaziali/HEDAP/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eroispaziali/HEDAP/downloads","issues_url":"https://api.github.com/repos/eroispaziali/HEDAP/issues{/number}","pulls_url":"https://api.github.com/repos/eroispaziali/HEDAP/pulls{/number}","milestones_url":"https://api.github.com/repos/eroispaziali/HEDAP/milestones{/number}","notifications_url":"https://api.github.com/repos/eroispaziali/HEDAP/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eroispaziali/HEDAP/labels{/name}","releases_url":"https://api.github.com/repos/eroispaziali/HEDAP/releases{/id}","deployments_url":"https://api.github.com/repos/eroispaziali/HEDAP/deployments","created_at":"2016-07-02T16:07:23Z","updated_at":"2016-07-02T16:07:25Z","pushed_at":"2016-07-02T16:14:16Z","git_url":"git://github.com/eroispaziali/HEDAP.git","ssh_url":"git@github.com:eroispaziali/HEDAP.git","clone_url":"https://github.com/eroispaziali/HEDAP.git","svn_url":"https://github.com/eroispaziali/HEDAP","homepage":"","size":13459,"stargazers_count":0,"watchers_count":0,"language":"Apex","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2"},"html":{"href":"https://github.com/eroispaziali/HEDAP/pull/2"},"issue":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/issues/2"},"comments":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/eroispaziali/HEDAP/statuses/02c93308a503a044001c9cdbca054998f9ae4c84"}}}}
{"actor":{"display_login":"eroispaziali"}}