{"action":"created","comment":{"url":"https://api.github.com/repos/workato/connector_sdk/pulls/comments/166841668","pull_request_review_id":94966888,"id":166841668,"diff_hunk":"@@ -0,0 +1,1162 @@\n+{\n+  title: \"workfront\",\n+\n+  connection: {\n+    fields: [\n+      { name: \"subdomain\",\n+        control_type: \"subdomain\",\n+        url: \".workfront.com\",\n+        optional: false,\n+        label: \"Subdomain\",\n+        hint: \"Your workfront subdomain as found in your URL\" },\n+      { name: \"apikey\", control_type: :password,\n+        label: \"API key\", optional: false },\n+      { name: \"version\", label: \"API version\",\n+        optional: false, hint: \"Version from Workfront API e.g. v8.0\" }\n+\n+    ],\n+    authorization: {\n+      type: \"api_key\",\n+\n+      credentials: lambda do |connection|\n+        params(apiKey: connection['apikey'])\n+      end\n+    },\n+    base_uri: lambda do |connection|\n+      \"https://#{connection['subdomain']}.workfront.com\"\n+    end\n+  },\n+\n+  object_definitions: {\n+    project: {\n+      fields: lambda do |connection, config|\n+        get(\"/attask/api/#{connection['version']}/proj/metadata\")[\"data\"][\"fields\"].\n+        map do |key, value|\n+          case value[\"fieldType\"]\n+          when \"string\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              string_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: string_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"double\"\n+            { name: key, label: \"#{value['label']}\".labelize,\n+                type: :ineger, control_type: :number }\n+          when \"date\"\n+            { name: key, type: :date,  label: \"#{value['label']}\".labelize,\n+                control_type: :date_time }\n+          when \"boolean\"\n+            { name: key, label: \"#{value['label']}\".labelize, type: :boolean,\n+                control_type: :checkbox,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+          when \"string[]\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              select_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: select_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"dateTime\"\n+            { name: key, type: :date_time, label: \"#{value['label']}\".labelize }\n+          when \"int\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize, type: :integer,\n+                control_type: :number }\n+            else\n+              int_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: int_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :integer,\n+                  control_type: \"number\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"map\"\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          else\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          end\n+        end\n+      end\n+    },\n+    program: {\n+      fields: lambda do |connection, config|\n+        get(\"/attask/api/#{connection['version']}/prgm/metadata\")[\"data\"][\"fields\"].\n+        map do |key, value|\n+          case value[\"fieldType\"]\n+          when \"string\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              string_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: string_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"double\"\n+            { name: key, label: \"#{value['label']}\".labelize,\n+                type: :ineger, control_type: :number }\n+          when \"date\"\n+            { name: key, type: :date,  label: \"#{value['label']}\".labelize,\n+                control_type: :date_time }\n+          when \"boolean\"\n+            { name: key, label: \"#{value['label']}\".labelize, type: :boolean,\n+                control_type: :checkbox,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+          when \"string[]\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              select_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: select_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"dateTime\"\n+            { name: key, type: :date_time, label: \"#{value['label']}\".labelize }\n+          when \"int\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize, type: :integer,\n+                control_type: :number }\n+            else\n+              int_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: int_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :integer,\n+                  control_type: \"number\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"map\"\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          else\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          end\n+        end\n+      end\n+    },\n+    issue: {\n+      fields: lambda do |connection, config|\n+        get(\"/attask/api/#{connection['version']}/optask/metadata\")[\"data\"][\"fields\"].\n+        map do |key, value|\n+          case value[\"fieldType\"]\n+          when \"string\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              string_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: string_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"double\"\n+            { name: key, label: \"#{value['label']}\".labelize,\n+                type: :ineger, control_type: :number }\n+          when \"date\"\n+            { name: key, type: :date,  label: \"#{value['label']}\".labelize,\n+                control_type: :date_time }\n+          when \"boolean\"\n+            { name: key, label: \"#{value['label']}\".labelize, type: :boolean,\n+                control_type: :checkbox,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+          when \"string[]\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              select_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: select_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"dateTime\"\n+            { name: key, type: :date_time, label: \"#{value['label']}\".labelize }\n+          when \"int\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize, type: :integer,\n+                control_type: :number }\n+            else\n+              int_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: int_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :integer,\n+                  control_type: \"number\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"map\"\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          else\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          end\n+        end\n+      end\n+    },\n+    object_output: {\n+      fields: lambda do |connection, config|\n+        get(\"/attask/api/#{connection['version']}/#{config['objCode']}/metadata\")[\"data\"][\"fields\"].\n+        map do |key, value|\n+          case value[\"fieldType\"]\n+          when \"string\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              string_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: string_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"double\"\n+            { name: key, label: \"#{value['label']}\".labelize,\n+                type: :ineger, control_type: :number }\n+          when \"date\"\n+            { name: key, type: :date,  label: \"#{value['label']}\".labelize,\n+                control_type: :date_time }\n+          when \"boolean\"\n+            { name: key, label: \"#{value['label']}\".labelize, type: :boolean,\n+                control_type: :checkbox,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+          when \"string[]\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize }\n+            else\n+              select_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: select_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :string,\n+                  control_type: \"text\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"dateTime\"\n+            { name: key, type: :date_time, label: \"#{value['label']}\".labelize }\n+          when \"int\"\n+            if value[\"enumType\"].blank?\n+              { name: key, label: \"#{value['label']}\".labelize, type: :integer,\n+                control_type: :number }\n+            else\n+              int_list = value[\"possibleValues\"].map do |item|\n+                [item[\"label\"], item[\"value\"]]\n+              end\n+              { name: key, label: \"#{value['label']}\".labelize, control_type: :select,\n+                pick_list: int_list,\n+                toggle_hint: \"Select from list\",\n+                toggle_field: {\n+                  name: key,\n+                  label: \"#{value['label']}\".labelize,\n+                  type: :integer,\n+                  control_type: \"number\",\n+                  optional: false,\n+                  toggle_hint: \"Use custom value\" } }\n+            end\n+          when \"map\"\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          else\n+            { name: key, label: \"#{value['label']}\".labelize }\n+          end\n+        end\n+      end\n+    },\n+    custom_object: {\n+      fields: lambda do |connection, config|\n+        \n+        if config[\"custom_fields\"].blank?\n+          []\n+        else\n+          { name: \"parameterValues\",\n+            type: \"object\",\n+            properties: config[\"custom_fields\"].split(\"\\n\").\n+              map do |field|\n+                {\n+                  name: field,\n+                  label: field\n+                }\n+              end }\n+        end\n+      end },\n+    custom_fields_input: {\n+      fields: lambda do |connection, config|\n+        char_mapping = {\n+          \" \" => \"_space_\",\n+          \":\" => \"_colon_\"\n+        }\n+\n+        if config[\"custom_fields\"].blank?\n+          []\n+        else\n+         config[\"custom_fields\"].split(\"\\n\").\n+            map do |field|\n+              {\n+                name: field.gsub(/[:\\s]/, char_mapping),\n+                label: field,\n+                sticky: true\n+              }\n+            end\n+          \n+        end\n+      end\n+    }\n+  },\n+\n+  test: lambda do |connection|\n+    get(\"/attask/api/#{connection['version']}/project/search?$$LIMIT=1\")\n+  end,\n+\n+  actions: {\n+    get_project_details_by_id: {\n+      description: 'Get <span class=\"provider\">project</span> details by ID \n+      in <span class=\"provider\">Workfront</span>',\n+      subtitle: \"Get project details in Workfront\",\n+      help: \"Fetches the project details for the given Project ID\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          hint: \"Custom fields involved in this action. one per line. \" \\\n+           \"fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do\n+        [\n+          { name: \"ID\", type: :string, optional: false, label: \"Project ID\" }\n+        ]\n+      end,\n+      execute: lambda do |connection, input|\n+        project = get(\"/attask/api/#{connection['version']}/project/\" + \\\n+          input[\"ID\"] + \"?fields=*&fields=parameterValues\")[\"data\"]\n+      end,\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"project\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        properties\n+      end,\n+      sample_output: lambda do |connection|\n+        get(\"https://#{connection['subdomain']}.workfront.com/attask/api/\" \\\n+         \"project/search?fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+\n+    search_projects: {\n+      description: \"Search <span class='provider'>projects</span> in \n+      <span class='provider'>Workfront</span>\",\n+      subtitle: \"Search projects with project name in Workfront\",\n+      help: \"Search projects which matches the criteria from Workfront\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          hint: \"Custom fields involved in this action. one per line. \" \\\n+           \"fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do |_object_definitions|\n+        [\n+          {\n+            name: \"name\", type: :string, optional: false,\n+            label: \"Project name\",\n+            hint: \"Fetch projects that contains this keyword\"\n+          }\n+        ]\n+      end,\n+      execute: lambda do |connection, input|\n+        projects = get(\"/attask/api/#{connection['version']}/project/search?\" \\\n+          \"fields=*&fields=parameterValues&\" \\\n+          \"name=\" + input[\"name\"] + \"&name_Mod=contains\")[\"data\"]\n+        {\n+          projects: projects\n+        }\n+      end,\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"project\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        [\n+          {\n+            name: \"projects\", type: :array, of: :object,\n+            label: \"Projects\", properties: properties\n+          }\n+        ]\n+      end,\n+      sample_output: lambda do |connection, _object_definitions|\n+        {\n+          projects: get(\"/attask/api/#{connection['version']}/project/\" \\\n+            \"search?fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+        }\n+      end\n+    },\n+\n+    create_project: {\n+      description: \"Create <span class='provider'>project</span> in \n+      <span class='provider'>Workfront</span>\",\n+      subtitle: \"Create project with details in Workfront\",\n+      help: \"Select the feilds which are part of Project creation\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do |object_definitions|\n+        object_definitions[\"project\"].\n+          ignored(\"ID\", \"lastUpdateDate\", \"lastUpdatedByID\",\n+                  \"entryDate\", \"enteredByID\").\n+          required(\"name\").\n+          concat(object_definitions[\"custom_fields_input\"])\n+      end,\n+      execute: lambda do |connection, input|\n+        input.delete(\"custom_fields\")\n+        parameters = input.map do |key, value|\n+          if key.downcase.include?(\"date\")\n+            { key => value.to_time.in_time_zone(\"US/Eastern\").iso8601 }\n+          else\n+            { key.gsub(\"_space_\", \" \").gsub(\"_colon_\", \":\") => value }\n+          end\n+        end.inject(:merge)\n+        post(\"/attask/api/#{connection['version']}/project\", parameters).\n+          params(fields: \"*\", fields: \"parameterValues\") [\"data\"]\n+      end,\n+      output_fields: lambda do |object_definitions|\n+        object_definitions[\"project\"]\n+      end,\n+      sample_output: lambda do |connection|\n+        get(\"/attask/api/#{connection['version']}/project/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+\n+    search_programs: {\n+      description: 'Search <span class=\"provider\">programs</span> in\n+       <span class=\"provider\">Workfront</span>',\n+      subtitle: \"Search programs in Workfront\",\n+      help: \"Search programs by program name in Workfront\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line. \" \\\n+           \"fields with only folon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do\n+        [\n+          {\n+            name: \"name\", type: :string, optional: false,\n+            label: \"Program name\",\n+            hint: \"Fetch Programs that contains this keyword\"\n+          }\n+        ]\n+      end,\n+      execute: lambda do |connection, input|\n+        programs = get(\"/attask/api/#{connection['version']}/program/\" \\\n+          \"search?fields=*&fields=parameterValues&\" \\\n+          \"name=\" + input[\"name\"] + \"&name_Mod=contains\")[\"data\"]\n+        {\n+          programs: programs\n+        }\n+      end,\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"program\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        [\n+          {\n+            name: \"programs\", type: :array, of: :object, properties: properties\n+          }\n+        ]\n+      end,\n+      sample_output: lambda do |connection|\n+        {\n+          programs: get(\"/attask/api/#{connection['version']}/program/\" \\\n+            \"search?fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+        }\n+      end\n+    },\n+\n+    get_program_details_by_id: {\n+      description: 'Get <span class=\"provider\">Program</span> details in\n+       <span class=\"provider\">Workfront</span>',\n+      subtitle: \"Get program details by ID in Workfront\",\n+      help: \"Get program details from Workfront\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do\n+        [\n+          {\n+            name: \"ID\", type: :string, optional: false, label: \"Program ID\",\n+            hint: \"Get Program details with Program ID\"\n+          }\n+        ]\n+      end,\n+      execute: lambda do |connection, input|\n+        get(\"/attask/api/#{connection['version']}/program/\" + \\\n+          input[\"ID\"] + \"?fields=*&fields=parameterValues\")[\"data\"]\n+      end,\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"program\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        properties\n+      end,\n+      sample_output: lambda do |connection|\n+        get(\"/attask/api/#{connection['version']}/program/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+    get_issue_details_by_id: {\n+      description: 'Get <span class=\"provider\">issue</span> details in\n+       <span class=\"provider\">Workfront</span>',\n+      subtitle: \"Get issue details by ID in Workfront\",\n+      help: \"Get issue details from Workfront\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do\n+        [\n+          {\n+            name: \"ID\", type: :string, optional: false, label: \"Issue ID\",\n+            hint: \"Get issue details with Issue ID\"\n+          }\n+        ]\n+      end,\n+      execute: lambda do |connection, input|\n+        get(\"/attask/api/#{connection['version']}/optask/\" \\\n+        + input[\"ID\"] + \"?fields=*&fields=parameterValues\")[\"data\"]\n+      end,\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"issue\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        properties\n+      end,\n+      sample_output: lambda do |connection, _object_definitions|\n+        get(\"/attask/api/#{connection['version']}/optask/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+    create_issue: {\n+      description: \"Create <span class='provider'>issue</span> in\n+       <span class='provider'>Workfront</span>\",\n+      subtitle: \"Create issue with details in Workfront\",\n+      help: \"Select the feilds which are part of Issue creation\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do |object_definitions|\n+        [\n+          { name: \"projectID\", label: \"Project Name\", control_type: :select,\n+            pick_list: \"projects\",\n+            sticky: true,\n+            optional: false,\n+            toggle_hint: \"Select from list\",\n+            toggle_field: {\n+              name: \"projectID\",\n+              label: \"projectID\".labelize,\n+              type: :string,\n+              control_type: \"text\",\n+              optional: false,\n+              toggle_hint: \"Use custom value\" } },\n+          { name: \"categoryID\", label: \"categoryID\".labelize, sticky: true,\n+            hint: \"Category ID is required if Custom fields are used.\" }\n+        ].\n+          concat(object_definitions[\"issue\"].\n+            ignored(\"ID\", \"lastUpdateDate\",\n+                    \"lastUpdatedByID\", \"entryDate\",\n+                    \"enteredByID\", \"projectID\", \"categoryID\")).\n+          required(\"projectID\", \"name\").\n+          concat(object_definitions[\"custom_fields_input\"])\n+      end,\n+\n+      execute: lambda do |connection, input|\n+        input.delete(\"custom_fields\")\n+        parameters = input.map do |key, value|\n+          if key.downcase.include?(\"date\")\n+            { key => value.to_time.in_time_zone(\"US/Eastern\").iso8601 }\n+          else\n+            { key.gsub(\"_space_\", \" \").gsub(\"_colon_\", \":\") => \"#{value}\" }\n+          end\n+        end.inject(:merge)\n+        post(\"/attask/api/#{connection['version']}/issue?fields=*\").\n+          params(parameters) [\"data\"]\n+      end,\n+\n+      output_fields: lambda do |object_definitions|\n+        object_definitions[\"issue\"]\n+      end,\n+\n+      sample_output: lambda do |connection|\n+        get(\"/attask/api/#{connection['version']}/optask/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+    get_object_details_by_id: {\n+      description: \"Get <span class='provider'>Object</span> in\n+       <span class='provider'>details in Workfront</span>\",\n+      subtitle: \"Get Object details in Workfront\",\n+      help: \"Get Workfront object details by ID.\",\n+      config_fields: [\n+        {\n+          name: \"objCode\", control_type: :select,\n+          pick_list: :objects, label: \"Object\",\n+          optional: false,\n+          hint: \"Select Object\",\n+          toggle_hint: \"Select from list\",\n+          toggle_field: {\n+            name: \"objCode\",\n+            label: \"Object Code\",\n+            type: :string,\n+            control_type: :text,\n+            optional: false,\n+            toggle_hint: \"Use custom value\",\n+            hint: \"Provide the object code or name e.g.  for Project enter\"\\\n+            \" <code>PROJ</code> or <code>project</code>\"\n+          }\n+        },\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+\n+      input_fields: lambda do\n+        [\n+          {\n+            name: \"ID\", type: :string, optional: false, label: \"Object ID\",\n+            hint: \"Get Object details with object ID\"\n+          }\n+        ]\n+      end,\n+\n+      execute: lambda do |connection, input|\n+        get(\"/attask/api/#{connection['version']}/#{input['objCode']}/\" \\\n+        + input[\"ID\"] + \"?fields=*&fields=parameterValues\")[\"data\"]\n+      end,\n+\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"object_output\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        properties\n+      end,\n+\n+      sample_output: lambda do |connection, input|\n+        get(\"/attask/api/#{connection['version']}/#{input['objCode']}/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+    upload_document: {\n+      description: \"Upload <span class='provider'>document</span> in\n+       <span class='provider'> to Object in Workfront</span>\",\n+      subtitle: \"Upload document to Object e.g. Project, Issue in Workfront\",\n+      hint: \"Upload supports only with Project, Issue objects\",\n+      input_fields: lambda do\n+        [\n+          { name: \"name\", optional: false, label: \"Document name\",\n+            hint: \"File name with extension\" },\n+          { name: \"docObjCode\", optional: false, label: \"Document object code\",\n+            hint: \"e.g. PROJ for Project\" },\n+          { name: \"objID\", optional: false, label: \"Object ID\",\n+            hint: \"e.g. Project ID for Project Object\" },\n+          { name: \"fileName\", optional: false, label: \"File name\" },\n+          { name: \"file\", type: :file, optional: false, label: \"File content\" },\n+          { name: \"version\", type: :file, optional: false,\n+            label: \"File version\", hint: \"only numbers allowed e.g. 1.0\" }\n+        ]\n+      end,\n+\n+      execute: lambda do |connection, input|\n+        handle = post(\"/attask/api/#{connection['version']}/upload\").\n+          request_format_multipart_form.\n+          payload(uploadedFile: input[\"file\"]) [\"data\"][\"handle\"]\n+        if handle.present?\n+          post(\"/attask/api/#{connection['version']}/document\").\n+            payload(name: input[\"name\"],\n+                    handle: handle,\n+                    docObjCode: input[\"docObjCode\"],\n+                    objID: input[\"objID\"],\n+                    currentVersion: { \"version\": input[\"version\"],\n+                                      \"fileName\": input[\"fileName\"] }) [\"data\"]\n+        end\n+      end,\n+      output_fields: lambda do\n+        [\n+          { name: \"ID\" },\n+          { name: \"name\" },\n+          { name: \"objCode\" },\n+          { name: \"description\" },\n+          { name: \"lastUpdateDate\", type: \"date_time\" }\n+        ]\n+      end,\n+      sample_output: lambda do\n+        {\n+          \"ID\": \"58e7e2730050aa5fa78d2976b6d\",\n+          \"name\": \"Test\",\n+          \"objCode\": \"PROJ\",\n+          \"description\": \"Updated by lorem ipsum\",\n+          \"lastUpdateDate\": \"2017-04-21T21:27:38:155+0530\"\n+        }\n+      end\n+    }\n+  },\n+\n+  triggers: {\n+    new_updated_project: {\n+      description: \"New or updated <span class='provider'>project</span> in\n+       <span class='provider'>Workfront</span>\",\n+      subtitle: \"New or updated project in Workfront\",\n+      help: \"Trigger polling time interval is based on user subscription.\",\n+      config_fields: [\n+        {\n+          name: \"port_id\", control_type: :select,\n+          pick_list: :portfolios, label: \"Portfolio\",\n+          optional: false,\n+          hint: \"Select portfolio to process projects belongs\",\n+          toggle_hint: \"Select from list\",\n+          toggle_field: {\n+            name: \"port_id\",\n+            label: \"Portfolio ID\",\n+            type: :string,\n+            control_type: :text,\n+            optional: false,\n+            toggle_hint: \"Use custom value\",\n+            hint: \"Provide the Portfolio ID for reading projects changes\"\n+          }\n+        },\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do\n+        [\n+          name: \"since\", type: :date_time, sticky: true,\n+          label: \"From\", hint: \"Fetch projects from specified Date\"\n+        ]\n+      end,\n+\n+      poll: lambda do |connection, input, last_updated_time|\n+        last_updated_time ||= (input[\"since\"].presence || Time.now).to_time.\n+          in_time_zone(\"US/Central\").iso8601\n+        projects = get(\"/attask/api/#{connection['version']}/project/\" \\\n+          \"search?fields=*&fields=parameterValues\").\n+          params(portfolioID: input[\"port_id\"],\n+                portfolioID_Mod: \"eq\",\n+                lastUpdateDate: last_updated_time,\n+                lastUpdateDate_Mod: \"gt\",\n+                lastUpdateDate_Sort: \"asc\")[\"data\"]\n+        last_updated_time = projects.last[\"lastUpdateDate\"] unless\n+         projects.blank?\n+        {\n+          events: projects,\n+          next_poll: last_updated_time,\n+          can_poll_more: !projects.blank?\n+        }\n+      end,\n+\n+      dedup: lambda do |project|\n+        project[\"ID\"] + \"@\" + project[\"lastUpdateDate\"]\n+      end,\n+\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"project\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        properties\n+      end,\n+\n+      sample_output: lambda do |connection, _object_definitions|\n+        get(\"/attask/api/#{connection['version']}/project/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0)\n+      end\n+    },\n+\n+    new_updated_issue: {\n+      description: \"New or updated <span class='provider'>issue</span> in\n+       <span class='provider'>Workfront</span>\",\n+      subtitle: \"New or updated issue in Workfront\",\n+      help: \"Trigger polling time interval is based on user subscription.\",\n+      config_fields: [\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do |_object_definitions|\n+        [\n+          name: \"since\", type: :date_time, sticky: true,\n+          label: \"From\", hint: \"Fetch projects from specified Date\"\n+        ]\n+      end,\n+      poll: lambda do |connection, input, last_updated_time|\n+        last_updated_time ||= (input[\"since\"].presence || Time.now).to_time.\n+          in_time_zone(\"US/Central\").iso8601\n+        issues = get(\"/attask/api/#{connection['version']}/optask/search?\" \\\n+          \"fields=*&fields=parameterValues\").\n+          params(lastUpdateDate: last_updated_time,\n+                lastUpdateDate_Mod: \"gt\",\n+                lastUpdateDate_Sort: \"asc\")[\"data\"]\n+        last_updated_time = issues.last[\"lastUpdateDate\"] unless\n+         issues.blank?\n+        {\n+          events: issues,\n+          next_poll: last_updated_time,\n+          can_poll_more: !issues.blank?\n+        }\n+      end,\n+\n+      dedup: lambda do |issue|\n+        issue[\"ID\"] + \"@\" + issue[\"lastUpdateDate\"]\n+      end,\n+\n+      output_fields: lambda do |object_definitions|\n+        properties =  object_definitions[\"issue\"]\n+        properties << object_definitions[\"custom_object\"] unless\n+         object_definitions[\"custom_object\"].blank?\n+        properties\n+      end,\n+\n+      sample_output: lambda do |connection, _object_definitions|\n+        get(\"/attask/api/#{connection['version']}/optask/search?\" \\\n+          \"fields=*&$$LIMIT=1\").dig(\"data\", 0) || {}\n+      end\n+    },\n+    new_object: {\n+      description: \"New <span class='provider'>Object</span> in\n+       <span class='provider'>Workfront</span>\",\n+      subtitle: \"New Object in Workfront\",\n+      help: \"Trigger polling time interval is based on user subscription.\",\n+      config_fields: [\n+        {\n+          name: \"objCode\", control_type: :select,\n+          pick_list: :objects, label: \"Object\",\n+          optional: false,\n+          hint: \"Select Object\",\n+          toggle_hint: \"Select from list\",\n+          toggle_field: {\n+            name: \"objCode\",\n+            label: \"Object Code\",\n+            type: :string,\n+            control_type: :text,\n+            optional: false,\n+            toggle_hint: \"Use custom value\",\n+            hint: \"Provide the object code or name e.g.  for Project enter\"\\\n+            \" <code>PROJ</code> or <code>project</code>\"\n+          }\n+        },\n+        {\n+          name: \"custom_fields\",\n+          control_type: \"text-area\",\n+          change_on_blur: true,\n+          sticky: true,\n+          hint: \"Custom fields involved in this action. one per line.\" \\\n+           \" fields with only colon and space are allowed.\" \\\n+            \" e.g. <code>DE:Project Manager</code>\"\n+        }\n+      ],\n+      input_fields: lambda do\n+        [\n+          name: \"since\", type: :date_time, sticky: true,\n+          label: \"From\", hint: \"Fetch objects from specified Date\"\n+        ]\n+      end,\n+\n+      poll: lambda do |connection, input, last_entered_time|\n+        last_entered_time ||= (input[\"since\"].presence || Time.now).to_time.\n+          in_time_zone(\"US/Central\").iso8601\n+        objects = get(\"/attask/api/#{connection['version']}/\" \\\n+          \"#{input['objCode']}/search?fields=*&fields=parameterValues\").\n+          params(entryDate: last_entered_time,\n+                entryDate_Mod: \"gt\",","path":"api_key_auth/workfront.rb","position":1039,"original_position":1039,"commit_id":"7ea6c528a8e0c9a80003782e416f2175302d602a","original_commit_id":"7ea6c528a8e0c9a80003782e416f2175302d602a","user":{"login":"houndci-bot","id":6697940,"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":"Align the elements of a hash literal if they span more than one line.","created_at":"2018-02-08T06:24:11Z","updated_at":"2018-02-08T06:24:12Z","html_url":"https://github.com/workato/connector_sdk/pull/109#discussion_r166841668","pull_request_url":"https://api.github.com/repos/workato/connector_sdk/pulls/109","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/workato/connector_sdk/pulls/comments/166841668"},"html":{"href":"https://github.com/workato/connector_sdk/pull/109#discussion_r166841668"},"pull_request":{"href":"https://api.github.com/repos/workato/connector_sdk/pulls/109"}}},"pull_request":{"url":"https://api.github.com/repos/workato/connector_sdk/pulls/109","id":167887311,"html_url":"https://github.com/workato/connector_sdk/pull/109","diff_url":"https://github.com/workato/connector_sdk/pull/109.diff","patch_url":"https://github.com/workato/connector_sdk/pull/109.patch","issue_url":"https://api.github.com/repos/workato/connector_sdk/issues/109","number":109,"state":"open","locked":false,"title":"Workfront Connector","user":{"login":"svchandra","id":22195459,"avatar_url":"https://avatars2.githubusercontent.com/u/22195459?v=4","gravatar_id":"","url":"https://api.github.com/users/svchandra","html_url":"https://github.com/svchandra","followers_url":"https://api.github.com/users/svchandra/followers","following_url":"https://api.github.com/users/svchandra/following{/other_user}","gists_url":"https://api.github.com/users/svchandra/gists{/gist_id}","starred_url":"https://api.github.com/users/svchandra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/svchandra/subscriptions","organizations_url":"https://api.github.com/users/svchandra/orgs","repos_url":"https://api.github.com/users/svchandra/repos","events_url":"https://api.github.com/users/svchandra/events{/privacy}","received_events_url":"https://api.github.com/users/svchandra/received_events","type":"User","site_admin":false},"body":"Workfront Adapter\r\n\r\nReference #96 has issues loading the adapter. Created new Branch.","created_at":"2018-02-08T06:23:59Z","updated_at":"2018-02-08T06:24:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d28b55fb92934888c81cf7f0eb1621b5c2e710e5","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/workato/connector_sdk/pulls/109/commits","review_comments_url":"https://api.github.com/repos/workato/connector_sdk/pulls/109/comments","review_comment_url":"https://api.github.com/repos/workato/connector_sdk/pulls/comments{/number}","comments_url":"https://api.github.com/repos/workato/connector_sdk/issues/109/comments","statuses_url":"https://api.github.com/repos/workato/connector_sdk/statuses/7ea6c528a8e0c9a80003782e416f2175302d602a","head":{"label":"workato:svchandra-workfront","ref":"svchandra-workfront","sha":"7ea6c528a8e0c9a80003782e416f2175302d602a","user":{"login":"workato","id":5629924,"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":54221993,"name":"connector_sdk","full_name":"workato/connector_sdk","owner":{"login":"workato","id":5629924,"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/connector_sdk","description":"Connector SDK samples and documentation","fork":false,"url":"https://api.github.com/repos/workato/connector_sdk","forks_url":"https://api.github.com/repos/workato/connector_sdk/forks","keys_url":"https://api.github.com/repos/workato/connector_sdk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/workato/connector_sdk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/workato/connector_sdk/teams","hooks_url":"https://api.github.com/repos/workato/connector_sdk/hooks","issue_events_url":"https://api.github.com/repos/workato/connector_sdk/issues/events{/number}","events_url":"https://api.github.com/repos/workato/connector_sdk/events","assignees_url":"https://api.github.com/repos/workato/connector_sdk/assignees{/user}","branches_url":"https://api.github.com/repos/workato/connector_sdk/branches{/branch}","tags_url":"https://api.github.com/repos/workato/connector_sdk/tags","blobs_url":"https://api.github.com/repos/workato/connector_sdk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/workato/connector_sdk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/workato/connector_sdk/git/refs{/sha}","trees_url":"https://api.github.com/repos/workato/connector_sdk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/workato/connector_sdk/statuses/{sha}","languages_url":"https://api.github.com/repos/workato/connector_sdk/languages","stargazers_url":"https://api.github.com/repos/workato/connector_sdk/stargazers","contributors_url":"https://api.github.com/repos/workato/connector_sdk/contributors","subscribers_url":"https://api.github.com/repos/workato/connector_sdk/subscribers","subscription_url":"https://api.github.com/repos/workato/connector_sdk/subscription","commits_url":"https://api.github.com/repos/workato/connector_sdk/commits{/sha}","git_commits_url":"https://api.github.com/repos/workato/connector_sdk/git/commits{/sha}","comments_url":"https://api.github.com/repos/workato/connector_sdk/comments{/number}","issue_comment_url":"https://api.github.com/repos/workato/connector_sdk/issues/comments{/number}","contents_url":"https://api.github.com/repos/workato/connector_sdk/contents/{+path}","compare_url":"https://api.github.com/repos/workato/connector_sdk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/workato/connector_sdk/merges","archive_url":"https://api.github.com/repos/workato/connector_sdk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/workato/connector_sdk/downloads","issues_url":"https://api.github.com/repos/workato/connector_sdk/issues{/number}","pulls_url":"https://api.github.com/repos/workato/connector_sdk/pulls{/number}","milestones_url":"https://api.github.com/repos/workato/connector_sdk/milestones{/number}","notifications_url":"https://api.github.com/repos/workato/connector_sdk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/workato/connector_sdk/labels{/name}","releases_url":"https://api.github.com/repos/workato/connector_sdk/releases{/id}","deployments_url":"https://api.github.com/repos/workato/connector_sdk/deployments","created_at":"2016-03-18T18:08:56Z","updated_at":"2017-09-27T22:41:42Z","pushed_at":"2018-02-08T06:24:00Z","git_url":"git://github.com/workato/connector_sdk.git","ssh_url":"git@github.com:workato/connector_sdk.git","clone_url":"https://github.com/workato/connector_sdk.git","svn_url":"https://github.com/workato/connector_sdk","homepage":"","size":1756,"stargazers_count":11,"watchers_count":11,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":26,"mirror_url":null,"archived":false,"open_issues_count":37,"license":null,"forks":26,"open_issues":37,"watchers":11,"default_branch":"master"}},"base":{"label":"workato:master","ref":"master","sha":"710f9d5b627d16b442e74a6e0b83531d1d0a65ca","user":{"login":"workato","id":5629924,"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":54221993,"name":"connector_sdk","full_name":"workato/connector_sdk","owner":{"login":"workato","id":5629924,"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/connector_sdk","description":"Connector SDK samples and documentation","fork":false,"url":"https://api.github.com/repos/workato/connector_sdk","forks_url":"https://api.github.com/repos/workato/connector_sdk/forks","keys_url":"https://api.github.com/repos/workato/connector_sdk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/workato/connector_sdk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/workato/connector_sdk/teams","hooks_url":"https://api.github.com/repos/workato/connector_sdk/hooks","issue_events_url":"https://api.github.com/repos/workato/connector_sdk/issues/events{/number}","events_url":"https://api.github.com/repos/workato/connector_sdk/events","assignees_url":"https://api.github.com/repos/workato/connector_sdk/assignees{/user}","branches_url":"https://api.github.com/repos/workato/connector_sdk/branches{/branch}","tags_url":"https://api.github.com/repos/workato/connector_sdk/tags","blobs_url":"https://api.github.com/repos/workato/connector_sdk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/workato/connector_sdk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/workato/connector_sdk/git/refs{/sha}","trees_url":"https://api.github.com/repos/workato/connector_sdk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/workato/connector_sdk/statuses/{sha}","languages_url":"https://api.github.com/repos/workato/connector_sdk/languages","stargazers_url":"https://api.github.com/repos/workato/connector_sdk/stargazers","contributors_url":"https://api.github.com/repos/workato/connector_sdk/contributors","subscribers_url":"https://api.github.com/repos/workato/connector_sdk/subscribers","subscription_url":"https://api.github.com/repos/workato/connector_sdk/subscription","commits_url":"https://api.github.com/repos/workato/connector_sdk/commits{/sha}","git_commits_url":"https://api.github.com/repos/workato/connector_sdk/git/commits{/sha}","comments_url":"https://api.github.com/repos/workato/connector_sdk/comments{/number}","issue_comment_url":"https://api.github.com/repos/workato/connector_sdk/issues/comments{/number}","contents_url":"https://api.github.com/repos/workato/connector_sdk/contents/{+path}","compare_url":"https://api.github.com/repos/workato/connector_sdk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/workato/connector_sdk/merges","archive_url":"https://api.github.com/repos/workato/connector_sdk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/workato/connector_sdk/downloads","issues_url":"https://api.github.com/repos/workato/connector_sdk/issues{/number}","pulls_url":"https://api.github.com/repos/workato/connector_sdk/pulls{/number}","milestones_url":"https://api.github.com/repos/workato/connector_sdk/milestones{/number}","notifications_url":"https://api.github.com/repos/workato/connector_sdk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/workato/connector_sdk/labels{/name}","releases_url":"https://api.github.com/repos/workato/connector_sdk/releases{/id}","deployments_url":"https://api.github.com/repos/workato/connector_sdk/deployments","created_at":"2016-03-18T18:08:56Z","updated_at":"2017-09-27T22:41:42Z","pushed_at":"2018-02-08T06:24:00Z","git_url":"git://github.com/workato/connector_sdk.git","ssh_url":"git@github.com:workato/connector_sdk.git","clone_url":"https://github.com/workato/connector_sdk.git","svn_url":"https://github.com/workato/connector_sdk","homepage":"","size":1756,"stargazers_count":11,"watchers_count":11,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":26,"mirror_url":null,"archived":false,"open_issues_count":37,"license":null,"forks":26,"open_issues":37,"watchers":11,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/workato/connector_sdk/pulls/109"},"html":{"href":"https://github.com/workato/connector_sdk/pull/109"},"issue":{"href":"https://api.github.com/repos/workato/connector_sdk/issues/109"},"comments":{"href":"https://api.github.com/repos/workato/connector_sdk/issues/109/comments"},"review_comments":{"href":"https://api.github.com/repos/workato/connector_sdk/pulls/109/comments"},"review_comment":{"href":"https://api.github.com/repos/workato/connector_sdk/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/workato/connector_sdk/pulls/109/commits"},"statuses":{"href":"https://api.github.com/repos/workato/connector_sdk/statuses/7ea6c528a8e0c9a80003782e416f2175302d602a"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"houndci-bot"}}