module TicketAbstractorClient::Jira::ParamsBuilder

Public Instance Methods

build_attachment_params(attachment) click to toggle source
# File lib/ticket_abstractor_client/jira/params_builder.rb, line 6
def build_attachment_params(attachment)
  [
    { ticket_id: attachment.ticket_id },
    { attachments: [File.new(attachment.file_path, 'rb')] }
  ]
end
build_comment_params(comment) click to toggle source
# File lib/ticket_abstractor_client/jira/params_builder.rb, line 13
def build_comment_params(comment)
  { ticket_id: comment.ticket_id, comment: { body: comment.body } }
end
build_ticket_params(ticket) click to toggle source
# File lib/ticket_abstractor_client/jira/params_builder.rb, line 17
def build_ticket_params(ticket)
  params_hash = { ticket_params: {} }
  params_hash[:ticket_id] = ticket.ticket_id if ticket.ticket_id.present?

  fields = ticket.fields.each_with_object({}) do |(field_name, field_value), fields|
    value = jira_field_value(ticket.endpoint, field_name, field_value)
    fields[field_name] = value
  end

  params_hash[:ticket_params].merge!(fields: fields)
  params_hash
end
build_transitions_params(ticket) click to toggle source
# File lib/ticket_abstractor_client/jira/params_builder.rb, line 30
def build_transitions_params(ticket)
  new_status = ticket.status
  transition = ticket.available_statuses[new_status]

  raise Errors::ClientArgumentError, "Status '#{new_status}' is incorrect or prohibited" if transition.blank?

  { ticket_id: ticket.ticket_id, transition_params: { transition: { id: transition } } }
end
fields_meta(endpoint) click to toggle source
# File lib/ticket_abstractor_client/jira/params_builder.rb, line 89
def fields_meta(endpoint)
  meta = TicketAbstractorClient.configuration.jira_fields_meta(endpoint)
  meta.update! if meta.expired?
  meta
end
jira_field_value(endpoint, name, value) click to toggle source
# File lib/ticket_abstractor_client/jira/params_builder.rb, line 39
def jira_field_value(endpoint, name, value)
  field_meta = fields_meta(endpoint)[name]
  return unless field_meta

  if field_meta['system']          # system fields mapping
    case field_meta['type']
      when 'project'
        { key: value }
      when 'string'
        value
      when 'datetime'
        Time.parse(value).to_s(:jira_iso8601) rescue value
      when 'date'
        Date.parse(value).to_s rescue value
      when 'number'
        value.to_i
      when 'array'
        Array.wrap(value)
      else # when 'user', 'status', 'issuetype', 'priority'
        { name: value }
    end

  elsif custom_type = field_meta['custom']     # custom fields mapping
    case custom_type
      when /(:cascadingselect|:radiobuttons|:select)\Z/
        { value: value }
      when /:datepicker\Z/
        Date.parse(value).to_s rescue value
      when /:datetime\Z/
        Time.parse(value).to_s(:jira_iso8601) rescue value
      when /(:freetextfield|:textfield|:textarea|:url)\Z/
        value
      when /(:grouppicker|:singleversionpicker|:userpicker)\Z/
        { name: value }
      when /(:numberfield|:float)\Z/
        value.to_i
      when /:projectpicker\Z/
        { key: value }
      when /:labels\Z/
        Array.wrap(value)
      when /(:multigrouppicker|:multiuserpicker|:versionpicker)\Z/
        Array.wrap(value).map { |v| { name: v } }
      when /:multiselect\Z/
        Array.wrap(value).map { |v| { value: v } }
      else
        raise Errors::ClientArgumentError, "Unknown customfield type #{custom_type}"
    end
  end
end