abstract_mapper 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +34 -0
  4. data/Gemfile +1 -3
  5. data/README.md +29 -13
  6. data/Rakefile +4 -7
  7. data/abstract_mapper.gemspec +3 -2
  8. data/config/metrics/STYLEGUIDE +14 -15
  9. data/lib/abstract_mapper.rb +4 -1
  10. data/lib/abstract_mapper/attributes.rb +65 -0
  11. data/lib/abstract_mapper/branch.rb +17 -7
  12. data/lib/abstract_mapper/builder.rb +7 -3
  13. data/lib/abstract_mapper/command.rb +68 -0
  14. data/lib/abstract_mapper/commands.rb +11 -31
  15. data/lib/abstract_mapper/errors/unknown_command.rb +1 -1
  16. data/lib/abstract_mapper/errors/wrong_node.rb +1 -1
  17. data/lib/abstract_mapper/errors/wrong_rule.rb +2 -2
  18. data/lib/abstract_mapper/functions.rb +32 -5
  19. data/lib/abstract_mapper/node.rb +21 -10
  20. data/lib/abstract_mapper/optimizer.rb +3 -3
  21. data/lib/abstract_mapper/pair_rule.rb +2 -4
  22. data/lib/abstract_mapper/rspec.rb +1 -2
  23. data/lib/abstract_mapper/rule.rb +23 -2
  24. data/lib/abstract_mapper/rules.rb +3 -10
  25. data/lib/abstract_mapper/settings.rb +3 -3
  26. data/lib/abstract_mapper/sole_rule.rb +2 -4
  27. data/lib/abstract_mapper/version.rb +1 -1
  28. data/lib/rspec/doubles.rb +16 -0
  29. data/lib/rspec/nodes.rb +29 -16
  30. data/lib/rspec/rules.rb +3 -3
  31. data/spec/integration/faceter.rb +16 -7
  32. data/spec/integration/mapper_definition_spec.rb +1 -1
  33. data/spec/integration/rspec_examples_spec.rb +4 -30
  34. data/spec/spec_helper.rb +1 -1
  35. data/spec/unit/abstract_mapper/branch_spec.rb +91 -14
  36. data/spec/unit/abstract_mapper/builder_spec.rb +66 -48
  37. data/spec/unit/abstract_mapper/command_spec.rb +92 -0
  38. data/spec/unit/abstract_mapper/commands_spec.rb +38 -79
  39. data/spec/unit/abstract_mapper/dsl_spec.rb +60 -55
  40. data/spec/unit/abstract_mapper/errors/wrong_rule_spec.rb +1 -1
  41. data/spec/unit/abstract_mapper/functions/compact_spec.rb +3 -3
  42. data/spec/unit/abstract_mapper/functions/filter_spec.rb +1 -1
  43. data/spec/unit/abstract_mapper/functions/identity_spec.rb +21 -0
  44. data/spec/unit/abstract_mapper/functions/restrict_spec.rb +16 -0
  45. data/spec/unit/abstract_mapper/functions/subclass_spec.rb +1 -1
  46. data/spec/unit/abstract_mapper/node_spec.rb +119 -48
  47. data/spec/unit/abstract_mapper/optimizer_spec.rb +38 -32
  48. data/spec/unit/abstract_mapper/pair_rule_spec.rb +4 -11
  49. data/spec/unit/abstract_mapper/rule_spec.rb +31 -15
  50. data/spec/unit/abstract_mapper/rules_spec.rb +2 -2
  51. data/spec/unit/abstract_mapper/settings_spec.rb +80 -73
  52. data/spec/unit/abstract_mapper/sole_rule_spec.rb +3 -10
  53. data/spec/unit/abstract_mapper_spec.rb +13 -5
  54. metadata +33 -12
  55. data/lib/rspec/functions.rb +0 -25
  56. data/lib/rspec/mapper.rb +0 -40
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "abstract_mapper/rspec"
3
+ require "transproc/rspec"
4
4
 
5
5
  describe AbstractMapper::Functions, "#subclass?" do
6
6
 
@@ -1,84 +1,155 @@
1
1
  # encoding: utf-8
2
2
 
3
- describe AbstractMapper::Node do
3
+ class AbstractMapper # namespace
4
4
 
