list-tool 1.0.3 → 1.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 +4 -4
- data/README.md +4 -1
- data/lib/list_tool/app/commands/add_item_command.rb +20 -23
- data/lib/list_tool/app/commands/add_list_command.rb +19 -17
- data/lib/list_tool/app/commands/clear_list_command.rb +31 -0
- data/lib/list_tool/app/commands/command.rb +50 -0
- data/lib/list_tool/app/commands/delete_item_command.rb +19 -23
- data/lib/list_tool/app/commands/delete_list_command.rb +18 -19
- data/lib/list_tool/app/commands/help_command.rb +15 -13
- data/lib/list_tool/app/commands/rename_list_command.rb +24 -25
- data/lib/list_tool/app/commands/replace_item_command.rb +20 -21
- data/lib/list_tool/app/commands/show_items_command.rb +18 -20
- data/lib/list_tool/app/commands/show_lists_command.rb +16 -14
- data/lib/list_tool/app/commands/unknown_command.rb +16 -14
- data/lib/list_tool/app/commands/use_command.rb +18 -18
- data/lib/list_tool/app/commands/version_command.rb +16 -13
- data/lib/list_tool/app/commands.rb +3 -1
- data/lib/list_tool/list.rb +5 -0
- data/lib/list_tool/lister.rb +35 -23
- data/lib/list_tool/lister_data.rb +4 -0
- data/lib/list_tool/version.rb +1 -1
- data/spec/list_tool/app/commands/add_list_command_spec.rb +0 -6
- data/spec/list_tool/app/commands/clear_list_command_spec.rb +89 -0
- data/spec/list_tool/app/commands/command_spec.rb +101 -0
- data/spec/list_tool/app/commands_spec.rb +1 -1
- data/spec/list_tool/list_spec.rb +8 -0
- data/spec/list_tool/lister_data_spec.rb +8 -0
- data/spec/list_tool/lister_spec.rb +75 -61
- metadata +8 -2
@@ -1,31 +1,31 @@
|
|
1
1
|
module ListTool
|
2
2
|
module App
|
3
3
|
|
4
|
-
class UseCommand
|
4
|
+
class UseCommand < Command
|
5
|
+
class << self
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
def match? arg
|
8
|
+
['u', 'use'].include? arg
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
def parse argv
|
12
|
+
fail_if_not_an_array(argv)
|
13
|
+
|
14
|
+
list = argv.shift
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
{ list: parse_list_number!(list) }
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
def execute options, lister
|
20
|
+
raise(ListNotFoundError, 'no list with given number') if lister.set_default_list( options[:list] ).nil?
|
21
|
+
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
23
|
+
def help
|
24
|
+
" u, use LIST\t\t\tSet default list"
|
25
|
+
end
|
24
26
|
|
25
|
-
def self.help
|
26
|
-
" u, use LIST\t\t\tSet default list"
|
27
27
|
end
|
28
|
-
|
29
28
|
end
|
29
|
+
|
30
30
|
end
|
31
31
|
end
|
@@ -1,24 +1,27 @@
|
|
1
1
|
module ListTool
|
2
2
|
module App
|
3
3
|
|
4
|
-
class VersionCommand
|
4
|
+
class VersionCommand < Command
|
5
|
+
class << self
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
def match? arg
|
8
|
+
['v', '-v', 'version', '--version'].include? arg
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
def parse argv
|
12
|
+
{}
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
def execute options, lister
|
16
|
+
Printer.print_version
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def help
|
20
|
+
" -v, --version\t\t\tPrint version"
|
21
|
+
end
|
21
22
|
|
23
|
+
end
|
22
24
|
end
|
25
|
+
|
23
26
|
end
|
24
27
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative './commands/command.rb'
|
1
2
|
require_relative './commands/add_item_command.rb'
|
2
3
|
require_relative './commands/replace_item_command.rb'
|
3
4
|
require_relative './commands/delete_item_command.rb'
|
@@ -5,6 +6,7 @@ require_relative './commands/show_items_command.rb'
|
|
5
6
|
require_relative './commands/add_list_command.rb'
|
6
7
|
require_relative './commands/rename_list_command.rb'
|
7
8
|
require_relative './commands/delete_list_command.rb'
|
9
|
+
require_relative './commands/clear_list_command.rb'
|
8
10
|
require_relative './commands/show_lists_command.rb'
|
9
11
|
require_relative './commands/use_command.rb'
|
10
12
|
require_relative './commands/help_command.rb'
|
@@ -16,7 +18,7 @@ module ListTool
|
|
16
18
|
|
17
19
|
class Commands
|
18
20
|
|
19
|
-
COMMANDS = ListTool::App.constants.map {|const| ListTool::App.const_get(const)} - [self, Printer, Runner, Colorizer]
|
21
|
+
COMMANDS = ListTool::App.constants.map {|const| ListTool::App.const_get(const)} - [self, Printer, Runner, Colorizer, Command]
|
20
22
|
|
21
23
|
class << self
|
22
24
|
def process argv, lister
|
data/lib/list_tool/list.rb
CHANGED
@@ -23,6 +23,10 @@ module ListTool
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
def inspect
|
27
|
+
"#<#{self.class}:0x#{self.__id__.to_s(16)}, name: #{name}, items: [#{items.map(&:text).join(', ')}]>"
|
28
|
+
end
|
29
|
+
|
26
30
|
def clear!
|
27
31
|
@items = []
|
28
32
|
end
|
@@ -45,6 +49,7 @@ module ListTool
|
|
45
49
|
|
46
50
|
def add_item text
|
47
51
|
@items << Item.new(text)
|
52
|
+
@items[-1]
|
48
53
|
end
|
49
54
|
|
50
55
|
def delete_item num
|
data/lib/list_tool/lister.rb
CHANGED
@@ -37,38 +37,50 @@ module ListTool
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def list(index=nil)
|
40
|
-
list =
|
41
|
-
|
42
|
-
@data.lists[index]
|
43
|
-
else
|
44
|
-
raise NoDefaultListError, "default list not set" if @data.default_list.nil?
|
45
|
-
@data.default_list
|
46
|
-
end
|
40
|
+
list = get_list(index)
|
41
|
+
return nil if list.nil?
|
47
42
|
|
48
43
|
{ name: list.name, items: list.items.map{|item| item.text} }
|
49
44
|
end
|
50
45
|
|
51
|
-
def
|
52
|
-
if
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
46
|
+
def default_list
|
47
|
+
if @data.default_list
|
48
|
+
list = @data.default_list
|
49
|
+
{ name: list.name, items: list.items.map{|item| item.text} }
|
50
|
+
else
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_missing(method_name, *args, &block)
|
56
|
+
if method_name =~ /_list$/
|
57
|
+
receiver = @data
|
58
|
+
elsif method_name =~ /_item$/
|
59
|
+
if args[-1].is_a?(Hash) && args[-1].has_key?(:list)
|
60
|
+
# then last argument is an options hash
|
61
|
+
options = args.pop
|
62
|
+
index = options[:list]
|
63
|
+
end
|
64
|
+
receiver = get_list(index)
|
65
|
+
receiver || raise(ListNotFoundError, "list with given index doesn't exist")
|
63
66
|
else
|
64
67
|
super
|
65
68
|
end
|
66
69
|
|
67
|
-
|
68
|
-
return nil if result.nil?
|
69
|
-
self
|
70
|
+
receiver.send(method_name, *args, &block)
|
70
71
|
rescue NoMethodError => e
|
71
|
-
raise NoMethodError, "undefined method '#{
|
72
|
+
raise NoMethodError, "undefined method '#{method_name.to_s}' for #{self.inspect}"
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def get_list index=nil
|
78
|
+
if index
|
79
|
+
@data.lists[index]
|
80
|
+
else
|
81
|
+
raise NoDefaultListError, "default list not set" if @data.default_list.nil?
|
82
|
+
@data.default_list
|
83
|
+
end
|
72
84
|
end
|
73
85
|
|
74
86
|
end
|
@@ -17,6 +17,10 @@ module ListTool
|
|
17
17
|
set_default_list(hash['default']) if hash['default']
|
18
18
|
end
|
19
19
|
|
20
|
+
def inspect
|
21
|
+
"#<#{self.class}:0x#{self.__id__.to_s(16)}, lists: [#{lists.map(&:name).join(', ')}], default_list: #{default_list.name}>"
|
22
|
+
end
|
23
|
+
|
20
24
|
def each
|
21
25
|
@lists.each { |list| yield(list) }
|
22
26
|
end
|
data/lib/list_tool/version.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
require_relative '../../../spec_helper.rb'
|
2
|
+
|
3
|
+
describe ListTool::App::ClearListCommand do
|
4
|
+
subject { ListTool::App::ClearListCommand }
|
5
|
+
|
6
|
+
describe '.match?' do
|
7
|
+
it 'returns true if "cl" or "clear-list" given' do
|
8
|
+
expect( subject.match? "cl" ).to be_truthy
|
9
|
+
expect( subject.match? "clear-list" ).to be_truthy
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'returns false otherwise' do
|
13
|
+
expect( subject.match? "some-arg" ).to be_falsey
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
describe '.parse' do
|
19
|
+
it 'shifts 1 arg from ARGV' do
|
20
|
+
argv = ['2']
|
21
|
+
expect( argv ).to receive(:shift).with(no_args).and_return('2')
|
22
|
+
subject.parse argv
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'success' do
|
26
|
+
it 'returns {list: list_num}' do
|
27
|
+
expect( subject.parse(['2']) ).to eq( {list: 1} )
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'failure' do
|
32
|
+
|
33
|
+
context 'when list number not given' do
|
34
|
+
it 'raises ArgumentError' do
|
35
|
+
expect{ subject.parse[] }.to raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when list number is not a integer' do
|
40
|
+
it 'raises ArgumentError' do
|
41
|
+
expect{ subject.parse(["not_an_integer"]) }.to raise_error(ArgumentError)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when list number is less than 1' do
|
46
|
+
it 'raises ArgumentError' do
|
47
|
+
expect{ subject.parse(['0']) }.to raise_error( ArgumentError )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when not an array given' do
|
52
|
+
it 'raises ArgumentError' do
|
53
|
+
expect{ subject.parse "not_an_array" }.to raise_error( ArgumentError )
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
describe '.execute' do
|
63
|
+
let (:lister) { ListTool::Lister.new }
|
64
|
+
|
65
|
+
context 'success' do
|
66
|
+
it 'calls lister.clear_list with given list number' do
|
67
|
+
expect(lister).to receive(:clear_list).with(2).and_return("not_nil")
|
68
|
+
subject.execute({list: 2}, lister)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'failure' do
|
73
|
+
context 'when list not found' do
|
74
|
+
it 'raises ListNotFoundError' do
|
75
|
+
expect{ subject.execute({list: -2}, lister) }.to raise_error(ListTool::ListNotFoundError )
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
describe '.help' do
|
84
|
+
it 'returns help message' do
|
85
|
+
expect( subject.help ).to be_a String
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require_relative '../../../spec_helper.rb'
|
2
|
+
|
3
|
+
describe ListTool::App::Command do
|
4
|
+
subject { ListTool::App::Command }
|
5
|
+
|
6
|
+
describe '::parse_number' do
|
7
|
+
context 'success' do
|
8
|
+
it "returns an integer" do
|
9
|
+
expect( subject.parse_number("2", "list") ).to eq 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'failure' do
|
14
|
+
|
15
|
+
it 'injects given number name into error message' do
|
16
|
+
expect{ subject.parse_number("not_an_int", "smth") }.to raise_error(ArgumentError, /smth/)
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when list number is not a integer' do
|
20
|
+
it 'raises ArgumentError' do
|
21
|
+
expect{ subject.parse_number("not_an_int", "item") }.to raise_error(ArgumentError)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when list number is less than 1' do
|
26
|
+
it 'raises ArgumentError' do
|
27
|
+
expect{ subject.parse_number("-1", "list") }.to raise_error( ArgumentError)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
describe '::parse_item_number' do
|
35
|
+
it 'calls ::parse_number with given string and "item"' do
|
36
|
+
expect(subject).to receive(:parse_number).with("2", "item")
|
37
|
+
subject.parse_item_number("2")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '::parse_item_number!' do
|
42
|
+
it 'calls ::parse_item_number with given string' do
|
43
|
+
expect(subject).to receive(:parse_item_number).with("2")
|
44
|
+
subject.parse_item_number!("2")
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'raises ArgumentError if number == nil' do
|
48
|
+
expect{ subject.parse_item_number!(nil) }.to raise_error(ArgumentError, /item number/)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
describe '::parse_list_number' do
|
54
|
+
it 'calls ::parse_number with given string and "list"' do
|
55
|
+
expect(subject).to receive(:parse_number).with("2", "list")
|
56
|
+
subject.parse_list_number("2")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '::parse_list_number!' do
|
61
|
+
it 'calls ::parse_list_number with given string' do
|
62
|
+
expect(subject).to receive(:parse_list_number).with("2")
|
63
|
+
subject.parse_list_number!("2")
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'raises ArgumentError if number == nil' do
|
67
|
+
expect{ subject.parse_list_number!(nil) }.to raise_error(ArgumentError, /list number/)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
describe '::ensure_existence_of' do
|
73
|
+
it 'raises error if given argument is nil' do
|
74
|
+
expect{ subject.ensure_existence_of("value" => nil) }.to raise_error(ArgumentError)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'raises error if any of given hash values is nil' do
|
78
|
+
expect{ subject.ensure_existence_of("value1" => "not_nil", "value2" => nil) }.to raise_error(ArgumentError)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'inserts key name to exception message' do
|
82
|
+
expect{ subject.ensure_existence_of("value1" => nil) }.to raise_error(ArgumentError, /value1/)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
describe '::fail_if_not_an_array' do
|
88
|
+
context 'when argument is an array' do
|
89
|
+
it 'does nothing' do
|
90
|
+
expect{ subject.fail_if_not_an_array([]) }.not_to raise_error
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'when argument is not an array' do
|
95
|
+
it 'raises ArgumentError' do
|
96
|
+
expect{ subject.fail_if_not_an_array("not_an_array") }.to raise_error(ArgumentError)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -4,7 +4,7 @@ describe ListTool::App::Commands do
|
|
4
4
|
subject { ListTool::App::Commands }
|
5
5
|
|
6
6
|
it 'stores command list' do
|
7
|
-
commands = ListTool::App.constants.map {|c| ListTool::App.const_get(c)} - [ListTool::App::Commands, ListTool::App::Printer, ListTool::App::Runner, ListTool::App::Colorizer]
|
7
|
+
commands = ListTool::App.constants.map {|c| ListTool::App.const_get(c)} - [ListTool::App::Commands, ListTool::App::Printer, ListTool::App::Runner, ListTool::App::Colorizer, ListTool::App::Command]
|
8
8
|
expect(subject::COMMANDS).to eq commands
|
9
9
|
end
|
10
10
|
|
data/spec/list_tool/list_spec.rb
CHANGED
@@ -67,6 +67,14 @@ describe ListTool::List do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
|
70
|
+
describe '#inspect' do
|
71
|
+
it "returns class name, object id, list name and array of item texts" do
|
72
|
+
str = "#<ListTool::List:0x#{list.__id__.to_s(16)}, name: Todolist, items: [item1, item2]>"
|
73
|
+
expect( list.inspect ).to eq str
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
70
78
|
describe '#clear!' do
|
71
79
|
it "clears items array" do
|
72
80
|
list.clear!
|
@@ -51,6 +51,14 @@ describe ListTool::ListerData do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
|
54
|
+
describe '#inspect' do
|
55
|
+
it "returns class name, object id, array of list names and default list name" do
|
56
|
+
str = "#<ListTool::ListerData:0x#{data.__id__.to_s(16)}, lists: [Todolist, Wishlist], default_list: Todolist>"
|
57
|
+
expect( data.inspect ).to eq str
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
54
62
|
describe '#add_list' do
|
55
63
|
|
56
64
|
context 'hash given' do
|
@@ -72,35 +72,36 @@ describe ListTool::Lister do
|
|
72
72
|
|
73
73
|
describe '#list' do
|
74
74
|
|
75
|
-
context '
|
76
|
-
|
77
|
-
|
78
|
-
expect( lister.list(0) ).to eq( {name: 'Todolist', items: ['item1', 'item2']} )
|
79
|
-
end
|
75
|
+
context 'no options' do
|
76
|
+
it 'returns hash with list name and array of item texts' do
|
77
|
+
expect( lister.list(0) ).to eq( {name: 'Todolist', items: ['item1', 'item2']} )
|
80
78
|
end
|
79
|
+
end
|
81
80
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
end
|
81
|
+
context 'list number not given' do
|
82
|
+
it 'returns contents of default list' do
|
83
|
+
expect( lister.list ).to eq( {name: 'Todolist', items: ['item1', 'item2']} )
|
86
84
|
end
|
87
85
|
end
|
88
86
|
|
89
|
-
|
90
|
-
context 'no list with given index' do
|
91
|
-
it 'returns nil' do
|
92
|
-
expect( lister.list(2) ).to be_nil
|
93
|
-
end
|
94
|
-
end
|
87
|
+
end
|
95
88
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
89
|
+
|
90
|
+
describe '#default_list' do
|
91
|
+
let(:data) { lister.instance_variable_get(:@data) }
|
92
|
+
|
93
|
+
context 'when default list is set' do
|
94
|
+
it 'returns hash with default ist name and array of item texts' do
|
95
|
+
expect( lister.default_list ).to eq( {name: 'Todolist', items: ['item1', 'item2']} )
|
101
96
|
end
|
102
97
|
end
|
103
98
|
|
99
|
+
context 'when default list is not set' do
|
100
|
+
it 'returns nil' do
|
101
|
+
allow( data ).to receive(:default_list).and_return(nil)
|
102
|
+
expect( lister.default_list ).to be_nil
|
103
|
+
end
|
104
|
+
end
|
104
105
|
end
|
105
106
|
|
106
107
|
|
@@ -112,75 +113,88 @@ describe ListTool::Lister do
|
|
112
113
|
|
113
114
|
|
114
115
|
describe '#method_missing' do
|
116
|
+
let(:data) { lister.instance_variable_get(:@data) }
|
115
117
|
|
116
|
-
context '
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
context '_list method given' do
|
123
|
-
it 'deligates method call to @data' do
|
124
|
-
data = lister.instance_variable_get(:@data)
|
125
|
-
expect( data ).to receive(:add_list).with('new_list')
|
126
|
-
lister.add_list('new_list')
|
127
|
-
end
|
118
|
+
context 'method name ends with _list' do
|
119
|
+
it 'deligates method call to ListerData' do
|
120
|
+
expect(data).to receive(:add_list).with("name")
|
121
|
+
lister.add_list("name")
|
128
122
|
end
|
123
|
+
end
|
129
124
|
|
130
|
-
|
125
|
+
context 'when method name ends with _item' do
|
126
|
+
context 'and list index is not specified' do
|
131
127
|
|
132
|
-
context 'list
|
128
|
+
context 'if default list is set' do
|
133
129
|
it 'deligates method call to default list' do
|
134
|
-
|
135
|
-
expect(
|
130
|
+
list = data.default_list
|
131
|
+
expect(list).to receive(:add_item).with("text")
|
132
|
+
lister.add_item("text")
|
133
|
+
end
|
134
|
+
end
|
136
135
|
|
137
|
-
|
136
|
+
context 'if default list is not set' do
|
137
|
+
it 'raises NoDefaultListError' do
|
138
|
+
allow( data ).to receive(:default_list).and_return(nil)
|
139
|
+
expect{ lister.add_item }.to raise_error(ListTool::NoDefaultListError)
|
138
140
|
end
|
139
141
|
end
|
140
142
|
|
141
|
-
|
142
|
-
it 'deligates method call to specified list' do
|
143
|
-
list = lister.instance_variable_get(:@data).lists[0]
|
144
|
-
expect( list ).to receive(:add_item).with('new_item')
|
143
|
+
end
|
145
144
|
|
146
|
-
|
145
|
+
context 'and list index is specified' do
|
146
|
+
|
147
|
+
context 'if list with given index exists' do
|
148
|
+
it 'deligates method call to list with given index' do
|
149
|
+
list = data.lists[1]
|
150
|
+
expect(list).to receive(:add_item).with("text")
|
151
|
+
lister.add_item("text", {list: 1})
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context 'if there is no list with given index' do
|
156
|
+
it 'raises ListNotFoundError' do
|
157
|
+
expect{ lister.add_item("text", {list: 3}) }.to raise_error(ListTool::ListNotFoundError)
|
147
158
|
end
|
148
159
|
end
|
149
160
|
|
150
161
|
end
|
162
|
+
end
|
151
163
|
|
164
|
+
context 'for any other methods' do
|
165
|
+
it 'raises NoMethodError' do
|
166
|
+
expect{ lister.unknown_method }.to raise_error(NoMethodError)
|
167
|
+
end
|
152
168
|
end
|
153
169
|
|
154
|
-
|
170
|
+
end
|
155
171
|
|
156
|
-
context 'call to unknown method' do
|
157
|
-
it 'raises NoMethodError' do
|
158
|
-
message = "undefined method 'no_such_method' for #{lister.inspect}"
|
159
|
-
expect{lister.no_such_method}.to raise_error(NoMethodError, message)
|
160
|
-
end
|
161
|
-
end
|
162
172
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
173
|
+
describe '#get_list' do
|
174
|
+
context 'when list index given' do
|
175
|
+
it 'returns corresponding list object' do
|
176
|
+
list = lister.instance_variable_get(:@data).instance_variable_get(:@lists)[0]
|
177
|
+
expect( lister.send(:get_list, 0) ).to eq list
|
167
178
|
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context 'when list index not given' do
|
168
182
|
|
169
|
-
context '
|
170
|
-
it 'returns
|
171
|
-
|
183
|
+
context 'default list is set' do
|
184
|
+
it 'returns default list' do
|
185
|
+
list = lister.instance_variable_get(:@data).instance_variable_get(:@default_list)
|
186
|
+
expect( lister.send(:get_list) ).to eq list
|
172
187
|
end
|
173
188
|
end
|
174
189
|
|
175
|
-
context '
|
190
|
+
context 'default list is not set' do
|
176
191
|
it 'raises NoDefaultListError' do
|
177
|
-
lister
|
178
|
-
expect{ lister.
|
192
|
+
allow( lister.instance_variable_get(:@data) ).to receive(:default_list).and_return(nil)
|
193
|
+
expect{ lister.send(:get_list) }.to raise_error(ListTool::NoDefaultListError)
|
179
194
|
end
|
180
195
|
end
|
181
|
-
|
196
|
+
|
182
197
|
end
|
183
|
-
|
184
198
|
end
|
185
199
|
|
186
200
|
end
|