toolshed 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +14 -0
  3. data/Rakefile +11 -0
  4. data/bin/toolshed.rb +95 -16
  5. data/lib/toolshed/base.rb +7 -0
  6. data/lib/toolshed/cli.rb +13 -6
  7. data/lib/toolshed/client.rb +105 -83
  8. data/lib/toolshed/commands/checkout_branch.rb +26 -0
  9. data/lib/toolshed/commands/create_branch.rb +60 -0
  10. data/lib/toolshed/commands/create_pivotal_tracker_note.rb +9 -4
  11. data/lib/toolshed/commands/create_pull_request.rb +137 -0
  12. data/lib/toolshed/commands/delete_branch.rb +27 -0
  13. data/lib/toolshed/commands/get_daily_time_update.rb +21 -0
  14. data/lib/toolshed/commands/get_pivotal_tracker_story_information.rb +6 -3
  15. data/lib/toolshed/commands/list_branches.rb +13 -0
  16. data/lib/toolshed/commands/push_branch.rb +11 -0
  17. data/lib/toolshed/commands/update_pivotal_tracker_story_status.rb +8 -5
  18. data/lib/toolshed/git/git.rb +134 -0
  19. data/lib/toolshed/git/github.rb +88 -0
  20. data/lib/toolshed/ticket_tracking/pivotal_tracker.rb +111 -0
  21. data/lib/toolshed/ticket_tracking/ticket_tracking.rb +6 -0
  22. data/lib/toolshed/time_tracking/harvest.rb +68 -0
  23. data/lib/toolshed/time_tracking/time_tracking.rb +6 -0
  24. data/lib/toolshed/version.rb +1 -1
  25. data/lib/toolshed.rb +8 -2
  26. data/test/commands/checkout_branch_test.rb +28 -0
  27. data/test/commands/commands_helper.rb +2 -0
  28. data/test/commands/create_branch_test.rb +44 -0
  29. data/test/commands/create_pull_request_test.rb +125 -0
  30. data/test/commands/delete_branch_test.rb +75 -0
  31. data/test/commands/push_branch_test.rb +49 -0
  32. data/test/config.rb +1 -0
  33. data/test/git/git_helper.rb +31 -0
  34. data/test/git/git_test.rb +115 -0
  35. data/test/git/github_test.rb +91 -0
  36. data/test/helper.rb +98 -0
  37. data/toolshed.gemspec +8 -0
  38. metadata +151 -9
  39. data/lib/toolshed/commands/checkout_git_branch.rb +0 -23
  40. data/lib/toolshed/commands/create_git_branch.rb +0 -28
  41. data/lib/toolshed/commands/create_github_pull_request.rb +0 -77
  42. data/lib/toolshed/commands/push_git_branch.rb +0 -10
  43. data/lib/toolshed/github.rb +0 -89
  44. data/lib/toolshed/pivotal_tracker.rb +0 -87
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b797dd6cddae38cc2f9e8c1f7916108727dac003
4
- data.tar.gz: 1a39f45e8b150de27a7c6eecbc5fdf9668644b8f
3
+ metadata.gz: f9ed47a186308cf9eaa0043e8ab0abc7fefead11
4
+ data.tar.gz: 4f4fddd482621ccd255da4219db9583811dee03c
5
5
  SHA512:
