gitlab_support_readiness 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/support_readiness/client.rb +108 -0
- data/lib/support_readiness/gitlab/client.rb +64 -0
- data/lib/support_readiness/gitlab/configuration.rb +46 -0
- data/lib/support_readiness/gitlab/groups.rb +180 -0
- data/lib/support_readiness/gitlab/issues.rb +410 -0
- data/lib/support_readiness/gitlab/namespaces.rb +190 -0
- data/lib/support_readiness/gitlab/projects.rb +510 -0
- data/lib/support_readiness/gitlab/repositories.rb +267 -0
- data/lib/support_readiness/gitlab/users.rb +488 -0
- data/lib/support_readiness/gitlab.rb +19 -0
- data/lib/support_readiness/pagerduty/client.rb +66 -0
- data/lib/support_readiness/pagerduty/configuration.rb +43 -0
- data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
- data/lib/support_readiness/pagerduty/schedules.rb +223 -0
- data/lib/support_readiness/pagerduty/services.rb +132 -0
- data/lib/support_readiness/pagerduty.rb +16 -0
- data/lib/support_readiness/redis.rb +90 -0
- data/lib/support_readiness/zendesk/articles.rb +210 -0
- data/lib/support_readiness/zendesk/automations.rb +304 -0
- data/lib/support_readiness/zendesk/client.rb +84 -0
- data/lib/support_readiness/zendesk/configuration.rb +49 -0
- data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
- data/lib/support_readiness/zendesk/groups.rb +249 -0
- data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
- data/lib/support_readiness/zendesk/macros.rb +267 -0
- data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
- data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
- data/lib/support_readiness/zendesk/organizations.rb +515 -0
- data/lib/support_readiness/zendesk/roles.rb +194 -0
- data/lib/support_readiness/zendesk/search.rb +159 -0
- data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
- data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
- data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
- data/lib/support_readiness/zendesk/tickets.rb +854 -0
- data/lib/support_readiness/zendesk/triggers.rb +269 -0
- data/lib/support_readiness/zendesk/users.rb +946 -0
- data/lib/support_readiness/zendesk/views.rb +469 -0
- data/lib/support_readiness/zendesk.rb +31 -0
- data/lib/support_readiness.rb +29 -0
- metadata +215 -0
| @@ -0,0 +1,194 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Defines the module Readiness.
         | 
| 4 | 
            +
            module Readiness
         | 
| 5 | 
            +
              # Defines the module Zendesk
         | 
| 6 | 
            +
              module Zendesk
         | 
| 7 | 
            +
                ##
         | 
| 8 | 
            +
                # Defines the class Roles within the module {Readiness::Zendesk}.
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                # @author Jason Colyer
         | 
| 11 | 
            +
                # @since 1.0.0
         | 
| 12 | 
            +
                class Roles < Readiness::Client
         | 
| 13 | 
            +
                  attr_accessor :configuration, :description, :id, :name, :role_type, :team_member_count
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  ##
         | 
| 16 | 
            +
                  # Creates a new {Readiness::Zendesk::Roles} instance
         | 
| 17 | 
            +
                  #
         | 
| 18 | 
            +
                  # @author Jason Colyer
         | 
| 19 | 
            +
                  # @since 1.0.0
         | 
| 20 | 
            +
                  # @param object [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 21 | 
            +
                  # @example
         | 
| 22 | 
            +
                  #   require 'support_readiness'
         | 
| 23 | 
            +
                  #   Readiness::Zendesk::Roles.new
         | 
| 24 | 
            +
                  def initialize(object = {})
         | 
| 25 | 
            +
                    @configuration = object['configuration']
         | 
| 26 | 
            +
                    @description = object['description']
         | 
| 27 | 
            +
                    @id = object['id']
         | 
| 28 | 
            +
                    @name = object['name']
         | 
| 29 | 
            +
                    @role_type = object['role_type']
         | 
| 30 | 
            +
                    @team_member_count = object['team_member_count']
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  ##
         | 
| 34 | 
            +
                  # Lists the Custom Roles
         | 
| 35 | 
            +
                  #
         | 
| 36 | 
            +
                  # @author Jason Colyer
         | 
| 37 | 
            +
                  # @since 1.0.0
         | 
| 38 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 39 | 
            +
                  # @return [Array]
         | 
| 40 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#list-custom-roles Zendesk API > Custom Roles > List Custom Roles
         | 
| 41 | 
            +
                  # @example
         | 
| 42 | 
            +
                  #   require 'support_readiness'
         | 
| 43 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 44 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 45 | 
            +
                  #   config.token = 'test123abc'
         | 