5
- let(:test) { AbstractMapper::Test::Node = Class.new(described_class) }
6
- let(:node) { test.new(*attributes) }
7
- let(:attributes) { [:foo, :bar] }
5
+ describe AbstractMapper::Node do
8
6
 
9
- describe ".new" do
7
+ let(:test) do
8
+ Test::Node = Class.new(described_class) do
9
+ attribute "foo"
10
+ attribute :bar, default: :BAR
11
+ end
12
+ end
10
13
 
11
- subject { node }
12
- it { is_expected.to be_frozen }
14
+ let(:node) { test.new(attributes, &block) }
15
+ let(:attributes) { { foo: :FOO } }
16
+ let(:block) { nil }
13
17
 
14
- end # describe .new
18
+ describe ".new" do
15
19
 
16
- describe "#attributes" do
20
+ subject { node }
17
21
 
18
- subject { node.attributes }
22
+ it "initializes attributes" do
23
+ expect(subject.foo).to eql :FOO
24
+ expect(subject.bar).to eql :BAR
25
+ end
19
26
 
20
- it { is_expected.to eql attributes }
21
- it { is_expected.to be_frozen }
27
+ it { is_expected.to be_frozen }
22
28
 
23
- it "doesn't freeze the source" do
24
- expect { subject }.not_to change { attributes.frozen? }
25
- end
29
+ it "doesn't freeze the source" do
30
+ expect { subject }.not_to change { attributes.frozen? }
31
+ end
32
+
33
+ end # describe .new
34
+
35
+ describe ".attributes" do
36
+
37
+ it "is declared via DSL" do
38
+ expect(test.attributes).to eql(foo: nil, bar: :BAR)
39
+ end
40
+
41
+ it "is inheritable" do
42
+ subklass = Class.new(test)
43
+ expect(subklass.attributes).to eql(test.attributes)
44
+ end
45
+
46
+ end # describe .attributes
47
+
48
+ describe "#attributes" do
49
+
50
+ subject { node.attributes }
51
+
52
+ it { is_expected.to eql({ foo: nil, bar: :BAR }.merge(attributes)) }
53
+
54
+ context "by default" do
55
+
56
+ let(:node) { test.new }
57
+ it { is_expected.to eql(foo: nil, bar: :BAR) }
58
+
59
+ end # context
60
+
61
+ end # describe #attributes
62
+
63
+ describe "#block" do
64
+
65
+ subject { node.block }
66
+
67
+ context "when block is absent" do
68
+
69
+ it { is_expected.to eql nil }
70
+
71
+ end # context
72
+
73
+ context "when block is present" do
74
+
75
+ let(:block) { proc { :foo } }
76
+ it { is_expected.to eql block }
77
+
78
+ end # context
79
+
80
+ end # describe #block
81
+
82
+ describe "#to_s" do
83
+
84
+ subject { node.to_s }
85
+
86
+ context "with uninitialized attributes" do
87
+
88
+ let(:node) { test.new }
89
+ it { is_expected.to eql "Node(foo: nil, bar: :BAR)" }
90
+
91
+ end # context
92
+
93
+ context "with initialized attributes" do
94
+
95
+ let(:node) { test.new(attributes) }
96
+ it { is_expected.to eql "Node(foo: :FOO, bar: :BAR)" }
26
97
 
27
- end # describe #attributes
98
+ end # context
28
99
 
29
- describe "#block" do
100
+ context "without attributes" do
30
101
 
31
- subject { node.block }
102
+ let(:node) { described_class.new }
103
+ it { is_expected.to eql "Node" }
32
104
 
33
- context "when block is absent" do
105
+ end # context
34
106
 
35
- let(:node) { test.new(*attributes) }
36
- it { is_expected.to eql nil }
107
+ end # describe #to_s
37
108
 
38
- end # context
109
+ describe "#==" do
39
110
 
40
- context "when block is present" do
111
+ subject { node == other }
41
112
 
42
- let(:block) { proc { :foo } }
43
- let(:node) { test.new(*attributes, &block) }
44
- it { is_expected.to eql block }
113
+ context "node with the same type and attributes" do
45
114
 
46
- end # context
115
+ let(:other) { test.new(attributes) }
116
+ it { is_expected.to eql true }
47
117
 
48
- end # describe #block
118
+ end # context
49
119
 
