startling 0.0.3 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01b81828502a01ce8ee1ab14f367308fe5011fe1
4
- data.tar.gz: 12ae20e6f491a62a5bfa6f927882d28ee0e9dd27
3
+ metadata.gz: 17935770cd88048b4d21b0e6a1228dbc893f1e10
4
+ data.tar.gz: 2daa700a446e7b6296dcfd24153e4ffc0e385f7f
5
5
  SHA512:
6
- metadata.gz: d9afbd953c0d337b087bd92b293d61f7b93756ade4fc891b6264dad031bd1f47c0e792d007b5e84767bd98332fb281c5a23ee99164f3a7bd7f094c9443c01016
7
- data.tar.gz: a7d1ae4c5c9711b1c0ea7f20b960cd4c54eed75bb14c1e4a47246382c23749939947b12ac836bb6c05971e43dbaecbfb47bf71b2dda68c04d30d04ec9db33a8b
6
+ metadata.gz: e3e44fe9f1b40cbc973ff5dd67eced7c15373ff87953ebe089214b7ac9928a3bf0ed0eda0f29df7b410e57916848c6e78ca3618cc51669527b3aeff134672602
7
+ data.tar.gz: a997e6be44acc04f2ec241f9c98c6222930d79244d4a004a94018b8eaa35aef79592490d88c2b131edd63c9ab1ccd385b84f6f0734a8f77b48fc949f14d80734
data/.ruby-gemset CHANGED
@@ -1 +1 @@
1
- teaching-channel_start
1
+ startling
data/README.md CHANGED
@@ -25,13 +25,13 @@ Startlingfile.rb or startlingfile.rb should be defined in the root of the projec
25
25
 
