lib/sass/environment.rb in haml-edge-2.1.21 vs lib/sass/environment.rb in haml-edge-2.1.22
- old
+ new
@@ -1,48 +1,79 @@
module Sass
+ # The lexical environment for SassScript.
+ # This keeps track of variable and mixin definitions.
+ #
+ # A new environment is created for each level of Sass nesting.
+ # This allows variables to be lexically scoped.
+ # The new environment refers to the environment in the upper scope,
+ # so it has access to variables defined in enclosing scopes,
+ # but new variables are defined locally.
+ #
+ # Environment also keeps track of the {Engine} options
+ # so that they can be made available to {Sass::Script::Functions}.
class Environment
+ # The enclosing environment,
+ # or nil if this is the global environment.
+ #
+ # @return [Environment]
attr_reader :parent
attr_writer :options
+ # @param parent [Environment] See \{#parent}
def initialize(parent = nil)
@vars = {}
@mixins = {}
@parent = parent
set_var("important", Script::String.new("!important")) unless @parent
end
+ # The options hash.
+ # See [the Sass options documentation](../Sass.html#sass_options).
+ #
+ # @return [Hash<Symbol, Object>]
def options
@options || (parent && parent.options) || {}
end
- def self.inherited_hash(name)
- class_eval <<RUBY, __FILE__, __LINE__ + 1
- def #{name}(name)
- @#{name}s[name] || @parent && @parent.#{name}(name)
- end
+ class << self
+ private
- def set_#{name}(name, value)
- @#{name}s[name] = value unless try_set_#{name}(name, value)
- end
+ # Note: when updating this,
+ # update haml/yard/inherited_hash.rb as well.
+ def inherited_hash(name)
+ class_eval <<RUBY, __FILE__, __LINE__ + 1
+ def #{name}(name)
+ @#{name}s[name] || @parent && @parent.#{name}(name)
+ end
- def try_set_#{name}(name, value)
- if @#{name}s.include?(name)
- @#{name}s[name] = value
- true
- elsif @parent
- @parent.try_set_#{name}(name, value)
- else
- false
+ def set_#{name}(name, value)
+ @#{name}s[name] = value unless try_set_#{name}(name, value)
end
- end
- protected :try_set_#{name}
- def set_local_#{name}(name, value)
- @#{name}s[name] = value
- end
+ def try_set_#{name}(name, value)
+ if @#{name}s.include?(name)
+ @#{name}s[name] = value
+ true
+ elsif @parent
+ @parent.try_set_#{name}(name, value)
+ else
+ false
+ end
+ end
+ protected :try_set_#{name}
+
+ def set_local_#{name}(name, value)
+ @#{name}s[name] = value
+ end
RUBY
+ end
end
+
+ # variable
+ # Script::Literal
inherited_hash :var
+ # mixin
+ # Engine::Mixin
inherited_hash :mixin
end
end