Class: Nanoc3::Filters::Sass

### Home Classes Methods

### In Files

- lib/nanoc3/filters/sass.rb

### Parent

Nanoc3::Filter

### Methods

- #run

### Files

- ChangeLog
- LICENSE

### Class/Module Index

Quicksearch

- Nanoc3
- Nanoc3::ArrayExtensions
- Nanoc3::CLI
- Nanoc3::CLI::Base
- Nanoc3::CLI::Commands
- Nanoc3::CLI::Commands::Autocompile
- Nanoc3::CLI::Commands::Compile
- Nanoc3::CLI::Commands::CreateItem
- Nanoc3::CLI::Commands::CreateLayout
- Nanoc3::CLI::Commands::CreateSite
- Nanoc3::CLI::Commands::Debug
- Nanoc3::CLI::Commands::Help
- Nanoc3::CLI::Commands::Info
- Nanoc3::CLI::Commands::Update
- Nanoc3::CLI::Commands::View
- Nanoc3::CLI::Logger
- Nanoc3::CodeSnippet
- Nanoc3::Compiler
- Nanoc3::CompilerDSL
- Nanoc3::Context
- Nanoc3::DataSource
- Nanoc3::DataSources
- Nanoc3::DataSources::Delicious
- Nanoc3::DataSources::Filesystem
- Nanoc3::DataSources::FilesystemUnified
- Nanoc3::DataSources::FilesystemVerbose
- Nanoc3::DataSources::LastFM
- Nanoc3::DataSources::Twitter
- Nanoc3::DependencyTracker
- Nanoc3::DirectedGraph
- Nanoc3::Errors
- Nanoc3::Errors::CannotDetermineFilter
- Nanoc3::Errors::CannotLayoutBinaryItem
- Nanoc3::Errors::CannotUseBinaryFilter
- Nanoc3::Errors::CannotUseTextualFilter
- Nanoc3::Errors::DataNotYetAvailable
- Nanoc3::Errors::Generic
- Nanoc3::Errors::NoMatchingCompilationRuleFound
- Nanoc3::Errors::NoMatchingRoutingRuleFound
- Nanoc3::Errors::NoRulesFileFound
- Nanoc3::Errors::RecursiveCompilation
- Nanoc3::Errors::UnknownDataSource
- Nanoc3::Errors::UnknownFilter
- Nanoc3::Errors::UnknownLayout
- Nanoc3::Errors::UnmetDependency
- Nanoc3::Extra
- Nanoc3::Extra::AutoCompiler
- Nanoc3::Extra::CHiCk
- Nanoc3::Extra::CHiCk::CacheController
- Nanoc3::Extra::CHiCk::Client
- Nanoc3::Extra::CHiCk::RackClient
- Nanoc3::Extra::Deployers
- Nanoc3::Extra::Deployers::Rsync
- Nanoc3::Extra::FileProxy
- Nanoc3::Extra::TimeExtensions
- Nanoc3::Extra::VCS
- Nanoc3::Extra::VCSes
- Nanoc3::Extra::VCSes::Bazaar
- Nanoc3::Extra::VCSes::Dummy
- Nanoc3::Extra::VCSes::Git
- Nanoc3::Extra::VCSes::Mercurial
- Nanoc3::Extra::VCSes::Subversion
- Nanoc3::Extra::Validators
- Nanoc3::Extra::Validators::Links
- Nanoc3::Extra::Validators::Links::EachPairEnumerator
- Nanoc3::Extra::Validators::W3C
- Nanoc3::Filter
- Nanoc3::Filters
- Nanoc3::Filters::BlueCloth
- Nanoc3::Filters::CodeRay
- Nanoc3::Filters::ColorizeSyntax
- Nanoc3::Filters::ERB
- Nanoc3::Filters::Erubis
- Nanoc3::Filters::Haml
- Nanoc3::Filters::Kramdown
- Nanoc3::Filters::Less
- Nanoc3::Filters::Markaby
- Nanoc3::Filters::Maruku
- Nanoc3::Filters::RDiscount
- Nanoc3::Filters::RDoc
- Nanoc3::Filters::Rainpress
- Nanoc3::Filters::RedCloth
- Nanoc3::Filters::RelativizePaths
- Nanoc3::Filters::RubyPants
- Nanoc3::Filters::Sass
- Nanoc3::HashExtensions
- Nanoc3::Helpers
- Nanoc3::Helpers::Blogging
- Nanoc3::Helpers::Breadcrumbs
- Nanoc3::Helpers::Capturing
- Nanoc3::Helpers::Filtering
- Nanoc3::Helpers::HTMLEscape
- Nanoc3::Helpers::LinkTo
- Nanoc3::Helpers::Rendering
- Nanoc3::Helpers::Tagging
- Nanoc3::Helpers::Text
- Nanoc3::Helpers::XMLSitemap
- Nanoc3::Item
- Nanoc3::ItemRep
- Nanoc3::Layout
- Nanoc3::NotificationCenter
- Nanoc3::PluginRegistry
- Nanoc3::PluginRegistry::PluginMethods
- Nanoc3::Rule
- Nanoc3::RuleContext
- Nanoc3::Site
- Nanoc3::StringExtensions
- Nanoc3::Tasks
- Nanoc3::Tasks::Clean
- Array
- Enumerable
- Hash
- Object
- OrderedHash
- String
- Time

