geordi 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +30 -16
- data/bin/gitpt +4 -0
- data/lib/geordi/gitpt.rb +175 -0
- data/lib/geordi/version.rb +1 -1
- metadata +9 -8
    
        data/README.md
    CHANGED
    
    | @@ -17,7 +17,7 @@ Enables the given virtual host in `/etc/apache2/sites-available` and disables al | |
| 17 17 |  | 
| 18 18 | 
             
                site makandra-com
         | 
| 19 19 |  | 
| 20 | 
            -
            More information at http:// | 
| 20 | 
            +
            More information at http://makandracards.com/makandra/807-shell-script-to-quickly-switch-apache-sites
         | 
| 21 21 |  | 
| 22 22 |  | 
| 23 23 | 
             
            b
         | 
| @@ -27,7 +27,7 @@ Runs the given command under `bundle exec` if a `Gemfile` is present in your wor | |
| 27 27 |  | 
| 28 28 | 
             
                b spec spec/models
         | 
| 29 29 |  | 
| 30 | 
            -
            More information at http:// | 
| 30 | 
            +
            More information at http://makandracards.com/makandra/684-automatically-run-bundle-exec-if-required
         | 
| 31 31 |  | 
| 32 32 |  | 
| 33 33 | 
             
            console-for
         | 
| @@ -37,7 +37,7 @@ Opens a rails console remotely: | |
| 37 37 |  | 
| 38 38 | 
             
                console-for staging
         | 
| 39 39 |  | 
| 40 | 
            -
            More information at http:// | 
| 40 | 
            +
            More information at http://makandracards.com/makandra/1338-console-for-opens-a-rails-console-remotely-on-a-capistrano-deployment-target
         | 
| 41 41 |  | 
| 42 42 |  | 
| 43 43 |  | 
| @@ -48,7 +48,7 @@ Runs Cucumber with the arguments you want: bundle exec, cucumber_spinner detecti | |
| 48 48 |  | 
| 49 49 | 
             
                cuc features/users.feature
         | 
| 50 50 |  | 
| 51 | 
            -
            More information at http:// | 
| 51 | 
            +
            More information at http://makandracards.com/makandra/1277-a-nicer-way-to-run-rspec-and-or-cucumber
         | 
| 52 52 |  | 
| 53 53 |  | 
| 54 54 |  | 
| @@ -59,7 +59,7 @@ Removes unnecessary files from your project directory: | |
| 59 59 |  | 
| 60 60 | 
             
                cleanup-directory
         | 
| 61 61 |  | 
| 62 | 
            -
            More information at http:// | 
| 62 | 
            +
            More information at http://makandracards.com/makandra/951-shell-script-to-clean-up-a-project-directory
         | 
| 63 63 |  | 
| 64 64 |  | 
| 65 65 | 
             
            dump-for
         | 