50
- describe "#to_s" do
120
+ context "node with other type" do
51
121
 
52
- subject { node.to_s }
122
+ let(:other) { Class.new(test).new(attributes) }
123
+ it { is_expected.to eql false }
53
124
 
54
- context "without attributes" do
125
+ end # context
55
126
 
56
- let(:node) { test.new }
57
- it { is_expected.to eql "Node" }
127
+ context "node with other attributes" do
58
128
 
59
- end # context
129
+ let(:other) { test.new }
130
+ it { is_expected.to eql false }
60
131
 
61
- context "with attributes" do
132
+ end # context
62
133
 
63
- let(:node) { test.new(*attributes) }
64
- it { is_expected.to eql "Node(:foo, :bar)" }
134
+ end # describe #==
65
135
 
66
- end # context
136
+ describe "#inspect" do
67
137
 
68
- end # describe #to_s
138
+ subject { node.inspect }
139
+ it { is_expected.to eql "<Node(foo: :FOO, bar: :BAR)>" }
69
140
 
70
- describe "#inspect" do
141
+ end # describe #inspect
71
142
 
72
- subject { node.inspect }
73
- it { is_expected.to eql "<Node(:foo, :bar)>" }
143
+ describe "#transproc" do
74
144
 
75
- end # describe #inspect
145
+ subject { node.transproc }
76
146
 
77
- describe "#transproc" do
147
+ it "returns the identity function" do
148
+ expect(subject[:foo]).to eql :foo
149
+ end
78
150
 
79
- subject { node.transproc[:foo] }
80
- it { is_expected.to eql :foo }
151
+ end # describe #transproc
81
152
 
82
- end # describe #transproc
153
+ end # describe AbstractMapper::Node
83
154
 
84
- end # describe AbstractMapper::Node
155
+ end # class AbstractMapper
@@ -1,48 +1,54 @@
1
1
  # encoding: utf-8
2
2
 
3
- describe AbstractMapper::Optimizer do
3
+ class AbstractMapper # namespace
4
4
 
5
- let(:optimizer) { test.new rules }
6
- let(:test) { Class.new(described_class) }
7
- let(:rules) { AbstractMapper::Rules.new }
5
+ describe AbstractMapper::Optimizer do
8
6
 
9
- describe ".new" do
7
+ let(:optimizer) { test.new rules }
8
+ let(:test) { Class.new(described_class) }
9
+ let(:rules) { Rules.new }
10
10
 
11
- subject { optimizer }
12
- it { is_expected.to be_frozen }
11
+ describe ".new" do
13
12
 
14
- end # describe .new
13
+ subject { optimizer }
14
+ it { is_expected.to be_frozen }
15
15
 
16
- describe "#rules" do
16
+ end # describe .new
17
17
 
18
- subject { optimizer.rules }
19
- it { is_expected.to eql rules }
18
+ describe "#rules" do
20
19
 
21
- end # describe #rules
20
+ subject { optimizer.rules }
21
+ it { is_expected.to eql rules }
22
22
 
23
- describe "#update" do
23
+ end # describe #rules
24
24
 
25
- subject { optimizer.update(tree) }
25
+ describe "#update" do
26
26
 
27
- let(:rules) { AbstractMapper::Rules.new([rule]) }
28
- let(:rule) { Class.new(AbstractMapper::PairRule) }
29
- let(:tree) { AbstractMapper::Branch.new { [node3, node4] } }
30
- let(:node1) { AbstractMapper::Node.new(1) }
31
- let(:node2) { AbstractMapper::Node.new(2) }
32
- let(:node3) { AbstractMapper::Node.new(3) }
33
- let(:node4) { AbstractMapper::Test::Foo.new(4) { [node1, node2] } }
27
+ subject { optimizer.update(tree) }
34
28
 
35
- before { AbstractMapper::Test::Foo = Class.new(AbstractMapper::Branch) }
36
- before { rule.send(:define_method, :optimize?) { true } }
37
- before { rule.send(:define_method, :optimize) { nodes.reverse } }
29
+ let(:rules) { Rules.new([rule]) }
30
+ let(:rule) { Class.new(PairRule) }
31
+ let(:tree) { Branch.new { [foo3, bar1] } }
38
32
 
