class Sass::Selector::AbstractSequence

The abstract parent class of the various selector sequence classes.

All subclasses should implement a ‘members` method that returns an array of object that respond to `#line=` and `#filename=`, as well as a `to_s` method that returns the string representation of the selector.

Attributes

filename[R]

The name of the file in which this selector was declared.

@return [String, nil]

line[R]

The line of the Sass template on which this selector was declared.

@return [Integer]

Public Instance Methods

==(other)
Alias for: eql?
eql?(other) click to toggle source

Checks equality between this and another object.

Subclasses should define ‘#_eql?` rather than overriding this method, which handles checking class equality and hash equality.

@param other [Object] The object to test equality against @return [Boolean] Whether or not this is equal to ‘other`

# File lib/sass/selector/abstract_sequence.rb, line 57
def eql?(other)
  other.class == self.class && other.hash == hash && _eql?(other)
end
Also aliased as: ==
filename=(filename) click to toggle source

Sets the name of the file in which this selector was declared, or ‘nil` if it was not declared in a file (e.g. on stdin). This also sets the filename for all child selectors.

@param filename [String, nil] @return [String, nil]

# File lib/sass/selector/abstract_sequence.rb, line 35
def filename=(filename)
  members.each {|m| m.filename = filename}
  @filename = filename
end
hash() click to toggle source

Returns a hash code for this sequence.

Subclasses should define ‘#_hash` rather than overriding this method, which automatically handles memoizing the result.

@return [Integer]

# File lib/sass/selector/abstract_sequence.rb, line 46
def hash
  @_hash ||= _hash
end
invisible?() click to toggle source

Whether or not this selector should be hidden due to containing a placeholder.

# File lib/sass/selector/abstract_sequence.rb, line 64
def invisible?
  @invisible ||= members.any? do |m|
    next m.invisible? if m.is_a?(AbstractSequence) || m.is_a?(Pseudo)
    m.is_a?(Placeholder)
  end
end
line=(line) click to toggle source

Sets the line of the Sass template on which this selector was declared. This also sets the line for all child selectors.

@param line [Integer] @return [Integer]

# File lib/sass/selector/abstract_sequence.rb, line 24
def line=(line)
  members.each {|m| m.line = line}
  @line = line
end
specificity() click to toggle source

Returns the specificity of the selector.

The base is given by {Sass::Selector::SPECIFICITY_BASE}. This can be a number or a range representing possible specificities.

@return [Integer, Range]

# File lib/sass/selector/abstract_sequence.rb, line 88
def specificity
  _specificity(members)
end
to_s(opts = {}) click to toggle source

Returns the selector string.

@param opts [Hash] rendering options. @option opts [Symbol] :style The css rendering style. @option placeholders [Boolean] :placeholders

Whether to include placeholder selectors. Defaults to `true`.

@return [String]

# File lib/sass/selector/abstract_sequence.rb, line 78
def to_s(opts = {})
  Sass::Util.abstract(self)
end

Protected Instance Methods

_specificity(arr) click to toggle source
# File lib/sass/selector/abstract_sequence.rb, line 94
def _specificity(arr)
  min = 0
  max = 0
  arr.each do |m|
    next if m.is_a?(String)
    spec = m.specificity
    if spec.is_a?(Range)
      min += spec.begin
      max += spec.end
    else
      min += spec
      max += spec
    end
  end
  min == max ? min : (min..max)
end