| 46 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 47 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 48 | 
            +
                  #   roles = Readiness::Zendesk::Roles.list(client)
         | 
| 49 | 
            +
                  #   pp roles.first.configuration['end_user_profile_access']
         | 
| 50 | 
            +
                  #   # => "readonly"
         | 
| 51 | 
            +
                  def self.list(client)
         | 
| 52 | 
            +
                    response = client.connection.get('custom_roles/')
         | 
| 53 | 
            +
                    handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
         | 
| 54 | 
            +
                    Oj.load(response.body)['custom_roles'].map { |s| Roles.new(s) }
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  ##
         | 
| 58 | 
            +
                  # Locates a Custom Role within Zendesk. This will not exit on error (except Authentication errors)
         | 
| 59 | 
            +
                  #
         | 
| 60 | 
            +
                  # @author Jason Colyer
         | 
| 61 | 
            +
                  # @since 1.0.0
         | 
| 62 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 63 | 
            +
                  # @param rid [Integer] The Custom Role ID to find
         | 
| 64 | 
            +
                  # @return [Hash]
         | 
| 65 | 
            +
                  # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#show-custom-role Zendesk API > Custom Roles > Show Custom Role
         | 
| 66 | 
            +
                  # @example
         | 
| 67 | 
            +
                  #   require 'support_readiness'
         | 
| 68 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 69 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 70 | 
            +
                  #   config.token = 'test123abc'
         | 
| 71 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 72 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 73 | 
            +
                  #   role = Readiness::Zendesk::Roles.find(client, 10127)
         | 
| 74 | 
            +
                  #   pp role.team_member_count
         | 
| 75 | 
            +
                  #   # => 10
         | 
| 76 | 
            +
                  def self.find(client, rid)
         | 
| 77 | 
            +
                    response = client.connection.get("custom_roles/#{rid}")
         | 
| 78 | 
            +
                    handle_request_error(0, 'Zendesk', response.status,  { action: 'get', id: rid }) unless response.status == 200
         | 
| 79 | 
            +
                    return Roles.new(Oj.load(response.body)['custom_role']) if response.status == 200
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    Oj.load(response.body)
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  ##
         | 
| 85 | 
            +
                  # Locates a Custom Role within within Zendesk. This will exit on error
         | 
| 86 | 
            +
                  #
         | 
| 87 | 
            +
                  # @author Jason Colyer
         | 
| 88 | 
            +
                  # @since 1.0.0
         | 
| 89 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 90 | 
            +
                  # @param rid [Integer] The Custom Role ID to find
         | 
| 91 | 
            +
                  # @return [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 92 | 
            +
                  # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#show-custom-role Zendesk API > Custom Roles > Show Custom Role
         | 
| 93 | 
            +
                  # @example
         | 
| 94 | 
            +
                  #   require 'support_readiness'
         | 
| 95 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 96 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 97 | 
            +
                  #   config.token = 'test123abc'
         | 
| 98 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 99 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 100 | 
            +
                  #   role = Readiness::Zendesk::Roles.find!(client, 10127)
         | 
| 101 | 
            +
                  #   pp role.team_member_count
         | 
| 102 | 
            +
                  #   # => 10
         | 
| 103 | 
            +
                  def self.find!(client, rid)
         | 
| 104 | 
            +
                    response = client.connection.get("custom_roles/#{rid}")
         | 
| 105 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Find Custom Role', id: rid }) unless response.status == 200
         | 
| 106 | 
            +
                    Roles.new(Oj.load(response.body)['custom_role'])
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  ##
         | 
| 110 | 
            +
                  # Creates a Custom Role. Will exit if unsuccessful
         | 
| 111 | 
            +
                  #
         | 
| 112 | 
            +
                  # @author Jason Colyer
         | 
| 113 | 
            +
                  # @since 1.0.0
         | 
| 114 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 115 | 
            +
                  # @param role [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 116 | 
            +
                  # @return [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 117 | 
            +
                  # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#create-custom-role Zendesk API > Custom Roles > Create Custom Role
         | 
| 118 | 
            +
                  # @example
         | 
| 119 | 
            +
                  #   require 'support_readiness'
         | 
| 120 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 121 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 122 | 
            +
                  #   config.token = 'test123abc'
         | 
| 123 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 124 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 125 | 
            +
                  #   orig_role = Readiness::Zendesk::Roles.find!(client, 10127)
         | 
| 126 | 
            +
                  #   new_role = Readiness::Zendesk::Roles.new
         | 
| 127 | 
            +
                  #   new_role.configuration = orig_role.configuration
         | 