| @@ -69,7 +69,7 @@ Dumps the database on your server for a given [Capistrano multistage](https://gi | |
| 69 69 |  | 
| 70 70 | 
             
                dump-for production
         | 
| 71 71 |  | 
| 72 | 
            -
            More information at http:// | 
| 72 | 
            +
            More information at http://makandracards.com/makandra/1237-script-to-create-and-copy-a-production-dump-to-your-project-root
         | 
| 73 73 |  | 
| 74 74 |  | 
| 75 75 |  | 
| @@ -80,7 +80,21 @@ Stores a timestamped database dump for the given Rails environment in `~/dumps`: | |
| 80 80 |  | 
| 81 81 | 
             
                dumple development
         | 
| 82 82 |  | 
| 83 | 
            -
            More information at http:// | 
| 83 | 
            +
            More information at http://makandracards.com/makandra/1008-dump-your-database-with-dumple
         | 
| 84 | 
            +
             | 
| 85 | 
            +
             | 
| 86 | 
            +
             | 
| 87 | 
            +
            gitpt
         | 
| 88 | 
            +
            -----
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            Shell script to generate a git commit with Pivotal Tracker story ID and title. Run it from your project directory:
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                gitpt
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            This lets you choose from all started, finished and rejected stories in Pivotal Tracker and commit staged changes.
         | 
| 95 | 
            +
            Requires the project's Pivotal Tracker ID(s) to be defined in a `.pt_project_id` file in the project's directory.
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            More information at https://makandracards.com/makandra/1372-shell-script-to-generate-a-git-commit-with-pivotal-tracker-story-id-and-title
         | 
| 84 98 |  | 
| 85 99 |  | 
| 86 100 | 
             
            install-gems-remotely
         | 
| @@ -90,7 +104,7 @@ Installs all gems in your `Gemfile.lock`, as well as vendored gems, to the given | |
| 90 104 |  | 
| 91 105 | 
             
                install-gems-remotely my.server.com
         | 
| 92 106 |  | 
| 93 | 
            -
            More information at http:// | 
| 107 | 
            +
            More information at http://makandracards.com/makandra/692-install-a-local-gemfile-on-a-remote-server
         | 
| 94 108 |  | 
| 95 109 |  | 
| 96 110 | 
             
            migrate-all
         | 
| @@ -109,7 +123,7 @@ Calls the Capistrano tasks `deploy`, `deploy:migrate` and `deploy:restart` on th | |
| 109 123 |  | 
| 110 124 | 
             
                power-deploy staging
         | 
| 111 125 |  | 
| 112 | 
            -
            This script is considered legacy and will be removed eventually. You should [fix your deploy scripts](http:// | 
| 126 | 
            +
            This script is considered legacy and will be removed eventually. You should [fix your deploy scripts](http://makandracards.com/makandra/1176-which-capistrano-hooks-to-use-for-events-to-happen-on-both-cap-deploy-and-cap-deploy-migrations) and then use [cap deploy:migrations](http://makandracards.com/makandra/1000-deploy-and-migrate-with-a-single-capistrano-command).
         | 
| 113 127 |  | 
| 114 128 |  | 
| 115 129 | 
             
            power-rake
         | 
| @@ -119,7 +133,7 @@ Runs the given rake task in each Rails environment in `development`, `test`, `cu | |
| 119 133 |  | 
| 120 134 | 
             
                power-rake db:migrate
         | 
| 121 135 |  | 
| 122 | 
            -
            More information at http:// | 
| 136 | 
            +
            More information at http://makandracards.com/makandra/737-run-a-rake-task-in-all-environments
         | 
| 123 137 |  | 
| 124 138 |  | 
| 125 139 | 
             
            remotify-local-branch
         | 
| @@ -129,7 +143,7 @@ Pushes the given branch to the remote `origin` and tracks it: | |
| 129 143 |  | 
| 130 144 | 
             
                remotify-local-branch redesign
         | 
| 131 145 |  | 
| 132 | 
            -
            More information at http:// | 
| 146 | 
            +
            More information at http://makandracards.com/makandra/520-create-a-remote-branch-in-git
         | 
| 133 147 |  | 
| 134 148 |  | 
| 135 149 | 
             
            remove-executable-flags
         | 
| @@ -139,7 +153,7 @@ Recursively removes executable flags from files in the working directory that pr | |
| 139 153 |  | 
| 140 154 | 
             
                remove-executable-flags
         | 
| 141 155 |  | 
| 142 | 
            -
            More information at http:// | 
| 156 | 
            +
            More information at http://makandracards.com/makandra/659-recursively-remove-unnecessary-execute-flags
         | 
| 143 157 |  | 
| 144 158 |  | 
| 145 159 | 
             
            rs
         | 
| @@ -149,7 +163,7 @@ Runs RSpec with the arguments you want: RSpec 1/2 detection, bundle exec, rspec_ | |
| 149 163 |  | 
| 150 164 | 
             
                rs spec/models/user_spec.rb
         | 
| 151 165 |  | 
| 152 | 
            -
            More information at http:// | 
| 166 | 
            +
            More information at http://makandracards.com/makandra/1277-a-nicer-way-to-run-rspec-and-or-cucumber
         | 
| 153 167 |  | 
| 154 168 |  | 
| 155 169 | 
             
            setup-firefox-for-selenium
         | 
| @@ -159,7 +173,7 @@ Helps you create an frozen version of Firefox, so your Selenium tests will no lo | |
| 159 173 |  | 
| 160 174 | 
             
                setup-firefox-for-selenium
         | 
| 161 175 |  | 
| 162 | 
            -
            More information at http:// | 
| 176 | 
            +
            More information at http://makandracards.com/makandra/1575-how-to-install-a-frozen-version-of-firefox-for-your-selenium-tests
         | 
| 163 177 |  | 
| 164 178 |  | 
| 165 179 | 
             
            shell-for
         | 
| @@ -173,7 +187,7 @@ Now it can also be called with any command to be remotely executed before loadin | |
| 173 187 |  | 
| 174 188 | 
             
                shell-for staging --no-bash top
         | 
| 175 189 |  | 
| 176 | 
            -
            More information at http:// | 
| 190 | 
            +
            More information at http://makandracards.com/makandra/1209-script-to-open-an-ssh-shell-to-a-capistrano-deployment-target
         | 
| 177 191 |  | 
| 178 192 |  | 
| 179 193 | 
             
            tests
         | 
| @@ -183,4 +197,4 @@ Runs both `rs` and `cuc`. Call from any project directory: | |
| 183 197 |  | 
| 184 198 | 
             
                tests
         | 
| 185 199 |  | 
| 186 | 
            -
            More information at http:// | 
| 200 | 
            +
            More information at http://makandracards.com/makandra/1277-a-nicer-way-to-run-rspec-and-or-cucumber
         | 
    
        data/bin/gitpt
    ADDED
    
    
    
        data/lib/geordi/gitpt.rb
    ADDED
    
    | @@ -0,0 +1,175 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'highline'
         | 
| 3 | 
            +
            require 'pivotal-tracker'
         | 
| 4 | 
            +
            require 'yaml'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Geordi
         | 
| 7 | 
            +
              class Gitpt
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                attr_reader :token, :initials, :settings_file, :deprecated_token_file,
         | 
| 10 | 
            +
                            :highline, :applicable_stories, :memberships
         | 
| 11 | 
            +
                
         | 
| 12 | 
            +
                def initialize
         | 
| 13 | 
            +
                  @highline = HighLine.new
         | 
| 14 | 
            +
                  @settings_file = File.join(ENV['HOME'], '.gitpt')
         | 
| 15 | 
            +
                  @deprecated_token_file = File.join(ENV['HOME'], '.pt_token')
         | 
| 16 | 
            +
                  load_settings
         | 
| 17 | 
            +
                  settings_were_invalid = (not settings_valid?)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  hello unless settings_valid?
         | 
| 20 | 
            +
                  request_settings while not settings_valid?
         | 
| 21 | 
            +
                  stored if settings_were_invalid
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  PivotalTracker::Client.use_ssl = true
         | 
| 24 | 
            +
                  PivotalTracker::Client.token = token
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def settings_valid?
         | 
| 28 | 
            +
                  token and token.size > 10
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                def bold(string)
         | 
| 32 | 
            +
                  HighLine::BOLD + string + HighLine::RESET
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
                
         | 
| 35 | 
            +
                def highlight(string)
         | 
| 36 | 
            +
                  bold HighLine::BLUE + string
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def hello
         | 
| 40 | 
            +
                  highline.say HighLine::RESET
         | 
| 41 | 
            +
                  highline.say "Welcome to #{bold 'gitpt'}.\n\n"
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                def left(string)
         | 
| 45 | 
            +
                  leading_whitespace = (string.match(/\A( +)[^ ]+/) || [])[1]
         | 
| 46 | 
            +
                  string.gsub! /^#{leading_whitespace}/, '' if leading_whitespace
         | 
| 47 | 
            +
                  string
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                def loading(message, &block)
         | 
| 51 | 
            +
                  print message
         | 
| 52 | 
            +
                  STDOUT.flush
         | 
| 53 | 
            +
                  yield
         | 
| 54 | 
            +
                  print "\r" + ' ' * message.size + "\r" # Remove loading message
         | 
| 55 | 
            +
                  STDOUT.flush
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def stored
         | 
| 59 | 
            +
                  highline.say left(<<-MESSAGE)
         | 
| 60 | 
            +
                    Thank you. Your settings have been stored at #{highlight @settings_file}
         | 
| 61 | 
            +
                    You may remove that file for the wizard to reappear.
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    ----------------------------------------------------
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  MESSAGE
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def request_settings
         | 
| 69 | 
            +
                  highline.say highlight('Your settings are missing or invalid.')
         | 
| 70 | 
            +
                  highline.say "Please configure your Pivotal Tracker access.\n\n"
         | 
| 71 | 
            +
                  token = highline.ask bold("Your API key:") + " "
         | 
| 72 | 
            +
                  initials = highline.ask bold("Your PT initials") + " (optional, used for highlighting your stories): "
         | 
| 73 | 
            +
                  highline.say "\n"
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  settings = { :token => token, :initials => initials }
         | 
| 76 | 
            +
                  File.open settings_file, 'w' do |file|
         | 
| 77 | 
            +
                    file.write settings.to_yaml
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
                  load_settings
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                def load_settings
         | 
| 83 | 
            +
                  if File.exists? settings_file
         | 
| 84 | 
            +
                    settings = YAML.load(File.read settings_file)
         | 
| 85 | 
            +
                    @initials = settings[:initials]
         | 
| 86 | 
            +
                    @token = settings[:token]
         | 
| 87 | 
            +
                  else
         | 
| 88 | 
            +
                    if File.exists?(deprecated_token_file)
         | 
| 89 | 
            +
                      highline.say left(<<-MESSAGE)
         | 
| 90 | 
            +
                        #{HighLine::YELLOW}You are still using #{highlight(deprecated_token_file) + HighLine::YELLOW} which will be deprecated in a future version.
         | 
| 91 | 
            +
                        Please migrate your settings to ~/.gitpt or remove #{deprecated_token_file} for the wizard to cast magic.
         | 
| 92 | 
            +
                      MESSAGE
         | 
| 93 | 
            +
                      @token = File.read(deprecated_token_file) 
         | 
| 94 | 
            +
                    end
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                def load_projects
         | 
| 99 | 
            +
                  project_id_filename = '.pt_project_id'
         | 
| 100 | 
            +
                  if File.exists?(project_id_filename)
         | 
| 101 | 
            +
                    project_ids = File.read('.pt_project_id').split(/[\s]+/).map(&:to_i)
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  unless project_ids and project_ids.size > 0
         | 
| 105 | 
            +
                    highline.say left(<<-MESSAGE)
         | 
| 106 | 
            +
                      Sorry, I could not find a project ID in #{highlight project_id_filename} :(
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                      Please put at least one Pivotal Tracker project id into #{project_id_filename} in this directory.
         | 
| 109 | 
            +
                      You may add multiple IDs, separated using white space.
         | 
| 110 | 
            +
                    MESSAGE
         | 
| 111 | 
            +
                    exit 1
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                  loading 'Connecting to Pivotal Tracker...' do
         | 
| 115 | 
            +
                    projects = project_ids.collect do |project_id|
         | 
| 116 | 
            +
                      PivotalTracker::Project.find(project_id)
         | 
| 117 | 
            +
                    end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    @memberships = projects.collect(&:memberships).map(&:all).flatten
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                    @applicable_stories = projects.collect do |project|
         | 
| 122 | 
            +
                      project.stories.all(:state => 'started,finished,rejected')
         | 
| 123 | 
            +
                    end.flatten
         | 
| 124 | 
            +
                  end
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                def choose_story
         | 
| 128 | 
            +
                  selected_story = nil
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  highline.choose do |menu|
         | 
| 131 | 
            +
                    menu.header = "Choose a story"
         | 
| 132 | 
            +
                    applicable_stories.each do |story|
         | 
| 133 | 
            +
                      owner_name = story.owned_by
         | 
| 134 | 
            +
                      owner = if owner_name
         | 
| 135 | 
            +
                        owners = memberships.select{|member| member.name == owner_name}
         | 
| 136 | 
            +
                        owners.first ? owners.first.initials : '?'
         | 
| 137 | 
            +
                      else 
         | 
| 138 | 
            +
                        '?'
         | 
| 139 | 
            +
                      end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                      state = story.current_state
         | 
| 142 | 
            +
                      if state == 'started'
         | 
| 143 | 
            +
                        state = HighLine::GREEN + state + HighLine::RESET
         | 
| 144 | 
            +
                      elsif state != 'finished'
         | 
| 145 | 
            +
                        state = HighLine::RED + state + HighLine::RESET
         | 
| 146 | 
            +
                      end
         | 
| 147 | 
            +
                      state += HighLine::BOLD if owner == initials
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                      label = "(#{owner}, #{state}) #{story.name}"
         | 
| 150 | 
            +
                      label = bold(label) if owner == initials
         | 
| 151 | 
            +
                      menu.choice(label) { selected_story = story }
         | 
| 152 | 
            +
                    end
         | 
| 153 | 
            +
                    menu.hidden ''
         | 
| 154 | 
            +
                  end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                  if selected_story
         | 
| 157 | 
            +
                    message = highline.ask("\nAdd an optional message")
         | 
| 158 | 
            +
                    highline.say message
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                    commit_message = "[##{selected_story.id}] #{selected_story.name}"
         | 
| 161 | 
            +
                    if message.strip != ''
         | 
| 162 | 
            +
                      commit_message << ' - '<< message.strip
         | 
| 163 | 
            +
                    end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                    exec('git', 'commit', '-m', commit_message)
         | 
| 166 | 
            +
                  end
         | 
| 167 | 
            +
                end
         | 
| 168 | 
            +
             | 
| 169 | 
            +
                def run
         | 
| 170 | 
            +
                  load_projects
         | 
| 171 | 
            +
                  choose_story
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
              end
         | 
| 175 | 
            +
            end
         | 
    
        data/lib/geordi/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: geordi
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 3
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0. | 
| 8 | 
            +
              - 7
         | 
| 9 | 
            +
              - 0
         | 
| 10 | 
            +
              version: 0.7.0
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Henning Koch
         | 
| @@ -15,8 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date:  | 
| 19 | 
            -
            default_executable: 
         | 
| 18 | 
            +
            date: 2012-01-10 00:00:00 Z
         | 
| 20 19 | 
             
            dependencies: []
         | 
| 21 20 |  | 
| 22 21 | 
             
            description: Collection of command line tools we use in our daily work with Ruby, Rails and Linux at makandra.
         | 
| @@ -30,6 +29,7 @@ executables: | |
| 30 29 | 
             
            - cuc
         | 
| 31 30 | 
             
            - dump-for
         | 
| 32 31 | 
             
            - dumple
         | 
| 32 | 
            +
            - gitpt
         | 
| 33 33 | 
             
            - install-gems-remotely
         | 
| 34 34 | 
             
            - install-gems-remotely.sh
         | 
| 35 35 | 
             
            - migrate-all
         | 
| @@ -57,6 +57,7 @@ files: | |
| 57 57 | 
             
            - bin/cuc
         | 
| 58 58 | 
             
            - bin/dump-for
         | 
| 59 59 | 
             
            - bin/dumple
         | 
| 60 | 
            +
            - bin/gitpt
         | 
| 60 61 | 
             
            - bin/install-gems-remotely
         | 
| 61 62 | 
             
            - bin/install-gems-remotely.sh
         | 
| 62 63 | 
             
            - bin/migrate-all
         | 
| @@ -70,9 +71,9 @@ files: | |
| 70 71 | 
             
            - bin/tests
         | 
| 71 72 | 
             
            - geordi.gemspec
         | 
| 72 73 | 
             
            - lib/geordi.rb
         | 
| 74 | 
            +
            - lib/geordi/gitpt.rb
         | 
| 73 75 | 
             
            - lib/geordi/setup_firefox_for_selenium.rb
         | 
| 74 76 | 
             
            - lib/geordi/version.rb
         | 
| 75 | 
            -
            has_rdoc: true
         | 
| 76 77 | 
             
            homepage: http://makandra.com
         | 
| 77 78 | 
             
            licenses: []
         | 
| 78 79 |  | 
| @@ -102,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 102 103 | 
             
            requirements: []
         | 
| 103 104 |  | 
| 104 105 | 
             
            rubyforge_project: geordi
         | 
| 105 | 
            -
            rubygems_version: 1. | 
| 106 | 
            +
            rubygems_version: 1.8.5
         | 
| 106 107 | 
             
            signing_key: 
         | 
| 107 108 | 
             
            specification_version: 3
         | 
| 108 109 | 
             
            summary: Collection of command line tools we use in our daily work with Ruby, Rails and Linux at makandra.
         |