Class: GitPivotalTrackerIntegration::Command::Base Abstract
- Inherits:
-
Object
- Object
- GitPivotalTrackerIntegration::Command::Base
- Defined in:
- lib/git-pivotal-tracker-integration/command/base.rb
Overview
Subclass and override #run to implement command functionality
An abstract base class for all commands
Constant Summary collapse
- TIMER_TOKENS =
Toggl keys name : The name of the task (string, required, unique in project) pid : project ID for the task (integer, required) wid : workspace ID, where the task will be saved (integer, project’s workspace id is used when not supplied) uid : user ID, to whom the task is assigned to (integer, not required) estimated_seconds : estimated duration of task in seconds (integer, not required) active : whether the task is done or not (boolean, by default true) at : timestamp that is sent in the response for PUT, indicates the time task was last updated – Additional fields – done_seconds : duration (in seconds) of all the time entries registered for this task uname : full name of the person to whom the task is assigned to
{ "m" => (60), "h" => (60 * 60), "d" => (60 * 60 * 8) # a work day is 8 hours }
Instance Method Summary collapse
- #check_version ⇒ Object
- #create_story(args) ⇒ Object
- #estimated_seconds(story) ⇒ Object
- #finish_toggle(configuration, time_spent) ⇒ Object
-
#initialize ⇒ Base
constructor
Common initialization functionality for all command classes.
- #logger_filename ⇒ Object
- #parameters(configuration, time_spent) ⇒ Object
-
#run ⇒ Object
abstract
The main entry point to the command’s execution.
- #seconds_spent(time_spent) ⇒ Object
- #start_logging ⇒ Object
Constructor Details
#initialize ⇒ Base
Common initialization functionality for all command classes. This enforces that:
-
the command is being run within a valid Git repository
-
the user has specified their Pivotal Tracker API token
-
all communication with Pivotal Tracker will be protected with SSL
-
the user has configured the project id for this repository
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 33 def initialize self.start_logging self.check_version git_global_push_default = (GitPivotalTrackerIntegration::Util::Shell.exec "git config --global push.default", false).chomp if git_global_push_default != "simple" puts "git config --global push.default simple" puts GitPivotalTrackerIntegration::Util::Shell.exec "git config --global push.default simple" end @repository_root = GitPivotalTrackerIntegration::Util::Git.repository_root @configuration = GitPivotalTrackerIntegration::Command::Configuration.new @toggl = Toggl.new PivotalTracker::Client.token = @configuration.api_token PivotalTracker::Client.use_ssl = true @project = PivotalTracker::Project.find @configuration.project_id end |
Instance Method Details
#check_version ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 65 def check_version gem_latest_version = (GitPivotalTrackerIntegration::Util::Shell.exec "gem list v2gpti --remote")[/\(.*?\)/].delete "()" gem_installed_version = Gem.loaded_specs["v2gpti"].version.version if (gem_installed_version == gem_latest_version) $LOG.info("v2gpti verison #{gem_installed_version} is up to date.") else $LOG.fatal("Out of date") abort "\n\nYou are using v2gpti version #{gem_installed_version}, but the current version is #{gem_latest_version}.\nPlease update your gem with the following command.\n\n sudo gem update v2gpti\n\n" end end |
#create_story(args) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 143 def create_story(args) story_types = {"f" => "feature", "b" => "bug", "c" => "chore"} new_story_type = nil new_story_title = nil new_story_estimate = -1 args.each do |arg| new_story_type = story_types[arg[-1]] if arg.include? '-n' new_story_title = arg if arg[0] != "-" end while new_story_type.nil? nst = ask("Please enter f for feature, b for bug, or c for chore") new_story_type = story_types[nst] end while (new_story_title.nil? || new_story_title.empty?) new_story_title = ask("Please enter the title for this #{new_story_type}.") end while (new_story_type == "feature" && (new_story_estimate < 0 || new_story_estimate > 3)) nse = ask("Please enter an estimate for this #{new_story_type}. (0,1,2,3)") if !nse.empty? new_story_estimate = nse.to_i end end new_story = PivotalTracker::Story.new new_story.project_id = @project.id new_story.story_type = new_story_type new_story.current_state = "unstarted" new_story.name = new_story_title if new_story_type == "feature" new_story.estimate = new_story_estimate end uploaded_story = new_story.create end |
#estimated_seconds(story) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 125 def estimated_seconds(story) estimate = story.estimate seconds = 0 case estimate when 0 estimate = 15 * 60 when 1 estimate = 1.25 * 60 * 60 when 2 estimate = 3 * 60 * 60 when 3 estimate = 8 * 60 * 60 else estimate = -1 * 60 * 60 end estimate end |
#finish_toggle(configuration, time_spent) ⇒ Object
52 53 54 55 56 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 52 def finish_toggle(configuration, time_spent) current_story = @configuration.story(@project) @toggl.create_task(parameters(configuration, time_spent)) @toggl.create_time_entry(parameters(configuration, time_spent)) end |
#logger_filename ⇒ Object
61 62 63 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 61 def logger_filename return "#{Dir.home}/.v2gpti_local.log" end |
#parameters(configuration, time_spent) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 99 def parameters(configuration, time_spent) current_story = configuration.story(@project) params = Hash.new params[:name] = "#{current_story.id}" + " - " + "#{current_story.name}" params[:estimated_seconds] = estimated_seconds current_story params[:pid] = configuration.toggl_project_id params[:uid] = @toggl.me["id"] params[:tags] = [current_story.story_type] params[:active] = false params[:description] = "#{current_story.id}" + " commit:" + "#{(GitPivotalTrackerIntegration::Util::Shell.exec "git rev-parse HEAD").chomp[0..6]}" params[:created_with] = "v2gpti" params[:duration] = seconds_spent(time_spent) params[:start] = (Time.now - params[:duration]).iso8601 task = @toggl.get_project_task_with_name(configuration.toggl_project_id, "#{current_story.id}") if !task.nil? params[:tid] = task['id'] end params end |
#run ⇒ Object
Override this method to implement command functionality
The main entry point to the command’s execution
79 80 81 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 79 def run raise NotImplementedError end |
#seconds_spent(time_spent) ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 118 def seconds_spent(time_spent) seconds = 0 time_spent.scan(/(\d+)(\w)/).each do |amount, measure| seconds += amount.to_i * TIMER_TOKENS[measure] end seconds end |
#start_logging ⇒ Object
57 58 59 |
# File 'lib/git-pivotal-tracker-integration/command/base.rb', line 57 def start_logging $LOG = Logger.new("#{logger_filename}", 'weekly') end |