| 128 | 
            +
                  #   new_role.configuration['explore_access'] = 'edit'
         | 
| 129 | 
            +
                  #   new_role.description = 'sample description'
         | 
| 130 | 
            +
                  #   new_role.name = 'sample role'
         | 
| 131 | 
            +
                  #   create = Readiness::Zendesk::Roles.create!(client, new_role)
         | 
| 132 | 
            +
                  #   pp create.id
         | 
| 133 | 
            +
                  #   # => 10127
         | 
| 134 | 
            +
                  def self.create!(client, role)
         | 
| 135 | 
            +
                    response = client.connection.post 'custom_roles/', to_clean_json_with_key(role, 'custom_role')
         | 
| 136 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Create Custom Role', message: Oj.load(response.body)}) unless response.status == 201
         | 
| 137 | 
            +
                    Roles.new(Oj.load(response.body)['custom_role'])
         | 
| 138 | 
            +
                  end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                  ##
         | 
| 141 | 
            +
                  # Updates a Custom Role. Will exit if unsuccessful
         | 
| 142 | 
            +
                  #
         | 
| 143 | 
            +
                  # @author Jason Colyer
         | 
| 144 | 
            +
                  # @since 1.0.0
         | 
| 145 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 146 | 
            +
                  # @param role [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 147 | 
            +
                  # @return [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 148 | 
            +
                  # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#update-custom-role Zendesk API > Custom Roles > Update Custom Role
         | 
| 149 | 
            +
                  # @example
         | 
| 150 | 
            +
                  #   require 'support_readiness'
         | 
| 151 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 152 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 153 | 
            +
                  #   config.token = 'test123abc'
         | 
| 154 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 155 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 156 | 
            +
                  #   role = Readiness::Zendesk::Roles.find!(client, 10127)
         | 
| 157 | 
            +
                  #   role.configuration['explore_access'] = 'edit'
         | 
| 158 | 
            +
                  #   update = Readiness::Zendesk::Roles.update!(client, role)
         | 
| 159 | 
            +
                  #   pp update.configuration['explore_access']
         | 
| 160 | 
            +
                  #   # => "edit"
         | 
| 161 | 
            +
                  def self.update!(client, role)
         | 
| 162 | 
            +
                    response = client.connection.put "custom_roles/#{role.id}", to_clean_json_with_key(role, 'custom_role')
         | 
| 163 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Update Custom Role', id: role.id, message: Oj.load(response.body)}) unless response.status == 200
         | 
| 164 | 
            +
                    Roles.new(Oj.load(response.body)['custom_role'])
         | 
| 165 | 
            +
                  end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                  ##
         | 
| 168 | 
            +
                  # Deletes a Custom Role. Will exit if unsuccessful
         | 
| 169 | 
            +
                  #
         | 
| 170 | 
            +
                  # @author Jason Colyer
         | 
| 171 | 
            +
                  # @since 1.0.0
         | 
| 172 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 173 | 
            +
                  # @param role [Object] An instance of {Readiness::Zendesk::Roles}
         | 
| 174 | 
            +
                  # @return [Boolean]
         | 
| 175 | 
            +
                  # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#delete-custom-role Zendesk API > Custom Roles > Delete Custom Role
         | 
| 176 | 
            +
                  # @example
         | 
| 177 | 
            +
                  #   require 'support_readiness'
         | 
| 178 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 179 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 180 | 
            +
                  #   config.token = 'test123abc'
         | 
| 181 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 182 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 183 | 
            +
                  #   role = Readiness::Zendesk::Roles.find!(client, 10127)
         | 
| 184 | 
            +
                  #   delete = Readiness::Zendesk::Roles.delete!(client, role)
         | 
| 185 | 
            +
                  #   pp delete
         | 
| 186 | 
            +
                  #   # => true
         | 
| 187 | 
            +
                  def self.delete!(client, role)
         | 
| 188 | 
            +
                    response = client.connection.delete "custom_roles/#{role.id}"
         | 
| 189 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Delete a Custom Role', id: role.id, message: Oj.load(response.body)}) unless response.status == 204
         | 
| 190 | 
            +
                    true
         | 
| 191 | 
            +
                  end
         | 
| 192 | 
            +
                end
         | 
| 193 | 
            +
              end
         | 
| 194 | 
            +
            end
         | 
| @@ -0,0 +1,159 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Defines the module Readiness.
         | 
| 4 | 
            +
            module Readiness
         | 
| 5 | 
            +
              # Defines the module Zendesk
         | 
| 6 | 
            +
              module Zendesk
         | 
