Class: Sass::BaseEnvironment

Inherits:
Object
  • Object
show all
Defined in:
lib/sass/environment.rb

Overview

The abstract base class for lexical environments for SassScript.

Direct Known Subclasses

Environment, ReadOnlyEnvironment

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil, options = nil) ⇒ BaseEnvironment

Returns a new instance of BaseEnvironment

Parameters:


86
87
88
89
90
# File 'lib/sass/environment.rb', line 86

def initialize(parent = nil, options = nil)
  @parent = parent
  @options = options || (parent && parent.options) || {}
  @stack = Sass::Stack.new if @parent.nil?
end

Instance Attribute Details

#callerEnvironment?

The environment of the caller of this environment's mixin or function.

Returns:


101
102
103
# File 'lib/sass/environment.rb', line 101

def caller
  @caller || (@parent && @parent.caller)
end

#content[Array<Sass::Tree::Node>, Environment]?

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

Returns:


110
111
112
# File 'lib/sass/environment.rb', line 110

def content
  @content || (@parent && @parent.content)
end

#options (readonly)

The options passed to the Sass Engine.


65
66
67
# File 'lib/sass/environment.rb', line 65

def options
  @options
end

#selectorSelector::CommaSequence?

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

Returns:


119
120
121
# File 'lib/sass/environment.rb', line 119

def selector
  @selector || (@caller && @caller.selector) || (@parent && @parent.selector)
end

Class Method Details

.inherited_hash_accessor(name)

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


9
10
11
12
# 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)


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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 [email protected] if @#{name}s && @#{name}s.has_key?(name)
      @parent && @parent.is_#{name}_global?(name)
    end
  RUBY
end

.inherited_hash_writer(name)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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 && [email protected]?
        @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

Instance Method Details

#global?Boolean

Returns whether this is the global environment.

Returns:

  • (Boolean)

95
96
97
# File 'lib/sass/environment.rb', line 95

def global?
  @parent.nil?
end

#global_envEnvironment

The top-level Environment object.

Returns:


126
127
128
# File 'lib/sass/environment.rb', line 126

def global_env
  @global_env ||= global? ? self : @parent.global_env
end

#stackSass::Stack

The import/mixin stack.

Returns:


133
134
135
# File 'lib/sass/environment.rb', line 133

def stack
  @stack || global_env.stack
end