26
26
  ```ruby
27
27
  Startling.configure do |config|
28
- # WIP Limit
28
+ # WIP Limit
29
29
  # config.wip_limit = 4
30
30
 
31
31
  # Repos to check against for WIP limit
32
32
  # config.repos << 'substantial/startling-dev'
33
33
 
34
- # Valid story estimations
34
+ # Valid story estimations
35
35
  # config.valid_estimates = [1, 2, 4, 8, 16, 32, 64, 128]
36
36
 
37
37
  # Commands to be run before a story is stared
@@ -47,11 +47,17 @@ Startling.configure do |config|
47
47
  # config.hook_commands.after_pull_request = []
48
48
 
49
49
  # Handler used to start a provider specific story related to the pull request
50
- config.story_handler = :pivotal_start
50
+ # config.story_handler = :pivotal_start
51
+
52
+ # Validate branch name with a Proc that returns a boolean
53
+ # config.validate_branch_name = -> (branch_name) { /feature\/.*/ =~ branch_name }
51
54
 
52
55
  # Message for pull request commit
53
56
  # config.pull_request_commit_message = "Startling"
54
57
 
58
+ # Message for pull request body
59
+ # config.pull_request_body = "Startling Body"
60
+
55
61
  # Labels for a pull request
56
62
  # config.pull_request_labels = [WIP, REVIEW, HOLD]
57
63
 
@@ -76,3 +82,9 @@ TODO: Write usage instructions here
76
82
 
77
83
  1. Create `.env` from the Secure Note `startling .env` in
78
84
  LastPass.
85
+ 1. `gem install bundler`
86
+ 1. `bundle install`
87
+
88
+ ### Running tests
89
+
90
+ `rake`
@@ -46,6 +46,9 @@ Startling.configure do |config|
46
46
  # Handler used to start a provider specific story related to the pull request
47
47
  # config.story_handler = :pivotal_start
48
48
 
49
+ # Validate branch name with a Proc that returns a boolean
50
+ # config.validate_branch_name = -> (branch_name) { /feature\\/.*/ =~ branch_name }
51
+
49
52
  # Message for pull request commit
50
53
  # config.pull_request_commit_message = "Startling"
51
54
 
@@ -1,9 +1,13 @@
1
+ require 'highline/import'
2
+ require 'octokit'
1
3
  require_relative "base"
2
4
 
3
5
  module Startling
4
6
  module Commands
5
7
  class CreateBranch < Base
6
8
  def execute
9
+ abort "Branch name, #{branch_name}, is not valid" unless valid_branch_name?
10
+
7
11
  create_branch if branch_name != git.current_branch
8
12
  branch_name
9
13
  end
@@ -22,12 +26,29 @@ module Startling
22
26
  end
23
27
 
24
28
  def branch_name
25
- abort "Branch name must be specified." if branch.empty?
26
- @branch_name ||= "#{branch}".gsub(/\s+/, '-')
29
+ @branch_name ||= get_branch_name
30
+ end
31
+
32
+ def valid_branch_name?
33
+ (branch_name != default_branch) && custom_validate_branch_name
27
34
  end
28
35
 
29
36
  private
30
37
 
38
+ def get_branch_name
39
+ if branch.empty?
40
+ git.current_branch
41
+ else
42
+ "#{branch}".gsub(/\s+/, '-')
43
+ end
44
+ end
45
+
46
+ def custom_validate_branch_name
47
+ return true if Startling.validate_branch_name.nil?
48
+
49
+ Startling.validate_branch_name.call(branch_name)
50
+ end
51
+
31
52
  def branch
32
53
  @branch ||=
33
54
  if args.length > 1
@@ -15,7 +15,11 @@ module Startling
15
15
 
16
16
  def open_pull_request
17
17
  puts "Opening pull request..."
18
- git.create_empty_commit(pull_request_handler.commit_message)
18
+
19
+ if git.current_branch_has_no_commits?
20
+ git.create_empty_commit(pull_request_handler.commit_message)
21
+ end
22
+
19
23
  git.push_origin_head
20
24
 
21
25
  repo.open_pull_request title: pull_request_handler.title,
@@ -17,8 +17,9 @@ module Startling
17
17
  'Startlingfile.rb'
18
18
  ].freeze
19
19
 
20
- attr_accessor :cache_dir, :root_dir, :wip_limit, :repos, :story_handler, :pull_request_body,
21
- :pull_request_handler, :pull_request_labels, :pull_request_commit_message, :cli_options
20
+ attr_accessor :cache_dir, :root_dir, :wip_limit, :repos, :story_handler,
21
+ :validate_branch_name, :pull_request_body, :pull_request_handler,
22
+ :pull_request_labels, :pull_request_commit_message, :cli_options
22
23
 
23
24
  def initialize
24
25
  @cache_dir = Dir.pwd
@@ -26,6 +27,7 @@ module Startling
26
27
  @wip_limit = DEFAULT_WIP_LIMIT
27
28
  @repos = []
28
29
  @story_handler = nil
30
+ @validate_branch_name = nil
29
31
  @pull_request_handler = nil
30
32
  @pull_request_body = DEFAULT_BODY
31
33
  @pull_request_commit_message = DEFAULT_COMMIT_MESSAGE
@@ -1,3 +1,4 @@
1
+ require 'shellwords'
1
2
  require_relative 'shell'
2
3
 
3
4
  module Startling
@@ -23,7 +24,7 @@ module Startling
23
24
  end
24
25
 
25
26
  def create_empty_commit(message)
26
- Shell.run "git commit --allow-empty -m #{message}"
27
+ Shell.run "git commit --allow-empty -m #{Shellwords.escape(message)}"
27
28
  end
28
29
 
29
30
  def create_remote_branch(branch_name, base_branch: 'origin/master')
@@ -48,10 +49,18 @@ module Startling
48
49
  `git rev-parse --show-toplevel`.strip
49
50
  end
50
51
 
52
+ def current_branch_has_no_commits?(base_branch: 'origin/master')
53
+ revision_sha(base_branch) == revision_sha('HEAD')
54
+ end
55
+
51
56
  private
52
57
 
53
58
  def remote_url
54
59
  `git config --get remote.origin.url`.strip
55
60
  end
61
+
62
+ def revision_sha(revision)
63
+ Shell.run "git rev-parse #{revision}"
64
+ end
56
65
  end
57
66
  end
@@ -1,3 +1,3 @@
1
1
  module Startling
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ require 'startling/commands/create_branch'
4
+
5
+ describe Startling::Commands::CreateBranch do
6
+ let(:git) { double('GitLocal') }
7
+ let(:attrs) { { args: [], git: git } }
8
+ let(:create_branch) { Startling::Commands::CreateBranch.new(attrs) }
9
+
10
+ describe '#execute' do
11
+ let(:branch_name) { 'my-branch' }
12
+ let(:attrs) { { args: [1, branch_name], git: git } }
13
+
14
+ before do
15
+ allow(create_branch).to receive(:valid_branch_name?) { true }
16
+ allow(git).to receive(:current_branch) { 'current-branch' }
17
+ allow(create_branch).to receive(:create_branch)
18
+ end
19
+
20
+ it 'returns an error if the branch name is invalid' do
21
+ allow(create_branch).to receive(:valid_branch_name?) { false }
22
+
23
+ expect { create_branch.execute }.to raise_exception(SystemExit)
24
+ end
25
+
26
+ it 'creates the branch if it is not the current branch' do
27
+ allow(git).to receive(:current_branch) { 'current-branch' }
28
+
29
+ expect(create_branch).to receive(:create_branch)
30
+ create_branch.execute
31
+ end
32
+
33
+ it 'does not create the branch if it is the current branch' do
34
+ allow(git).to receive(:current_branch) { branch_name }
35
+
36
+ expect(create_branch).not_to receive(:create_branch)
37
+ create_branch.execute
38
+ end
39
+
40
+ it 'returns the branch name' do
41
+ expect(create_branch.execute).to eq(branch_name)
42
+ end
43
+ end
44
+
45
+ describe '#branch_name' do
46
+ subject { create_branch.branch_name }
47
+
48
+ context 'when branch command line option is set' do
49
+ let(:attrs) { { args: [1, 'test everything'] } }
50
+
51
+ it 'returns the command line option' do
52
+ expect(subject).to eq('test-everything')
53
+ end
54
+ end
55
+
56
+ context 'when branch command line option is not set' do
57
+ let(:default_branch) { 'master' }
58
+
59
+ before do
60
+ allow(create_branch).to receive(:default_branch) { default_branch }
61
+ end
62
+
63
+ it 'returns the branch entered through the prompt' do
64
+ allow($terminal).to receive(:ask) { 'entered branch' }
65
+
66
+ expect(subject).to eq('entered-branch')
67
+ end
68
+
69
+ it 'returns the current branch when no branch is entered through the prompt' do
70
+ allow($terminal).to receive(:ask) { '' }
71
+ allow(git).to receive(:current_branch) { 'current-branch' }
72
+
73
+ expect(subject).to eq('current-branch')
74
+ end
75
+ end
76
+ end
77
+
78
+ describe '#valid_branch_name?' do
79
+ let(:branch_name) { 'validate-me' }
80
+ let(:attrs) { { args: [1, branch_name] } }
81
+
82
+ subject { create_branch.valid_branch_name? }
83
+
84
+ before do
85
+ allow(create_branch).to receive(:default_branch) { 'master' }
86
+ allow(Startling).to receive(:validate_branch_name) { nil }
87
+ end
88
+
89
+ it 'succeeds if branch passes validation' do
90
+ expect(subject).to be_truthy
91
+ end
92
+
93
+ it 'fails if the branch is the default branch' do
94
+ allow(create_branch).to receive(:default_branch) { branch_name }
95
+
96
+ expect(subject).to be_falsey
97
+ end
98
+
99
+ it 'fails if the custom validation Proc fails' do
100
+ allow(Startling).to receive(:validate_branch_name) { -> (branch_name) { /feature\/.*/ =~ branch_name } }
101
+
102
+ expect(subject).to be_falsey
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ require 'startling/commands/create_pull_request'
4
+
5
+ describe Startling::Commands::CreatePullRequest do
6
+ let(:git) { double('GitLocal') }
7
+ let(:attrs) { { git: git } }
8
+ let(:create_pull_request) { Startling::Commands::CreatePullRequest.new(attrs) }
9
+
10
+ describe '#open_pull_request' do
11
+ let(:commit_message) { 'test' }
12
+ let(:pull_request_handler) do
13
+ double(:pull_request_handler,
14
+ commit_message: commit_message,
15
+ title: 'title',
16
+ body: 'body'
17
+ )
18
+ end
19
+
20
+ let(:repo) { double(:repo, open_pull_request: true) }
21
+
22
+ before do
23
+ allow(create_pull_request).to receive(:pull_request_handler) { pull_request_handler }
24
+ allow(create_pull_request).to receive(:repo) { repo }
25
+
26
+ allow(git).to receive(:current_branch_has_no_commits?) { false }
27
+ allow(git).to receive(:create_empty_commit)
28
+ allow(git).to receive(:push_origin_head)
29
+ end
30
+
31
+ it 'should create an empty commit when the branch has no commits' do
32
+ allow(git).to receive(:current_branch_has_no_commits?) { true }
33
+
34
+ expect(git).to receive(:create_empty_commit).with(commit_message)
35
+ create_pull_request.open_pull_request
36
+ end
37
+
38
+ it 'should not create an empty commit when the branch has commits' do
39
+ allow(git).to receive(:current_branch_has_no_commits?) { false }
40
+
41
+ expect(git).not_to receive(:create_empty_commit)
42
+ create_pull_request.open_pull_request
43
+ end
44
+ end
45
+ end
@@ -39,6 +39,9 @@ Startling.configure do |config|
39
39
  # Handler used to start a provider specific story related to the pull request
40
40
  # config.story_handler = :pivotal_start
41
41
 
42
+ # Validate branch name with a Proc that returns a boolean
43
+ # config.validate_branch_name = -> (branch_name) { /feature\\/.*/ =~ branch_name }
44
+
42
45
  # Message for pull request commit
43
46
  # config.pull_request_commit_message = "Startling"
44
47
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: startling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Jensen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-01-15 00:00:00.000000000 Z
13
+ date: 2016-02-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -247,6 +247,8 @@ files:
247
247
  - lib/startling/version.rb
248
248
  - spec/spec_helper.rb
249
249
  - spec/startling/commands/base_spec.rb
250
+ - spec/startling/commands/create_branch_spec.rb
251
+ - spec/startling/commands/create_pull_request_spec.rb
250
252
  - spec/startling/configuration_spec.rb
251
253
  - spec/startling/git_local_spec.rb
252
254
  - spec/startling/github/pull_request_spec.rb
@@ -278,13 +280,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
280
  version: '0'
279
281
  requirements: []
280
282
  rubyforge_project:
281
- rubygems_version: 2.4.8
283
+ rubygems_version: 2.5.1
282
284
  signing_key:
283
285
  specification_version: 4
284
286
  summary: script for startling a story
285
287
  test_files:
286
288
  - spec/spec_helper.rb
287
289
  - spec/startling/commands/base_spec.rb
290
+ - spec/startling/commands/create_branch_spec.rb
291
+ - spec/startling/commands/create_pull_request_spec.rb
288
292
  - spec/startling/configuration_spec.rb
289
293
  - spec/startling/git_local_spec.rb
290
294
  - spec/startling/github/pull_request_spec.rb