| 7 | 
            +
                ##
         | 
| 8 | 
            +
                # Defines the class Search within the module {Readiness::Zendesk}.
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                # @author Jason Colyer
         | 
| 11 | 
            +
                # @since 1.0.0
         | 
| 12 | 
            +
                class Search < Readiness::Client
         | 
| 13 | 
            +
                  ##
         | 
| 14 | 
            +
                  # A wrapper for {Readiness::Zendesk::Search#search} that specifies to use type:ticket
         | 
| 15 | 
            +
                  #
         | 
| 16 | 
            +
                  # @author Jason Colyer
         | 
| 17 | 
            +
                  # @since 1.0.0
         | 
| 18 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 19 | 
            +
                  # @param query [String] The query String to use
         | 
| 20 | 
            +
                  # @return [Array]
         | 
| 21 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#list-search-results Zendesk API > Search > List Search Results
         | 
| 22 | 
            +
                  # @example
         | 
| 23 | 
            +
                  #   require 'support_readiness'
         | 
| 24 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 25 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 26 | 
            +
                  #   config.token = 'test123abc'
         | 
| 27 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 28 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 29 | 
            +
                  #   search = Readiness::Zendesk::Search.tickets(client, 'custom_field_360018253094:americas__usa tags:ultimate satisfaction:badwithcomment')
         | 
| 30 | 
            +
                  #   pp search.first.id
         | 
| 31 | 
            +
                  #   # => 125834
         | 
| 32 | 
            +
                  def self.tickets(client, query)
         | 
| 33 | 
            +
                    search(client, 'ticket', query)
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  ##
         | 
| 37 | 
            +
                  # A wrapper for {Readiness::Zendesk::Search#search} that specifies to use type:user
         | 
| 38 | 
            +
                  #
         | 
| 39 | 
            +
                  # @author Jason Colyer
         | 
| 40 | 
            +
                  # @since 1.0.0
         | 
| 41 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 42 | 
            +
                  # @param query [String] The query String to use
         | 
| 43 | 
            +
                  # @return [Array]
         | 
| 44 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#list-search-results Zendesk API > Search > List Search Results
         | 
| 45 | 
            +
                  # @example
         | 
| 46 | 
            +
                  #   require 'support_readiness'
         | 
| 47 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 48 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 49 | 
            +
                  #   config.token = 'test123abc'
         | 
| 50 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 51 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 52 | 
            +
                  #   search = Readiness::Zendesk::Search.users(client, 'email:alice@example.com')
         | 
| 53 | 
            +
                  #   pp search.first.name
         | 
| 54 | 
            +
                  #   # => "Alice Example"
         | 
| 55 | 
            +
                  def self.users(client, query)
         | 
| 56 | 
            +
                    search(client, 'user', query)
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  ##
         | 
| 60 | 
            +
                  # A wrapper for {Readiness::Zendesk::Search#search} that specifies to use type:organization
         | 
| 61 | 
            +
                  #
         | 
| 62 | 
            +
                  # @author Jason Colyer
         | 
| 63 | 
            +
                  # @since 1.0.0
         | 
| 64 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 65 | 
            +
                  # @param query [String] The query String to use
         | 
| 66 | 
            +
                  # @return [Array]
         | 
| 67 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#list-search-results Zendesk API > Search > List Search Results
         | 
| 68 | 
            +
                  # @example
         | 
| 69 | 
            +
                  #   require 'support_readiness'
         | 
| 70 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 71 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 72 | 
            +
                  #   config.token = 'test123abc'
         | 
| 73 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 74 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 75 | 
            +
                  #   search = Readiness::Zendesk::Search.organzations(client, 'salesforce_id:ABCDEFGH0123456*')
         | 
| 76 | 
            +
                  #   pp search.first.notes
         | 
| 77 | 
            +
                  #   # => "This org is escalated. Please talk to support managers."
         | 
| 78 | 
            +
                  def self.organizations(client, query)
         | 
| 79 | 
            +
                    search(client, 'organization', query)
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  ##
         | 
| 83 | 
            +
                  # A wrapper for {Readiness::Zendesk::Search#search} that specifies to use type:group
         | 
| 84 | 
            +
                  #
         | 
| 85 | 
            +
                  # @author Jason Colyer
         | 
| 86 | 
            +
                  # @since 1.0.0
         | 
| 87 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 88 | 
            +
                  # @param query [String] The query String to use
         | 
| 89 | 
            +
                  # @return [Array]
         | 
| 90 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#list-search-results Zendesk API > Search > List Search Results
         | 
