class GitPivotalTrackerIntegration::Util::Story

Utilities for dealing with +PivotalTracker::Story+s

Constants

CANDIDATE_STATES
CONTENT_WIDTH
LABEL_DESCRIPTION
LABEL_TITLE
LABEL_WIDTH

Public Class Methods

pretty_print(story) click to toggle source

Print a human readable version of a story. This pretty prints the title, description, and notes for the story.

@param [PivotalTracker::Story] story the story to pretty print @return [void]

# File lib/git-pivotal-tracker-integration/util/story.rb, line 28
def self.pretty_print(story)
  print_label LABEL_TITLE
  print_value story.name

  description = story.description
  if !description.nil? && !description.empty?
    print_label 'Description'
    print_value description
  end

  PivotalTracker::Note.all(story).sort_by { |note| note.noted_at }.each_with_index do |note, index|
    print_label "Note #{index + 1}"
    print_value note.text
  end

  puts
end
select_story(project, filter = nil, limit = 5) click to toggle source

Selects a Pivotal Tracker story by doing the following steps:

@param [PivotalTracker::Project] project the project to select stories from @param [String, nil] filter a filter for selecting the story to start. This

filter can be either:
* a story id: selects the story represented by the id
* a story type (feature, bug, chore): offers the user a selection of stories of the given type
* +nil+: offers the user a selection of stories of all types

@param [Fixnum] limit The number maximum number of stories the user can choose from @return [PivotalTracker::Story] The Pivotal Tracker story selected by the user

# File lib/git-pivotal-tracker-integration/util/story.rb, line 56
def self.select_story(project, filter = nil, limit = 5)
  if filter =~ /[[:digit:]]/
    story = project.stories.find filter.to_i
  else
    story = find_story project, filter, limit
  end

  story
end

Private Class Methods

find_story(project, type, limit) click to toggle source
# File lib/git-pivotal-tracker-integration/util/story.rb, line 96
def self.find_story(project, type, limit)
  criteria = {
    :current_state => CANDIDATE_STATES,
    :limit => limit
  }
  if type
    criteria[:story_type] = type
  end

  candidates = project.stories.all criteria
  if candidates.length == 1
    story = candidates[0]
  else
    story = choose do |menu|
      menu.prompt = 'Choose story to start: '

      candidates.each do |story|
        name = type ? story.name : '%-7s %s' % [story.story_type.upcase, story.name]
        menu.choice(name) { story }
      end
    end

    puts
  end

  story
end
print_label(label) click to toggle source
print_value(value) click to toggle source