Class: Jekyll::Sass::SassCssGenerator

Inherits:
Generator
  • Object
show all
Defined in:
lib/jekyll-sass.rb

Instance Method Summary collapse

Instance Method Details

#generate(site) ⇒ Object

Jekyll will have already added the *.sass/scss files as Jekyll::StaticFile objects to the static_files array. Here we replace those with a SassCssFile object.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/jekyll-sass.rb', line 99

def generate(site)
  site.static_files.clone.each do |sf|
    if sf.path =~ /\.(scss|sass)$/
      site.static_files.delete(sf)
      name = File.basename(sf.path)
      destination = File.dirname(sf.path).sub(site.source, '')
      sass_file =  SassCssFile.new(site, site.source, destination, name)
      if sass_file.modified?
        SassCssFile.should_write_sass = true
      end
      site.static_files << sass_file
    end
  end
  supp_files = suppressed_sass_files(site)
  if suppressed_files_modified?(supp_files)
    SassCssFile.should_write_sass = true
    update_files_mtime(supp_files)
  end
end

#recursively_search_directories(site, matcher, dir = '') ⇒ Object

Recursively find files in site that match a regexp Does not ignore underscored files This could probably be shortened but we need to search like jekyll searches

site - The Jekyll site matcher - a regexp for the filename’s to find dir - the relative directory to recurse in

Returns an Array of absolute paths that match



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/jekyll-sass.rb', line 154

def recursively_search_directories(site, matcher, dir = '')
  base = File.join(site.source, dir)
  entries = Dir.chdir(base) { site.filter_entries(Dir.entries('.')) }
  found = [ ]
  entries.each do |f|
    f_abs = File.join(base, f)
    found << f_abs if matcher.match(f)
    if File.directory?(f_abs)
      f_rel = File.join(dir, f)
      if site.dest.sub(/\/$/, '') != f_abs
        more_found = recursively_search_directories(site, matcher, f_rel)
        found.concat(more_found)
      end
    end
  end
  return found
end

#suppressed_files_modified?(files) ⇒ Boolean

Returns:

  • (Boolean)


119
120
121
122
123
124
# File 'lib/jekyll-sass.rb', line 119

def suppressed_files_modified?(files)
  files.each do |file|
    return true if file.modified?
  end
  return false
end

#suppressed_sass_files(site) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
# File 'lib/jekyll-sass.rb', line 132

def suppressed_sass_files(site)
  sass_matcher = /^_.*\.(sass|scss)/
  suppressed_sass_paths = recursively_search_directories(site, sass_matcher)
  files = [ ]
  suppressed_sass_paths.each do |path|
    name = File.basename(path)
    destination = File.dirname(path).sub(site.source, '')
    files << SuppressedSassFile.new(site, site.source, destination, name)
  end
  return files
end

#update_files_mtime(files) ⇒ Object



126
127
128
129
130
# File 'lib/jekyll-sass.rb', line 126

def update_files_mtime(files)
  files.each do |file|
    file.update_mtime
  end
end