| 91 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#list-search-results Zendesk API > Search > List Search Results
         | 
| 92 | 
            +
                  # @example
         | 
| 93 | 
            +
                  #   require 'support_readiness'
         | 
| 94 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 95 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 96 | 
            +
                  #   config.token = 'test123abc'
         | 
| 97 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 98 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 99 | 
            +
                  #   search = Readiness::Zendesk::Search.organzations(client, 'Support')
         | 
| 100 | 
            +
                  #   pp search.first.name
         | 
| 101 | 
            +
                  #   # => "Support AMER"
         | 
| 102 | 
            +
                  def self.group(client, query)
         | 
| 103 | 
            +
                    search(client, 'group', query)
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  ##
         | 
| 107 | 
            +
                  # Perform a search and list the first 1000 results
         | 
| 108 | 
            +
                  #
         | 
| 109 | 
            +
                  # @author Jason Colyer
         | 
| 110 | 
            +
                  # @since 1.0.0
         | 
| 111 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 112 | 
            +
                  # @param type  [String] The type of search to perform
         | 
| 113 | 
            +
                  # @param query [String] The query String to use
         | 
| 114 | 
            +
                  # @return [Array]
         | 
| 115 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/ticket-management/search/#list-search-results Zendesk API > Search > List Search Results
         | 
| 116 | 
            +
                  # @example
         | 
| 117 | 
            +
                  #   require 'support_readiness'
         | 
| 118 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 119 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 120 | 
            +
                  #   config.token = 'test123abc'
         | 
| 121 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 122 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 123 | 
            +
                  #   search = Readiness::Zendesk::Search.searc(client, 'organization', 'salesforce_id:ABCDEFGH0123456*')
         | 
| 124 | 
            +
                  #   pp search.first.notes
         | 
| 125 | 
            +
                  #   # => "This org is escalated. Please talk to support managers."
         | 
| 126 | 
            +
                  def self.search(client, type, query)
         | 
| 127 | 
            +
                    array = []
         | 
| 128 | 
            +
                    page = 1
         | 
| 129 | 
            +
                    loop do
         | 
| 130 | 
            +
                      response = client.connection.get "search?page=#{page}&query=type:#{type} #{query}"
         | 
| 131 | 
            +
                      handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
         | 
| 132 | 
            +
                      body = Oj.load(response.body)
         | 
| 133 | 
            +
                      array += body['results'].map { |r| object_from_type(type, r) }
         | 
| 134 | 
            +
                      break if array.count >= 1000
         | 
| 135 | 
            +
                      break if body['next_page'].nil?
         | 
| 136 | 
            +
                      page += 1
         | 
| 137 | 
            +
                    end
         | 
| 138 | 
            +
                    array
         | 
| 139 | 
            +
                  end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                  ##
         | 
| 142 | 
            +
                  # Returns the type of Object to use depending on the type of query
         | 
| 143 | 
            +
                  #
         | 
| 144 | 
            +
                  # @author Jason Colyer
         | 
| 145 | 
            +
                  # @since 1.0.0
         | 
| 146 | 
            +
                  # @param type [String] The type of search to perform
         | 
| 147 | 
            +
                  # @param result [Hash] The search result item
         | 
| 148 | 
            +
                  # @return [Object]
         | 
| 149 | 
            +
                  def self.object_from_type(type, result)
         | 
| 150 | 
            +
                    return Tickets.new(result) if type == 'ticket'
         | 
| 151 | 
            +
                    return Users.new(result) if type == 'user'
         | 
| 152 | 
            +
                    return Organizations.new(result) if type == 'organization'
         | 
| 153 | 
            +
                    return Groups.new(result) if type == 'group'
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                    nil
         | 
| 156 | 
            +
                  end
         | 
| 157 | 
            +
                end
         | 
| 158 | 
            +
              end
         | 
| 159 | 
            +
            end
         | 
| @@ -0,0 +1,232 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Defines the module Readiness.
         | 
| 4 | 
            +
            module Readiness
         | 
| 5 | 
            +
              # Defines the module Zendesk
         | 
| 6 | 
            +
              module Zendesk
         | 
| 7 | 
            +
                ##
         | 
| 8 | 
            +
                # Defines the class SLAs within the module {Readiness::Zendesk}.
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                # @author Jason Colyer
         | 
| 11 | 
            +
                # @since 1.0.0
         | 
| 12 | 
            +
                class SLAs < Readiness::Client
         | 
| 13 | 
            +
                  attr_accessor :description, :filter, :id, :metric_settings, :policy_metrics, :position, :title
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  ##
         | 
