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