abstract_mapper 0.0.2 → 0.1.0
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/.travis.yml +0 -4
- data/CHANGELOG.md +26 -0
- data/README.md +5 -5
- data/Rakefile +1 -1
- data/abstract_mapper.gemspec +1 -0
- data/lib/abstract_mapper.rb +4 -15
- data/lib/abstract_mapper/ast.rb +16 -0
- data/lib/abstract_mapper/ast/branch.rb +121 -0
- data/lib/abstract_mapper/ast/node.rb +91 -0
- data/lib/abstract_mapper/builder.rb +2 -2
- data/lib/abstract_mapper/commands.rb +4 -2
- data/lib/abstract_mapper/commands/base.rb +69 -0
- data/lib/abstract_mapper/dsl.rb +2 -2
- data/lib/abstract_mapper/errors.rb +17 -0
- data/lib/abstract_mapper/errors/wrong_node.rb +1 -1
- data/lib/abstract_mapper/errors/wrong_rule.rb +1 -1
- data/lib/abstract_mapper/optimizer.rb +1 -1
- data/lib/abstract_mapper/rules.rb +10 -5
- data/lib/abstract_mapper/rules/base.rb +74 -0
- data/lib/abstract_mapper/rules/pair.rb +68 -0
- data/lib/abstract_mapper/rules/sole.rb +60 -0
- data/lib/abstract_mapper/settings.rb +22 -30
- data/lib/abstract_mapper/version.rb +1 -1
- data/lib/rspec/nodes.rb +2 -2
- data/spec/integration/faceter.rb +4 -4
- data/spec/integration/rspec_examples_spec.rb +0 -6
- data/spec/unit/abstract_mapper/{branch_spec.rb → ast/branch_spec.rb} +28 -61
- data/spec/unit/abstract_mapper/{node_spec.rb → ast/node_spec.rb} +16 -53
- data/spec/unit/abstract_mapper/builder_spec.rb +9 -24
- data/spec/unit/abstract_mapper/{command_spec.rb → commands/base_spec.rb} +10 -25
- data/spec/unit/abstract_mapper/commands_spec.rb +9 -14
- data/spec/unit/abstract_mapper/dsl_spec.rb +23 -15
- data/spec/unit/abstract_mapper/errors/unknown_command_spec.rb +1 -4
- data/spec/unit/abstract_mapper/errors/wrong_node_spec.rb +5 -4
- data/spec/unit/abstract_mapper/errors/wrong_rule_spec.rb +5 -5
- data/spec/unit/abstract_mapper/functions/compact_spec.rb +0 -2
- data/spec/unit/abstract_mapper/functions/filter_spec.rb +0 -2
- data/spec/unit/abstract_mapper/functions/identity_spec.rb +0 -2
- data/spec/unit/abstract_mapper/functions/restrict_spec.rb +0 -3
- data/spec/unit/abstract_mapper/functions/subclass_spec.rb +0 -2
- data/spec/unit/abstract_mapper/optimizer_spec.rb +13 -17
- data/spec/unit/abstract_mapper/{rule_spec.rb → rules/base_spec.rb} +17 -34
- data/spec/unit/abstract_mapper/{pair_rule_spec.rb → rules/pair_spec.rb} +8 -8
- data/spec/unit/abstract_mapper/{sole_rule_spec.rb → rules/sole_spec.rb} +5 -5
- data/spec/unit/abstract_mapper/rules_spec.rb +24 -37
- data/spec/unit/abstract_mapper/settings_spec.rb +38 -32
- data/spec/unit/abstract_mapper_spec.rb +9 -16
- metadata +37 -22
- data/lib/abstract_mapper/attributes.rb +0 -65
- data/lib/abstract_mapper/branch.rb +0 -120
- data/lib/abstract_mapper/command.rb +0 -68
- data/lib/abstract_mapper/node.rb +0 -87
- data/lib/abstract_mapper/pair_rule.rb +0 -64
- data/lib/abstract_mapper/rule.rb +0 -73
- data/lib/abstract_mapper/sole_rule.rb +0 -56
@@ -1,64 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
class AbstractMapper
|
4
|
-
|
5
|
-
# The base class for rules to be applied to pairs of nodes.
|
6
|
-
#
|
7
|
-
# The subclass should implement two instance methods:
|
8
|
-
#
|
9
|
-
# * `#optimize?` to check if the optimization should be applied to the nodes
|
10
|
-
# * `#optimize` that should return the merged node
|
11
|
-
#
|
12
|
-
# @example
|
13
|
-
# class MergeConsecutiveLists < AbstractMapper::PairRule
|
14
|
-
# def optimize?
|
15
|
-
# left.is_a?(List) & right.is_a?(List)
|
16
|
-
# end
|
17
|
-
#
|
18
|
-
# def optimize
|
19
|
-
# List.new { left.entries + right.entries }
|
20
|
-
# end
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# @abstract
|
24
|
-
#
|
25
|
-
# @api public
|
26
|
-
#
|
27
|
-
class PairRule < Rule
|
28
|
-
|
29
|
-
# @private
|
30
|
-
def self.composer
|
31
|
-
:compact
|
32
|
-
end
|
33
|
-
private_class_method :composer
|
34
|
-
|
35
|
-
# @!attribute [r] node
|
36
|
-
#
|
37
|
-
# @return [AbstractMapper::Node] The left node in the pair to be optimized
|
38
|
-
#
|
39
|
-
attr_reader :left
|
40
|
-
|
41
|
-
# @!attribute [r] node
|
42
|
-
#
|
43
|
-
# @return [AbstractMapper::Node] The right node in the pair to be optimized
|
44
|
-
#
|
45
|
-
attr_reader :right
|
46
|
-
|
47
|
-
# @!scope class
|
48
|
-
# @!method new(node)
|
49
|
-
# Creates a rule applied to the sole node
|
50
|
-
#
|
51
|
-
# @param [AbstractMapper::Node] node
|
52
|
-
#
|
53
|
-
# @return [AbstractMapper::Rule]
|
54
|
-
|
55
|
-
# @private
|
56
|
-
def initialize(left, right)
|
57
|
-
@left = left
|
58
|
-
@right = right
|
59
|
-
super
|
60
|
-
end
|
61
|
-
|
62
|
-
end # class PairRule
|
63
|
-
|
64
|
-
end # class AbstractMapper
|
data/lib/abstract_mapper/rule.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
class AbstractMapper
|
4
|
-
|
5
|
-
# Base class for nodes optimization rules
|
6
|
-
#
|
7
|
-
# @abstract
|
8
|
-
#
|
9
|
-
# @api private
|
10
|
-
#
|
11
|
-
class Rule
|
12
|
-
|
13
|
-
# @private
|
14
|
-
def self.composer
|
15
|
-
:identity
|
16
|
-
end
|
17
|
-
private_class_method :composer
|
18
|
-
|
19
|
-
# The transformation function that applies the rule to the array of nodes
|
20
|
-
#
|
21
|
-
# @return [Transproc::Function]
|
22
|
-
#
|
23
|
-
def self.transproc
|
24
|
-
Functions[composer, proc { |*nodes| new(*nodes).call }]
|
25
|
-
end
|
26
|
-
|
27
|
-
# @!attribute [r] nodes
|
28
|
-
#
|
29
|
-
# @return [Array<AbstractMapper::Node>]
|
30
|
-
# Either one or two nodes to be optimized
|
31
|
-
#
|
32
|
-
attr_reader :nodes
|
33
|
-
|
34
|
-
# @!scope class
|
35
|
-
# @!method new(*nodes)
|
36
|
-
# Creates the rule for a sole node, or a pair of consecutive nodes
|
37
|
-
#
|
38
|
-
# @param [Array<AbstractMapper::Node>] nodes
|
39
|
-
#
|
40
|
-
# @return [AbstractMapper::Rule]
|
41
|
-
|
42
|
-
# @private
|
43
|
-
def initialize(*nodes)
|
44
|
-
@nodes = nodes
|
45
|
-
IceNine.deep_freeze(self)
|
46
|
-
end
|
47
|
-
|
48
|
-
# Checks if optimization is needed for the node(s)
|
49
|
-
#
|
50
|
-
# @return [Boolean]
|
51
|
-
#
|
52
|
-
def optimize?
|
53
|
-
end
|
54
|
-
|
55
|
-
# Returns the optimized node(s)
|
56
|
-
#
|
57
|
-
# @return [Object]
|
58
|
-
#
|
59
|
-
def optimize
|
60
|
-
nodes
|
61
|
-
end
|
62
|
-
|
63
|
-
# Returns the result of the rule applied to the initialized [#nodes]
|
64
|
-
#
|
65
|
-
# @return [Array<AbstractMapper::Node>]
|
66
|
-
#
|
67
|
-
def call
|
68
|
-
optimize? ? [optimize].flatten.compact : nodes
|
69
|
-
end
|
70
|
-
|
71
|
-
end # class Rule
|
72
|
-
|
73
|
-
end # class AbstractMapper
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
class AbstractMapper
|
4
|
-
|
5
|
-
# The abstract class that describes the rule to be applied to sole nodes.
|
6
|
-
#
|
7
|
-
# The subclass should implement two instance methods:
|
8
|
-
#
|
9
|
-
# * `#optimize?` to check if the optimization should be applied to the node
|
10
|
-
# * `#optimize` that should return the optimized node
|
11
|
-
#
|
12
|
-
# @example
|
13
|
-
# class RemoveEmptyList < AbstractMapper::SoleRule
|
14
|
-
# def optimize?
|
15
|
-
# node.is_a?(List) && node.empty?
|
16
|
-
# end
|
17
|
-
#
|
18
|
-
# def optimize
|
19
|
-
# end
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# @abstract
|
23
|
-
#
|
24
|
-
# @api public
|
25
|
-
#
|
26
|
-
class SoleRule < Rule
|
27
|
-
|
28
|
-
# @private
|
29
|
-
def self.composer
|
30
|
-
:filter
|
31
|
-
end
|
32
|
-
private_class_method :composer
|
33
|
-
|
34
|
-
# @!attribute [r] node
|
35
|
-
#
|
36
|
-
# @return [AbstractMapper::Node] The node to be optimized
|
37
|
-
#
|
38
|
-
attr_reader :node
|
39
|
-
|
40
|
-
# @!scope class
|
41
|
-
# @!method new(node)
|
42
|
-
# Creates a rule applied to the sole node
|
43
|
-
#
|
44
|
-
# @param [AbstractMapper::Node] node
|
45
|
-
#
|
46
|
-
# @return [AbstractMapper::Rule]
|
47
|
-
|
48
|
-
# @private
|
49
|
-
def initialize(node)
|
50
|
-
@node = node
|
51
|
-
super
|
52
|
-
end
|
53
|
-
|
54
|
-
end # class SoleRule
|
55
|
-
|
56
|
-
end # class AbstractMapper
|