| 16 | 
            +
                  # Creates a new {Readiness::Zendesk::SLAs} instance
         | 
| 17 | 
            +
                  #
         | 
| 18 | 
            +
                  # @author Jason Colyer
         | 
| 19 | 
            +
                  # @since 1.0.0
         | 
| 20 | 
            +
                  # @param object [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 21 | 
            +
                  # @example
         | 
| 22 | 
            +
                  #   require 'support_readiness'
         | 
| 23 | 
            +
                  #   Readiness::Zendesk::SLAs.new
         | 
| 24 | 
            +
                  def initialize(object = {})
         | 
| 25 | 
            +
                    @description = object['description']
         | 
| 26 | 
            +
                    @filter = object['filter']
         | 
| 27 | 
            +
                    @id = object['id']
         | 
| 28 | 
            +
                    @metric_settings = object['metric_settings']
         | 
| 29 | 
            +
                    @policy_metrics = object['policy_metrics']
         | 
| 30 | 
            +
                    @position = object['position']
         | 
| 31 | 
            +
                    @title = object['title']
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  ##
         | 
| 35 | 
            +
                  # Lists the SLA policies
         | 
| 36 | 
            +
                  #
         | 
| 37 | 
            +
                  # @author Jason Colyer
         | 
| 38 | 
            +
                  # @since 1.0.0
         | 
| 39 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 40 | 
            +
                  # @return [Array]
         | 
| 41 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#list-sla-policies Zendesk API > SLA Policies > List SLA Policies
         | 
| 42 | 
            +
                  # @example
         | 
| 43 | 
            +
                  #   require 'support_readiness'
         | 
| 44 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 45 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 46 | 
            +
                  #   config.token = 'test123abc'
         | 
| 47 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 48 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 49 | 
            +
                  #   slas = Readiness::Zendesk::SLAs.list(client)
         | 
| 50 | 
            +
                  #   pp slas.first.title
         | 
| 51 | 
            +
                  #   # => "Incidents"
         | 
| 52 | 
            +
                  def self.list(client)
         | 
| 53 | 
            +
                    response = client.connection.get('slas/policies')
         | 
| 54 | 
            +
                    handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
         | 
| 55 | 
            +
                    Oj.load(response.body)['sla_policies'].map { |s| SLAs.new(s) }
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  ##
         | 
| 59 | 
            +
                  # Locates a SLA policy within Zendesk. This will not exit on error (except Authentication errors)
         | 
| 60 | 
            +
                  #
         | 
| 61 | 
            +
                  # @author Jason Colyer
         | 
| 62 | 
            +
                  # @since 1.0.0
         | 
| 63 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 64 | 
            +
                  # @param sid [Integer] The SLA Policy ID to find
         | 
| 65 | 
            +
                  # @return [Hash]
         | 
| 66 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#show-sla-policy Zendesk API > SLA Policies > Show SLA Policy
         | 
| 67 | 
            +
                  # @example
         | 
| 68 | 
            +
                  #   require 'support_readiness'
         | 
| 69 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 70 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 71 | 
            +
                  #   config.token = 'test123abc'
         | 
| 72 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 73 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 74 | 
            +
                  #   sla = Readiness::Zendesk::SLAs.find(client, 36)
         | 
| 75 | 
            +
                  #   pp sla.title
         | 
| 76 | 
            +
                  #   # => "Incidents"
         | 
| 77 | 
            +
                  def self.find(client, sid)
         | 
| 78 | 
            +
                    response = client.connection.get("slas/policies/#{sid}")
         | 
| 79 | 
            +
                    handle_request_error(0, 'Zendesk', response.status,  { action: 'get', id: sid }) unless response.status == 200
         | 
| 80 | 
            +
                    return SLAs.new(Oj.load(response.body)['sla_policy']) if response.status == 200
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    Oj.load(response.body)
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  ##
         | 
| 86 | 
            +
                  # Locates a SLA policy within within Zendesk. This will exit on error
         | 
| 87 | 
            +
                  #
         | 
| 88 | 
            +
                  # @author Jason Colyer
         | 
| 89 | 
            +
                  # @since 1.0.0
         | 
| 90 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 91 | 
            +
                  # @param sid [Integer] The SLA Policy ID to find
         | 
| 92 | 
            +
                  # @return [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 93 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#show-sla-policy Zendesk API > SLA Policies > Show SLA Policy
         | 
| 94 | 
            +
                  # @example
         | 
| 95 | 
            +
                  #   require 'support_readiness'
         | 
| 96 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 97 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 98 | 
            +
                  #   config.token = 'test123abc'
         | 