6
- metadata.gz: 09b0e55117a1bc5bc9d62464a26b576576040ef8be4ecf3b6e6b44e3f5d847aebaf9784437f0b125957fae55b07880bf7eeec2ec292d93c5ef08ec999f68eb40
7
- data.tar.gz: f5782e3a4ebbb447f45b83544e962c101e2cb6991e737d9b7c5fc081de15a7f2300bb6af34392e9b547539ed8518b29dc494877ef181c69d3baf38aea225756c
6
+ metadata.gz: 2962ad0d0d636de5a53416f2ed47b41bc3a3a73a20962681f1a0b15de4c0f452ddd5e8729be7bb78f208c1864bc82994ff53c83aa64cdffa1dfda43a2aa93096
7
+ data.tar.gz: 1a20ab52725da3253f40f840b7d42ae5c7cb4c46bc35a20ef53b3a9a039e62484f4de8a52c8bf496f5f411b84eaa472758881331a5ca077da52476c66810277a
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ before_install:
2
+ - sudo apt-get update -qq
3
+ - sudo apt-get install -qq freetds-dev
4
+ - rm -f Gemfile.lock
5
+ before_script:
6
+ - git config --global user.email "wallerjake@gmail.com"
7
+ - git config --global user.name "wallerjake"
8
+ - rm -r -f test/remote
9
+ - rm -r -f test/tmp
10
+ language: ruby
11
+ rvm:
12
+ - 2.0.0
13
+ env:
14
+ - RUNNING_ON_CI=true
data/Rakefile CHANGED
@@ -1 +1,12 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ require File.expand_path(File.dirname(__FILE__)) + "/test/config"
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'test'
8
+ t.test_files = FileList['test/**/*_test.rb']
9
+ end
10
+
11
+ desc "Run tests"
12
+ task default: :test
data/bin/toolshed.rb CHANGED
@@ -16,18 +16,27 @@ be found at https://github.com/wallerjake/toolshed
16
16
  Before using this tool you should create a file called .toolshedrc in your projects directory or home directory if you want to use the settings globally.
17
17
  Note that it will only read one file which ever file is closest to the directory you are in. Then and add the following to that file:
18
18
 
19
- use_pivotal_tracker: true (required)
19
+ ticket_tracking_tool: 'pivotal_tracker' (required)
20
20
  pivotal_tracker_username: [pivotal_tracker_username] (optional)
21
21
  pivotal_tracker_password: [pivotal_tracker_password] (optional)
22
22
  default_pivotal_tracker_project_id: [project_id] (optional)
23
+
23
24
  github_username: [github_username] (optional)
24
25
  github_password: [github_password] (optional)
25
- branched_from_remote_name: [branched_from_remote_name] (required)
26
- branched_from_user: [branched_from_username] (required)
27
- branched_from_repo_name: [branched_from_repo_name] (required)
28
- push_from_user: [push_from_yourself] (required)
29
- push_to_myself: [push_to_yourself] (required)
30
- use_git_submodules: false (optional)
26
+ git_tool: github (optional default `github`)
27
+ use_git_submodules: false (optional default `false`)
28
+ pull_from_remote_name: [pull_from_remote_name] (required)
29
+ pull_from_repository_user: [pull_from_repository_username] (required)
30
+ pull_from_repository_name: [pull_from_repository_name] (required)
31
+ push_to_repository_user: [push_to_repository_user] (required)
32
+ push_to_repository_name: [push_to_repository_name] (required)
33
+ push_to_remote_name: [push_to_remote_name] (required)
34
+
35
+ time_tracking_username: [username] (optional)
36
+ time_tracking_password: [password] (optional)
37
+ time_tracking_owner: [owner] (optional)
38
+ time_tracking_default_project_id: [project_id] (optional)
39
+ time_tracking_tool: [tool] (optional)
31
40
 
32
41
  == Commands
33
42
 
@@ -36,13 +45,34 @@ All commands are executed as toolshed [options] command [command-options] args
36
45
  The following commands are available:
37
46
 
38
47
  help # show this usage
39
- create_github_pull_request # create a github pull request based on the branch you currently have checked out
48
+ create_pull_request [ # create a github pull request based on the branch you currently have checked out
49
+ --tool "github", # Optionally pass in your specific tool this can also be set in your config as git_tool
50
+ --ticket-system "pivotal_tracker" # Optionally pass in your ticket system this can also be set in your config as ticket_tracking_tool
51
+ --use-defaults "true" # use defaults instead of getting prompts if you don't want to edit your body or title
52
+ --title "Pull Request Title" # Title you want to use with the pull request
53
+ --body "Pull Request Body" # Body you want to use with the pull request
54
+ ]
40
55
  get_pivotal_tracker_story_information # Get the ticket information from a PivotalTracker story based on project_id and story_id
41
56
  create_pivotal_tracker_note # Create a note for a specific PivotalTracker story based on project_id and story_id
42
57
  update_pivotal_tracker_story_status # Update the status of PivotalTracker story
