pt 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## v0.5.5
4
4
 
5
+ Added `pt list all` which shows tickets from all members of the project ( kylewest )
6
+
7
+ ## v0.5.5
8
+
5
9
  Show the id of tickes by default in tables, adds the url of the task to show and shows more information about attachments ( derwiki )
6
10
 
7
11
  ## v0.5.4
data/README.md CHANGED
@@ -43,6 +43,8 @@ Run `pt` from the root folder of your project.
43
43
  pt done [id] ~[0-3] ~[comment] # lazy mans finish task, does everything
44
44
 
45
45
  pt list [member] # list all tasks for another pt user
46
+
47
+ pt list all # list all tasks for all users
46
48
 
47
49
  pt updates [number] # shows number recent activity from your current project
48
50
 
data/bin/pt CHANGED
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
3
+ require 'pathname'
4
+
5
+ lib = (Pathname.new(__FILE__).realpath.dirname + '../lib').to_s
4
6
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
7
 
6
- require File.dirname(__FILE__) + '/../lib/pt'
8
+ require 'pt'
7
9
 
8
- PT::UI.new ARGV
10
+ PT::UI.new ARGV
data/lib/pt/client.rb CHANGED
@@ -41,10 +41,18 @@ class PT::Client
41
41
  end
42
42
  end
43
43
 
44
+ def get_work(project)
45
+ project.stories.all(:current_state => 'unscheduled,unstarted,started')
46
+ end
47
+
44
48
  def get_my_work(project, user_name)
45
49
  project.stories.all :mywork => user_name
46
50
  end
47
51
 
52
+ def get_task_by_id(id)
53
+ get_projects.map {|project| project.stories.all(:id => id)}.flatten.first
54
+ end
55
+
48
56
  def get_my_open_tasks(project, user_name)
49
57
  project.stories.all :owner => user_name
50
58
  end
@@ -78,6 +86,11 @@ class PT::Client
78
86
  project.stories.all.select{ |t| t.owned_by == nil }
79
87
  end
80
88
 
89
+ def get_member(project, query)
90
+ member = project.memberships.all.select{ |m| m.name.downcase == query.downcase || m.initials.downcase == query.downcase }
91
+ member.empty? ? nil : member.first
92
+ end
93
+
81
94
  def get_members(project)
82
95
  project.memberships.all
83
96
  end
@@ -106,4 +119,4 @@ class PT::Client
106
119
  project.stories.create(:name => name, :owned_by => owner, :requested_by => requester, :story_type => task_type)
107
120
  end
108
121
 
109
- end
122
+ end
data/lib/pt/data_table.rb CHANGED
@@ -10,11 +10,13 @@ module PT
10
10
  @rows = dataset.map{ |row| DataRow.new(row, dataset) }
11
11
  end
12
12
 
13
- def print
13
+ def print(config={})
14
14
  if @rows.empty?
15
- puts "\n -- empty list -- \n"
15
+ puts "\n#{'-- empty list --'.center(36)}\n"
16
16
  else
17
- self.class.table @rows, :fields => [:num] + self.class.fields, :unicode => true, :description => false
17
+ self.class.table @rows, :fields => [:num] + self.class.fields,
18
+ :unicode => true, :description => false,
19
+ :max_width => config[:max_width]
18
20
  end
19
21
  end
20
22
 
data/lib/pt/debugger.rb CHANGED
@@ -4,7 +4,10 @@ module RestClient
4
4
  class Request
5
5
  alias_method :rest_client_execute, :execute
6
6
  def execute &block
7
- puts "\nRequest: #{method.to_s.upcase} #{url}"
7
+ puts ""
8
+ puts "Request: #{method.to_s.upcase} #{url}"
9
+ puts ""
10
+ puts "Payload: #{payload}"
8
11
  rest_client_execute &block
9
12
  end
10
13
  end
data/lib/pt/ui.rb CHANGED
@@ -22,22 +22,27 @@ class PT::UI
22
22
  def my_work
23
23
  title("My Work for #{user_s} in #{project_to_s}")
24
24
  stories = @client.get_my_work(@project, @local_config[:user_name])
25
- PT::TasksTable.new(stories).print
25
+ PT::TasksTable.new(stories).print @global_config
26
26
  end
27
27
 
28
28
  def todo
29
29
  title("My Work for #{user_s} in #{project_to_s}")
30
30
  stories = @client.get_my_work(@project, @local_config[:user_name])
31
31
  stories = stories.select { |story| story.current_state == "unscheduled" }
32
- PT::TasksTable.new(stories).print
32
+ PT::TasksTable.new(stories).print @global_config
33
33
  end
34
34
 
35
35
  def list
36
36
  if @params[0]
37
- user = find_owner @params[0]
38
- if user
39
- stories = @client.get_my_work(@project, user.name)
40
- PT::TasksTable.new(stories).print
37
+ if @params[0] == "all"
38
+ stories = @client.get_work(@project)
39
+ PT::TasksTable.new(stories).print @global_config
40
+ else
41
+ user = find_owner @params[0]
42
+ if user
43
+ stories = @client.get_my_work(@project, user.name)
44
+ PT::TasksTable.new(stories).print @global_config
45
+ end
41
46
  end