| 99 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 100 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 101 | 
            +
                  #   sla = Readiness::Zendesk::SLAs.find!(client, 36)
         | 
| 102 | 
            +
                  #   pp sla.title
         | 
| 103 | 
            +
                  #   # => "Incidents"
         | 
| 104 | 
            +
                  def self.find!(client, sid)
         | 
| 105 | 
            +
                    response = client.connection.get("slas/policies/#{sid}")
         | 
| 106 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Find SLA Policy', id: sid }) unless response.status == 200
         | 
| 107 | 
            +
                    SLAs.new(Oj.load(response.body)['sla_policy'])
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  ##
         | 
| 111 | 
            +
                  # Creates a SLA Policy. Will exit if unsuccessful
         | 
| 112 | 
            +
                  #
         | 
| 113 | 
            +
                  # @author Jason Colyer
         | 
| 114 | 
            +
                  # @since 1.0.0
         | 
| 115 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 116 | 
            +
                  # @param policy [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 117 | 
            +
                  # @return [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 118 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#create-sla-policy Zendesk API > SLA Policies > Create SLA Policy
         | 
| 119 | 
            +
                  # @example
         | 
| 120 | 
            +
                  #   require 'support_readiness'
         | 
| 121 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 122 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 123 | 
            +
                  #   config.token = 'test123abc'
         | 
| 124 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 125 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 126 | 
            +
                  #   sla = Readiness::Zendesk::SLAs.new
         | 
| 127 | 
            +
                  #   sla.title = 'Incidents'
         | 
| 128 | 
            +
                  #   sla.description = 'For urgent incidents, we will respond to tickets in 10 minutes'
         | 
| 129 | 
            +
                  #   sla.position = 3
         | 
| 130 | 
            +
                  #   sla.filter = {
         | 
| 131 | 
            +
                  #     all: [
         | 
| 132 | 
            +
                  #       { field: 'type', operator: 'is', value: 'incident' }
         | 
| 133 | 
            +
                  #     ],
         | 
| 134 | 
            +
                  #     any: []
         | 
| 135 | 
            +
                  #   }
         | 
| 136 | 
            +
                  #   sla.policy_metrics = [
         | 
| 137 | 
            +
                  #     { priority: 'normal', metric: 'first_reply_time', target: 30,  business_hours: false },
         | 
| 138 | 
            +
                  #     { priority: 'urgent', metric: 'first_reply_time', target: 10,  business_hours: false },
         | 
| 139 | 
            +
                  #     { priority: 'low', metric: 'requester_wait_time', target: 180, business_hours: false },
         | 
| 140 | 
            +
                  #     { priority: 'normal', metric: 'requester_wait_time', target: 160, business_hours: false },
         | 
| 141 | 
            +
                  #     { priority: 'high', metric: 'requester_wait_time', target: 140, business_hours: false },
         | 
| 142 | 
            +
                  #     { priority: 'urgent', metric: 'requester_wait_time', target: 120, business_hours: false }
         | 
| 143 | 
            +
                  #   ]
         | 
| 144 | 
            +
                  #   create = Readiness::Zendesk::SLAs.create!(find, sla)
         | 
| 145 | 
            +
                  #   pp create.id
         | 
| 146 | 
            +
                  #   # => 36
         | 
| 147 | 
            +
                  def self.create!(client, policy)
         | 
| 148 | 
            +
                    response = client.connection.post 'slas/policies', to_clean_json_with_key(policyt, 'sla_policy')
         | 
| 149 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Create SLA Policy', message: Oj.load(response.body)}) unless response.status == 201
         | 
| 150 | 
            +
                    SLAs.new(Oj.load(response.body)['sla_policy'])
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                  ##
         | 
| 154 | 
            +
                  # Updates a SLA Policy. Will exit if unsuccessful
         | 
| 155 | 
            +
                  #
         | 
| 156 | 
            +
                  # @author Jason Colyer
         | 
| 157 | 
            +
                  # @since 1.0.0
         | 
| 158 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 159 | 
            +
                  # @param policy [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 160 | 
            +
                  # @return [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 161 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#update-sla-policy Zendesk API > SLA Policies > Update SLA Policy
         | 
| 162 | 
            +
                  # @example
         | 
| 163 | 
            +
                  #   require 'support_readiness'
         | 
| 164 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 165 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 166 | 
            +
                  #   config.token = 'test123abc'
         | 
| 167 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 168 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 169 | 
            +
                  #   sla = Readiness::Zendesk::SLAs.find!(client, 36)
         | 
| 170 | 
            +
                  #   sla.title = 'Urgent Incidents'
         | 
