{"action":"created","comment":{"url":"https://api.github.com/repos/workato/custom_connector_docs/pulls/comments/209431992","pull_request_review_id":145451776,"id":209431992,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwOTQzMTk5Mg==","diff_hunk":"@@ -0,0 +1,857 @@\n+{\n+  title: \"Google Analytics\",\n+\n+  connection: {\n+    fields: [\n+      {\n+        name: \"client_id\",\n+        optional: false\n+      },\n+      {\n+        name: \"client_secret\",\n+        control_type: \"password\",\n+        optional: false\n+      }\n+    ],\n+\n+    authorization: {\n+      type: \"oauth2\",\n+\n+      authorization_url: lambda do |connection|\n+        scopes = [\"https://www.googleapis.com/auth/analytics.readonly\",\n+                  \"https://www.googleapis.com/auth/analytics.edit\",\n+                  \"https://www.googleapis.com/auth/analytics\"].join(\" \")\n+\n+        \"https://accounts.google.com/o/oauth2/auth?client_id=\"            \\\n+         \"#{connection['client_id']}&response_type=code&scope=#{scopes}\" \\\n+         \"&access_type=offline&include_granted_scopes=true&prompt=consent\"\n+\n+      end,\n+\n+      acquire: lambda do |connection, auth_code, redirect_uri|\n+        response = post(\"https://accounts.google.com/o/oauth2/token\").\n+                   payload(client_id: connection[\"client_id\"],\n+                           client_secret: connection[\"client_secret\"],\n+                           grant_type: \"authorization_code\",\n+                           code: auth_code,\n+                           redirect_uri: redirect_uri).\n+                   request_format_www_form_urlencoded\n+\n+        [response, nil, nil]\n+      end,\n+\n+      refresh: lambda do |connection, refresh_token|\n+        post(\"https://accounts.google.com/o/oauth2/token\").\n+          payload(client_id: connection[\"client_id\"],\n+                  client_secret: connection[\"client_secret\"],\n+                  grant_type: \"refresh_token\",\n+                  refresh_token: refresh_token).\n+          request_format_www_form_urlencoded\n+      end,\n+\n+      refresh_on: [401],\n+\n+      detect_on: [/\"errors\"\\:\\s*\\[/],\n+\n+      apply: lambda do |_connection, access_token|\n+        headers(\"Authorization\" => \"Bearer #{access_token}\")\n+      end\n+    },\n+\n+    base_uri: lambda do\n+      \"https://www.googleapis.com\"\n+    end\n+  },\n+\n+  test: ->(connection) {\n+    get(\"/analytics/v3/management/accounts\")\n+  },\n+\n+  object_definitions: {\n+    filters: {\n+      fields: lambda do |_, config_fields|\n+        filters = [\n+          {\n+            name: \"start_date\",\n+            label: \"Start Date\",\n+            control_type: \"date\",\n+            optional: false,\n+            hint: \"Select a start date for the report\"\n+    \t\t\t},\n+    \t\t\t{\n+            name: \"end_date\",\n+            label: \"End Date\",\n+            control_type: \"date\",\n+            optional: false,\n+            hint: \"Select a end date for the report\"\n+    \t\t\t}\n+    \t\t]\n+        if (!config_fields[\"dimension_filter_fields\"].blank?)\n+          dimension_filter_fields =\n+            config_fields[\"dimension_filter_fields\"].\n+              split(\"\\n\").\n+              map do |field_name|\n+                {\n+                  name: field_name.gsub(\"ga:\",\"\"),\n+                  label: field_name.gsub(\"ga:\",\"\").titleize,\n+                  optional: false\n+                }\n+              end\n+          filters = filters.concat(\n+                      [\n+                        { name: \"dimension_filters\",\n+                          type: :object,\n+                          properties: dimension_filter_fields }\n+                      ]\n+                    )\n+        end\n+\n+        if (!config_fields[\"metric_filter_fields\"].blank?)\n+          metric_filter_fields =\n+            config_fields[\"metric_filter_fields\"].\n+              split(\"\\n\").\n+              map do |field_name|\n+            {\n+              name: field_name.gsub(\"ga:\",\"\"),\n+              label: field_name.gsub(\"ga:\",\"\").titleize,\n+              optional: false\n+            }\n+          end\n+\n+          filters = filters.concat(\n+                      [\n+                        { name: \"metric_filters\",\n+                          type: :object,\n+                          properties: metric_filter_fields }\n+                      ]\n+                    )\n+        end\n+        filters\n+      end\n+    },\n+\n+    report_output: {\n+      fields: lambda do |_, config_fields|\n+        dimension_properties = (config_fields[\"dimensions\"] || \"\").\n+                                 split(\"\\n\").\n+                                 map { |field| { name: field } }\n+        metric_properties = (config_fields[\"metrics\"] || \"\").\n+                              split(\"\\n\").\n+                              map { |field| { name: field } }\n+\n+        [\n+          {\n+            name: \"rows\",\n+            type: :array, of: :object,\n+            properties: [\n+              { name: \"dimensions\", type: :object,\n+                properties: dimension_properties },\n+              { name: \"metrics\", type: :object, properties: metric_properties }\n+            ]\n+          },\n+          { name: \"rowCount\", type: :integer }\n+        ]\n+      end\n+    }\n+  },\n+\n+  actions: {\n+    get_report: {\n+      description: \"Get <span class='provider'>report</span> in \" \\\n+        \"<span class='provider'>Google Analytics</span>\",\n+      subtitle: \"Get report data\",\n+\n+      config_fields: [\n+        {\n+          name: \"account\",\n+          control_type: \"select\",\n+          pick_list: \"accounts\",\n+          optional: false\n+        },\n+        {\n+          name: \"property\",\n+          control_type: \"select\",\n+          pick_list: \"properties\",\n+          pick_list_params: { account_id: \"account\" },\n+          optional: false,\n+          hint: \"Select an account to view list of properties\"\n+        },\n+        {\n+          name: \"view\",\n+          control_type: \"select\",\n+          pick_list: \"profiles\",\n+          pick_list_params: { account_id: \"account\", property_id: \"property\" },\n+          optional: false,\n+          hint: \"Select a property to view list of profiles\"\n+        },\n+        {\n+          name: \"dimensions\",\n+          control_type: \"multiselect\",\n+          pick_list: \"dimensions\",\n+          pick_list_params: { account_id: \"account\", property_id: \"property\" },\n+          delimiter: \"\\n\",\n+          optional: false,\n+          hint: \"Select a property to view list of dimensions\"\n+        },\n+        {\n+          name: \"metrics\",\n+          control_type: \"multiselect\",\n+          pick_list: \"metrics\",\n+          pick_list_params: { account_id: \"account\", property_id: \"property\" },\n+          delimiter: \"\\n\",\n+          optional: false,\n+          hint: \"Select a property to view list of metrics\"\n+        },\n+        {\n+          name: \"dimension_filter_fields\",\n+          control_type: \"multiselect\",\n+          pick_list: \"dimensions\",\n+          pick_list_params: { account_id: \"account\", property_id: \"property\" },\n+          delimiter: \"\\n\",\n+          hint: \"Select a property to view list of dimensions to filter by\"\n+        },\n+\t\t    {\n+          name: \"metric_filter_fields\",\n+          control_type: \"multiselect\",\n+          pick_list: \"metrics\",\n+          pick_list_params: { account_id: \"account\", property_id: \"property\" },\n+          delimiter: \"\\n\",\n+          hint: \"Select a property to view list of metrics to filter by\"\n+        }\n+      ],\n+\n+      input_fields: lambda do |object_definitions|\n+        object_definitions[\"filters\"]\n+      end,\n+\n+      output_fields: lambda do |object_definitions|\n+        object_definitions[\"report_output\"]\n+      end,\n+\n+      execute: lambda do |_connection, input|\n+        dimensions = input[\"dimensions\"].split(\"\\n\")\n+        metrics = input[\"metrics\"].split(\"\\n\")\n+\n+        dimension_filter_clauses =\n+          if(input[\"dimension_filters\"].blank?)\n+\t\t\t\t\t\t[]\n+\t\t\t\t\telse\n+            [{\n+              \"operator\" => \"AND\",\n+              \"filters\"\t=>\t[\n+                              (input[\"dimension_filters\"] || {}).\n+                                map do |k, v|\n+                                  if( v.present? )\n+                                    {\n+                                      \"dimensionName\" => \"ga:#{k}\",\n+                                      \"operator\"=>\"EXACT\",\n+                                      \"expressions\"=> [\"#{v}\"]\n+                                    }\n+                                  else\n+                                    nil\n+                                  end\n+                                end\n+                            ]\n+            }]\n+\t\t\t\t\tend\n+\n+        metric_filter_clauses =\n+          if(input[\"metric_filters\"].blank?)\n+\t\t\t\t\t\t[]\n+\t\t\t\t\telse\n+            [{\n+              \"operator\" => \"AND\",\n+              \"filters\"\t=>\t[\n+                              (input[\"metric_filters\"] || {}).\n+                                map do |k, v|\n+                                  if( v.present? )\n+                                    {\n+                                      \"metricName\" => \"ga:#{k}\",\n+                                      \"operator\"=>\"EQUAL\",\n+                                      \"comparisonValue\"=> \"#{v}\"\n+                                    }\n+                                  else\n+                                    nil\n+                                  end\n+                                end\n+                            ]\n+              }]\n+\t\t\t\t\tend\n+\n+        payload = {\n+          \"reportRequests\" => [\n+            {\n+              \"viewId\" => input[\"view\"],\n+              \"dateRanges\" => [\n+                {\n+                  \"startDate\": (Time.now - 7.days).to_date.iso8601,\n+                  \"endDate\": Time.now.to_date.iso8601\n+                }\n+              ],\n+              \"dimensions\" => dimensions.\n+                              map { |dimension| { name: dimension } },\n+              \"metrics\" => metrics.map { |metric| { expression: metric } },\n+              \"dimensionFilterClauses\" => dimension_filter_clauses,\n+              \"metricFilterClauses\" => metric_filter_clauses,\n+            }\n+          ]\n+        }\n+\n+        response =\n+          post(\"https://analyticsreporting.googleapis.com/v4/reports:batchGet\",\n+               payload)&.[](\"reports\")&.first\n+        headers = response&.[](\"columnHeader\")\n+        dimension_headers = headers[\"dimensions\"]\n+        metric_headers = (headers[\"metricHeader\"][\"metricHeaderEntries\"] || []).\n+                         map { |h| h[\"name\"] }\n+        data = response[\"data\"]\n+        data[\"rows\"] =\n+          (data&.[](\"rows\") || []).\n+          map do |row|\n+           {\n+             \"dimensions\": Hash[dimension_headers.\n+                           zip(row&.[](\"dimensions\"))],\n+             \"metrics\": Hash[metric_headers.\n+                        zip(row&.[](\"metrics\")&.first&.[](\"values\"))]\n+           }\n+        end\n+        data\n+      end\n+    }\n+  },\n+\n+  pick_lists: {\n+    accounts: lambda do |_connection|\n+      get(\"/analytics/v3/management/accounts\")[\"items\"].\n+        pluck(\"name\", \"id\")\n+    end,\n+\n+    properties: lambda do |_connection, account_id:|\n+      get(\n+        \"/analytics/v3/management/accounts/#{account_id}/webproperties\"\n+      )[\"items\"].\n+        pluck(\"name\", \"id\")\n+    end,\n+\n+    profiles: lambda do |_connection, account_id:, property_id:|\n+      get(\n+        \"/analytics/v3/management/accounts/#{account_id}/webproperties/\" \\\n+        \"#{property_id}/profiles\"\n+      )[\"items\"].\n+        pluck(\"name\", \"id\")\n+    end,\n+\n+    dimensions: lambda do |_connection, account_id:, property_id:|\n+      custom_dimensions =\n+        get(\n+          \"/analytics/v3/management/accounts/#{account_id}/webproperties/\" \\\n+          \"#{property_id}/customDimensions\"\n+        )[\"items\"].\n+          pluck(\"name\", \"id\")\n+      [\n+        %w[User\\ Type ga:userType],\n+        %w[Count\\ of\\ Sessions ga:sessionCount],\n+        %w[Days\\ Since\\ Last\\ Session ga:daysSinceLastSession],\n+        %w[User\\ Defined\\ Value ga:userDefinedValue],\n+        %w[User\\ Bucket ga:userBucket],\n+        %w[BucketSession\\ Duration ga:sessionDuration],\n+        %w[PathReferral\\ Path ga:referral],\n+        %w[Full\\ Referrer ga:fullReferrer],\n+        %w[Campaign ga:campaign],\n+        %w[Source ga:source],\n+        %w[Medium ga:medium],\n+        %w[Source\\ /\\ Medium ga:sourceMedium],\n+        %w[Keyword ga:keyword],\n+        %w[Ad\\ Content ga:adContent],\n+        %w[Social\\ Network ga:socialNetwork],\n+        %w[Social\\ Source\\ Referral ga:hasSocialSourceReferral],\n+        %w[Campaign\\ Code ga:campaignCode],\n+        %w[Ad\\ Group ga:adGroup],\n+        %w[Ad\\ Slot ga:adSlot],\n+        %w[Ad\\ Distribution\\ Network ga:adDistributionNetwork],\n+        %w[Query\\ Match\\ Type ga:adMatchType],\n+        %w[Keyword\\ Match\\ Type ga:adKeywordMatchType],\n+        %w[Search\\ Query ga:adMatchedQuery],\n+        %w[Placement\\ Domain ga:adPlacementDomain],\n+        %w[Placement\\ URL ga:adPlacementUrl],\n+        %w[Ad\\ Format ga:adFormat],\n+        %w[Targeting\\ Type ga:adTargetingType],\n+        %w[Placement\\ Type ga:adTargetingOption],\n+        %w[Display\\ URL ga:adDisplayUrl],\n+        %w[Destination\\ URL ga:adDestinationUrl],\n+        %w[AdWords\\ Customer\\ ID ga:adwordsCustomerID],\n+        %w[AdWords\\ Campaign\\ ID ga:adwordsCampaignID],\n+        %w[AdWords\\ Ad\\ Group\\ ID ga:adwordsAdGroupID],\n+        %w[AdWords\\ Creative\\ ID ga:adwordsCreativeID],\n+        %w[AdWords\\ Criteria\\ ID ga:adwordsCriteriaID],\n+        %w[Query\\ Word\\ Count ga:adQueryWordCount],\n+        %w[TrueView\\ Video\\ Ad ga:isTrueViewVideoAd],\n+        %w[Goal\\ Completion\\ Location ga:goalCompletionLocation],\n+        %w[1Goal\\ Previous\\ Step\\ -\\ 1 ga:goalPreviousStep],\n+        %w[2Goal\\ Previous\\ Step\\ -\\ 2 ga:goalPreviousStep],\n+        %w[3Goal\\ Previous\\ Step\\ -\\ 3 ga:goalPreviousStep],\n+        %w[Browser ga:browser],\n+        %w[Browser\\ Version ga:browserVersion],\n+        %w[Operating\\ System ga:operatingSystem],\n+        %w[Operating\\ System\\ Version ga:operatingSystemVersion],\n+        %w[Mobile\\ Device\\ Branding ga:mobileDeviceBranding],\n+        %w[Mobile\\ Device\\ Model ga:mobileDeviceModel],\n+        %w[Mobile\\ Input\\ Selector ga:mobileInputSelector],\n+        %w[Mobile\\ Device\\ Info ga:mobileDeviceInfo],\n+        %w[Mobile\\ Device\\ Marketing\\ Name ga:mobileDeviceMarketingName],\n+        %w[Device\\ Category ga:deviceCategory],\n+        %w[Browser\\ Size ga:browserSize],\n+        %w[Data\\ Source ga:dataSource],\n+        %w[Continent ga:continent],\n+        %w[Sub\\ Continent ga:subContinent],\n+        %w[Country ga:country],\n+        %w[Region ga:region],\n+        %w[Metro ga:metro],\n+        %w[City ga:city],\n+        %w[Latitude ga:latitude],\n+        %w[Longitude ga:longitude],\n+        %w[Network\\ Domain ga:networkDomain],\n+        %w[Service\\ Provider ga:networkLocation],\n+        %w[City\\ ID ga:cityId],\n+        %w[Continent\\ ID ga:continentId],\n+        %w[Country\\ ISO\\ Code ga:countryIsoCode],\n+        %w[Metro\\ Id ga:metroId],\n+        %w[Region\\ ID ga:regionId],\n+        %w[Region\\ ISO\\ Code ga:regionIsoCode],\n+        %w[Sub\\ Continent\\ Code ga:subContinentCode],\n+        %w[Flash\\ Version ga:flashVersion],\n+        %w[Java\\ Support ga:javaEnabled],\n+        %w[Language ga:language],\n+        %w[Screen\\ Colors ga:screenColors],\n+        %w[Source\\ Property\\ Display\\ Name ga:sourcePropertyDisplayName],\n+        %w[Source\\ Property\\ Tracking\\ ID ga:sourcePropertyTrackingId],\n+        %w[Screen\\ Resolution ga:screenResolution],\n+        %w[Hostname ga:hostname],\n+        %w[Page ga:pagePath],\n+        %w[Page\\ path\\ level\\ 1 ga:pagePathLevel1],\n+        %w[Page\\ path\\ level\\ 2 ga:pagePathLevel2],\n+        %w[Page\\ path\\ level\\ 3 ga:pagePathLevel3],\n+        %w[Page\\ path\\ level\\ 4 ga:pagePathLevel4],\n+        %w[Page\\ Title ga:pageTitle],\n+        %w[Landing\\ Page ga:landingPagePath],\n+        %w[Second\\ Page ga:secondPagePath],\n+        %w[Exit\\ Page ga:exitPagePath],\n+        %w[Previous\\ Page\\ Path ga:previousPagePath],\n+        %w[Page\\ Depth ga:pageDepth],\n+        %w[Landing\\ Page\\ Group\\ XX ga:landingContentGroupXX],\n+        %w[Previous\\ Page\\ Group\\ XX ga:previousContentGroupXX],\n+        %w[Page\\ Group\\ XX ga:contentGroupXX],\n+        %w[Site\\ Search\\ Status ga:searchUsed],\n+        %w[Search\\ Term ga:searchKeyword],\n+        %w[Refined\\ Keyword ga:searchKeywordRefinement],\n+        %w[Site\\ Search\\ Category ga:searchCategory],\n+        %w[Start\\ Page ga:searchStartPage],\n+        %w[Destination\\ Page ga:searchDestinationPage],\n+        %w[Search\\ Destination\\ Page ga:searchAfterDestinationPage],\n+        %w[App\\ Installer\\ ID ga:appInstallerId],\n+        %w[App\\ Version ga:appVersion],\n+        %w[App\\ Name ga:appName],\n+        %w[App\\ ID ga:appId],\n+        %w[Screen\\ Name ga:screenName],\n+        %w[Screen\\ Depth ga:screenDepth],\n+        %w[Landing\\ Screen ga:landingScreenName],\n+        %w[Exit\\ Screen ga:exitScreenName],\n+        %w[Event\\ Category ga:eventCategory],\n+        %w[Event\\ Action ga:eventAction],\n+        %w[Event\\ Label ga:eventLabel],\n+        %w[Transaction\\ ID ga:transactionId],\n+        %w[Affiliation ga:affiliation],\n+        %w[Sessions\\ to\\ Transaction ga:sessionsToTransaction],\n+        %w[Days\\ to\\ Transaction ga:daysToTransaction],\n+        %w[Product\\ SKU ga:productSku],\n+        %w[Product ga:productName],\n+        %w[Product\\ Category ga:productCategory],\n+        %w[Currency\\ Code ga:currencyCode],\n+        %w[Checkout\\ Options ga:checkoutOptions],\n+        %w[Internal\\ Promotion\\ Creative ga:internalPromotionCreative],\n+        %w[Internal\\ Promotion\\ ID ga:internalPromotionId],\n+        %w[Internal\\ Promotion\\ Name ga:internalPromotionName],\n+        %w[Internal\\ Promotion\\ Position ga:internalPromotionPosition],\n+        %w[Order\\ Coupon\\ Code ga:orderCouponCode],\n+        %w[Product\\ Brand ga:productBrand],\n+        %w[Product\\ Category\\ (Enhanced\\ Ecommerce) ga:productCategoryHierarchy],\n+        %w[Product\\ Category\\ Level\\ XX ga:productCategoryLevelXX],\n+        %w[Product\\ Coupon\\ Code ga:productCouponCode],\n+        %w[Product\\ List\\ Name ga:productListName],\n+        %w[Product\\ List\\ Position ga:productListPosition],\n+        %w[Product\\ Variant ga:productVariant],\n+        %w[Shopping\\ Stage ga:shoppingStage],\n+        %w[Social\\ Network ga:socialInteractionNetwork],\n+        %w[Social\\ Action ga:socialInteractionAction],\n+        %w[Social\\ Network\\ and\\ Action ga:socialInteractionNetworkAction],\n+        %w[Social\\ Entity ga:socialInteractionTarget],\n+        %w[Social\\ Type ga:socialEngagementType],\n+        %w[Timing\\ Category ga:userTimingCategory],\n+        %w[Timing\\ Label ga:userTimingLabel],\n+        %w[Timing\\ Variable ga:userTimingVariable],\n+        %w[Exception\\ Description ga:exceptionDescription],\n+        %w[Experiment\\ ID ga:experimentId],\n+        %w[Variant ga:experimentVariant],\n+        %w[Custom\\ Dimension\\ XX ga:dimensionXX],\n+        %w[Custom\\ Variable\\ (Key\\ XX) ga:customVarNameXX],\n+        %w[Custom\\ Variable\\ (Value\\ XX)\\  ga:customVarValueXX],\n+        %w[Date ga:date],\n+        %w[Year ga:year],\n+        %w[Month\\ of\\ the\\ year ga:month],\n+        %w[Week\\ of\\ the\\ Year ga:week],\n+        %w[Day\\ of\\ the\\ month ga:day],\n+        %w[Hour ga:hour],\n+        %w[Minute ga:minute],\n+        %w[Month\\ Index ga:nthMonth],\n+        %w[Week\\ Index ga:nthWeek],\n+        %w[Day\\ Index ga:nthDay],\n+        %w[Minute\\ Index ga:nthMinute],\n+        %w[Day\\ of\\ Week ga:dayOfWeek],\n+        %w[eDay\\ of\\ Week\\ Name ga:dayOfWeekNam],\n+        %w[Hour\\ of\\ Day ga:dateHour],\n+        %w[Date\\ Hour\\ and\\ Minute.\\ Example:\\ 201704011200 ga:dateHourMinute],\n+        %w[Month\\ of\\ Year ga:yearMonth],\n+        %w[Week\\ of\\ Year ga:yearWeek],\n+        %w[ISO\\ Week\\ of\\ the\\ Year ga:isoWeek],\n+        %w[ISO\\ Year ga:isoYear],\n+        %w[ISO\\ Week\\ of\\ ISO\\ Year ga:isoYearIsoWeek],\n+        %w[Hour\\ Index ga:nthHour],\n+        %w[DCM\\ Ad\\ (GA\\ Model) ga:dcmClickAd],\n+        %w[DCM\\ Ad\\ ID\\ (GA\\ Model) ga:dcmClickAdId],\n+        %w[DCM\\ Ad\\ Type\\ (GA\\ Model) ga:dcmClickAdType],\n+        %w[DCM\\ Ad\\ Type\\ ID ga:dcmClickAdTypeId],\n+        %w[DCM\\ Advertiser\\ (GA\\ Model) ga:dcmClickAdvertiser],\n+        %w[DCM\\ Advertiser\\ ID\\ (GA\\ Model) ga:dcmClickAdvertiserId],\n+        %w[DCM\\ Campaign\\ (GA\\ Model) ga:dcmClickCampaign],\n+        %w[DCM\\ Campaign\\ ID\\ (GA\\ Model) ga:dcmClickCampaignId],\n+        %w[DCM\\ Creative\\ ID\\ (GA\\ Model) ga:dcmClickCreativeId],\n+        %w[DCM\\ Creative\\ (GA\\ Model) ga:dcmClickCreative],\n+        %w[DCM\\ Rendering\\ ID\\ (GA\\ Model) ga:dcmClickRenderingId],\n+        %w[DCM\\ Creative\\ Type\\ (GA\\ Model) ga:dcmClickCreativeType],\n+        %w[DCM\\ Creative\\ Type\\ ID\\ (GA\\ Model) ga:dcmClickCreativeTypeId],\n+        %w[DCM\\ Creative\\ Version\\ (GA\\ Model) ga:dcmClickCreativeVersion],\n+        %w[DCM\\ Site\\ (GA\\ Model) ga:dcmClickSite],\n+        %w[DCM\\ Site\\ ID\\ (GA\\ Model) ga:dcmClickSiteId],\n+        %w[DCM\\ Placement\\ (GA\\ Model) ga:dcmClickSitePlacement],\n+        %w[DCM\\ Placement\\ ID\\ (GA\\ Model) ga:dcmClickSitePlacementId],\n+        %w[DCM\\ Floodlight\\ Configuration\\ ID\\ (GA\\ Model) ga:dcmClickSpotId],\n+        %w[DCM\\ Activity ga:dcmFloodlightActivity],\n+        %w[DCM\\ Activity\\ and\\ Group ga:dcmFloodlightActivityAndGroup],\n+        %w[DCM\\ Activity\\ Group ga:dcmFloodlightActivityGroup],\n+        %w[DCM\\ Activity\\ Group\\ ID ga:dcmFloodlightActivityGroupId],\n+        %w[DCM\\ Activity\\ ID ga:dcmFloodlightActivityId],\n+        %w[DCM\\ Advertiser\\ ID ga:dcmFloodlightAdvertiserId],\n+        %w[DCM\\ Floodlight\\ Configuration\\ ID ga:dcmFloodlightSpotId],\n+        %w[DCM\\ Ad ga:dcmLastEventAd],\n+        %w[DCM\\ Ad\\ ID\\ (DCM\\ Model) ga:dcmLastEventAdId],\n+        %w[DCM\\ Ad\\ Type\\ (DCM\\ Model) ga:dcmLastEventAdType],\n+        %w[DCM\\ Ad\\ Type\\ ID\\ (DCM\\ Model) ga:dcmLastEventAdTypeId],\n+        %w[DCM\\ Advertiser\\ (DCM\\ Model) ga:dcmLastEventAdvertiser],\n+        %w[DCM\\ Advertiser\\ ID\\ (DCM\\ Model) ga:dcmLastEventAdvertiserId],\n+        %w[DCM\\ Attribution\\ Type\\ (DCM\\ Model) ga:dcmLastEventAttributionType],\n+        %w[DCM\\ Campaign\\ (DCM\\ Model) ga:dcmLastEventCampaign],\n+        %w[DCM\\ Campaign\\ ID\\ (DCM\\ Model) ga:dcmLastEventCampaignId],\n+        %w[DCM\\ Creative\\ ID\\ (DCM\\ Model) ga:dcmLastEventCreativeId],\n+        %w[DCM\\ Creative\\ (DCM\\ Model) ga:dcmLastEventCreative],\n+        %w[DCM\\ Rendering\\ ID\\ (DCM\\ Model) ga:dcmLastEventRenderingId],\n+        %w[DCM\\ Creative\\ Type\\ (DCM\\ Model) ga:dcmLastEventCreativeType],\n+        %w[DCM\\ Creative\\ Type\\ ID\\ (DCM\\ Model) ga:dcmLastEventCreativeTypeId],\n+        %w[DCM\\ Creative\\ Version\\ (DCM\\ Model) ga:dcmLastEventCreativeVersion],\n+        %w[DCM\\ Site\\ (DCM\\ Model) ga:dcmLastEventSite],\n+        %w[DCM\\ Site\\ ID\\ (DCM\\ Model) ga:dcmLastEventSiteId],\n+        %w[DCM\\ Placement\\ (DCM\\ Model) ga:dcmLastEventSitePlacement],\n+        %w[DCM\\ Placement\\ ID\\ (DCM\\ Model) ga:dcmLastEventSitePlacementId],\n+        %w[DCM\\ Floodlight\\ Configuration\\ ID\\ (DCM\\ Model) ga:dcmLastEventSpotId],\n+        %w[Age ga:userAgeBracket],\n+        %w[Gender ga:userGender],\n+        %w[Other\\ Category ga:interestOtherCategory],\n+        %w[Affinity\\ Category\\ (reach) ga:interestAffinityCategory],\n+        %w[In-Market\\ Segment ga:interestInMarketCategory],\n+        %w[Acquisition\\ Campaign ga:acquisitionCampaign],\n+        %w[Acquisition\\ Medium ga:acquisitionMedium],\n+        %w[Acquisition\\ Source ga:acquisitionSource],\n+        %w[Acquisition\\ Source\\ /\\ Medium ga:acquisitionSourceMedium],\n+        %w[Acquisition\\ Channel ga:acquisitionTrafficChannel],\n+        %w[Cohort ga:cohort],\n+        %w[Cohort\\ Day ga:cohortNthDay],\n+        %w[Cohort\\ Month ga:cohortNthMonth],\n+        %w[Cohort\\ Week ga:cohortNthWeek],\n+        %w[Default\\ Channel\\ Grouping ga:channelGrouping],\n+        %w[DBM\\ Advertiser\\ (GA\\ Model) ga:dbmClickAdvertiser],\n+        %w[DBM\\ Advertiser\\ ID\\ (GA\\ Model) ga:dbmClickAdvertiserId],\n+        %w[DBM\\ Creative\\ ID\\ (GA\\ Model) ga:dbmClickCreativeId],\n+        %w[DBM\\ Exchange\\ (GA\\ Model) ga:dbmClickExchange],\n+        %w[DBM\\ Exchange\\ ID\\ (GA\\ Model) ga:dbmClickExchangeId],\n+        %w[DBM\\ Insertion\\ Order\\ (GA\\ Model) ga:dbmClickInsertionOrder],\n+        %w[DBM\\ Insertion\\ Order\\ ID\\ (GA\\ Model) ga:dbmClickInsertionOrderId],\n+        %w[DBM\\ Line\\ Item\\ NAME\\ (GA\\ Model) ga:dbmClickLineItem],\n+        %w[DBM\\ Line\\ Item\\ ID\\ (GA\\ Model) ga:dbmClickLineItemId],\n+        %w[DBM\\ Site\\ (GA\\ Model) ga:dbmClickSite],\n+        %w[DBM\\ Site\\ ID\\ (GA\\ Model) ga:dbmClickSiteId],\n+        %w[DBM\\ Advertiser\\ (DCM\\ Model) ga:dbmLastEventAdvertiser],\n+        %w[DBM\\ Advertiser\\ ID\\ (DCM\\ Model) ga:dbmLastEventAdvertiserId],\n+        %w[DBM\\ Creative\\ ID\\ (DCM\\ Model) ga:dbmLastEventCreativeId],\n+        %w[DBM\\ Exchange\\ (DCM\\ Model) ga:dbmLastEventExchange],\n+        %w[DBM\\ Exchange\\ ID\\ (DCM\\ Model) ga:dbmLastEventExchangeId],\n+        %w[DBM\\ Insertion\\ Order\\ (DCM\\ Model) ga:dbmLastEventInsertionOrder],\n+        %w[DBM\\ Insertion\\ Order\\ ID\\ (DCM\\ Model) ga:dbmLastEventInsertionOrderId],\n+        %w[DBM\\ Line\\ Item\\ (DCM\\ Model) ga:dbmLastEventLineItem],\n+        %w[DBM\\ Line\\ Item\\ ID\\ (DCM\\ Model) ga:dbmLastEventLineItemId],\n+        %w[DBM\\ Site\\ (DCM\\ Model) ga:dbmLastEventSite],\n+        %w[DBM\\ Site\\ ID\\ (DCM\\ Model) ga:dbmLastEventSiteId],\n+        %w[DS\\ Ad\\ Group ga:dsAdGroup],\n+        %w[DS\\ Ad\\ Group\\ ID ga:dsAdGroupId],\n+        %w[DS\\ Advertiser ga:dsAdvertiser],\n+        %w[DS\\ Advertiser\\ ID ga:dsAdvertiserId],\n+        %w[DS\\ Agency ga:dsAgency],\n+        %w[DS\\ Agency\\ ID ga:dsAgencyId],\n+        %w[DS\\ Campaign ga:dsCampaign],\n+        %w[DS\\ Campaign\\ ID ga:dsCampaignId],\n+        %w[DS\\ Engine\\ Account ga:dsEngineAccount],\n+        %w[DS\\ Engine\\ Account\\ ID ga:dsEngineAccountId],\n+        %w[DS\\ Keyword ga:dsKeyword],\n+        %w[DS\\ Keyword\\ ID ga:dsKeywordId]\n+      ].concat(custom_dimensions)\n+    end,\n+\n+    metrics: lambda do |_connection, account_id:, property_id:|\n+      custom_metrics = get(\"/analytics/v3/management/accounts/#{account_id}/webproperties/#{property_id}/customMetrics\")[\"items\"].\n+        pluck(\"name\", \"id\")\n+      [\n+        %w[Users ga:users],\n+        %w[New\\ Users ga:newUsers],\n+        %w[%\\ New\\ Sessions ga:percentNewSessions],\n+        %w[1\\ Day\\ Active\\ Users ga:1dayUsers],\n+        %w[7\\ Day\\ Active\\ Users ga:7dayUsers],\n+        %w[14\\ Day\\ Active\\ Users ga:14dayUsers],\n+        %w[30\\ Day\\ Active\\ Users ga:30dayUsers],\n+        %w[Number\\ of\\ Sessions\\ per\\ User ga:sessionsPerUser],\n+        %w[Sessions ga:sessions],\n+        %w[Bounces ga:bounces],\n+        %w[Bounce\\ Rate ga:bounceRate],\n+        %w[Session\\ Duration ga:sessionDuration],\n+        %w[Avg.\\ Session\\ Duration ga:avgSessionDuration],\n+        %w[Unique\\ Dimension\\ Combinations ga:uniqueDimensionCombinations],\n+        %w[Hits\\  ga:hits],\n+        %w[Organic\\ Searches ga:organicSearches],\n+        %w[Impressions ga:impressions],\n+        %w[Clicks ga:adClicks],\n+        %w[Cost ga:adCost],\n+        %w[CPM ga:CPM],\n+        %w[CPC ga:CPC],\n+        %w[CTR ga:CTR],\n+        %w[Cost\\ per\\ Transaction ga:costPerTransaction],\n+        %w[Cost\\ per\\ Goal\\ Conversion ga:costPerGoalConversion],\n+        %w[Cost\\ per\\ Conversion ga:costPerConversion],\n+        %w[RPC ga:RPC],\n+        %w[ROAS ga:ROAS],\n+        %w[Goal\\ XX\\ Starts ga:goalXXStarts],\n+        %w[Goal\\ Starts ga:goalStartsAll],\n+        %w[Goal\\ XX\\ Completions ga:goalXXCompletions],\n+        %w[Goal\\ Completions ga:goalCompletionsAll],\n+        %w[Goal\\ XX\\ Value ga:goalXXValue],\n+        %w[Goal\\ Value ga:goalValueAll],\n+        %w[Per\\ Session\\ Goal\\ Value ga:goalValuePerSession],\n+        %w[Goal\\ XX\\ Conversion\\ Rate ga:goalXXConversionRate],\n+        %w[Goal\\ Conversion\\ Rate ga:goalConversionRateAll],\n+        %w[Goal\\ XX\\ Abandoned\\ Funnels ga:goalXXAbandons],\n+        %w[Abandoned\\ Funnels ga:goalAbandonsAll],\n+        %w[Goal\\ XX\\ Abandonment\\ Rate ga:goalXXAbandonRate],\n+        %w[Total\\ Abandonment\\ Rate ga:goalAbandonRateAll],\n+        %w[Page\\ Value ga:pageValue],\n+        %w[Entrances ga:entrances],\n+        %w[Entrances\\ /\\ Pageviews ga:entranceRate],\n+        %w[Pageviews ga:pageviews],\n+        %w[Pages\\ /\\ Session ga:pageviewsPerSession],\n+        %w[Unique\\ Pageviews ga:uniquePageviews],\n+        %w[Time\\ on\\ Page ga:timeOnPage],\n+        %w[Avg.\\ Time\\ on\\ Page ga:avgTimeOnPage],\n+        %w[Exits ga:exits],\n+        %w[%\\ Exit ga:exitRate],\n+        %w[Unique\\ Views\\ XX ga:contentGroupUniqueViewsXX],\n+        %w[Results\\ Pageviews ga:searchResultViews],\n+        %w[Total\\ Unique\\ Searches ga:searchUniques],\n+        %w[Results\\ Pageviews\\ /\\ Search ga:avgSearchResultViews],\n+        %w[Sessions\\ with\\ Search ga:searchSessions],\n+        %w[%\\ Sessions\\ with\\ Search ga:percentSessionsWithSearch],\n+        %w[Search\\ Depth ga:searchDepth],\n+        %w[Avg.\\ Search\\ Depth ga:avgSearchDepth],\n+        %w[Search\\ Refinements ga:searchRefinements],\n+        %w[%\\ Search\\ Refinements ga:percentSearchRefinements],\n+        %w[Time\\ after\\ Search ga:searchDuration],\n+        %w[Time\\ after\\ Search ga:avgSearchDuration],\n+        %w[Search\\ Exits ga:searchExits],\n+        %w[%\\ Search\\ Exits ga:searchExitRate],\n+        %w[Site\\ Search\\ Goal\\ XX\\ Conversion\\ Rate ga:searchGoalXXConversionRate],\n+        %w[Site\\ Search\\ Goal\\ Conversion\\ Rate ga:searchGoalConversionRateAll],\n+        %w[Per\\ Search\\ Goal\\ Value ga:goalValueAllPerSearch],\n+        %w[Page\\ Load\\ Time\\ (ms) ga:pageLoadTime],\n+        %w[Page\\ Load\\ Sample ga:pageLoadSample],\n+        %w[Avg.\\ Page\\ Load\\ Time\\ (sec) ga:avgPageLoadTime],\n+        %w[Domain\\ Lookup\\ Time\\ (ms) ga:domainLookupTime],\n+        %w[Avg.\\ Domain\\ Lookup\\ Time\\ (sec) ga:avgDomainLookupTime],\n+        %w[Page\\ Download\\ Time\\ (ms) ga:pageDownloadTime],\n+        %w[Avg.\\ Page\\ Download\\ Time\\ (sec) ga:avgPageDownloadTime],\n+        %w[Redirection\\ Time\\ (ms) ga:redirectionTime],\n+        %w[Avg.\\ Redirection\\ Time\\ (sec) ga:avgRedirectionTime],\n+        %w[Server\\ Connection\\ Time\\ (ms) ga:serverConnectionTime],\n+        %w[Avg.\\ Server\\ Connection\\ Time\\ (sec) ga:avgServerConnectionTime],\n+        %w[Server\\ Response\\ Time\\ (ms) ga:serverResponseTime],\n+        %w[Avg.\\ Server\\ Response\\ Time\\ (sec) ga:avgServerResponseTime],\n+        %w[Speed\\ Metrics\\ Sample ga:speedMetricsSample],\n+        %w[Document\\ Interactive\\ Time\\ (ms) ga:domInteractiveTime],\n+        %w[Avg.\\ Document\\ Interactive\\ Time\\ (sec) ga:avgDomInteractiveTime],\n+        %w[Document\\ Content\\ Loaded\\ Time\\ (ms) ga:domContentLoadedTime],\n+        %w[Avg.\\ Document\\ Content\\ Loaded\\ Time\\ (sec) ga:avgDomContentLoadedTime],\n+        %w[SampleDOM\\ Latency\\ Metrics\\ Sample ga:domLatencyMetrics],\n+        %w[Screen\\ Views ga:screenviews],\n+        %w[Unique\\ Screen\\ Views ga:uniqueScreenviews],\n+        %w[Screens\\ /\\ Session ga:screenviewsPerSession],\n+        %w[Time\\ on\\ Screen ga:timeOnScreen],\n+        %w[Avg.\\ Time\\ on\\ Screen ga:avgScreenviewDuration],\n+        %w[Total\\ Events ga:totalEvents],\n+        %w[Unique\\ Events ga:uniqueEvents],\n+        %w[Event\\ Value ga:eventValue],\n+        %w[Avg.\\ Value ga:avgEventValue],\n+        %w[Sessions\\ with\\ Event ga:sessionsWithEvent],\n+        %w[Events\\ /\\ Session\\ with\\ Event ga:eventsPerSessionWithEvent],\n+        %w[Transactions ga:transactions],\n+        %w[Ecommerce\\ Conversion\\ Rate ga:transactionsPerSession],\n+        %w[Revenue ga:transactionRevenue],\n+        %w[Avg.\\ Order\\ Value ga:revenuePerTransaction],\n+        %w[Per\\ Session\\ Value ga:transactionRevenuePerSession],\n+        %w[Shipping ga:transactionShipping],\n+        %w[Tax ga:transactionTax],\n+        %w[Total\\ Value ga:totalValue],\n+        %w[Quantity ga:itemQuantity],\n+        %w[Unique\\ Purchases ga:uniquePurchases],\n+        %w[Avg.\\ Price ga:revenuePerItem],\n+        %w[Product\\ Revenue ga:itemRevenue],\n+        %w[Avg.\\ QTY ga:itemsPerPurchase],\n+        %w[Local\\ Revenue ga:localTransactionRevenue],\n+        %w[Local\\ Shipping ga:localTransactionShipping],\n+        %w[Local\\ Tax ga:localTransactionTax],\n+        %w[Local\\ Product\\ Revenue ga:localItemRevenue],\n+        %w[Buy-to-Detail\\ Rate ga:buyToDetailRate],\n+        %w[Cart-to-Detail\\ Rate ga:cartToDetailRate],\n+        %w[Internal\\ Promotion\\ CTR ga:internalPromotionCTR],\n+        %w[Internal\\ Promotion\\ Clicks ga:internalPromotionClicks],\n+        %w[Internal\\ Promotion\\ Views ga:internalPromotionViews],\n+        %w[Local\\ Product\\ Refund\\ Amount ga:localProductRefundAmount],\n+        %w[Local\\ Refund\\ Amount ga:localRefundAmount],\n+        %w[Product\\ Adds\\ To\\ Cart ga:productAddsToCart],\n+        %w[Product\\ Checkouts ga:productCheckouts],\n+        %w[Product\\ Detail\\ Views ga:productDetailViews],\n+        %w[Product\\ List\\ CTR ga:productListCTR],\n+        %w[Product\\ List\\ Clicks ga:productListClicks],\n+        %w[Product\\ List\\ Views ga:productListViews],\n+        %w[Product\\ Refund\\ Amount ga:productRefundAmount],\n+        %w[Product\\ Refunds ga:productRefunds],\n+        %w[Product\\ Removes\\ From\\ Cart ga:productRemovesFromCart],\n+        %w[Product\\ Revenue\\ per\\ Purchase ga:productRevenuePerPurchase],\n+        %w[Quantity\\ Added\\ To\\ Cart ga:quantityAddedToCart],\n+        %w[Quantity\\ Checked\\ Out ga:quantityCheckedOut],\n+        %w[Quantity\\ Refunded ga:quantityRefunded],\n+        %w[Quantity\\ Removed\\ From\\ Cart ga:quantityRemovedFromCart],\n+        %w[Refund\\ Amount ga:refundAmount],\n+        %w[Revenue\\ per\\ User ga:revenuePerUser],\n+        %w[Refunds ga:totalRefunds],\n+        %w[Transactions\\ per\\ User ga:transactionsPerUser],\n+        %w[Social\\ Actions ga:socialInteractions],\n+        %w[Unique\\ Social\\ Actions ga:uniqueSocialInteractions],\n+        %w[Actions\\ Per\\ Social\\ Session ga:socialInteractionsPerSession],\n+        %w[User\\ Timing\\ (ms) ga:userTimingValue],\n+        %w[User\\ Timing\\ Sample ga:userTimingSample],\n+        %w[Avg.\\ User\\ Timing\\ (sec) ga:avgUserTimingValue],\n+        %w[Exceptions ga:exceptions],\n+        %w[Exceptions\\ /\\ Screen ga:exceptionsPerScreenview],\n+        %w[Crashes ga:fatalExceptions],\n+        %w[Crashes\\ /\\ Screen ga:fatalExceptionsPerScreenview],\n+        %w[Custom\\ Metric\\ XX\\ Value ga:metricXX],\n+        %w[Calculated\\ Metric ga:calcMetric_],\n+        %w[DCM\\ Conversions ga:dcmFloodlightQuantity],\n+        %w[DCM\\ Revenue ga:dcmFloodlightRevenue],\n+        %w[DCM\\ CPC ga:dcmCPC],\n+        %w[DCM\\ CTR ga:dcmCTR],\n+        %w[DCM\\ Clicks ga:dcmClicks],\n+        %w[DCM\\ Cost ga:dcmCost],\n+        %w[DCM\\ Impressions ga:dcmImpressions],\n+        %w[DCM\\ ROAS ga:dcmROAS],\n+        %w[DCM\\ RPC ga:dcmRPC],\n+        %w[AdSense\\ Revenue ga:adsenseRevenue],\n+        %w[AdSense\\ Ad\\ Units\\ Viewed ga:adsenseAdUnitsViewed],\n+        %w[AdSense\\ Impressions ga:adsenseAdsViewed],\n+        %w[AdSense\\ Ads\\ Clicked ga:adsenseAdsClicks],\n+        %w[AdSense\\ Page\\ Impressions ga:adsensePageImpressions],\n+        %w[AdSense\\ CTR ga:adsenseCTR],\n+        %w[AdSense\\ eCPM ga:adsenseECPM],\n+        %w[AdSense\\ Exits ga:adsenseExits],\n+        %w[AdSense\\ Viewable\\ Impression\\ % ga:adsenseViewableImpressionPercent],\n+        %w[AdSense\\ Coverage ga:adsenseCoverage],\n+        %w[AdX\\ Impressions ga:adxImpressions],\n+        %w[AdX\\ Coverage ga:adxCoverage],\n+        %w[AdX\\ Monetized\\ Pageviews ga:adxMonetizedPageviews],\n+        %w[AdX\\ Impressions\\ /\\ Session ga:adxImpressionsPerSession],\n+        %w[AdX\\ Viewable\\ Impressions\\ % ga:adxViewableImpressionsPercent],\n+        %w[AdX\\ Clicks ga:adxClicks],\n+        %w[AdX\\ CTR ga:adxCTR],\n+        %w[AdX\\ Revenue ga:adxRevenue],\n+        %w[AdX\\ Revenue\\ /\\ 1000\\ Sessions ga:adxRevenuePer1000Sessions],\n+        %w[AdX\\ eCPM ga:adxECPM],\n+        %w[DFP\\ Impressions ga:dfpImpressions],\n+        %w[DFP\\ Coverage ga:dfpCoverage],\n+        %w[DFP\\ Monetized\\ Pageviews ga:dfpMonetizedPageviews],\n+        %w[DFP\\ Impressions\\ /\\ Session ga:dfpImpressionsPerSession],\n+        %w[DFP\\ Viewable\\ Impressions\\ % ga:dfpViewableImpressionsPercent],\n+        %w[DFP\\ Clicks ga:dfpClicks],\n+        %w[DFP\\ CTR ga:dfpCTR],\n+        %w[DFP\\ Revenue ga:dfpRevenue],\n+        %w[DFP\\ Revenue\\ /\\ 1000\\ Sessions ga:dfpRevenuePer1000Sessions],\n+        %w[DFP\\ eCPM ga:dfpECPM],\n+        %w[DFP\\ Backfill\\ Impressions ga:backfillImpressions],\n+        %w[DFP\\ Backfill\\ Coverage ga:backfillCoverage],\n+        %w[DFP\\ Backfill\\ Monetized\\ Pageviews ga:backfillMonetizedPageviews],\n+        %w[DFP\\ Backfill\\ Impressions\\ /\\ Session ga:backfillImpressionsPerSession],\n+        %w[DFP\\ Backfill\\ Viewable\\ Impressions\\ % ga:backfillViewableImpressionsPercent],\n+        %w[DFP\\ Backfill\\ Clicks ga:backfillClicks],\n+        %w[DFP\\ Backfill\\ CTR ga:backfillCTR],\n+        %w[DFP\\ Backfill\\ Revenue ga:backfillRevenue],\n+        %w[DFP\\ Backfill\\ Revenue\\ /\\ 1000\\ Sessions ga:backfillRevenuePer1000Sessions],\n+        %w[DFP\\ Backfill\\ eCPM ga:backfillECPM],\n+        %w[Users ga:cohortActiveUsers],\n+        %w[Appviews\\ per\\ User ga:cohortAppviewsPerUser],\n+        %w[Appviews\\ Per\\ User\\ (LTV) ga:cohortAppviewsPerUserWithLifetimeCriteria],\n+        %w[Goal\\ Completions\\ per\\ User ga:cohortGoalCompletionsPerUser],\n+        %w[Goal\\ Completions\\ Per\\ User\\ (LTV) ga:cohortGoalCompletionsPerUserWithLifetimeCriteria],\n+        %w[Pageviews\\ per\\ User ga:cohortPageviewsPerUser],\n+        %w[Pageviews\\ Per\\ User\\ (LTV) ga:cohortPageviewsPerUserWithLifetimeCriteria],","path":"custom_connectors/oauth2/google_analytics_connector.rb","position":827,"original_position":827,"commit_id":"8431269c02a0ddf849f80dab9a9a5207b22219f2","original_commit_id":"8431269c02a0ddf849f80dab9a9a5207b22219f2","user":{"login":"houndci-bot","id":6697940,"node_id":"MDQ6VXNlcjY2OTc5NDA=","avatar_url":"https://avatars0.githubusercontent.com/u/6697940?v=4","gravatar_id":"","url":"https://api.github.com/users/houndci-bot","html_url":"https://github.com/houndci-bot","followers_url":"https://api.github.com/users/houndci-bot/followers","following_url":"https://api.github.com/users/houndci-bot/following{/other_user}","gists_url":"https://api.github.com/users/houndci-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci-bot/subscriptions","organizations_url":"https://api.github.com/users/houndci-bot/orgs","repos_url":"https://api.github.com/users/houndci-bot/repos","events_url":"https://api.github.com/users/houndci-bot/events{/privacy}","received_events_url":"https://api.github.com/users/houndci-bot/received_events","type":"User","site_admin":false},"body":"Metrics/LineLength: Line is too long. [86/80]","created_at":"2018-08-11T17:02:12Z","updated_at":"2018-08-11T17:02:14Z","html_url":"https://github.com/workato/custom_connector_docs/pull/8#discussion_r209431992","pull_request_url":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/workato/custom_connector_docs/pulls/comments/209431992"},"html":{"href":"https://github.com/workato/custom_connector_docs/pull/8#discussion_r209431992"},"pull_request":{"href":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8"}}},"pull_request":{"url":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8","id":207783509,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA3NzgzNTA5","html_url":"https://github.com/workato/custom_connector_docs/pull/8","diff_url":"https://github.com/workato/custom_connector_docs/pull/8.diff","patch_url":"https://github.com/workato/custom_connector_docs/pull/8.patch","issue_url":"https://api.github.com/repos/workato/custom_connector_docs/issues/8","number":8,"state":"open","locked":false,"title":"Google Analytics SDK","user":{"login":"brendonyang","id":39894932,"node_id":"MDQ6VXNlcjM5ODk0OTMy","avatar_url":"https://avatars1.githubusercontent.com/u/39894932?v=4","gravatar_id":"","url":"https://api.github.com/users/brendonyang","html_url":"https://github.com/brendonyang","followers_url":"https://api.github.com/users/brendonyang/followers","following_url":"https://api.github.com/users/brendonyang/following{/other_user}","gists_url":"https://api.github.com/users/brendonyang/gists{/gist_id}","starred_url":"https://api.github.com/users/brendonyang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brendonyang/subscriptions","organizations_url":"https://api.github.com/users/brendonyang/orgs","repos_url":"https://api.github.com/users/brendonyang/repos","events_url":"https://api.github.com/users/brendonyang/events{/privacy}","received_events_url":"https://api.github.com/users/brendonyang/received_events","type":"User","site_admin":false},"body":"Actions: \r\n- [x] Get report","created_at":"2018-08-11T17:02:06Z","updated_at":"2018-08-11T17:02:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c75278f0e6bed7d1e9df2351563b80b18212bbe7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8/commits","review_comments_url":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8/comments","review_comment_url":"https://api.github.com/repos/workato/custom_connector_docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/workato/custom_connector_docs/issues/8/comments","statuses_url":"https://api.github.com/repos/workato/custom_connector_docs/statuses/8431269c02a0ddf849f80dab9a9a5207b22219f2","head":{"label":"workato:google-analytics---brendon","ref":"google-analytics---brendon","sha":"8431269c02a0ddf849f80dab9a9a5207b22219f2","user":{"login":"workato","id":5629924,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2Mjk5MjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/5629924?v=4","gravatar_id":"","url":"https://api.github.com/users/workato","html_url":"https://github.com/workato","followers_url":"https://api.github.com/users/workato/followers","following_url":"https://api.github.com/users/workato/following{/other_user}","gists_url":"https://api.github.com/users/workato/gists{/gist_id}","starred_url":"https://api.github.com/users/workato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/workato/subscriptions","organizations_url":"https://api.github.com/users/workato/orgs","repos_url":"https://api.github.com/users/workato/repos","events_url":"https://api.github.com/users/workato/events{/privacy}","received_events_url":"https://api.github.com/users/workato/received_events","type":"Organization","site_admin":false},"repo":{"id":143073259,"node_id":"MDEwOlJlcG9zaXRvcnkxNDMwNzMyNTk=","name":"custom_connector_docs","full_name":"workato/custom_connector_docs","owner":{"login":"workato","id":5629924,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2Mjk5MjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/5629924?v=4","gravatar_id":"","url":"https://api.github.com/users/workato","html_url":"https://github.com/workato","followers_url":"https://api.github.com/users/workato/followers","following_url":"https://api.github.com/users/workato/following{/other_user}","gists_url":"https://api.github.com/users/workato/gists{/gist_id}","starred_url":"https://api.github.com/users/workato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/workato/subscriptions","organizations_url":"https://api.github.com/users/workato/orgs","repos_url":"https://api.github.com/users/workato/repos","events_url":"https://api.github.com/users/workato/events{/privacy}","received_events_url":"https://api.github.com/users/workato/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/workato/custom_connector_docs","description":null,"fork":false,"url":"https://api.github.com/repos/workato/custom_connector_docs","forks_url":"https://api.github.com/repos/workato/custom_connector_docs/forks","keys_url":"https://api.github.com/repos/workato/custom_connector_docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/workato/custom_connector_docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/workato/custom_connector_docs/teams","hooks_url":"https://api.github.com/repos/workato/custom_connector_docs/hooks","issue_events_url":"https://api.github.com/repos/workato/custom_connector_docs/issues/events{/number}","events_url":"https://api.github.com/repos/workato/custom_connector_docs/events","assignees_url":"https://api.github.com/repos/workato/custom_connector_docs/assignees{/user}","branches_url":"https://api.github.com/repos/workato/custom_connector_docs/branches{/branch}","tags_url":"https://api.github.com/repos/workato/custom_connector_docs/tags","blobs_url":"https://api.github.com/repos/workato/custom_connector_docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/workato/custom_connector_docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/workato/custom_connector_docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/workato/custom_connector_docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/workato/custom_connector_docs/statuses/{sha}","languages_url":"https://api.github.com/repos/workato/custom_connector_docs/languages","stargazers_url":"https://api.github.com/repos/workato/custom_connector_docs/stargazers","contributors_url":"https://api.github.com/repos/workato/custom_connector_docs/contributors","subscribers_url":"https://api.github.com/repos/workato/custom_connector_docs/subscribers","subscription_url":"https://api.github.com/repos/workato/custom_connector_docs/subscription","commits_url":"https://api.github.com/repos/workato/custom_connector_docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/workato/custom_connector_docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/workato/custom_connector_docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/workato/custom_connector_docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/workato/custom_connector_docs/contents/{+path}","compare_url":"https://api.github.com/repos/workato/custom_connector_docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/workato/custom_connector_docs/merges","archive_url":"https://api.github.com/repos/workato/custom_connector_docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/workato/custom_connector_docs/downloads","issues_url":"https://api.github.com/repos/workato/custom_connector_docs/issues{/number}","pulls_url":"https://api.github.com/repos/workato/custom_connector_docs/pulls{/number}","milestones_url":"https://api.github.com/repos/workato/custom_connector_docs/milestones{/number}","notifications_url":"https://api.github.com/repos/workato/custom_connector_docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/workato/custom_connector_docs/labels{/name}","releases_url":"https://api.github.com/repos/workato/custom_connector_docs/releases{/id}","deployments_url":"https://api.github.com/repos/workato/custom_connector_docs/deployments","created_at":"2018-07-31T21:44:08Z","updated_at":"2018-08-08T15:08:59Z","pushed_at":"2018-08-11T17:02:06Z","git_url":"git://github.com/workato/custom_connector_docs.git","ssh_url":"git@github.com:workato/custom_connector_docs.git","clone_url":"https://github.com/workato/custom_connector_docs.git","svn_url":"https://github.com/workato/custom_connector_docs","homepage":null,"size":658,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":4,"license":null,"forks":1,"open_issues":4,"watchers":0,"default_branch":"master"}},"base":{"label":"workato:master","ref":"master","sha":"cbdeefec7a8316a24949d80031f4ac0a915d5b26","user":{"login":"workato","id":5629924,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2Mjk5MjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/5629924?v=4","gravatar_id":"","url":"https://api.github.com/users/workato","html_url":"https://github.com/workato","followers_url":"https://api.github.com/users/workato/followers","following_url":"https://api.github.com/users/workato/following{/other_user}","gists_url":"https://api.github.com/users/workato/gists{/gist_id}","starred_url":"https://api.github.com/users/workato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/workato/subscriptions","organizations_url":"https://api.github.com/users/workato/orgs","repos_url":"https://api.github.com/users/workato/repos","events_url":"https://api.github.com/users/workato/events{/privacy}","received_events_url":"https://api.github.com/users/workato/received_events","type":"Organization","site_admin":false},"repo":{"id":143073259,"node_id":"MDEwOlJlcG9zaXRvcnkxNDMwNzMyNTk=","name":"custom_connector_docs","full_name":"workato/custom_connector_docs","owner":{"login":"workato","id":5629924,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2Mjk5MjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/5629924?v=4","gravatar_id":"","url":"https://api.github.com/users/workato","html_url":"https://github.com/workato","followers_url":"https://api.github.com/users/workato/followers","following_url":"https://api.github.com/users/workato/following{/other_user}","gists_url":"https://api.github.com/users/workato/gists{/gist_id}","starred_url":"https://api.github.com/users/workato/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/workato/subscriptions","organizations_url":"https://api.github.com/users/workato/orgs","repos_url":"https://api.github.com/users/workato/repos","events_url":"https://api.github.com/users/workato/events{/privacy}","received_events_url":"https://api.github.com/users/workato/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/workato/custom_connector_docs","description":null,"fork":false,"url":"https://api.github.com/repos/workato/custom_connector_docs","forks_url":"https://api.github.com/repos/workato/custom_connector_docs/forks","keys_url":"https://api.github.com/repos/workato/custom_connector_docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/workato/custom_connector_docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/workato/custom_connector_docs/teams","hooks_url":"https://api.github.com/repos/workato/custom_connector_docs/hooks","issue_events_url":"https://api.github.com/repos/workato/custom_connector_docs/issues/events{/number}","events_url":"https://api.github.com/repos/workato/custom_connector_docs/events","assignees_url":"https://api.github.com/repos/workato/custom_connector_docs/assignees{/user}","branches_url":"https://api.github.com/repos/workato/custom_connector_docs/branches{/branch}","tags_url":"https://api.github.com/repos/workato/custom_connector_docs/tags","blobs_url":"https://api.github.com/repos/workato/custom_connector_docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/workato/custom_connector_docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/workato/custom_connector_docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/workato/custom_connector_docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/workato/custom_connector_docs/statuses/{sha}","languages_url":"https://api.github.com/repos/workato/custom_connector_docs/languages","stargazers_url":"https://api.github.com/repos/workato/custom_connector_docs/stargazers","contributors_url":"https://api.github.com/repos/workato/custom_connector_docs/contributors","subscribers_url":"https://api.github.com/repos/workato/custom_connector_docs/subscribers","subscription_url":"https://api.github.com/repos/workato/custom_connector_docs/subscription","commits_url":"https://api.github.com/repos/workato/custom_connector_docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/workato/custom_connector_docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/workato/custom_connector_docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/workato/custom_connector_docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/workato/custom_connector_docs/contents/{+path}","compare_url":"https://api.github.com/repos/workato/custom_connector_docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/workato/custom_connector_docs/merges","archive_url":"https://api.github.com/repos/workato/custom_connector_docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/workato/custom_connector_docs/downloads","issues_url":"https://api.github.com/repos/workato/custom_connector_docs/issues{/number}","pulls_url":"https://api.github.com/repos/workato/custom_connector_docs/pulls{/number}","milestones_url":"https://api.github.com/repos/workato/custom_connector_docs/milestones{/number}","notifications_url":"https://api.github.com/repos/workato/custom_connector_docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/workato/custom_connector_docs/labels{/name}","releases_url":"https://api.github.com/repos/workato/custom_connector_docs/releases{/id}","deployments_url":"https://api.github.com/repos/workato/custom_connector_docs/deployments","created_at":"2018-07-31T21:44:08Z","updated_at":"2018-08-08T15:08:59Z","pushed_at":"2018-08-11T17:02:06Z","git_url":"git://github.com/workato/custom_connector_docs.git","ssh_url":"git@github.com:workato/custom_connector_docs.git","clone_url":"https://github.com/workato/custom_connector_docs.git","svn_url":"https://github.com/workato/custom_connector_docs","homepage":null,"size":658,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":4,"license":null,"forks":1,"open_issues":4,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8"},"html":{"href":"https://github.com/workato/custom_connector_docs/pull/8"},"issue":{"href":"https://api.github.com/repos/workato/custom_connector_docs/issues/8"},"comments":{"href":"https://api.github.com/repos/workato/custom_connector_docs/issues/8/comments"},"review_comments":{"href":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8/comments"},"review_comment":{"href":"https://api.github.com/repos/workato/custom_connector_docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/workato/custom_connector_docs/pulls/8/commits"},"statuses":{"href":"https://api.github.com/repos/workato/custom_connector_docs/statuses/8431269c02a0ddf849f80dab9a9a5207b22219f2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"houndci-bot"}}