39
- it "optimizes the tree deeply" do
40
- expect(tree.inspect)
41
- .to eql "<Root [<Node(3)>, <Foo(4) [<Node(1)>, <Node(2)>]>]>"
42
- expect(subject.inspect)
43
- .to eql "<Root [<Foo(4) [<Node(2)>, <Node(1)>]>, <Node(3)>]>"
44
- end
33
+ let(:foo1) { Test::Foo.new(n: 1) }
34
+ let(:foo2) { Test::Foo.new(n: 2) }
35
+ let(:foo3) { Test::Foo.new(n: 3) }
36
+ let(:bar1) { Test::Bar.new(n: 4) { [foo1, foo2] } }
45
37
 
46
- end # describe #update
38
+ before { Test::Foo = Class.new(Node) { attribute :n } }
39
+ before { Test::Bar = Class.new(Branch) }
40
+ before { rule.send(:define_method, :optimize?) { true } }
41
+ before { rule.send(:define_method, :optimize) { nodes.reverse } }
47
42
 
48
- end # describe AbstractMapper::Optimize
43
+ it "optimizes the tree deeply" do
44
+ expect(tree.inspect)
45
+ .to eql "<Root [<Foo(n: 3)>, <Bar [<Foo(n: 1)>, <Foo(n: 2)>]>]>"
46
+ expect(subject.inspect)
47
+ .to eql "<Root [<Bar [<Foo(n: 2)>, <Foo(n: 1)>]>, <Foo(n: 3)>]>"
48
+ end
49
+
50
+ end # describe #update
51
+
52
+ end # describe AbstractMapper::Optimize
53
+
54
+ end # class AbstractMapper
@@ -5,15 +5,8 @@ describe AbstractMapper::PairRule do
5
5
  let(:rule) { test.new(left, right) }
6
6
  let(:test) { AbstractMapper::Test::Rule = Class.new(described_class) }
7
7
  let(:nodes) { [left, right] }
8
- let(:left) { double }
9
- let(:right) { double }
10
-
11
- describe ".composer" do
12
-
13
- subject { test.composer }
14
- it { is_expected.to eql :compact }
15
-
16
- end # describe .pair?
8
+ let(:left) { AbstractMapper::Node.new }
9
+ let(:right) { AbstractMapper::Node.new }
17
10
 
18
11
  describe ".new" do
19
12
 
@@ -49,9 +42,9 @@ describe AbstractMapper::PairRule do
49
42
  test.send(:define_method, :optimize) { left + right }
50
43
  end
51
44
 
52
- subject { test.transproc[array] }
53
-
54
45
  let(:array) { [1, 1, 2, 5] }
46
+
47
+ subject { test.transproc[array] }
55
48
  it { is_expected.to eql [4, 5] }
56
49
 
57
50
  end # describe #transproc
@@ -5,7 +5,7 @@ describe AbstractMapper::Rule do
5
5
  let(:rule) { test.new(*nodes) }
6
6
  let(:test) { AbstractMapper::Test::Rule = Class.new(described_class) }
7
7
  let(:nodes) { [node] }
8
- let(:node) { double }
8
+ let(:node) { AbstractMapper::Node.new }
9
9
 
10
10
  describe ".new" do
11
11
 
@@ -31,36 +31,41 @@ describe AbstractMapper::Rule do
31
31
 
32
32
  subject { rule.call }
33
33
 
34
- before { test.send(:define_method, :optimize?) { true } }
35
- before { test.send(:define_method, :optimize) { [:foo] } }
34
+ context "by default" do
35
+
36
+ it { is_expected.to eql nodes }
37
+
38
+ end # context
36
39
 
37
40
  context "when #optimize? returns true" do
38
41
 
39
42
  before { test.send(:define_method, :optimize?) { true } }
40
- it { is_expected.to eql [:foo] }
43
+ it { is_expected.to eql nodes }
41
44
 
42
45
  end # context
43
46
 
44
- context "when #optimize? returns false" do
47
+ context "when #optimize is defined" do
45
48
 
46
- before { test.send(:define_method, :optimize?) { false } }
47
- it { is_expected.to eql [node] }
49
+ before { test.send(:define_method, :optimize) { :foo } }
50
+ it { is_expected.to eql nodes }
48
51
 
49
52
  end # context
50
53
 