42
47
  else
43
48
  members = @client.get_members(@project)
@@ -45,7 +50,7 @@ class PT::UI
45
50
  user = select("Please select a member to see his tasks.", table).name
46
51
  title("Work for #{user} in #{project_to_s}")
47
52
  stories = @client.get_my_work(@project, user)
48
- PT::TasksTable.new(stories).print
53
+ PT::TasksTable.new(stories).print @global_config
49
54
  end
50
55
  end
51
56
 
@@ -133,11 +138,13 @@ class PT::UI
133
138
  tasks = @client.get_tasks_to_assign(@project, @local_config[:user_name])
134
139
  table = PT::TasksTable.new(tasks)
135
140
  task = select("Please select a task to assign it an owner", table)
141
+ end
142
+ unless owner
136
143
  members = @client.get_members(@project)
137
144
  table = PT::MembersTable.new(members)
138
145
  owner = select("Please select a member to assign him the task", table).name
139
146
  end
140
- result = @client.assign_task(@project, task, owner.name)
147
+ result = @client.assign_task(@project, task, owner)
141
148
  if result.errors.any?
142
149
  error(result.errors.errors)
143
150
  else
@@ -359,14 +366,25 @@ class PT::UI
359
366
  end
360
367
 
361
368
  def find
362
- tasks = @client.get_my_work(@project, @local_config[:user_name])
369
+ if (story_id = @params[0].to_i).nonzero?
370
+ if task = @client.get_task_by_id(story_id)
371
+ return show_task(task)
372
+ else
373
+ message("Task not found by id (#{story_id}), falling back to text search")
374
+ end
375
+ end
376
+
363
377
  if @params[0]
364
- tasks.each do | task |
365
- if (task.name.downcase.index @params[0]) && (task.current_state != 'delivered')
366
- title("--- [#{(tasks.index task) + 1 }] -----------------")
367
- show_task(task)
368
- end
378
+ tasks = @client.get_my_work(@project, @local_config[:user_name])
379
+ matched_tasks = tasks.select do | task |
380
+ task.name.downcase.index(@params[0]) && task.current_state != 'delivered'
381
+ end
382
+
383
+ matched_tasks.each do | task |
384
+ title("--- [#{(tasks.index task) + 1 }] -----------------")
385
+ show_task(task)
369
386
  end
387
+ message("No matches found for '#{@params[0]}'") if matched_tasks.empty?
370
388
  else
371
389
  message("You need to provide a substring for a tasks title.")
372
390
  end
@@ -404,6 +422,7 @@ class PT::UI
404
422
  puts("pt find [query] # looks in your tasks by title and presents it")
405
423
  puts("pt done [id] ~[0-3] ~[comment] # lazy mans finish task, does everything")
406
424
  puts("pt list [member] # list all tasks for another pt user")
425
+ puts("pt list all # list all tasks for all users")
407
426
  puts("pt updates [number] # shows number recent activity from your current project")
408
427
  puts("")
409
428
  puts("All commands can be ran without arguments for a wizard like UI.")
@@ -493,7 +512,7 @@ class PT::UI
493
512
  def select(msg, table)
494
513
  if table.length > 0
495
514
  begin
496
- table.print
515
+ table.print @global_config
497
516
  row = ask "#{msg} (1-#{table.length}, 'q' to exit)"
498
517
  quit if row == 'q'
499
518
  selected = table[row]
@@ -501,7 +520,7 @@ class PT::UI
501
520
  end until selected
502
521
  selected
503
522
  else
504
- table.print
523
+ table.print @global_config
505
524
  message "Sorry, there are no options to select."
506
525
  quit
507
526
  end
@@ -555,14 +574,9 @@ class PT::UI
555
574
  end
556
575
 
557
576
  def find_owner query
558
- members = @client.get_members(@project)
559
- members.each do | member |
560
- if member.name.downcase.index query.to_s
561
- return member
562
- end
563
- if member.initials.downcase.index query.to_s
564
- return member
565
- end
577
+ if query
578
+ member = @client.get_member(@project, query)
579
+ return member ? member.name : nil
566
580
  end
567
581
  nil
568
582
  end
data/lib/pt.rb CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  module PT
4
4
  class InputError < StandardError; end
5
- VERSION = '0.5.5'
5
+ VERSION = '0.5.6'
6
6
  end
7
7
 
8
8
  require 'pt/client'
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.5.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Raul Murciano
9
9
  - Orta Therox
10
+ - Engineering at Causes
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2012-08-01 00:00:00.000000000 Z
14
+ date: 2012-08-23 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: pivotal-tracker
@@ -81,6 +82,7 @@ description: Minimalist, opinionated client to manage your Pivotal Tracker tasks
81
82
  email:
82
83
  - raul@murciano.net
83
84
  - orta.therox@gmail.com
85
+ - eng@causes.com
84
86
  executables:
85
87
  - pt
86
88
  extensions: []