twig 1.2.1 → 1.3
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.
- data/HISTORY.md +14 -1
- data/README.md +11 -5
- data/bin/twig +2 -2
- data/bin/twig-gh-open +3 -2
- data/bin/twig-gh-open-issue +2 -1
- data/lib/twig.rb +13 -12
- data/lib/twig/cli.rb +77 -33
- data/lib/twig/display.rb +55 -33
- data/lib/twig/github.rb +10 -7
- data/lib/twig/options.rb +59 -7
- data/lib/twig/util.rb +4 -0
- data/lib/twig/version.rb +1 -1
- data/spec/twig/cli_spec.rb +106 -13
- data/spec/twig/display_spec.rb +131 -23
- data/spec/twig/github_spec.rb +299 -0
- data/spec/twig/options_spec.rb +108 -7
- data/spec/twig/util_spec.rb +24 -0
- data/spec/twig_spec.rb +41 -27
- data/twig.gemspec +4 -3
- metadata +26 -9
data/lib/twig/github.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
class Twig
|
2
2
|
class GithubRepo
|
3
|
-
def self.run(command)
|
4
|
-
# Duplicated from `Twig.run` for making lightweight subcommands.
|
5
|
-
`#{command}`.strip
|
6
|
-
end
|
7
|
-
|
8
3
|
def initialize
|
9
|
-
|
4
|
+
unless Twig.repo?
|
5
|
+
abort 'Current directory is not a git repository.'
|
6
|
+
end
|
7
|
+
|
8
|
+
if origin_url.empty? || !github_repo? || username.empty? || repository.empty?
|
10
9
|
abort_for_non_github_repo
|
11
10
|
end
|
12
11
|
|
@@ -14,13 +13,17 @@ class Twig
|
|
14
13
|
end
|
15
14
|
|
16
15
|
def origin_url
|
17
|
-
@origin_url ||= Twig
|
16
|
+
@origin_url ||= Twig.run('git config remote.origin.url')
|
18
17
|
end
|
19
18
|
|
20
19
|
def origin_url_parts
|
21
20
|
@origin_url_parts ||= origin_url.split(/[\/:]/)
|
22
21
|
end
|
23
22
|
|
23
|
+
def github_repo?
|
24
|
+
origin_url.include?('github.com')
|
25
|
+
end
|
26
|
+
|
24
27
|
def username
|
25
28
|
@username ||= origin_url_parts[-2] || ''
|
26
29
|
end
|
data/lib/twig/options.rb
CHANGED
@@ -2,29 +2,48 @@ class Twig
|
|
2
2
|
module Options
|
3
3
|
|
4
4
|
CONFIG_FILE = '~/.twigrc'
|
5
|
+
MIN_PROPERTY_WIDTH = 3
|
5
6
|
|
6
7
|
def read_config_file!
|
7
8
|
config_file_path = File.expand_path(Twig::CONFIG_FILE)
|
8
9
|
return unless File.readable?(config_file_path)
|
9
10
|
|
10
11
|
File.open(config_file_path) do |f|
|
11
|
-
opts = f.read.split("\n").inject({}) do |hsh,
|
12
|
-
|
13
|
-
|
12
|
+
opts = f.read.split("\n").inject({}) do |hsh, line|
|
13
|
+
line = line.strip
|
14
|
+
|
15
|
+
if line !~ /^#/
|
16
|
+
key, value = line.split(':', 2)
|
17
|
+
hsh[key.strip] = value.strip if key && value
|
18
|
+
end
|
19
|
+
|
14
20
|
hsh
|
15
21
|
end
|
16
22
|
|
17
23
|
opts.each do |key, value|
|
18
24
|
case key
|
19
|
-
|
20
|
-
|
21
|
-
when '
|
25
|
+
|
26
|
+
# Filtering branches:
|
27
|
+
when 'branch'
|
28
|
+
set_option(:branch, value)
|
29
|
+
when 'max-days-old'
|
30
|
+
set_option(:max_days_old, value)
|
22
31
|
when /^except-/
|
23
32
|
property_name = key.sub(/^except-/, '').to_sym
|
24
33
|
set_option(:property_except, property_name => value)
|
25
34
|
when /^only-/
|
26
35
|
property_name = key.sub(/^only-/, '').to_sym
|
27
36
|
set_option(:property_only, property_name => value)
|
37
|
+
|
38
|
+
# Displaying branches:
|
39
|
+
when 'header-style'
|
40
|
+
set_option(:header_style, value)
|
41
|
+
when 'reverse'
|
42
|
+
set_option(:reverse, value)
|
43
|
+
when /-width$/
|
44
|
+
property_name = key.sub(/-width$/, '').to_sym
|
45
|
+
set_option(:property_width, property_name => value)
|
46
|
+
|
28
47
|
end
|
29
48
|
end
|
30
49
|
end
|
@@ -33,7 +52,7 @@ class Twig
|
|
33
52
|
def set_option(key, value)
|
34
53
|
case key
|
35
54
|
when :branch
|
36
|
-
if
|
55
|
+
if all_branch_names.include?(value)
|
37
56
|
options[:branch] = value
|
38
57
|
else
|
39
58
|
abort %{The branch "#{value}" could not be found.}
|
@@ -63,6 +82,12 @@ class Twig
|
|
63
82
|
options[:property_only] ||= {}
|
64
83
|
options[:property_only].merge!(property_hash)
|
65
84
|
|
85
|
+
when :property_width
|
86
|
+
set_property_width_option(value)
|
87
|
+
|
88
|
+
when :reverse
|
89
|
+
options[:reverse] = Twig::Util.truthy?(value)
|
90
|
+
|
66
91
|
when :unset_property
|
67
92
|
options[:unset_property] = value
|
68
93
|
end
|
@@ -89,6 +114,33 @@ class Twig
|
|
89
114
|
options[:header_weight] = weight if weight
|
90
115
|
end
|
91
116
|
|
117
|
+
def set_property_width_option(value)
|
118
|
+
value.each do |property_name, property_value|
|
119
|
+
unless Twig::Util.numeric?(property_value)
|
120
|
+
abort %{The value `--#{property_name}-width=#{property_value}` is invalid.}
|
121
|
+
end
|
122
|
+
|
123
|
+
property_name_width = property_name.to_s.size
|
124
|
+
property_value = property_value.to_i
|
125
|
+
|
126
|
+
if property_value < [property_name_width, MIN_PROPERTY_WIDTH].max
|
127
|
+
error = %{The value `--#{property_name}-width=#{property_value}` } +
|
128
|
+
%{is too low. The minimum is }
|
129
|
+
|
130
|
+
if property_value < property_name_width
|
131
|
+
error << %{#{property_name_width} (width of "#{property_name}").}
|
132
|
+
elsif property_value < MIN_PROPERTY_WIDTH
|
133
|
+
error << %{#{MIN_PROPERTY_WIDTH}.}
|
134
|
+
end
|
135
|
+
|
136
|
+
abort error
|
137
|
+
end
|
138
|
+
|
139
|
+
options[:property_width] ||= {}
|
140
|
+
options[:property_width].merge!(property_name => property_value)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
92
144
|
def unset_option(key)
|
93
145
|
options.delete(key)
|
94
146
|
end
|
data/lib/twig/util.rb
CHANGED
data/lib/twig/version.rb
CHANGED
data/spec/twig/cli_spec.rb
CHANGED
@@ -39,6 +39,25 @@ describe Twig::Cli do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
describe '#help_description_for_custom_property' do
|
43
|
+
before :each do
|
44
|
+
@twig = Twig.new
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns a help string for a custom property' do
|
48
|
+
option_parser = OptionParser.new
|
49
|
+
@twig.should_receive(:help_separator) do |opt_parser, desc, options|
|
50
|
+
opt_parser.should == option_parser
|
51
|
+
desc.should == " --test-option Test option description\n"
|
52
|
+
options.should == { :trailing => "\n" }
|
53
|
+
end
|
54
|
+
|
55
|
+
@twig.help_description_for_custom_property(option_parser, [
|
56
|
+
['--test-option', 'Test option description']
|
57
|
+
])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
42
61
|
describe '#help_paragraph' do
|
43
62
|
before :each do
|
44
63
|
@twig = Twig.new
|
@@ -59,13 +78,79 @@ describe Twig::Cli do
|
|
59
78
|
end
|
60
79
|
end
|
61
80
|
|
81
|
+
describe '#help_line_for_custom_property?' do
|
82
|
+
before :each do
|
83
|
+
@twig = Twig.new
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'returns true for `--except-foo`' do
|
87
|
+
@twig.help_line_for_custom_property?(' --except-foo ').should be_true
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'returns false for `--except-branch`' do
|
91
|
+
@twig.help_line_for_custom_property?(' --except-branch ').should be_false
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'returns false for `--except-PROPERTY`' do
|
95
|
+
@twig.help_line_for_custom_property?(' --except-PROPERTY ').should be_false
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'returns true for `--only-foo`' do
|
99
|
+
@twig.help_line_for_custom_property?(' --only-foo ').should be_true
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'returns false for `--only-branch`' do
|
103
|
+
@twig.help_line_for_custom_property?(' --only-branch ').should be_false
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'returns false for `--only-PROPERTY`' do
|
107
|
+
@twig.help_line_for_custom_property?(' --only-PROPERTY ').should be_false
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'returns true for `--foo-width`' do
|
111
|
+
@twig.help_line_for_custom_property?(' --foo-width ').should be_true
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'returns false for `--branch-width`' do
|
115
|
+
@twig.help_line_for_custom_property?(' --branch-width ').should be_false
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'returns false for `--PROPERTY-width`' do
|
119
|
+
@twig.help_line_for_custom_property?(' --PROPERTY-width ').should be_false
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
62
123
|
describe '#read_cli_options!' do
|
63
124
|
before :each do
|
64
125
|
@twig = Twig.new
|
65
126
|
end
|
66
127
|
|
128
|
+
it 'recognizes `--unset` and sets an `:unset_property` option' do
|
129
|
+
@twig.options[:unset_property].should be_nil # Precondition
|
130
|
+
@twig.read_cli_options!(%w[--unset test])
|
131
|
+
@twig.options[:unset_property].should == 'test'
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'recognizes `--help` and prints the help content' do
|
135
|
+
help_lines = []
|
136
|
+
@twig.stub(:puts) { |message| help_lines << message.strip }
|
137
|
+
@twig.should_receive(:exit)
|
138
|
+
|
139
|
+
@twig.read_cli_options!(['--help'])
|
140
|
+
|
141
|
+
help_lines.should include("Twig v#{Twig::VERSION}")
|
142
|
+
help_lines.should include('http://rondevera.github.io/twig/')
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'recognizes `--version` and prints the current version' do
|
146
|
+
@twig.should_receive(:puts).with(Twig::VERSION)
|
147
|
+
@twig.should_receive(:exit)
|
148
|
+
|
149
|
+
@twig.read_cli_options!(['--version'])
|
150
|
+
end
|
151
|
+
|
67
152
|
it 'recognizes `-b` and sets a `:branch` option' do
|
68
|
-
@twig.should_receive(:
|
153
|
+
@twig.should_receive(:all_branch_names).and_return(['test'])
|
69
154
|
@twig.options[:branch].should be_nil # Precondition
|
70
155
|
|
71
156
|
@twig.read_cli_options!(%w[-b test])
|
@@ -74,7 +159,7 @@ describe Twig::Cli do
|
|
74
159
|
end
|
75
160
|
|
76
161
|
it 'recognizes `--branch` and sets a `:branch` option' do
|
77
|
-
@twig.should_receive(:
|
162
|
+
@twig.should_receive(:all_branch_names).and_return(['test'])
|
78
163
|
@twig.options[:branch].should be_nil # Precondition
|
79
164
|
|
80
165
|
@twig.read_cli_options!(%w[--branch test])
|
@@ -190,17 +275,19 @@ describe Twig::Cli do
|
|
190
275
|
@twig.options[:property_only].should be_nil
|
191
276
|
end
|
192
277
|
|
193
|
-
it 'recognizes `--
|
194
|
-
@twig.options[:
|
195
|
-
@twig.
|
196
|
-
|
278
|
+
it 'recognizes `--branch-width`' do
|
279
|
+
@twig.options[:property_width].should be_nil
|
280
|
+
@twig.should_receive(:set_option).with(:property_width, :branch => '10')
|
281
|
+
|
282
|
+
@twig.read_cli_options!(%w[--branch-width 10])
|
197
283
|
end
|
198
284
|
|
199
|
-
it 'recognizes
|
200
|
-
|
201
|
-
@twig.
|
285
|
+
it 'recognizes `--<property>-width`' do
|
286
|
+
Twig::Branch.stub(:all_properties) { %w[foo] }
|
287
|
+
@twig.options[:property_width].should be_nil
|
288
|
+
@twig.should_receive(:set_option).with(:property_width, :foo => '10')
|
202
289
|
|
203
|
-
@twig.read_cli_options!([
|
290
|
+
@twig.read_cli_options!(%w[--foo-width 10])
|
204
291
|
end
|
205
292
|
|
206
293
|
it 'recognizes `--header-style`' do
|
@@ -211,6 +298,12 @@ describe Twig::Cli do
|
|
211
298
|
@twig.options[:header_weight].should == :bold
|
212
299
|
end
|
213
300
|
|
301
|
+
it 'recognizes `--reverse`' do
|
302
|
+
@twig.options[:reverse].should be_nil
|
303
|
+
@twig.read_cli_options!(['--reverse'])
|
304
|
+
@twig.options[:reverse].should be_true
|
305
|
+
end
|
306
|
+
|
214
307
|
it 'handles invalid options' do
|
215
308
|
@twig.should_receive(:abort_for_option_exception) do |exception|
|
216
309
|
exception.should be_a(OptionParser::InvalidOption)
|
@@ -311,7 +404,7 @@ describe Twig::Cli do
|
|
311
404
|
end
|
312
405
|
|
313
406
|
it 'gets a property for a specified branch' do
|
314
|
-
@twig.should_receive(:
|
407
|
+
@twig.should_receive(:all_branch_names).and_return([@branch_name])
|
315
408
|
@twig.set_option(:branch, @branch_name)
|
316
409
|
@twig.should_receive(:get_branch_property_for_cli).
|
317
410
|
with(@branch_name, @property_name)
|
@@ -337,7 +430,7 @@ describe Twig::Cli do
|
|
337
430
|
end
|
338
431
|
|
339
432
|
it 'sets a property for a specified branch' do
|
340
|
-
@twig.should_receive(:
|
433
|
+
@twig.should_receive(:all_branch_names).and_return([@branch_name])
|
341
434
|
@twig.set_option(:branch, @branch_name)
|
342
435
|
@twig.should_receive(:set_branch_property_for_cli).
|
343
436
|
with(@branch_name, @property_name, @property_value).
|
@@ -364,7 +457,7 @@ describe Twig::Cli do
|
|
364
457
|
end
|
365
458
|
|
366
459
|
it 'unsets a property for a specified branch' do
|
367
|
-
@twig.should_receive(:
|
460
|
+
@twig.should_receive(:all_branch_names).and_return([@branch_name])
|
368
461
|
@twig.set_option(:branch, @branch_name)
|
369
462
|
@twig.should_receive(:unset_branch_property_for_cli).
|
370
463
|
with(@branch_name, @property_name)
|
data/spec/twig/display_spec.rb
CHANGED
@@ -7,23 +7,15 @@ describe Twig::Display do
|
|
7
7
|
|
8
8
|
describe '#column' do
|
9
9
|
it 'returns a string with an exact fixed width' do
|
10
|
-
@twig.column('foo',
|
10
|
+
@twig.column('foo', :width => 8).should == 'foo' + (' ' * 5)
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'returns a string that fits a column exactly' do
|
14
|
-
@twig.column('asdfasdf',
|
14
|
+
@twig.column('asdfasdf', :width => 8).should == 'asdfasdf'
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'truncates a wide string with an ellipsis' do
|
18
|
-
@twig.column('asdfasdfasdf',
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'returns a string that spans multiple columns' do
|
22
|
-
@twig.column('foo', 2, :width => 8).should == 'foo' + (' ' * 13)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'returns a string that spans multiple columns and is truncated' do
|
26
|
-
@twig.column('asdf' * 5, 2, :width => 8).should == 'asdfasdfasdf... '
|
18
|
+
@twig.column('asdfasdfasdf', :width => 8).should == 'asdfa...'
|
27
19
|
end
|
28
20
|
|
29
21
|
it 'passes options through to `format_string`' do
|
@@ -31,7 +23,52 @@ describe Twig::Display do
|
|
31
23
|
@twig.should_receive(:format_string).
|
32
24
|
with('foo' + (' ' * 5), format_options)
|
33
25
|
|
34
|
-
@twig.column('foo',
|
26
|
+
@twig.column('foo', format_options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#property_column_width' do
|
31
|
+
it 'returns a default width if no property name is given' do
|
32
|
+
@twig.property_column_width.should ==
|
33
|
+
Twig::Display::DEFAULT_PROPERTY_COLUMN_WIDTH
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with no custom column widths set' do
|
37
|
+
before :each do
|
38
|
+
@twig.options[:property_width].should be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'returns a default width if a property name is given' do
|
42
|
+
@twig.property_column_width(:foo).should ==
|
43
|
+
Twig::Display::DEFAULT_PROPERTY_COLUMN_WIDTH
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'returns a default width if :branch is given' do
|
47
|
+
@twig.property_column_width(:branch).should ==
|
48
|
+
Twig::Display::DEFAULT_BRANCH_COLUMN_WIDTH
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'with custom column widths set' do
|
53
|
+
it 'returns a default width if a property name is given but it has no custom width' do
|
54
|
+
@twig.property_column_width(:baz).should ==
|
55
|
+
Twig::Display::DEFAULT_PROPERTY_COLUMN_WIDTH
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'returns a custom width if a property name is given and it has a custom width' do
|
59
|
+
@twig.set_option(:property_width, :foo => 20)
|
60
|
+
@twig.property_column_width(:foo).should == 20
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'returns a default width if :branch is given but it has no custom width' do
|
64
|
+
@twig.property_column_width(:branch).should ==
|
65
|
+
Twig::Display::DEFAULT_BRANCH_COLUMN_WIDTH
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns a custom width if :branch is given but it has no custom width' do
|
69
|
+
@twig.set_option(:property_width, :branch => 20)
|
70
|
+
@twig.property_column_width(:branch).should == 20
|
71
|
+
end
|
35
72
|
end
|
36
73
|
end
|
37
74
|
|
@@ -44,17 +81,36 @@ describe Twig::Display do
|
|
44
81
|
result = @twig.branch_list_headers({})
|
45
82
|
result_lines = result.split("\n")
|
46
83
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
result_lines[0].should == (' ' *
|
51
|
-
'foo ' + (' ' *
|
52
|
-
'quux ' + (' ' *
|
53
|
-
' branch'
|
54
|
-
result_lines[1].should == (' ' *
|
55
|
-
'--- ' + (' ' *
|
56
|
-
'---- ' + (' ' *
|
57
|
-
' ------'
|
84
|
+
date_time_column_width = 35
|
85
|
+
extra_property_column_width = 8
|
86
|
+
column_gutter = @twig.column_gutter
|
87
|
+
result_lines[0].should == (' ' * date_time_column_width) + column_gutter +
|
88
|
+
'foo ' + (' ' * extra_property_column_width) + column_gutter +
|
89
|
+
'quux ' + (' ' * extra_property_column_width) + column_gutter +
|
90
|
+
' branch'
|
91
|
+
result_lines[1].should == (' ' * date_time_column_width) + column_gutter +
|
92
|
+
'--- ' + (' ' * extra_property_column_width) + column_gutter +
|
93
|
+
'---- ' + (' ' * extra_property_column_width) + column_gutter +
|
94
|
+
' ------'
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'sets a header width' do
|
98
|
+
@twig.set_option(:property_width, :foo => 4)
|
99
|
+
|
100
|
+
result = @twig.branch_list_headers({})
|
101
|
+
result_lines = result.split("\n")
|
102
|
+
|
103
|
+
date_time_column_width = 35
|
104
|
+
extra_property_column_width = 8
|
105
|
+
column_gutter = @twig.column_gutter
|
106
|
+
result_lines[0].should == (' ' * date_time_column_width) + column_gutter +
|
107
|
+
'foo ' + column_gutter +
|
108
|
+
'quux ' + (' ' * extra_property_column_width) + column_gutter +
|
109
|
+
' branch'
|
110
|
+
result_lines[1].should == (' ' * date_time_column_width) + column_gutter +
|
111
|
+
'--- ' + column_gutter +
|
112
|
+
'---- ' + (' ' * extra_property_column_width) + column_gutter +
|
113
|
+
' ------'
|
58
114
|
end
|
59
115
|
|
60
116
|
it 'sets a header color' do
|
@@ -146,6 +202,58 @@ describe Twig::Display do
|
|
146
202
|
|
147
203
|
result.should include('line breaks')
|
148
204
|
end
|
205
|
+
|
206
|
+
it 'returns a line with custom column widths' do
|
207
|
+
branch = Twig::Branch.new('other-branch')
|
208
|
+
branch.should_receive(:last_commit_time).and_return(@commit_time)
|
209
|
+
@twig.set_option(:property_width, :foo => 5)
|
210
|
+
|
211
|
+
result = @twig.branch_list_line(branch)
|
212
|
+
|
213
|
+
column_gutter = @twig.column_gutter
|
214
|
+
result.should ==
|
215
|
+
'2000-01-01' + (' ' * 25) + column_gutter +
|
216
|
+
'foo! ' + column_gutter +
|
217
|
+
'bar!' + (' ' * 12) + column_gutter +
|
218
|
+
' ' + branch.name
|
219
|
+
end
|
220
|
+
|
221
|
+
context 'with a custom width for the branch column' do
|
222
|
+
before :each do
|
223
|
+
@twig.set_option(:property_width, :branch => 8)
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'returns a line for the current branch' do
|
227
|
+
indicator = Twig::Display::CURRENT_BRANCH_INDICATOR
|
228
|
+
branch = Twig::Branch.new('my-branch')
|
229
|
+
branch_regexp = /#{Regexp.escape(indicator)}#{Regexp.escape(branch.name)}/
|
230
|
+
branch.should_receive(:last_commit_time).and_return(@commit_time)
|
231
|
+
|
232
|
+
result = @twig.branch_list_line(branch)
|
233
|
+
unformatted_result = @twig.unformat_string(result)
|
234
|
+
|
235
|
+
column_gutter = @twig.column_gutter
|
236
|
+
unformatted_result.should ==
|
237
|
+
'2000-01-01' + (' ' * 25) + column_gutter +
|
238
|
+
'foo!' + (' ' * 12) + column_gutter +
|
239
|
+
'bar!' + (' ' * 12) + column_gutter +
|
240
|
+
indicator + 'my-br...'
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'returns a line for a branch other than the current branch' do
|
244
|
+
branch = Twig::Branch.new('other-branch')
|
245
|
+
branch.should_receive(:last_commit_time).and_return(@commit_time)
|
246
|
+
|
247
|
+
result = @twig.branch_list_line(branch)
|
248
|
+
|
249
|
+
column_gutter = @twig.column_gutter
|
250
|
+
result.should ==
|
251
|
+
'2000-01-01' + (' ' * 25) + column_gutter +
|
252
|
+
'foo!' + (' ' * 12) + column_gutter +
|
253
|
+
'bar!' + (' ' * 12) + column_gutter +
|
254
|
+
' ' + 'other...'
|
255
|
+
end
|
256
|
+
end
|
149
257
|
end
|
150
258
|
|
151
259
|
describe '#format_string' do
|