Class: Sass::Tree::Visitors::Base Abstract
- Inherits:
-
Object
- Object
- Sass::Tree::Visitors::Base
- Defined in:
- /var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb
Overview
This class is abstract.
The abstract base class for Sass visitors. Visitors should extend this class, then implement visit_* methods for each node they care about (e.g. visit_rule for RuleNode or visit_for for ForNode). These methods take the node in question as argument. They may yield to visit the child nodes of the current node.
Note: due to the unusual nature of Sass::Tree::IfNode, special care must be taken to ensure that it is properly handled. In particular, there is no built-in scaffolding for dealing with the return value of @else nodes.
Direct Known Subclasses
CheckNesting, Convert, Cssize, DeepCopy, Perform, SetOptions, ToCss
Constant Summary
Class Method Summary
- + (Object) visit(root) Runs the visitor on a tree.
Instance Method Summary
-
- (String) node_name(node)
protected
Returns the name of a node as used in the
visit_*method. - - (Object) visit(node) protected Runs the visitor on the given node.
- - (Array<Object>) visit_children(parent) protected Visit the child nodes for a given node.
-
- visit_if(node)
protected
yields, then runs the visitor on the@elseclause if the node has one.
Class Method Details
+ (Object) visit(root)
Runs the visitor on a tree.
23 24 25 |
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 23
def self.visit(root)
new.send(:visit, root)
end
|
Instance Method Details
- (String) node_name(node) (protected)
Returns the name of a node as used in the visit_* method.
62 63 64 65 |
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 62
def node_name(node)
@@node_names ||= {}
@@node_names[node.class.name] ||= node.class.name.gsub(NODE_NAME_RE, '\\1').downcase
end
|
- (Object) visit(node) (protected)
Runs the visitor on the given node. This can be overridden by subclasses that need to do something for each node.
34 35 36 37 38 39 40 41 |
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 34
def visit(node)
method = "visit_#{node_name node}"
if self.respond_to?(method, true)
self.send(method, node) {visit_children(node)}
else
visit_children(node)
end
end
|
- (Array<Object>) visit_children(parent) (protected)
Visit the child nodes for a given node. This can be overridden by subclasses that need to do something with the child nodes’ return values.
This method is run when visit_* methods yield, and its return value is returned from the yield.
52 53 54 |
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 52
def visit_children(parent)
parent.children.map {|c| visit(c)}
end
|
- visit_if(node) (protected)
yields, then runs the visitor on the @else clause if the node has one. This exists to ensure that the contents of the @else clause get visited.
69 70 71 72 73 |
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 69
def visit_if(node)
yield
visit(node.else) if node.else
node
end
|