# class Sass::BaseEnvironment

The abstract base class for lexical environments for SassScript.

### Attributes

caller[W]
content[W]
options[R]

The options passed to the Sass Engine.

selector[W]

### Public Class Methods

inherited_hash_accessor(name) click to toggle source

Note: when updating this, update sass/yard/inherited_hash.rb as well.

    # File lib/sass/environment.rb, line 9
    def inherited_hash_accessor(name)
      inherited_hash_reader(name)
      inherited_hash_writer(name)
    end

inherited_hash_reader(name) click to toggle source

    # File lib/sass/environment.rb, line 14
          def inherited_hash_reader(name)
            class_eval <<-RUBY, __FILE__, __LINE__ + 1
              def #{name}(name)
                _#{name}(name.tr('_', '-'))
              end

              def _#{name}(name)
                (@#{name}s && @#{name}s[name]) || @parent && @parent._#{name}(name)
              end
              protected :_#{name}

              def is_#{name}_global?(name)
                return !@parent if @#{name}s && @#{name}s.has_key?(name)
                @parent && @parent.is_#{name}_global?(name)
              end
            RUBY
          end

inherited_hash_writer(name) click to toggle source

    # File lib/sass/environment.rb, line 32
          def inherited_hash_writer(name)
            class_eval <<-RUBY, __FILE__, __LINE__ + 1
              def set_#{name}(name, value)
                name = name.tr('_', '-')
                @#{name}s[name] = value unless try_set_#{name}(name, value)
              end

              def try_set_#{name}(name, value)
                @#{name}s ||= {}
                if @#{name}s.include?(name)
                  @#{name}s[name] = value
                  true
                elsif @parent && !@parent.global?
                  @parent.try_set_#{name}(name, value)
                else
                  false
                end
              end
              protected :try_set_#{name}

              def set_local_#{name}(name, value)
                @#{name}s ||= {}
                @#{name}s[name.tr('_', '-')] = value
              end

              def set_global_#{name}(name, value)
                global_env.set_#{name}(name, value)
              end
            RUBY
          end

new(parent = nil, options = nil) click to toggle source

@param options [{Symbol => Object}] The options hash. See

    {file:SASS_REFERENCE.md#Options the Sass options documentation}.

@param parent [Environment] See {#parent}

    # File lib/sass/environment.rb, line 86
    def initialize(parent = nil, options = nil)
      @parent = parent
      @options = options || (parent && parent.options) || {}
      @stack = @parent.nil? ? Sass::Stack.new : nil
      @caller = nil
      @content = nil
      @filename = nil
      @functions = nil
      @mixins = nil
      @selector = nil
      @vars = nil
    end

### Public Instance Methods

caller() click to toggle source

The environment of the caller of this environment's mixin or function. @return {Environment?}

    # File lib/sass/environment.rb, line 108
    def caller
      @caller || (@parent && @parent.caller)
    end

content() click to toggle source

The content passed to this environment. This is naturally only set for mixin body environments with content passed in.

@return {[Array<Sass::Tree::Node>, Environment]?} The content nodes and

    the lexical environment of the content block.

    # File lib/sass/environment.rb, line 117
    def content
      @content || (@parent && @parent.content)
    end

global?() click to toggle source

Returns whether this is the global environment.

@return [Boolean]

    # File lib/sass/environment.rb, line 102
    def global?
      @parent.nil?
    end

global_env() click to toggle source

The top-level Environment object.

@return [Environment]

    # File lib/sass/environment.rb, line 133
    def global_env
      @global_env ||= global? ? self : @parent.global_env
    end

selector() click to toggle source

The selector for the current CSS rule, or nil if there is no current CSS rule.

@return [Selector::CommaSequence?] The current selector, with any

    nesting fully resolved.

    # File lib/sass/environment.rb, line 126
    def selector
      @selector || (@caller && @caller.selector) || (@parent && @parent.selector)
    end

stack() click to toggle source

The import/mixin stack.

@return [Sass::Stack]

    # File lib/sass/environment.rb, line 140
    def stack
      @stack || global_env.stack
    end