43
- create_git_branch # Create a git branch and push it to your local repository
44
- checkout_git_branch # Checkout a git branch and update the submodules if you use them
45
- push_git_branch # Push your current working branch to your own repository
58
+ create_branch [ # Create a branch default (git) and push it to your local repository
59
+ --branch-name "123_test" # The branch name standard it [ticket_id]_description
60
+ --branch-from "master" # What branch do you want to branch from
61
+ ]
62
+ checkout_branch [ # Checkout a branch [default git] and update the submodules if true
63
+ --branch-name "123" # Branch name or part of the branch name you want to checkout
64
+ ]
65
+ push_branch [ # Push your current working branch to your own repository
66
+ --force # Push your current working branch up with --force after
67
+ --branch-name "another" # Push this specific branch up instead of your current working branch
68
+ ]
69
+ get_daily_time_update # Get a daily update from your time tracking toolset currently harvest is supported
70
+ list_branches [ # List branches for your remote repository
71
+ --repository-name "depot" # The repository name you want to list branches for if not passed pull_from_repository_name is used
72
+ ]
73
+ delete_branch [ # Delete a branch both locally and to your push to remote
74
+ --branch-name "134_mybranch" | "134" # Either the full branch name or some unique string in the branch i.e. ticket id
75
+ ]
46
76
  EOF
47
77
  end
48
78
 
@@ -50,16 +80,16 @@ if $0.split("/").last == 'toolshed'
50
80
  options = {}
51
81
 
52
82
  global = OptionParser.new do |opts|
53
- opts.on("-u", "--github_username [ARG]") do |username|
83
+ opts.on("-u", "--github-username [ARG]") do |username|
54
84
  Toolshed::Client.github_username = username
55
85
  end
56
- opts.on("-p", "--github_password [ARG]") do |password|
86
+ opts.on("-p", "--github-password [ARG]") do |password|
57
87
  Toolshed::Client.github_password = password
58
88
  end
59
- opts.on("-u", "--pivotal_tracker_username [ARG]") do |username|
89
+ opts.on("-u", "--pivotal-tracker-username [ARG]") do |username|
60
90
  Toolshed::Client.pivotal_tracker_username = username
61
91
  end
62
- opts.on("-p", "--pivotal_tracker_password [ARG]") do |password|
92
+ opts.on("-p", "--pivotal-tracker-password [ARG]") do |password|
63
93
  Toolshed::Client.pivotal_tracker_password = password
64
94
  end
65
95
  opts.on("-d", "--debug [ARG]") do
@@ -70,7 +100,56 @@ if $0.split("/").last == 'toolshed'
70
100
  end
71
101
  end
72
102
 
73
- subcommands = {}
103
+ subcommands = {
104
+ 'create_pull_request' => OptionParser.new do |opts|
105
+ opts.on("--tool [ARG]") do |opt|
106
+ Toolshed::Client.git_tool = opt.downcase
107
+ end
108
+ opts.on("--ticket-system [ARG]") do |opt|
109
+ Toolshed::Client.ticket_tracking_tool = opt.downcase
110
+ end
111
+ opts.on("--use-defaults [ARG]") do |opt|
112
+ Toolshed::Client.use_defaults = opt
113
+ end
114
+ opts.on("--title [ARG]") do |opt|
115
+ options[:title] = opt
116
+ end
117
+ opts.on("--body [ARG]") do |opt|
118
+ options[:body] = opt
119
+ end
120
+ end,
121
+ 'create_branch' => OptionParser.new do |opts|
122
+ opts.on("--branch-name [ARG]") do |opt|
123
+ options[:branch_name] = opt
124
+ end
125
+ opts.on("--branch-from [ARG]") do |opt|
126
+ options[:branch_from] = opt
127
+ end
128
+ end,
129
+ 'push_branch' => OptionParser.new do |opts|
130
+ opts.on("--force [ARG]") do |opt|
131
+ options[:force_command] = true
132
+ end
133
+ opts.on("--branch-name [ARG]") do |opt|
134
+ options[:branch_name] = opt
135
+ end
136
+ end,
137
+ 'list_branches' => OptionParser.new do |opts|
138
+ opts.on("--repository-name [ARG]") do |opt|
139
+ Toolshed::Client.pull_from_repository_name = opt
140
+ end
141
+ end,
142
+ 'checkout_branch' => OptionParser.new do |opts|
143
+ opts.on("--branch-name [ARG]") do |opt|
144
+ options[:branch_name] = opt
145
+ end
146
+ end,
147
+ 'delete_branch' => OptionParser.new do |opts|
148
+ opts.on("--branch-name [ARG]") do |opt|
149
+ options[:branch_name] = opt
150
+ end
151
+ end,
152
+ }
74
153
 
