twig 1.1 → 1.2
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 +11 -0
- data/README.md +7 -3
- data/bin/twig +5 -1
- data/bin/twig-gh-open +3 -30
- data/bin/twig-gh-open-issue +1 -31
- data/bin/twig-gh-update +1 -31
- data/lib/twig.rb +24 -9
- data/lib/twig/cli.rb +97 -36
- data/lib/twig/display.rb +2 -2
- data/lib/twig/github.rb +36 -0
- data/lib/twig/options.rb +24 -7
- data/lib/twig/version.rb +1 -1
- data/spec/twig/cli_spec.rb +248 -140
- data/spec/twig/display_spec.rb +19 -15
- data/spec/twig/options_spec.rb +33 -25
- data/spec/twig_spec.rb +55 -8
- data/twig.gemspec +1 -1
- metadata +8 -7
data/lib/twig/options.rb
CHANGED
@@ -17,10 +17,14 @@ class Twig
|
|
17
17
|
opts.each do |key, value|
|
18
18
|
case key
|
19
19
|
when 'branch' then set_option(:branch, value)
|
20
|
-
when 'except-branch' then set_option(:branch_except, value)
|
21
|
-
when 'only-branch' then set_option(:branch_only, value)
|
22
|
-
when 'max-days-old' then set_option(:max_days_old, value)
|
23
20
|
when 'header-style' then set_option(:header_style, value)
|
21
|
+
when 'max-days-old' then set_option(:max_days_old, value)
|
22
|
+
when /^except-/
|
23
|
+
property_name = key.sub(/^except-/, '').to_sym
|
24
|
+
set_option(:property_except, property_name => value)
|
25
|
+
when /^only-/
|
26
|
+
property_name = key.sub(/^only-/, '').to_sym
|
27
|
+
set_option(:property_only, property_name => value)
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
@@ -34,18 +38,31 @@ class Twig
|
|
34
38
|
else
|
35
39
|
abort %{The branch "#{value}" could not be found.}
|
36
40
|
end
|
37
|
-
|
38
|
-
options[:branch_except] = Regexp.new(value)
|
39
|
-
when :branch_only
|
40
|
-
options[:branch_only] = Regexp.new(value)
|
41
|
+
|
41
42
|
when :header_style
|
42
43
|
set_header_style_option(value)
|
44
|
+
|
43
45
|
when :max_days_old
|
44
46
|
if Twig::Util.numeric?(value)
|
45
47
|
options[:max_days_old] = value.to_f
|
46
48
|
else
|
47
49
|
abort %{The value `--max-days-old=#{value}` is invalid.}
|
48
50
|
end
|
51
|
+
|
52
|
+
when :property_except
|
53
|
+
property_hash = value.inject({}) do |hsh, (property, val)|
|
54
|
+
hsh.merge(property => Regexp.new(val))
|
55
|
+
end
|
56
|
+
options[:property_except] ||= {}
|
57
|
+
options[:property_except].merge!(property_hash)
|
58
|
+
|
59
|
+
when :property_only
|
60
|
+
property_hash = value.inject({}) do |hsh, (property, val)|
|
61
|
+
hsh.merge(property => Regexp.new(val))
|
62
|
+
end
|
63
|
+
options[:property_only] ||= {}
|
64
|
+
options[:property_only].merge!(property_hash)
|
65
|
+
|
49
66
|
when :unset_property
|
50
67
|
options[:unset_property] = value
|
51
68
|
end
|
data/lib/twig/version.rb
CHANGED
data/spec/twig/cli_spec.rb
CHANGED
@@ -82,34 +82,112 @@ describe Twig::Cli do
|
|
82
82
|
@twig.options[:branch].should == 'test'
|
83
83
|
end
|
84
84
|
|
85
|
-
it 'recognizes `--
|
86
|
-
@twig.options[:
|
85
|
+
it 'recognizes `--max-days-old` and sets a `:max_days_old` option' do
|
86
|
+
@twig.options[:max_days_old].should be_nil # Precondition
|
87
|
+
@twig.read_cli_options!(%w[--max-days-old 30])
|
88
|
+
@twig.options[:max_days_old].should == 30
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'recognizes `--except-branch` and sets a `:property_except` option' do
|
92
|
+
@twig.options[:property_except].should be_nil # Precondition
|
87
93
|
@twig.read_cli_options!(%w[--except-branch test])
|
88
|
-
@twig.options[:
|
94
|
+
@twig.options[:property_except].should == { :branch => /test/ }
|
89
95
|
end
|
90
96
|
|
91
|
-
it 'recognizes `--only-branch` and sets a `:
|
92
|
-
@twig.options[:
|
97
|
+
it 'recognizes `--only-branch` and sets a `:property_only` option' do
|
98
|
+
@twig.options[:property_only].should be_nil # Precondition
|
93
99
|
@twig.read_cli_options!(%w[--only-branch test])
|
94
|
-
@twig.options[:
|
100
|
+
@twig.options[:property_only].should == { :branch => /test/ }
|
95
101
|
end
|
96
102
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
103
|
+
context 'with custom property "only" filtering' do
|
104
|
+
before :each do
|
105
|
+
@twig.options[:property_only].should be_nil # Precondition
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'recognizes `--only-<property>` and sets a `:property_only` option' do
|
109
|
+
Twig::Branch.stub(:all_properties) { %w[foo] }
|
110
|
+
@twig.read_cli_options!(%w[--only-foo test])
|
111
|
+
@twig.options[:property_only].should == { :foo => /test/ }
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'recognizes `--only-branch` and `--only-<property>` together' do
|
115
|
+
Twig::Branch.stub(:all_properties) { %w[foo] }
|
116
|
+
|
117
|
+
@twig.read_cli_options!(%w[--only-branch test --only-foo bar])
|
118
|
+
|
119
|
+
@twig.options[:property_only].should == {
|
120
|
+
:branch => /test/,
|
121
|
+
:foo => /bar/
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'does not recognize `--only-<property>` for a missing property' do
|
126
|
+
property_name = 'foo'
|
127
|
+
Twig::Branch.all_properties.should_not include(property_name) # Precondition
|
128
|
+
@twig.stub(:puts)
|
129
|
+
|
130
|
+
begin
|
131
|
+
@twig.read_cli_options!(["--only-#{property_name}", 'test'])
|
132
|
+
rescue SystemExit => exception
|
133
|
+
expected_exception = exception
|
134
|
+
end
|
135
|
+
|
136
|
+
expected_exception.should_not be_nil
|
137
|
+
expected_exception.status.should == 0
|
138
|
+
@twig.options[:property_only].should be_nil
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context 'with custom property "except" filtering' do
|
143
|
+
before :each do
|
144
|
+
@twig.options[:property_except].should be_nil # Precondition
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'recognizes `--except-<property>` and sets a `:property_except` option' do
|
148
|
+
Twig::Branch.stub(:all_properties) { %w[foo] }
|
149
|
+
@twig.read_cli_options!(%w[--except-foo test])
|
150
|
+
@twig.options[:property_except].should == { :foo => /test/ }
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'recognizes `--except-branch` and `--except-<property>` together' do
|
154
|
+
Twig::Branch.stub(:all_properties) { %w[foo] }
|
155
|
+
|
156
|
+
@twig.read_cli_options!(%w[--except-branch test --except-foo bar])
|
157
|
+
|
158
|
+
@twig.options[:property_except].should == {
|
159
|
+
:branch => /test/,
|
160
|
+
:foo => /bar/
|
161
|
+
}
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'does not recognize `--except-<property>` for a missing property' do
|
165
|
+
property_name = 'foo'
|
166
|
+
Twig::Branch.all_properties.should_not include(property_name) # Precondition
|
167
|
+
@twig.stub(:puts)
|
168
|
+
|
169
|
+
begin
|
170
|
+
@twig.read_cli_options!(["--except-#{property_name}", 'test'])
|
171
|
+
rescue SystemExit => exception
|
172
|
+
expected_exception = exception
|
173
|
+
end
|
174
|
+
|
175
|
+
expected_exception.should_not be_nil
|
176
|
+
expected_exception.status.should == 0
|
177
|
+
@twig.options[:property_except].should be_nil
|
178
|
+
end
|
101
179
|
end
|
102
180
|
|
103
181
|
it 'recognizes `--all` and unsets other options except `:branch`' do
|
104
182
|
@twig.set_option(:max_days_old, 30)
|
105
|
-
@twig.set_option(:
|
106
|
-
@twig.set_option(:
|
183
|
+
@twig.set_option(:property_except, :branch => /test/)
|
184
|
+
@twig.set_option(:property_only, :branch => /test/)
|
107
185
|
|
108
186
|
@twig.read_cli_options!(['--all'])
|
109
187
|
|
110
188
|
@twig.options[:max_days_old].should be_nil
|
111
|
-
@twig.options[:
|
112
|
-
@twig.options[:
|
189
|
+
@twig.options[:property_except].should be_nil
|
190
|
+
@twig.options[:property_only].should be_nil
|
113
191
|
end
|
114
192
|
|
115
193
|
it 'recognizes `--unset` and sets an `:unset_property` option' do
|
@@ -134,27 +212,38 @@ describe Twig::Cli do
|
|
134
212
|
end
|
135
213
|
|
136
214
|
it 'handles invalid options' do
|
137
|
-
@twig.should_receive(:
|
138
|
-
|
215
|
+
@twig.should_receive(:abort_for_option_exception) do |exception|
|
216
|
+
exception.should be_a(OptionParser::InvalidOption)
|
217
|
+
exception.message.should include('invalid option: --foo')
|
139
218
|
end
|
140
|
-
@twig.should_receive(:puts) do |message|
|
141
|
-
message.should include('`twig --help`')
|
142
|
-
end
|
143
|
-
@twig.should_receive(:exit)
|
144
219
|
|
145
220
|
@twig.read_cli_options!(['--foo'])
|
146
221
|
end
|
147
222
|
|
148
223
|
it 'handles missing arguments' do
|
149
|
-
@twig.should_receive(:
|
150
|
-
|
224
|
+
@twig.should_receive(:abort_for_option_exception) do |exception|
|
225
|
+
exception.should be_a(OptionParser::MissingArgument)
|
226
|
+
exception.message.should include('missing argument: --branch')
|
151
227
|
end
|
228
|
+
|
229
|
+
@twig.read_cli_options!(['--branch'])
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
describe '#abort_for_option_exception' do
|
234
|
+
before :each do
|
235
|
+
@twig = Twig.new
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'prints a message and exits' do
|
239
|
+
exception = Exception.new('test exception')
|
240
|
+
@twig.should_receive(:puts).with(exception.message)
|
152
241
|
@twig.should_receive(:puts) do |message|
|
153
242
|
message.should include('`twig --help`')
|
154
243
|
end
|
155
244
|
@twig.should_receive(:exit)
|
156
245
|
|
157
|
-
@twig.
|
246
|
+
@twig.abort_for_option_exception(exception)
|
158
247
|
end
|
159
248
|
end
|
160
249
|
|
@@ -187,7 +276,6 @@ describe Twig::Cli do
|
|
187
276
|
# Since we're stubbing `exec` (with an expectation), we still need it
|
188
277
|
# to exit early like the real implementation. The following handles the
|
189
278
|
# exit somewhat gracefully.
|
190
|
-
expected_exception = nil
|
191
279
|
begin
|
192
280
|
@twig.read_cli_args!(['subcommand'])
|
193
281
|
rescue SystemExit => exception
|
@@ -214,71 +302,22 @@ describe Twig::Cli do
|
|
214
302
|
@property_value = 'bar'
|
215
303
|
end
|
216
304
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
it 'gets a property' do
|
223
|
-
@twig.should_receive(:get_branch_property).
|
224
|
-
with(@branch_name, @property_name).and_return(@property_value)
|
225
|
-
@twig.should_receive(:puts).with(@property_value)
|
226
|
-
|
227
|
-
@twig.read_cli_args!([@property_name])
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'shows an error if getting a property that is not set' do
|
231
|
-
@twig.should_receive(:get_branch_property).
|
232
|
-
with(@branch_name, @property_name).and_return(nil)
|
233
|
-
@twig.should_receive(:abort) do |message|
|
234
|
-
message.should include(
|
235
|
-
%{The branch "#{@branch_name}" does not have the property "#{@property_name}"}
|
236
|
-
)
|
237
|
-
end
|
238
|
-
|
239
|
-
@twig.read_cli_args!([@property_name])
|
240
|
-
end
|
241
|
-
|
242
|
-
it 'shows an error if getting a property whose name is an empty string' do
|
243
|
-
property_name = ' '
|
244
|
-
error_message = 'test error'
|
245
|
-
@twig.should_receive(:get_branch_property).
|
246
|
-
with(@branch_name, property_name) do
|
247
|
-
raise ArgumentError, error_message
|
248
|
-
end
|
249
|
-
@twig.should_receive(:abort).with(error_message)
|
305
|
+
it 'gets a property for the current branch' do
|
306
|
+
@twig.should_receive(:current_branch_name).and_return(@branch_name)
|
307
|
+
@twig.should_receive(:get_branch_property_for_cli).
|
308
|
+
with(@branch_name, @property_name)
|
250
309
|
|
251
|
-
|
252
|
-
end
|
310
|
+
@twig.read_cli_args!([@property_name])
|
253
311
|
end
|
254
312
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
it 'gets a property' do
|
262
|
-
@twig.should_receive(:get_branch_property).
|
263
|
-
with(@branch_name, @property_name).and_return(@property_value)
|
264
|
-
@twig.should_receive(:puts).with(@property_value)
|
265
|
-
|
266
|
-
@twig.read_cli_args!([@property_name])
|
267
|
-
end
|
268
|
-
|
269
|
-
it 'shows an error if getting a property that is not set' do
|
270
|
-
@twig.should_receive(:get_branch_property).
|
271
|
-
with(@branch_name, @property_name).and_return(nil)
|
272
|
-
@twig.should_receive(:abort) do |message|
|
273
|
-
message.should include(
|
274
|
-
%{The branch "#{@branch_name}" does not have the property "#{@property_name}"}
|
275
|
-
)
|
276
|
-
end
|
313
|
+
it 'gets a property for a specified branch' do
|
314
|
+
@twig.should_receive(:branch_names).and_return([@branch_name])
|
315
|
+
@twig.set_option(:branch, @branch_name)
|
316
|
+
@twig.should_receive(:get_branch_property_for_cli).
|
317
|
+
with(@branch_name, @property_name)
|
277
318
|
|
278
|
-
|
279
|
-
end
|
319
|
+
@twig.read_cli_args!([@property_name])
|
280
320
|
end
|
281
|
-
|
282
321
|
end
|
283
322
|
|
284
323
|
context 'setting properties' do
|
@@ -291,10 +330,8 @@ describe Twig::Cli do
|
|
291
330
|
|
292
331
|
it 'sets a property for the current branch' do
|
293
332
|
@twig.should_receive(:current_branch_name).and_return(@branch_name)
|
294
|
-
@twig.should_receive(:
|
295
|
-
with(@branch_name, @property_name, @property_value)
|
296
|
-
and_return(@message)
|
297
|
-
@twig.should_receive(:puts).with(@message)
|
333
|
+
@twig.should_receive(:set_branch_property_for_cli).
|
334
|
+
with(@branch_name, @property_name, @property_value)
|
298
335
|
|
299
336
|
@twig.read_cli_args!([@property_name, @property_value])
|
300
337
|
end
|
@@ -302,37 +339,12 @@ describe Twig::Cli do
|
|
302
339
|
it 'sets a property for a specified branch' do
|
303
340
|
@twig.should_receive(:branch_names).and_return([@branch_name])
|
304
341
|
@twig.set_option(:branch, @branch_name)
|
305
|
-
@twig.should_receive(:
|
342
|
+
@twig.should_receive(:set_branch_property_for_cli).
|
306
343
|
with(@branch_name, @property_name, @property_value).
|
307
344
|
and_return(@message)
|
308
|
-
@twig.should_receive(:puts).with(@message)
|
309
345
|
|
310
346
|
@twig.read_cli_args!([@property_name, @property_value])
|
311
347
|
end
|
312
|
-
|
313
|
-
it 'handles ArgumentError when setting an invalid branch property' do
|
314
|
-
error_message = 'test error'
|
315
|
-
@twig.should_receive(:current_branch_name).and_return(@branch_name)
|
316
|
-
@twig.should_receive(:set_branch_property).
|
317
|
-
with(@branch_name, @property_name, '') do
|
318
|
-
raise ArgumentError, error_message
|
319
|
-
end
|
320
|
-
@twig.should_receive(:abort).with(error_message)
|
321
|
-
|
322
|
-
@twig.read_cli_args!([@property_name, ''])
|
323
|
-
end
|
324
|
-
|
325
|
-
it 'handles RuntimeError when setting an invalid branch property' do
|
326
|
-
error_message = 'test error'
|
327
|
-
@twig.should_receive(:current_branch_name).and_return(@branch_name)
|
328
|
-
@twig.should_receive(:set_branch_property).
|
329
|
-
with(@branch_name, @property_name, '') do
|
330
|
-
raise RuntimeError, error_message
|
331
|
-
end
|
332
|
-
@twig.should_receive(:abort).with(error_message)
|
333
|
-
|
334
|
-
@twig.read_cli_args!([@property_name, ''])
|
335
|
-
end
|
336
348
|
end
|
337
349
|
|
338
350
|
context 'unsetting properties' do
|
@@ -345,9 +357,8 @@ describe Twig::Cli do
|
|
345
357
|
|
346
358
|
it 'unsets a property for the current branch' do
|
347
359
|
@twig.should_receive(:current_branch_name).and_return(@branch_name)
|
348
|
-
@twig.should_receive(:
|
349
|
-
with(@branch_name, @property_name)
|
350
|
-
@twig.should_receive(:puts).with(@message)
|
360
|
+
@twig.should_receive(:unset_branch_property_for_cli).
|
361
|
+
with(@branch_name, @property_name)
|
351
362
|
|
352
363
|
@twig.read_cli_args!([])
|
353
364
|
end
|
@@ -355,36 +366,133 @@ describe Twig::Cli do
|
|
355
366
|
it 'unsets a property for a specified branch' do
|
356
367
|
@twig.should_receive(:branch_names).and_return([@branch_name])
|
357
368
|
@twig.set_option(:branch, @branch_name)
|
358
|
-
@twig.should_receive(:
|
359
|
-
with(@branch_name, @property_name)
|
360
|
-
@twig.should_receive(:puts).with(@message)
|
369
|
+
@twig.should_receive(:unset_branch_property_for_cli).
|
370
|
+
with(@branch_name, @property_name)
|
361
371
|
|
362
372
|
@twig.read_cli_args!([])
|
363
373
|
end
|
374
|
+
end
|
375
|
+
end
|
364
376
|
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
end
|
372
|
-
@twig.should_receive(:abort).with(error_message)
|
377
|
+
describe '#get_branch_property_for_cli' do
|
378
|
+
before :each do
|
379
|
+
@twig = Twig.new
|
380
|
+
@branch_name = 'test'
|
381
|
+
@property_name = 'foo'
|
382
|
+
end
|
373
383
|
|
374
|
-
|
375
|
-
|
384
|
+
it 'gets a property' do
|
385
|
+
property_value = 'bar'
|
386
|
+
@twig.should_receive(:get_branch_property).
|
387
|
+
with(@branch_name, @property_name).and_return(property_value)
|
388
|
+
@twig.should_receive(:puts).with(property_value)
|
376
389
|
|
377
|
-
|
378
|
-
|
379
|
-
@twig.should_receive(:current_branch_name).and_return(@branch_name)
|
380
|
-
@twig.should_receive(:unset_branch_property).
|
381
|
-
with(@branch_name, @property_name) do
|
382
|
-
raise Twig::Branch::MissingPropertyError, error_message
|
383
|
-
end
|
384
|
-
@twig.should_receive(:abort).with(error_message)
|
390
|
+
@twig.get_branch_property_for_cli(@branch_name, @property_name)
|
391
|
+
end
|
385
392
|
|
386
|
-
|
387
|
-
|
393
|
+
it 'shows an error when getting a property that is not set' do
|
394
|
+
error_message = 'test error'
|
395
|
+
@twig.should_receive(:get_branch_property).
|
396
|
+
with(@branch_name, @property_name).and_return(nil)
|
397
|
+
Twig::Branch::MissingPropertyError.any_instance.
|
398
|
+
stub(:message) { error_message }
|
399
|
+
@twig.should_receive(:abort).with(error_message)
|
400
|
+
|
401
|
+
@twig.get_branch_property_for_cli(@branch_name, @property_name)
|
402
|
+
end
|
403
|
+
|
404
|
+
it 'handles ArgumentError when getting an invalid branch property name' do
|
405
|
+
bad_property_name = ''
|
406
|
+
error_message = 'test error'
|
407
|
+
@twig.should_receive(:get_branch_property).
|
408
|
+
with(@branch_name, bad_property_name) do
|
409
|
+
raise ArgumentError, error_message
|
410
|
+
end
|
411
|
+
@twig.should_receive(:abort).with(error_message)
|
412
|
+
|
413
|
+
@twig.get_branch_property_for_cli(@branch_name, bad_property_name)
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
describe '#set_branch_property_for_cli' do
|
418
|
+
before :each do
|
419
|
+
@twig = Twig.new
|
420
|
+
@branch_name = 'test'
|
421
|
+
@property_name = 'foo'
|
422
|
+
end
|
423
|
+
|
424
|
+
it 'sets a property for the specified branch' do
|
425
|
+
success_message = 'test success'
|
426
|
+
property_value = 'bar'
|
427
|
+
@twig.should_receive(:set_branch_property).
|
428
|
+
with(@branch_name, @property_name, property_value).
|
429
|
+
and_return(success_message)
|
430
|
+
@twig.should_receive(:puts).with(success_message)
|
431
|
+
|
432
|
+
@twig.set_branch_property_for_cli(@branch_name, @property_name, property_value)
|
433
|
+
end
|
434
|
+
|
435
|
+
it 'handles ArgumentError when unsetting an invalid branch property name' do
|
436
|
+
error_message = 'test error'
|
437
|
+
property_value = ''
|
438
|
+
@twig.should_receive(:set_branch_property).
|
439
|
+
with(@branch_name, @property_name, property_value) do
|
440
|
+
raise ArgumentError, error_message
|
441
|
+
end
|
442
|
+
@twig.should_receive(:abort).with(error_message)
|
443
|
+
|
444
|
+
@twig.set_branch_property_for_cli(@branch_name, @property_name, property_value)
|
445
|
+
end
|
446
|
+
|
447
|
+
it 'handles RuntimeError when Git is unable to set a branch property' do
|
448
|
+
error_message = 'test error'
|
449
|
+
property_value = ''
|
450
|
+
@twig.should_receive(:set_branch_property).
|
451
|
+
with(@branch_name, @property_name, property_value) do
|
452
|
+
raise RuntimeError, error_message
|
453
|
+
end
|
454
|
+
@twig.should_receive(:abort).with(error_message)
|
455
|
+
|
456
|
+
@twig.set_branch_property_for_cli(@branch_name, @property_name, property_value)
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
460
|
+
describe '#unset_branch_property_for_cli' do
|
461
|
+
before :each do
|
462
|
+
@twig = Twig.new
|
463
|
+
@branch_name = 'test'
|
464
|
+
@property_name = 'foo'
|
465
|
+
end
|
466
|
+
|
467
|
+
it 'unsets a property for the specified branch' do
|
468
|
+
success_message = 'test success'
|
469
|
+
@twig.should_receive(:unset_branch_property).
|
470
|
+
with(@branch_name, @property_name).and_return(success_message)
|
471
|
+
@twig.should_receive(:puts).with(success_message)
|
472
|
+
|
473
|
+
@twig.unset_branch_property_for_cli(@branch_name, @property_name)
|
474
|
+
end
|
475
|
+
|
476
|
+
it 'handles ArgumentError when unsetting an invalid branch property name' do
|
477
|
+
error_message = 'test error'
|
478
|
+
@twig.should_receive(:unset_branch_property).
|
479
|
+
with(@branch_name, @property_name) do
|
480
|
+
raise ArgumentError, error_message
|
481
|
+
end
|
482
|
+
@twig.should_receive(:abort).with(error_message)
|
483
|
+
|
484
|
+
@twig.unset_branch_property_for_cli(@branch_name, @property_name)
|
485
|
+
end
|
486
|
+
|
487
|
+
it 'handles MissingPropertyError when unsetting a branch property that is not set' do
|
488
|
+
error_message = 'test error'
|
489
|
+
@twig.should_receive(:unset_branch_property).
|
490
|
+
with(@branch_name, @property_name) do
|
491
|
+
raise Twig::Branch::MissingPropertyError, error_message
|
492
|
+
end
|
493
|
+
@twig.should_receive(:abort).with(error_message)
|
494
|
+
|
495
|
+
@twig.unset_branch_property_for_cli(@branch_name, @property_name)
|
388
496
|
end
|
389
497
|
end
|
390
498
|
|