51
- context "when #optimize returns non-array" do
54
+ context "when #optimize? returns true and #optimize is defined" do
52
55
 
53
- before { test.send(:define_method, :optimize) { :foo } }
56
+ before { test.send(:define_method, :optimize?) { true } }
57
+ before { test.send(:define_method, :optimize) { :foo } }
54
58
  it { is_expected.to eql [:foo] }
55
59
 
56
- end # contex
60
+ end # context
57
61
 
58
62
  context "when #optimize returns nils" do
59
63
 
64
+ before { test.send(:define_method, :optimize?) { true } }
60
65
  before { test.send(:define_method, :optimize) { [nil, nil] } }
61
66
  it { is_expected.to eql [] }
62
67
 
63
- end # contex
68
+ end # context
64
69
 
65
70
  end # describe #call
66
71
 
@@ -69,14 +74,25 @@ describe AbstractMapper::Rule do
69
74
  before do
70
75
  test.send(:define_method, :optimize?) { true }
71
76
  test.send(:define_method, :optimize) { nodes.reverse }
72
- allow(test).to receive(:composer) { :compact }
73
77
  end
74
78
 
75
- subject { test.transproc[array] }
76
-
77
79
  let(:array) { [1, 2, 3] }
78
80
 
79
- it { is_expected.to eql [2, 3, 1] }
81
+ context "with default composer" do
82
+
83
+ subject { test.transproc[array] }
84
+ it { is_expected.to eql array }
85
+
86
+ end # context
87
+
88
+ context "with another composer" do
89
+
90
+ before { allow(test).to receive(:composer) { :compact } }
91
+
92
+ subject { test.transproc[array] }
93
+ it { is_expected.to eql [2, 3, 1] }
94
+
95
+ end # context
80
96
 
81
97
  end # describe .transproc
82
98
 
@@ -78,8 +78,8 @@ describe AbstractMapper::Rules do
78
78
  let(:nodes) { [1, 1, 2] }
79
79
 
80
80
  subject { rules[nodes] }
81
- it { is_expected.to eql [6, 4] }
82
- # [1, 1, 2] -foo-> [2, 2, 3] -foo-> [3, 3, 4] -bar-> [6, 4]
81
+ it { is_expected.to eql [5, 4] }
82
+ # [1, 1, 2] -foo-> [2, 2, 3] -bar-> [4, 3] -foo-> [5, 4]
83
83
 
84
84
  end # context
85
85
 
@@ -1,113 +1,120 @@
1
1
  # encoding: utf-8
2
2
 
3
- describe AbstractMapper::Settings do
4
-
5
- let!(:rule) do
6
- AbstractMapper::Test::Rule = Class.new(AbstractMapper::SoleRule)
7
- end
8
- let!(:node) do
9
- AbstractMapper::Test::Node = Class.new(AbstractMapper::Node)
10
- end
11
-
12
- let(:settings) do
13
- described_class.new do
14
- command :foo, AbstractMapper::Test::Node
15
- rule AbstractMapper::Test::Rule
3
+ class AbstractMapper
4
+
5
+ describe AbstractMapper::Settings do
6
+
7
+ let!(:rule) { Test::Rule = Class.new(SoleRule) }
8
+ let!(:node) { Test::Node = Class.new(Node) { attribute :foo } }
9
+
10
+ let(:settings) do
11
+ described_class.new do
12
+ command :foo, Test::Node do |value|
13
+ { foo: value }
14
+ end
15
+
16
+ rule Test::Rule
17
+ end
16
18
  end
17
- end
18
19
 
19
- describe ".new" do
20
+ describe ".new" do
20
21
 
21
- context "with a valid block" do
22
+ context "with a valid block" do
22
23
 
23
- subject { settings }
24
- it { is_expected.to be_frozen }
24
+ subject { settings }
25
+ it { is_expected.to be_frozen }
25
26
 
26
- end # context
27
+ end # context
27
28
 
28
- context "with invalid command" do
29
+ context "with invalid command" do
29
30
 
30
- subject { described_class.new { command :foo, String } }
31
- it "fails" do
32
- expect { subject }.to raise_error do |error|
33
- expect(error).to be_kind_of AbstractMapper::Errors::WrongNode
34
- expect(error.message).to include "String"
31
+ subject { described_class.new { command :foo, String } }
32
+
33
+ it "fails" do
34
+ expect { subject }.to raise_error do |error|
35
+ expect(error).to be_kind_of Errors::WrongNode
36
+ expect(error.message).to include "String"
37
+ end
35
38
  end
