Class: AirTest::JiraTicketParser
- Inherits:
-
Object
- Object
- AirTest::JiraTicketParser
- Includes:
- TicketParser
- Defined in:
- lib/air_test/jira_ticket_parser.rb
Instance Method Summary collapse
- #extract_ticket_id(ticket) ⇒ Object
- #extract_ticket_title(ticket) ⇒ Object
- #extract_ticket_url(ticket) ⇒ Object
- #fetch_tickets(limit: 5) ⇒ Object
-
#initialize(config = AirTest.configuration) ⇒ JiraTicketParser
constructor
A new instance of JiraTicketParser.
- #parse_ticket_content(issue_id) ⇒ Object
Constructor Details
#initialize(config = AirTest.configuration) ⇒ JiraTicketParser
Returns a new instance of JiraTicketParser.
11 12 13 14 15 16 |
# File 'lib/air_test/jira_ticket_parser.rb', line 11 def initialize(config = AirTest.configuration) @domain = config.jira[:domain] @api_key = config.jira[:token] @project_key = config.jira[:project_id] @email = config.jira[:email] end |
Instance Method Details
#extract_ticket_id(ticket) ⇒ Object
78 79 80 |
# File 'lib/air_test/jira_ticket_parser.rb', line 78 def extract_ticket_id(ticket) ticket["key"] || "No ID" end |
#extract_ticket_title(ticket) ⇒ Object
74 75 76 |
# File 'lib/air_test/jira_ticket_parser.rb', line 74 def extract_ticket_title(ticket) ticket.dig("fields", "summary") || "No title" end |
#extract_ticket_url(ticket) ⇒ Object
82 83 84 |
# File 'lib/air_test/jira_ticket_parser.rb', line 82 def extract_ticket_url(ticket) "#{@domain}/browse/#{ticket["key"]}" end |
#fetch_tickets(limit: 5) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/air_test/jira_ticket_parser.rb', line 18 def fetch_tickets(limit: 5) # Try different status names (English and French) statuses = ["To Do", "À faire", "Open", "New"] all_issues = [] statuses.each do |status| jql = "project = #{@project_key} AND status = '#{status}' ORDER BY created DESC" uri = URI("#{@domain}/rest/api/3/search?jql=#{URI.encode_www_form_component(jql)}&maxResults=#{limit}") request = Net::HTTP::Get.new(uri) request.basic_auth(@email, @api_key) request["Accept"] = "application/json" http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true response = http.request(request) next unless response.code == "200" data = JSON.parse(response.body) issues = data["issues"] || [] all_issues.concat(issues) puts "Found #{issues.length} issues with status '#{status}'" if issues.any? end all_issues.first(limit) end |
#parse_ticket_content(issue_id) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/air_test/jira_ticket_parser.rb', line 44 def parse_ticket_content(issue_id) # Fetch issue details (description, etc.) uri = URI("#{@domain}/rest/api/3/issue/#{issue_id}") request = Net::HTTP::Get.new(uri) request.basic_auth(@email, @api_key) request["Accept"] = "application/json" http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true response = http.request(request) return nil unless response.code == "200" issue = JSON.parse(response.body) # Example: parse description as feature, steps, etc. (customize as needed) { feature: issue.dig("fields", "summary") || "", scenarios: [ { title: "Scenario", steps: [issue.dig("fields", "description", "content")&.map do |c| c["content"]&.map do |t| t["text"] end&.join(" ") end&.join(" ") || ""] } ], meta: { tags: [], priority: "", estimate: nil, assignee: issue.dig("fields", "assignee", "displayName") || "" } } end |