75
154
  global.order!
76
155
  command = ARGV.shift
data/lib/toolshed/base.rb CHANGED
@@ -3,3 +3,10 @@ module Toolshed
3
3
  # implement base methods here
4
4
  end
5
5
  end
6
+
7
+ String.class_eval do
8
+ def camel_case
9
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
10
+ split('_').map{|e| e.capitalize}.join
11
+ end
12
+ end
data/lib/toolshed/cli.rb CHANGED
@@ -21,22 +21,29 @@ module Toolshed
21
21
 
22
22
  def commands
23
23
  {
24
- 'create_github_pull_request' => Toolshed::Commands::CreateGithubPullRequest,
24
+ 'create_pull_request' => Toolshed::Commands::CreatePullRequest,
25
25
  'create_pivotal_tracker_note' => Toolshed::Commands::CreatePivotalTrackerNote,
26
26
  'get_pivotal_tracker_story_information' => Toolshed::Commands::GetPivotalTrackerStoryInformation,
27
27
  'update_pivotal_tracker_story_status' => Toolshed::Commands::UpdatePivotalTrackerStoryStatus,
28
- 'create_git_branch' => Toolshed::Commands::CreateGitBranch,
29
- 'checkout_git_branch' => Toolshed::Commands::CheckoutGitBranch,
28
+ 'create_branch' => Toolshed::Commands::CreateBranch,
29
+ 'checkout_branch' => Toolshed::Commands::CheckoutBranch,
30
30
  'push_git_branch' => Toolshed::Commands::PushGitBranch,
31
+ 'get_daily_time_update' => Toolshed::Commands::GetDailyTimeUpdate,
32
+ 'list_branches' => Toolshed::Commands::ListBranches,
33
+ 'delete_branch' => Toolshed::Commands::DeleteBranch,
31
34
  }
32
35
  end
33
36
  end
34
37
  end
35
38
 
36
- require 'toolshed/commands/create_github_pull_request'
39
+ require 'toolshed/commands/create_pull_request'
37
40
  require 'toolshed/commands/create_pivotal_tracker_note'
38
41
  require 'toolshed/commands/get_pivotal_tracker_story_information'
39
42
  require 'toolshed/commands/update_pivotal_tracker_story_status'
40
- require 'toolshed/commands/create_git_branch'
41
- require 'toolshed/commands/checkout_git_branch'
43
+ require 'toolshed/commands/create_branch'
44
+ require 'toolshed/commands/checkout_branch'
42
45
  require 'toolshed/commands/push_git_branch'
46
+ require 'toolshed/commands/get_daily_time_update'
47
+ require 'toolshed/commands/get_daily_time_update'
48
+ require 'toolshed/commands/list_branches'
49
+ require 'toolshed/commands/delete_branch'
@@ -6,6 +6,7 @@ module Toolshed
6
6
  GITHUB_BASE_API_URL = "https://api.github.com/"
7
7
  PIVOTAL_TRACKER_BASE_API_URL = "https://www.pivotaltracker.com/services/v5/"
8
8
 
9
+ # debugging options
9
10
  def self.debug?
10
11
  @debug
11
12
  end
@@ -14,6 +15,22 @@ module Toolshed
14
15
  @debug = debug
15
16
  end
16
17
 
18
+ def self.git_quiet
19
+ @git_quiet
20
+ end
21
+
22
+ def self.git_quiet=(git_quiet)
23
+ @git_quiet = git_quiet
24
+ end
25
+
26
+ def self.use_defaults
27
+ @use_defaults
28
+ end
29
+
30
+ def self.use_defaults=(use_defaults)
31
+ @use_defaults = use_defaults
32
+ end
33
+
17
34
 
18
35
  # github config settings
19
36
  def self.github_username
@@ -32,44 +49,44 @@ module Toolshed
32
49
  @github_password = password
33
50
  end
34
51
 
35
- def self.branched_from_remote_name
36
- @branched_from_remote_name
52
+ def self.pull_from_remote_name
53
+ @pull_from_remote_name
37
54
  end
38
55
 
