class Durt::ProjectController

Attributes

project[R]

Public Class Methods

new(project) click to toggle source
# File lib/durt/project_controller.rb, line 10
def initialize(project)
  @project = project
end

Public Instance Methods

current_issue() click to toggle source
# File lib/durt/project_controller.rb, line 14
def current_issue
  project.active_issue
end
edit_estimate(issue) click to toggle source
# File lib/durt/ebs_plugin.rb, line 64
def edit_estimate(issue)
  EbsPlugin.new(issue.project).edit_estimate(issue)
end
enter_issue(issue) click to toggle source
# File lib/durt/project_controller.rb, line 68
def enter_issue(issue)
  project.tap do |p|
    plugins = p.plugins

    plugins.each do |plugin|
      plugin.before_enter(issue)
    end

    plugins.each do |plugin|
      plugin.enter(issue)
    end
  end
end
filter() click to toggle source
# File lib/durt/project_controller.rb, line 36
def filter
  project.tap do |p|
    p.plugins.each do |plugin|
      plugin.filter(nil)
    end
  end
end
new_issue() click to toggle source
# File lib/durt/project_controller.rb, line 82
def new_issue
  plugin = select_source(project)

  issue_name = prompt.ask('Enter issue name:')

  issue_data = {
    # Key should probably be ref_id and not be required
    key: SecureRandom.uuid,
    summary: issue_name,
    project: project,
    source: plugin.source_name
  }

  Durt::Issue.create(issue_data)
end
push_issue(issue) click to toggle source
# File lib/durt/project_controller.rb, line 98
def push_issue(issue)
  plugin = issue.plugin

  ref_id = plugin.push_issue(issue)

  issue.update(key: ref_id)
end
select_issue(issue = nil) click to toggle source
# File lib/durt/project_controller.rb, line 18
def select_issue(issue = nil)
  issue ||=
    begin
      plugin = select_source(project)

      raise "No plugin selected" unless plugin.present?

      issues = plugin.issues

      raise "No issue available to select" unless issues.present?

      prompt.select("Select issue: ", issues.to_choice_h)
    end

  project.issues.update_all(active: false)
  issue.tap(&:active!)
end
start_issue(issue) click to toggle source
# File lib/durt/project_controller.rb, line 44
def start_issue(issue)
  issue.tap do |i|
    plugins = project.time_tracker_plugins

    plugins.each do |plugin|
      plugin.start(i)
    end
  end

  issue.start_tracking!
end
stop_issue(issue) click to toggle source
# File lib/durt/project_controller.rb, line 56
def stop_issue(issue)
  issue.tap do |i|
    plugins = project.time_tracker_plugins

    plugins.each do |plugin|
      plugin.stop(i)
    end
  end

  issue.stop_tracking!
end
sync_issues() click to toggle source
# File lib/durt/project_controller.rb, line 106
def sync_issues
  project.tap do |p|
    plugin = select_source(p, include_local: false)

    fetched = plugin.fetch_issues

    fetched.map do |attrs|
      Durt::Issue.find_or_create_by(key: attrs[:key]) do |issue|
        issue.attributes = attrs
      end
    end
  end
end

Private Instance Methods

bug_tracker_choices_for(project, include_local = true) click to toggle source
# File lib/durt/project_controller.rb, line 122
def bug_tracker_choices_for(project, include_local = true)
  choice_plugins = project.bug_tracker_plugins
  choice_plugins = choice_plugins.reject { |p| p.plugin_name == 'Local' } unless include_local

  choice_plugins.map { |p| [p.plugin_name, p] }.to_h
end
prompt() click to toggle source
# File lib/durt/project_controller.rb, line 137
def prompt
  @prompt ||= TTY::Prompt.new
end
select_source(project, include_local: true) click to toggle source
# File lib/durt/project_controller.rb, line 129
def select_source(project, include_local: true)
  choices = bug_tracker_choices_for(project, include_local)

  return choices.values.first if choices.count == 1

  prompt.select('Select source', choices)
end