36
- end
37
39
 
38
- end # context
40
+ end # context
41
+
42
+ context "with invalid rule" do
39
43
 
40
- context "with invalid rule" do
44
+ subject { described_class.new { rule String } }
41
45
 
42
- subject { described_class.new { rule String } }
43
- it "fails" do
44
- expect { subject }.to raise_error do |error|
45
- expect(error).to be_kind_of AbstractMapper::Errors::WrongRule
46
- expect(error.message).to include "String"
46
+ it "fails" do
47
+ expect { subject }.to raise_error do |error|
48
+ expect(error).to be_kind_of Errors::WrongRule
49
+ expect(error.message).to include "String"
50
+ end
47
51
  end
48
- end
49
52
 
50
- end # context
53
+ end # context
51
54
 
52
- context "without a block" do
55
+ context "without a block" do
53
56
 
54
- subject { described_class.new }
55
- it "doesn't fail" do
56
- expect { subject }.not_to raise_error
57
- end
57
+ subject { described_class.new }
58
+
59
+ it "doesn't fail" do
60
+ expect { subject }.not_to raise_error
61
+ end
58
62
 
59
- end # context
63
+ end # context
60
64
 
61
- end # describe .new
65
+ end # describe .new
62
66
 
63
- describe "#commands" do
67
+ describe "#commands" do
64
68
 
65
- subject { settings.commands }
69
+ subject { settings.commands }
66
70
 
67
- it { is_expected.to be_kind_of AbstractMapper::Commands }
71
+ it { is_expected.to be_kind_of Commands }
68
72
 
69
- it "contains registered commands" do
70
- expect(subject.registry).to eql(foo: node)
71
- end
73
+ it "contains registered commands" do
74
+ node = subject[:foo].call(:bar)
75
+ expect(node.inspect).to eql "<Node(foo: :bar)>"
76
+ end
72
77
 
73
- end # describe #commands
78
+ end # describe #commands
74
79
 
75
- describe "#rules" do
80
+ describe "#rules" do
76
81
 
77
- subject { settings.rules }
82
+ subject { settings.rules }
78
83
 
79
- it { is_expected.to be_kind_of AbstractMapper::Rules }
84
+ it { is_expected.to be_kind_of Rules }
80
85
 
81
- it "contains registered rules" do
82
- expect(subject.registry).to eql [rule]
83
- end
86
+ it "contains registered rules" do
87
+ expect(subject.registry).to eql [rule]
88
+ end
84
89
 
85
- end # describe #rules
90
+ end # describe #rules
86
91
 
87
- describe "#builder" do
92
+ describe "#builder" do
88
93
 
89
- subject { settings.builder }
94
+ subject { settings.builder }
90
95
 
91
- it "subclasses AbstractMapper::Builder" do
92
- expect(subject.superclass).to eql AbstractMapper::Builder
93
- end
96
+ it "subclasses Builder" do
97
+ expect(subject.superclass).to eql Builder
98
+ end
94
99
 
95
- it "uses registered commands" do
96
- expect(subject.commands).to eql settings.commands
97
- end
100
+ it "uses registered commands" do
101
+ expect(subject.commands).to eql settings.commands
102
+ end
98
103
 
99
- end # describe #builder
104
+ end # describe #builder
100
105
 
101
- describe "#optimizer" do
106
+ describe "#optimizer" do
102
107
 
103
- subject { settings.optimizer }
108
+ subject { settings.optimizer }
104
109
 
105
- it { is_expected.to be_kind_of AbstractMapper::Optimizer }
110
+ it { is_expected.to be_kind_of Optimizer }
106
111
 
107
- it "uses registered rules" do
108
- expect(subject.rules).to eql settings.rules
109
- end
112
+ it "uses registered rules" do
113
+ expect(subject.rules).to eql settings.rules
114
+ end
115
+
116
+ end # describe #optimizer
110
117
 
111
- end # describe #optimizer
118
+ end # describe Settings
112
119
 
113
- end # describe AbstractMapper::Settings
120
+ end # class AbstractMapper