39
- def self.branched_from_remote_name=(branched_from_remote_name)
40
- @branched_from_remote_name = branched_from_remote_name
56
+ def self.pull_from_remote_name=(pull_from_remote_name)
57
+ @pull_from_remote_name = pull_from_remote_name
41
58
  end
42
59
 
43
- def self.branched_from_user
44
- @branched_from_user
60
+ def self.pull_from_repository_user
61
+ @pull_from_repository_user
45
62
  end
46
63
 
47
- def self.branched_from_user=(branched_from_user)
48
- @branched_from_user = branched_from_user
64
+ def self.pull_from_repository_user=(pull_from_repository_user)
65
+ @pull_from_repository_user = pull_from_repository_user
49
66
  end
50
67
 
51
- def self.branched_from_repo_name
52
- @branched_from_repo_name
68
+ def self.pull_from_repository_name
69
+ @pull_from_repository_name
53
70
  end
54
71
 
55
- def self.branched_from_repo_name=(branched_from_repo_name)
56
- @branched_from_repo_name = branched_from_repo_name
72
+ def self.pull_from_repository_name=(pull_from_repository_name)
73
+ @pull_from_repository_name = pull_from_repository_name
57
74
  end
58
75
 
59
- def self.push_from_user
60
- @push_from_user
76
+ def self.push_to_repository_user
77
+ @push_to_repository_user
61
78
  end
62
79
 
63
- def self.push_from_user=(push_from_user)
64
- @push_from_user = push_from_user
80
+ def self.push_to_repository_user=(push_to_repository_user)
81
+ @push_to_repository_user = push_to_repository_user
65
82
  end
66
83
 
67
- def self.push_to_myself
68
- @push_to_myself
84
+ def self.push_to_remote_name
85
+ @push_to_remote_name
69
86
  end
70
87
 
71
- def self.push_to_myself=(push_to_myself)
72
- @push_to_myself = push_to_myself
88
+ def self.push_to_remote_name=(push_to_remote_name)
89
+ @push_to_remote_name = push_to_remote_name
73
90
  end
74
91
 
75
92
  def self.use_git_submodules
@@ -80,6 +97,13 @@ module Toolshed
80
97
  @use_git_submodules = use_git_submodules
81
98
  end
82
99
 
100
+ def self.git_tool
101
+ (@git_tool.nil?) ? Toolshed::Git::DEFAULT_GIT_TOOL : @git_tool
102
+ end
103
+
104
+ def self.git_tool=(git_tool)
105
+ @git_tool = git_tool
106
+ end
83
107
 
84
108
 
85
109
  # pivotal tracker config
@@ -107,23 +131,61 @@ module Toolshed
107
131
  @default_pivotal_tracker_project_id = default_pivotal_tracker_project_id
108
132
  end
109
133
 
110
- def self.use_pivotal_tracker
111
- @use_pivotal_tracker
134
+
135
+ # ticket tracking configuration
136
+
137
+ def self.ticket_tracking_tool
138
+ @ticket_tracking_tool
139
+ end
140
+
141
+ def self.ticket_tracking_tool=(ticket_tracking_tool)
142
+ @ticket_tracking_tool = ticket_tracking_tool
112
143
  end
113
144
 
114
- def self.use_pivotal_tracker=(use_pivotal_tracker)
115
- @use_pivotal_tracker = use_pivotal_tracker
145
+ # time tracking configuration
146
+
147
+ def self.time_tracking_tool
148
+ @time_tracking_tool
116
149
  end
117
150
 
151
+ def self.time_tracking_tool=(time_tracking_tool)
152
+ @time_tracking_tool = time_tracking_tool
153
+ end
118
154
 
119
- def self.http_proxy
120
- @http_proxy
155
+ def self.time_tracking_username
156
+ @time_tracking_username
121
157
  end
122
158
 
123
- def self.http_proxy=(http_proxy)
124
- @http_proxy = http_proxy
159
+ def self.time_tracking_username=(time_tracking_username)
160
+ @time_tracking_username = time_tracking_username
125
161
  end
126
162
 