No matching classes.

# Nanoc3::Filters::Sass

### Public Instance Methods

run(content, params={}) click to toggle source

Runs the content through [Sass](sass-lang.com/). Parameters passed to this filter will be passed on to Sass.

@param [String] content The content to filter

@return [String] The filtered content

    # File lib/nanoc3/filters/sass.rb, line 11
    def run(content, params={})
      require 'sass'

      # Add imported_filename read accessor to ImportNode
      # … but… but… nex3 said I could monkey patch it! :(
      methods = ::Sass::Tree::ImportNode.instance_methods
      if !methods.include?(:import_filename) && !methods.include?('import_filename')
        ::Sass::Tree::ImportNode.send(:attr_reader, :imported_filename)
      end

      # Get options
      options = params.dup
      sass_filename = options[:filename] || (@item && @item[:content_filename])
      options[:filename] ||= sass_filename

      # Build engine
      engine = ::Sass::Engine.new(content, options)

      # Get import nodes
      require 'set'
      imported_nodes = []
      unprocessed_nodes = Set.new([ engine.to_tree ])
      until unprocessed_nodes.empty?
        # Get an unprocessed node
        node = unprocessed_nodes.each { |n| break n }
        unprocessed_nodes.delete(node)

        # Add to list of import nodes if necessary
        imported_nodes << node if node.is_a?(::Sass::Tree::ImportNode)

        # Mark children of this node for processing
        node.children.each { |c| unprocessed_nodes << c }
      end

      # Get import paths
      import_paths = (options[:load_paths] || []).dup
      import_paths.unshift(File.dirname(sass_filename)) if sass_filename
      # Get imported filenames
      imported_filenames = imported_nodes.map do |node|
        ::Sass::Files.find_file_to_import(node.imported_filename, import_paths)
      end

      # Convert to items
      imported_items = imported_filenames.map do |filename|
        pathname = Pathname.new(filename)
        next unless pathname.file?
        normalized_filename = pathname.realpath
        @items.find { |i| i[:content_filename] && Pathname.new(i[:content_filename]).realpath == normalized_filename }
      end.compact

      # Require compilation of each item
      imported_items.each do |item|
        # Notify
        Nanoc3::NotificationCenter.post(:visit_started, item)
        Nanoc3::NotificationCenter.post(:visit_ended,   item)

        # Raise unmet dependency error if item is not yet compiled
        any_uncompiled_rep = item.reps.find { |r| !r.compiled? }
        raise Nanoc3::Errors::UnmetDependency.new(any_uncompiled_rep) if any_uncompiled_rep
      end

      # Done
      engine.render
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.