Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
¿Cómo obtener una lista seleccionada de problemas de GitHub en octocat con Ruby?

Básicamente, estoy usando octokit tratando de agregar un conjunto particular de problemas de GitHub, según su número de problema, a una lista de problemas.

El resumen del código es similar a este:

 require 'octokit' client = Octokit::Client.new(access_token: ENV['GITHUB_OAUTH_TOKEN'], accept: 'application/vnd.github.v3+json') REPO = 'USERNAME/SOME-GH-REPO'.freeze #client.issue(REPO, 1) # Returns {} #client.issues(REPO, :state => 'all') # Returns [{}] def pull_source_issues @client.auto_paginate = true ilist =[1,2,3] my_array = [] ilist.each do |i| puts "Adding issue [#]: #{i} \t from: #{REPO}\n" my_array.push(@client.issue(REPO , "#{i}", :state => 'all')) # works #@issues.push(@client.issue(REPO , "#{i}", :state => 'all')) # fails! end @issues = my_array puts "Found #{issues.size} issues." end

Pero parece que tengo que usar el intermedio my_array , ya que falla inmediatamente al ingresar a la matriz @issues .

Retirarse

De esta manera también parece muy ineficiente, ya que parezco hacer una solicitud para cada elemento, en lugar de buscarlos todos al mismo tiempo y luego seleccionar los que se necesitan. Además, también selecciona solicitudes de extracción , lo que no se desea. (*Porque las relaciones públicas también son problemas en GH).

A menudo veo el iterador con este aspecto:

 @issues = @client.issues(@source_repo, :state => 'all') @issues.each do |source_issue| print "Processing issue: #{source_issue.number} (#{n}/#{issues.size})\r" if !source_issue.key?(:pull_request) || source_issue.pull_request.empty? # Add each issue to (new?) @issues here end end

Pero tampoco puedo hacer que funcione.


¿Cómo puedo insertar () cada problema en la matriz @issues inmediatamente?
(¿Y cómo puedo hacerlo de manera más eficiente?)

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La inserción de elementos en la matriz @issues fallará porque no está inicializada ( @issues = [] ).

Después de echar un vistazo a la documentación de octokit tienes 2 posibilidades. Desafortunadamente, no puede consultar varios problemas por sus números con una sola solicitud.

Puedes hacer:

 @issues = [1,2,3].map{ |issue_number| client.issue(REPO, issue_number, state: 'all') } .reject(&:pull_request)

o:

 @issues = client.issues(REPO).select{ |issue| [1,2,3].include?(issue.number) } .reject(&:pull_request)

Realmente depende de la cantidad de problemas en el repositorio y la cantidad de números de problemas que desea consultar. Si realmente solo está consultando 3 números de problemas, iría con el primer enfoque. De lo contrario, me quedaría con lo último.

Cuando se trabaja con operaciones costosas (como hacer llamadas a una API) también es útil crear un enumerador perezoso:

 [1,2,3].lazy.map{ |issue_number| client.issue(REPO, issue_number, state: 'all') }

Esto evitará que la matriz se construya de inmediato y si solo desea los primeros n elementos, los problemas restantes no se eliminarán.

También tenga en cuenta que al usar el último enfoque, deberá pasar por las diferentes páginas o deshabilitar la paginación.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda