zd_hire 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/zd_hire +95 -28
  3. data/lib/zd_hire/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: daf9404d6501e5d21de4006d22604f148c09584d
4
- data.tar.gz: a967c1340d1ddf5a05b0c15246e68827b3d00c93
3
+ metadata.gz: ad1103a8e3681f621dbed4bd2926afa07b48168c
4
+ data.tar.gz: 441fdd191d67aa469918582a9f8e384788e9e8b4
5
5
  SHA512:
6
- metadata.gz: f0dbe07cec885c9a34c7b19d889529803226b5ec7a123e17bffaa6797ce29d6ac7eb68d5ad2420cf79aa198adf52f0490f37415120a2643cb3e1d63fa4933047
7
- data.tar.gz: 8e320f62e54d7401e5ca021147be62310bc70f2b92d0c92532d0385a5a52c1a00577ab5913f1aef3f50ec647991cfac0c41f69e45c6f25850eb7257d01009a4f
6
+ metadata.gz: 4ee99e6f0e9c3ce52e14173ba129891e7212a3a0e29fab83752b7fc929796ed58555d4f9c08f9541e00e224a52bcd9c1f682e980826f805ed841c8527114e28c
7
+ data.tar.gz: 4563d3978b7cdb5bbfbe448b63710e5801f55d11299b9d5cff74827f43543ca2f7ee00d0349f3e12a6523ef52c17983a1473bf30419cab1a793dbe2d11ad75e0
data/bin/zd_hire CHANGED
@@ -19,6 +19,12 @@ QUESTIONS = {
19
19
  PRIVATE_SECTION_SEPARATOR = '## PRIVATE'
20
20
  EVALUATION_SEPARATOR = '## EVALUATION'
21
21
  DEFAULT_ISSUE_LABEL = 'default_issue'
22
+ POSITION_LEVEL_LABELS = %w{
23
+ software_engineer
24
+ senior_software_engineer
25
+ staff_engineer
26
+ senior_staff_engineer
27
+ }
22
28
 
23
29
  def token_validator
24
30
  ->(token) {
@@ -87,9 +93,16 @@ command :init do |c|
87
93
  end
88
94
 
89
95
  command :clone do |c|
96
+ c.syntax = 'zd_hire clone REPOSITORY NAME'
97
+ c.description = 'Sets up repository for candidate'
98
+ c.option '--custom', TrueClass, 'Whether should run in custom mode'
99
+ c.option '--verbose', TrueClass, 'Whether should run in verbose mode'
90
100
  c.action do |args, options|
101
+ $custom = options.custom
102
+ $verbose = options.verbose
103
+
91
104
  if config.valid?
92
- target = ask(QUESTIONS[:target_repo]) do |q|
105
+ target = args.first || ask(QUESTIONS[:target_repo]) do |q|
93
106
  q.validate = target_validator
94
107
  q.responses.merge!(not_valid: "Target and origin repositories can't be the same")
95
108
  end
@@ -97,15 +110,16 @@ command :clone do |c|
97
110
  else
98
111
  say 'Run `zd_hire init` to configure github keys'
99
112
  end
100
- if agree('Would you like to create a Github Project?(y/n) ', true)
113
+ agree_if_custom('Would you like to create a Github Project?(y/n) ', true) do
101
114
  create_project(target)
102
115
  end
103
116
  end
104
117
  end
105
118
 
106
119
  def create_pr(new_repo)
120
+ say "Copying Pull Request..."
107
121
  origin_pull_requests.each {|pr| say "[#{pr.number}] #{pr.head.ref}: #{pr.title}" }
108
- pr_number = ask('Which Pull Request? ')
122
+ pr_number = ask('Which Pull Request? [The branch must also be available locally] ')
109
123
  selected = origin_pull_requests.detect {|pr| pr.number.to_i == pr_number.to_i }
110
124
  exit unless selected
111
125
  branch = selected.head.ref
@@ -116,13 +130,23 @@ def create_pr(new_repo)
116
130
  "git push origin #{branch}"
117
131
  ].join(' && ')
118
132
 
119
- `#{command}`
133
+ say "Pulling from local branch..."
134
+ execute(command, wait_response: true)
120
135
  sleep 1
136
+ say "Creating PR in target repository..."
121
137
  github.create_pull_request(new_repo.full_name, 'master', branch, selected.title, selected.body)
122
138
  end
123
139
 
124
140
  def origin_default_issue
125
- @df ||= origin_repo_issues.detect{|issue| issue.labels.any?{ |l| l.name == DEFAULT_ISSUE_LABEL} }
141
+ @df ||= origin_repo_issues.detect{ |issue| has_label?(issue, DEFAULT_ISSUE_LABEL) }
142
+ end
143
+
144
+ def issues_by_label(label)
145
+ origin_repo_issues.select { |issue| has_label?(issue, label) }
146
+ end
147
+
148
+ def has_label?(issue, label)
149
+ issue.labels.any? { |l| l.name == label }
126
150
  end
127
151
 
128
152
  def evaluation_items(issue)
@@ -154,15 +178,33 @@ def origin_pull_requests
154
178
  @prs ||= github.pull_requests(config.origin_repo)
155
179
  end
156
180
 
157
- def copy_and_report_issues(target)
181
+ def copy_issues(target)
182
+ selected_issues = $custom ? pick_issues : issues_for_position
183
+ say "Copying issues..."
184
+ selected_issues.each { |issue| copy_issue(target, issue) }
185
+
186
+ report_issues(selected_issues) if $custom
187
+ end
188
+
189
+ def pick_issues
158
190
  issues = presentable_issues
159
191
  issues.each { |i| say "#{i.number}: #{i.title}" }
160
192
  issue_ids = ask('Type Issue IDs separated by spaces: ', Array).map(&:to_i)
161
- selected_issues = issues.select do |issue|
193
+ issues.select do |issue|
162
194
  issue_ids.include?(issue.number.to_i)
163
195
  end
164
- selected_issues.each { |issue| copy_issue(target, issue) }
165
- selected_issues.each { |issue| puts evaluation_item_report(issue) }
196
+ end
197
+
198
+ def issues_for_position
199
+ position = choose("Which Position? \n") do |menu|
200
+ menu.choices(*POSITION_LEVEL_LABELS)
201
+ end
202
+ issues_by_label(position)
203
+ end
204
+
205
+ def report_issues(issues)
206
+ say "Reporting issues..."
207
+ issues.each { |issue| puts evaluation_item_report(issue) }
166
208
  end
167
209
 
168
210
  def copy_issue(target, issue)
@@ -176,21 +218,23 @@ def copy_issue(target, issue)
176
218
  end
177
219
 
178
220
  def clone_repository(origin, target)
179
- system(
180
- [
181
- "git clone git@github.com:#{origin}.git -b master --single-branch #{target}",
182
- ].join(' && ')
183
- )
221
+ say "Cloning repository..."
222
+ command = [
223
+ "git clone git@github.com:#{origin}.git -b master --single-branch #{target}",
224
+ ].join(' && ')
225
+
226
+ execute(command)
184
227
  end
185
228
 
186
229
  def setup_remote(target_dir, remote_repo)
187
- system(
188
- [
189
- "cd #{target_dir}",
190
- "git remote set-url origin #{remote_repo.ssh_url}",
191
- 'git push -u origin master'
192
- ].join(' && ')
193
- )
230
+ say "Setting up remote..."
231
+ command = [
232
+ "cd #{target_dir}",
233
+ "git remote set-url origin #{remote_repo.ssh_url}",
234
+ 'git push -u origin master'
235
+ ].join(' && ')
236
+
237
+ execute(command)
194
238
  end
195
239
 
196
240
  def create_project(target)
@@ -199,27 +243,28 @@ def create_project(target)
199
243
  menu.choices(*([user] + github.organizations.map(&:login)))
200
244
  menu.default = user
201
245
  end
202
- project_name = ask('Project name? ') {|q| q.default = target }
246
+ project_name = ask_if_custom('Project name? ', target)
203
247
  attrs = repo_attributes
204
248
  attrs[:organization] = organization unless user == organization
205
- attrs[:private] = agree('Private repository?(y/n) ', true)
249
+ attrs[:private] = agree('Private repository [Requires paid Github Account]?(y/n) ', true)
206
250
 
207
251
  begin
252
+ say "Creating Github project..."
208
253
  new_repo = github.create_repository(project_name, attrs)
209
254
 
210
- if agree("Would you like setup the local repo?(y/n) ", true)
255
+ agree_if_custom("Would you like setup the local repo?(y/n) ", true) do
211
256
  setup_remote(target, new_repo)
212
257
  end
213
258
 
214
- if agree("Would you like to select issues to copy(y/n) ", true)
215
- copy_and_report_issues(new_repo.full_name)
259
+ agree_if_custom("Would you like to select issues to copy(y/n) ", true) do
260
+ copy_issues(new_repo.full_name)
216
261
  end
217
262
 
218
- if agree("Would you like to copy a Pull Request(y/n) ", true)
263
+ agree_if_custom("Would you like to copy a Pull Request(y/n) ", true) do
219
264
  create_pr(new_repo)
220
265
  end
221
266
 
222
- if agree('Would you like to open the project in your browser?(y/n) ', true)
267
+ agree_if_custom('Would you like to open the project in your browser?(y/n) ', true) do
223
268
  system "open #{new_repo.html_url}"
224
269
  end
225
270
  rescue => e
@@ -227,6 +272,28 @@ def create_project(target)
227
272
  end
228
273
  end
229
274
 
275
+ def execute(command, wait_response: false)
276
+ say(command) if $verbose
277
+ wait_response ? `#{command}` : system(command)
278
+ end
279
+
280
+ def ask_if_custom(question, default)
281
+ if $custom
282
+ ask(question) {|q| q.default = default }
283
+ else
284
+ default
285
+ end
286
+ end
287
+
288
+ def agree_if_custom(*args, &block)
289
+ raise LocalJumpError unless block_given?
290
+ if $custom
291
+ yield if agree(*args)
292
+ else
293
+ yield
294
+ end
295
+ end
296
+
230
297
  def repo_attributes
231
298
  {
232
299
  has_issues: true,
@@ -1,3 +1,3 @@
1
1
  module ZdHire
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zd_hire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Angelim
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-16 00:00:00.000000000 Z
11
+ date: 2018-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander