lib/github_stats/issue_ingester.rb in github-stats-0.1.0 vs lib/github_stats/issue_ingester.rb in github-stats-0.2.0
- old
+ new
@@ -9,28 +9,42 @@
self.options = options
end
def ingest
return unless options[:ingest]
- github.search_issues(search_string).each(&method(:insert_or_update))
+ github.search_issues(search_string).items.each(&method(:insert_or_update))
end
private def insert_or_update(result)
issue = issues.first(github_id: result[:id])
- return insert(result) unless issue
- return update(issue, result) if issue[:closed_at] != result[:closed_at] ||
- issue[:created_at] != result[:created_at]
+ started_at = started_at(result)
+ return insert(result, started_at: started_at) unless issue
+ return update(issue, result, started_at: started_at) if issue[:closed_at] != result[:closed_at] ||
+ issue[:created_at] != result[:created_at] ||
+ issue[:started_at] != started_at
end
- private def update(issue, result)
+ private def started_at(result)
+ starting_events = result.rels[:events].get.data.select do |event|
+ event[:event] == 'labeled' && (event[:label] || {})[:name] == 'in-progress'
+ end.sort_by do |event|
+ event[:created_at]
+ end
+ starting_event = starting_events.last
+ starting_event.nil? ? nil : starting_event[:created_at]
+ end
+
+ private def update(issue, result, started_at:)
issue.update(closed_at: result[:closed_at],
- created_at: result[:created_at])
+ created_at: result[:created_at],
+ started_at: started_at)
end
- private def insert(result)
+ private def insert(result, started_at:)
issues.insert(search_string: search_string, github_id: result[:id],
closed_at: result[:closed_at],
created_at: result[:created_at],
+ started_at: started_at,
url: result[:url])
end
private def issues
db.issues.where(search_string: search_string)