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)