Sha256: b537ef92082ef84026186d1d19efda948678b4f2abf592b6fcddc70e79a62ca1

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

class TaskPresenter
  include UrlHelper
  
  attr_reader :tasks
  
  def initialize(tasks)
    @tasks = OneOrMany.new(tasks)
  end
  
  def as_json(*args)
    tasks = @tasks
    tasks = Houston.benchmark "[#{self.class.name.underscore}] Load objects" do
      tasks.includes(:ticket => :project).load
    end if tasks.is_a?(ActiveRecord::Relation)
    Houston.benchmark "[#{self.class.name.underscore}] Prepare JSON" do
      tasks.select(&:ticket).map(&method(:task_to_json))
    end
  end
  
  def task_to_json(task)
    ticket = task.ticket
    project = ticket.project
    { id: task.id,
      
      projectId: project.id,
      projectSlug: project.slug,
      projectTitle: project.name,
      projectColor: project.color,
      
      ticketSystem: project.ticket_tracker_name,
      ticketUrl: ticket.ticket_tracker_ticket_url,
      ticketNumber: ticket.number,
      ticketType: ticket.type.to_s.downcase.dasherize,
      ticketSequence: ticket.extended_attributes["sequence"],  # <-- embeds knowledge of Houston::Scheduler
      
      shorthand: task.shorthand,
      description: task.description,
      effort: task.effort,
      firstReleaseAt: task.first_release_at,
      firstCommitAt: task.first_commit_at,
      completedAt: task.completed_at }
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
houston-core-0.5.0.beta1 app/presenters/task_presenter.rb