Class: Feature::Diff
- Inherits:
-
Object
show all
- Includes:
- Feature
- Defined in:
- lib/straight_line/common/feature/diff.rb
Overview
Multi purpose feature. It creates a pull request or pushes latest commits to the existing pull request
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Feature
#changes_committed?, #current_feature
Constructor Details
#initialize ⇒ Diff
Returns a new instance of Diff.
20
21
22
23
24
25
26
27
|
# File 'lib/straight_line/common/feature/diff.rb', line 20
def initialize
@feature_name = current_feature
if @feature_name == 'master'
raise UserError, 'Failed to create diff: you\'re on the master branch'
end
return if changes_committed?
raise UserError, 'Commit your changes before creating a diff'
end
|
Instance Attribute Details
#feature_name ⇒ Object
Returns the value of attribute feature_name.
18
19
20
|
# File 'lib/straight_line/common/feature/diff.rb', line 18
def feature_name
@feature_name
end
|
Instance Method Details
#create_pull_request(title, body) ⇒ Object
97
98
99
100
101
|
# File 'lib/straight_line/common/feature/diff.rb', line 97
def create_pull_request(title, body)
Github.create_pull_request feature_name,
title,
body
end
|
#diff(params) ⇒ Object
29
30
31
32
33
34
35
36
37
|
# File 'lib/straight_line/common/feature/diff.rb', line 29
def diff(params)
pull_cmd = GitCommands::Pull.new('master')
pull_cmd.run
if pull_request_exists?
diff_pull_request_exists params
else
diff_no_pull_request params
end
end
|
#diff_no_pull_request(params) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/straight_line/common/feature/diff.rb', line 50
def diff_no_pull_request(params)
GitCommands::Rebase.new('master', feature_name).run
GitCommands::Push.new(feature_name, false).run
title, body = params, [:title, :body]
pr = create_pull_request title, body
Util.logger.info %(Pull request created: #{pr.html_url}.)
end
|
#diff_pull_request_exists(params) ⇒ Object
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/straight_line/common/feature/diff.rb', line 39
def diff_pull_request_exists(params)
GitCommands::Merge.new(feature_name, 'master').run
title, body = params, [:title, :body]
begin
GitCommands::Commit.new(title, body).run
rescue StandardError => e
raise e unless e.message =~ /nothing to commit/
end
GitCommands::Push.new(feature_name).run
end
|
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/straight_line/common/feature/diff.rb', line 66
def (params, keys)
keys.map do |key|
case key
when :title
params[:title] || last_commit_message
else
params[key]
end
end
end
|
#last_commit_message ⇒ Object
77
78
79
|
# File 'lib/straight_line/common/feature/diff.rb', line 77
def last_commit_message
GitCommands::Log.new('-1 --pretty=%B').run.split("\n").first
end
|
#pull_request_exists? ⇒ Boolean
89
90
91
92
93
94
95
|
# File 'lib/straight_line/common/feature/diff.rb', line 89
def pull_request_exists?
if Github.pull_request_for_feature(feature_name)
true
else
false
end
end
|
#require_params(params, required) ⇒ Object
58
59
60
61
62
63
64
|
# File 'lib/straight_line/common/feature/diff.rb', line 58
def require_params(params, required)
required_errors = required.map do |o|
validate_param params, o
end.compact
raise required_errors.join "\n" unless required_errors.empty?
end
|
#validate_param(params, param_spec) ⇒ Object
Returns String error message if there is an error, else nil.
82
83
84
85
86
87
|
# File 'lib/straight_line/common/feature/diff.rb', line 82
def validate_param(params, param_spec)
case param_spec.class
when Symbol
"#{param_spec} is not provided." unless params[param_spec]
end
end
|