163
+ def self.time_tracking_password
164
+ @time_tracking_password
165
+ end
166
+
167
+ def self.time_tracking_password=(time_tracking_password)
168
+ @time_tracking_password = time_tracking_password
169
+ end
170
+
171
+ def self.time_tracking_owner
172
+ @time_tracking_owner
173
+ end
174
+
175
+ def self.time_tracking_owner=(time_tracking_owner)
176
+ @time_tracking_owner = time_tracking_owner
177
+ end
178
+
179
+ def self.time_tracking_default_project_id
180
+ @time_tracking_default_project_id
181
+ end
182
+
183
+ def self.time_tracking_default_project_id=(time_tracking_default_project_id)
184
+ @time_tracking_default_project_id = time_tracking_default_project_id
185
+ end
186
+
187
+
188
+
127
189
  def self.load_credentials_if_necessary
128
190
  load_credentials unless credentials_loaded?
129
191
  end
@@ -154,13 +216,21 @@ module Toolshed
154
216
  self.pivotal_tracker_username ||= credentials['pivotal_tracker_username']
155
217
  self.pivotal_tracker_password ||= credentials['pivotal_tracker_password']
156
218
  self.default_pivotal_tracker_project_id ||= credentials['default_pivotal_tracker_project_id']
157
- self.branched_from_remote_name ||= credentials['branched_from_remote_name']
158
- self.branched_from_user ||= credentials['branched_from_user']
159
- self.branched_from_repo_name ||= credentials['branched_from_repo_name']
160
- self.push_from_user ||= credentials['push_from_user']
161
- self.push_to_myself ||= credentials['push_to_myself']
162
- self.use_pivotal_tracker ||= credentials['use_pivotal_tracker']
219
+ self.pull_from_remote_name ||= credentials['pull_from_remote_name']
220
+ self.pull_from_repository_user ||= credentials['pull_from_repository_user']
221
+ self.pull_from_repository_name ||= credentials['pull_from_repository_name']
222
+ self.push_to_repository_user ||= credentials['push_to_repository_user']
223
+ self.push_to_remote_name ||= credentials['push_to_remote_name']
224
+ self.ticket_tracking_tool ||= credentials['ticket_tracking_tool']
163
225
  self.use_git_submodules ||= credentials['use_git_submodules']
226
+ self.git_tool ||= credentials['git_tool']
227
+ self.time_tracking_username ||= credentials['time_tracking_username']
228
+ self.time_tracking_password ||= credentials['time_tracking_password']
229
+ self.time_tracking_owner ||= credentials['time_tracking_owner']
230
+ self.time_tracking_default_project_id ||= credentials['time_tracking_default_project_id']
231
+ self.time_tracking_tool ||= credentials['time_tracking_tool']
232
+ self.git_quiet ||= (credentials['git_quiet']) ? '&> /dev/null' : ''
233
+ self.use_defaults ||= credentials['use_defaults']
164
234
  @credentials_loaded = true
165
235
  puts "Credentials loaded from #{File.absolute_path(loaded_from_path)}"
166
236
  rescue => error
@@ -170,55 +240,7 @@ module Toolshed
170
240
  end
171
241
 
172
242
  def self.credentials_loaded?
173
- (@credentials_loaded ||= false) or (github_username and github_password and pivotal_tracker_username and pivotal_tracker_password)
174
- end
175
-
176
- def self.base_options
177
- options = {
178
- :format => :json,
179
- :headers => { 'Accept' => 'application/json', 'User-Agent' => "toolshed-ruby/#{Toolshed::VERSION}" },
180
- }
181
-
182
- if http_proxy
183
- options.merge!(
184
- :http_proxyaddr => self.http_proxy[:addr],
185
- :http_proxyport => self.http_proxy[:port]
186
- )
187
- end
188
-
189
- if password
190
- options[:basic_auth] = { :username => username, :password => password }
191
- else
192
- raise Error, 'A password is required for all API requests.'
193
- end
194
-
195
- options
196
- end
197
-
198
- def self.get(path, options = {})
199
- request :get, path, options
200
- end
201
-
202
- def self.post(path, options = {})
203
- request :post, path, options
204
- end
205
-
206
- def self.put(path, options = {})
207
- request :put, path, options
208
- end
209
-
210
- def self.delete(path, options = {})
211
- request :delete, path, options
212
- end
213
-
214
- def self.request(method, path, options)
215
- response = HTTParty.send(method, "#{base_uri}#{path}", base_options.merge(options))
216
-
217
- if response.code == 401
218
- raise AuthenticationFailed
219
- end
220
-
221
- response
243
+ (@credentials_loaded ||= false)
222
244
  end
