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
# File lib/git-pivotal-tracker-integration/util/story.rb, line 78 def self.print_label(label) print "%#{LABEL_WIDTH}s" % ["#{label}: "] end
print_value(value)
click to toggle source
# File lib/git-pivotal-tracker-integration/util/story.rb, line 82 def self.print_value(value) if value.nil? || value.empty? puts '' else value.scan(/\S.{0,#{CONTENT_WIDTH - 2}}\S(?=\s|$)|\S+/).each_with_index do |line, index| if index == 0 puts line else puts "%#{LABEL_WIDTH}s%s" % ['', line] end end end end