| 171 | 
            +
                  #   update = Readiness::Zendesk::SLAs.update!(find, sla)
         | 
| 172 | 
            +
                  #   pp update.title
         | 
| 173 | 
            +
                  #   # => "Urgent Incidents"
         | 
| 174 | 
            +
                  def self.update!(client, policy)
         | 
| 175 | 
            +
                    response = client.connection.put "slas/policies/#{policy.id}", to_clean_json_with_key(policy, 'sla_policy')
         | 
| 176 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Update SLA Policy', id: policy.id, message: Oj.load(response.body)}) unless response.status == 200
         | 
| 177 | 
            +
                    SLAs.new(Oj.load(response.body)['sla_policy'])
         | 
| 178 | 
            +
                  end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  ##
         | 
| 181 | 
            +
                  # Deletes a SLA Policy. Will exit if unsuccessful
         | 
| 182 | 
            +
                  #
         | 
| 183 | 
            +
                  # @author Jason Colyer
         | 
| 184 | 
            +
                  # @since 1.0.0
         | 
| 185 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 186 | 
            +
                  # @param policy [Object] An instance of {Readiness::Zendesk::SLAs}
         | 
| 187 | 
            +
                  # @return [Boolean]
         | 
| 188 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#delete-sla-policy Zendesk API > SLA Policies > Delete SLA Policy
         | 
| 189 | 
            +
                  # @example
         | 
| 190 | 
            +
                  #   require 'support_readiness'
         | 
| 191 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 192 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 193 | 
            +
                  #   config.token = 'test123abc'
         | 
| 194 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 195 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 196 | 
            +
                  #   sla = Readiness::Zendesk::SLAs.find!(client, 36)
         | 
| 197 | 
            +
                  #   delete = Readiness::Zendesk::SLAs.delete!(find, sla)
         | 
| 198 | 
            +
                  #   pp delete
         | 
| 199 | 
            +
                  #   # => true
         | 
| 200 | 
            +
                  def self.delete!(client, policy)
         | 
| 201 | 
            +
                    response = client.connection.delete "slas/policies/#{policy.id}"
         | 
| 202 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Delete a SLA policy', id: policy.id, message: Oj.load(response.body)}) unless response.status == 204
         | 
| 203 | 
            +
                    true
         | 
| 204 | 
            +
                  end
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                  ##
         | 
| 207 | 
            +
                  # Reorder SLA Policies. Will exit if unsuccessful
         | 
| 208 | 
            +
                  #
         | 
| 209 | 
            +
                  # @author Jason Colyer
         | 
| 210 | 
            +
                  # @since 1.0.0
         | 
| 211 | 
            +
                  # @param client [Object] An instance of {Readiness::Zendesk::Client}
         | 
| 212 | 
            +
                  # @param pids [Array] An Array of SLA Policy IDs (order is important)
         | 
| 213 | 
            +
                  # @return [Boolean]
         | 
| 214 | 
            +
                  # @see https://developer.zendesk.com/api-reference/ticketing/business-rules/sla_policies/#reorder-sla-policies Zendesk API > SLA Policies > Reorder SLA Policies
         | 
| 215 | 
            +
                  # @example
         | 
| 216 | 
            +
                  #   require 'support_readiness'
         | 
| 217 | 
            +
                  #   config = Readiness::Zendesk::Configuration.new
         | 
| 218 | 
            +
                  #   config.username = 'alice@example.com'
         | 
| 219 | 
            +
                  #   config.token = 'test123abc'
         | 
| 220 | 
            +
                  #   config.url = 'https://example.zendesk.com/api/v2'
         | 
| 221 | 
            +
                  #   client = Readiness::Zendesk::Client.new(config)
         | 
| 222 | 
            +
                  #   reorder = Readiness::Zendesk::SLAs.reorder!(client, 12, 55])
         | 
| 223 | 
            +
                  #   pp reorder
         | 
| 224 | 
            +
                  #   # => true
         | 
| 225 | 
            +
                  def self.reorder!(client, pids)
         | 
| 226 | 
            +
                    response = client.connection.put 'slas/policies/reorder', { sla_policy_ids: pids }.to_json
         | 
| 227 | 
            +
                    handle_request_error(1, 'Zendesk', response.status, { action: 'Reorder SLA policies', id: pids, message: Oj.load(response.body)}) unless response.status == 200
         | 
| 228 | 
            +
                    true
         | 
| 229 | 
            +
                  end
         | 
| 230 | 
            +
                end
         | 
| 231 | 
            +
              end
         | 
| 232 | 
            +
            end
         |