223
245
  end
224
246
  end
@@ -0,0 +1,26 @@
1
+ module Toolshed
2
+ module Commands
3
+ class CheckoutBranch
4
+ def execute(args, options = {})
5
+ branch_name = read_user_input("Ticket ID or Branch Name:", options)
6
+ branch_name = Toolshed::Git::Base.checkout(branch_name)
7
+ puts "Switched to '#{branch_name}'"
8
+ end
9
+
10
+ def read_user_input(message, options)
11
+ return options[:branch_name] if (options.has_key?(:branch_name))
12
+
13
+ puts message
14
+ value = $stdin.gets.chomp
15
+
16
+ until (!value.empty?)
17
+ puts "Branch name cannot be empty"
18
+ puts message
19
+ value = $stdin.gets.chomp
20
+ end
21
+
22
+ value
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,60 @@
1
+ module Toolshed
2
+ module Commands
3
+ class CreateBranch
4
+ def execute(args, options = {})
5
+ begin
6
+ branch_name = read_user_input_branch_name("Branch name:", options)
7
+ branch_from = read_user_input_branch_from("Branch from:", options)
8
+
9
+ puts "Branch name: #{branch_name}"
10
+ puts "Branching from: #{branch_from}"
11
+
12
+ git = Toolshed::Git::Base.new({
13
+ from_remote_branch_name: branch_from,
14
+ to_remote_branch_name: branch_name,
15
+ })
16
+ git.create_branch
17
+
18
+ puts "Branch #{branch_name} has been created"
19
+ return
20
+ rescue Veto::InvalidEntity => e
21
+ puts "Unable to create branch due to the following errors"
22
+ e.message.each do |key, value|
23
+ puts "#{key}: #{value}"
24
+ end
25
+ return
26
+ end
27
+ end
28
+
29
+ def read_user_input_branch_name(message, options)
30
+ return options[:branch_name] if (options.has_key?(:branch_name))
31
+
32
+ puts message
33
+ value = $stdin.gets.chomp
34
+
35
+ until (!value.empty?)
36
+ puts "Branch name cannot be empty"
37
+ puts message
38
+ value = $stdin.gets.chomp
39
+ end
40
+
41
+ value
42
+ end
43
+
44
+ def read_user_input_branch_from(message, options)
45
+ return options[:branch_from] if (options.has_key?(:branch_from))
46
+
47
+ puts message
48
+ value = $stdin.gets.chomp
49
+
50
+ until (!value.empty?)
51
+ puts "Branch from cannot be empty"
52
+ puts message
53
+ value = $stdin.gets.chomp
54
+ end
55
+
56
+ value
57
+ end
58
+ end
59
+ end
60
+ end
@@ -8,10 +8,13 @@ module Toolshed
8
8
  project_id = Toolshed::Client.default_pivotal_tracker_project_id
9
9
  end
10
10
 
11
- pivotal_tracker = Toolshed::PivotalTracker.new({ project_id: project_id, username: Toolshed::PivotalTracker.username, password: Toolshed::PivotalTracker.password })
12
- github = Toolshed::Github.new
11
+ pivotal_tracker = Toolshed::TicketTracking::PivotalTracker.new({
12
+ project_id: project_id,
13
+ username: Toolshed::TicketTracking::PivotalTracker.username,
14
+ password: Toolshed::TicketTracking::PivotalTracker.password,
15
+ })
13
16
 
14
- default_story_id = Toolshed::PivotalTracker::story_id_from_branch_name(github.branch_name)
17
+ default_story_id = Toolshed::TicketTracking::PivotalTracker::story_id_from_branch_name(Toolshed::Git::Base.branch_name)
15
18
  print "Story ID (Default: #{default_story_id})? "
16
19
  story_id = $stdin.gets.chomp.strip
17
20
  if (story_id == '')
@@ -23,7 +26,9 @@ module Toolshed
23
26
 
24
27
  begin
25
28
  result = pivotal_tracker.add_note(story_id, note_text)
26
- puts result.inspect
29
+ result.instance_variables.each do |name, value|
30
+ puts "#{name}: #{result.instance_variable_get(name).inspect}"
31
+ end
27
32
  rescue => e
28
33
  puts e.message
29
34
  exit