pax_global_header00006660000000000000000000000064132354307440014517gustar00rootroot0000000000000052 comment=767881d3a71846562b696353b58c84faeb81b72e jekyll-sass-converter-1.5.2/000077500000000000000000000000001323543074400157725ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/.gitignore000066400000000000000000000000751323543074400177640ustar00rootroot00000000000000.sass-cache *.gem docs/_site Gemfile.lock pkg rdoc spec/dest jekyll-sass-converter-1.5.2/.rspec000066400000000000000000000000251323543074400171040ustar00rootroot00000000000000--color --format doc jekyll-sass-converter-1.5.2/.rubocop.yml000066400000000000000000000003331323543074400202430ustar00rootroot00000000000000inherit_gem: jekyll: .rubocop.yml Metrics/LineLength: Exclude: - spec/**/* - jekyll-sass-converter.gemspec Metrics/BlockLength: Exclude: - spec/**/* Layout/IndentHeredoc: Exclude: - spec/**/* jekyll-sass-converter-1.5.2/.travis.yml000066400000000000000000000010101323543074400200730ustar00rootroot00000000000000sudo: false cache: bundler language: ruby rvm: - 2.5 - 2.4 - 2.3 - 2.2 matrix: include: - rvm: 2.4.2 env: JEKYLL_VERSION=3.6 env: matrix: - JEKYLL_VERSION=3.6 branches: only: - master before_install: - gem update --system script: script/cibuild notifications: irc: on_success: change on_failure: change channels: - irc.freenode.org#jekyll template: - '%{repository}#%{build_number} %{message} %{build_url}' email: on_success: never on_failure: change jekyll-sass-converter-1.5.2/Gemfile000066400000000000000000000002251323543074400172640ustar00rootroot00000000000000# frozen_string_literal: true source "https://rubygems.org" gemspec gem "jekyll", ENV["JEKYLL_VERSION"] ? "~> #{ENV["JEKYLL_VERSION"]}" : ">= 2.0" jekyll-sass-converter-1.5.2/History.markdown000066400000000000000000000034121323543074400211770ustar00rootroot00000000000000## 1.5.2 / 2017-02-03 ### Development Fixes * Test against Ruby 2.5 (#68) ## 1.5.1 / 2017-12-02 ### Minor * Security: Bump Rubocop to 0.51 ### Development Fixes * Drop support for Jekyll 2.x and Ruby 2.0 (#62) * Inherit Jekyll's rubocop config for consistency (#61) * Define path with __dir__ (#60) * Fix script/release ## 1.5.0 / 2016-11-14 * Allow `load_paths` in safe mode with sanitization (#50) * SCSS converter: expand @config["source"] to be "safer". (#55) * Match Ruby versions with jekyll/jekyll (#46) * Don't test Jekyll 2.5 against Ruby 2.3. (#52) ## 1.4.0 / 2015-12-25 ### Minor Enhancements * Bump Sass to v3.4 and above. (#40) * Strip byte order mark from generated compressed Sass/SCSS (#39) * Strip BOM by default, but don't add in the `@charset` by default (#42) ### Development Fixes * Add Jekyll 2 & 3 to test matrix (#41) ## 1.3.0 / 2014-12-07 ### Minor Enhancements * Include line number in syntax error message (#26) * Raise a `Jekyll::Converters::Scss::SyntaxError` instead of just a `StandardError` (#29) ### Development Fixes * Fix typo in SCSS converter spec filename (#27) * Add tests for custom syntax error handling (#29) ## 1.2.1 / 2014-08-30 * Only include something in the sass load path if it exists (#23) ## 1.2.0 / 2014-07-31 ### Minor Enhancements * Allow user to specify style in safe mode. (#16) ### Development Fixes * Only include the `lib/` files in the gem. (#17) ## 1.1.0 / 2014-07-29 ### Minor Enhancements * Implement custom load paths (#14) * Lock down sass configuration when in safe mode. (#15) ## 1.0.0 / 2014-05-06 * Birthday! * Don't use core extensions (#2) * Allow users to set style of outputted CSS (#4) * Determine input syntax based on file extension (#9) jekyll-sass-converter-1.5.2/LICENSE.txt000066400000000000000000000021401323543074400176120ustar00rootroot00000000000000Copyright (c) 2014-present Parker Moore and the jekyll-sass-converter contributors MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. jekyll-sass-converter-1.5.2/README.md000066400000000000000000000020171323543074400172510ustar00rootroot00000000000000# Jekyll Sass Converter Let Jekyll build your Sass and SCSS! [![Build Status](https://travis-ci.org/jekyll/jekyll-sass-converter.svg?branch=master)](https://travis-ci.org/jekyll/jekyll-sass-converter) ## Installation **Jekyll Sass Converter requires Jekyll 2.0.0 or greater and is bundled with Jekyll so you don't need to install it if you're already using Jekyll.** Add this line to your application's Gemfile: gem 'jekyll-sass-converter' And then execute: $ bundle Or install it yourself as: $ gem install jekyll-sass-converter ## Usage Jekyll Sass Converter comes bundled with Jekyll 2.0.0 and greater. For more information about usage, visit the [Jekyll Assets Documentation page](http://jekyllrb.com/docs/assets/). ## Contributing 1. Fork it ( http://github.com/jekyll/jekyll-sass-converter/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request jekyll-sass-converter-1.5.2/Rakefile000066400000000000000000000000731323543074400174370ustar00rootroot00000000000000# frozen_string_literal: true require "bundler/gem_tasks" jekyll-sass-converter-1.5.2/docs/000077500000000000000000000000001323543074400167225ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/docs/README.md000066400000000000000000000016071323543074400202050ustar00rootroot00000000000000--- layout: default --- # This is an example site for Sass integration in Jekyll You have two kinds of Sass files: 1. Main files, which you wish to be output as CSS files 2. Partials, which are used by main files in `@import` statements Main files are like pages – they go where you want them to be output, and they contain the YAML front matter (`---` lines) at the top. Partials are like hidden Jekyll data, so they go in an underscored directory, which defaults to `_sass`. You site might look like this: . | - _sass | - _typography.scss | - _layout.scss | - _colors.scss | - stylesheets | - screen.scss | - print.scss And so on. The output, in your `_site` directory, would look like this: . | - stylesheets | - screen.css | - print.css Boom! Now you have just your SCSS/Sass converted over to CSS with all the proper inputs. jekyll-sass-converter-1.5.2/docs/_config.yml000066400000000000000000000001151323543074400210460ustar00rootroot00000000000000sass: style: compact # possible values: nested expanded compact compressed jekyll-sass-converter-1.5.2/docs/_layouts/000077500000000000000000000000001323543074400205615ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/docs/_layouts/default.html000066400000000000000000000004031323543074400230700ustar00rootroot00000000000000 Sass Example Site
{{ content }}
jekyll-sass-converter-1.5.2/docs/_sass/000077500000000000000000000000001323543074400200325ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/docs/_sass/_typography.scss000066400000000000000000000011441323543074400232740ustar00rootroot00000000000000// This is a partial. // It lies in /_sass, just waiting to be imported. // It does not contain the YAML front matter and has no corresponding output file in the built site. body { font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; font-size: 18px; line-height: 1.5; color: #24292e; background-color: #fff; } a { color: #0366d6; } code, pre { font-family: Menlo, Consolas, "Consolas for Powerline", "Courier New", Courier, monospace; background-color: #2b2b2b; color: #fff; padding: 0.25em } jekyll-sass-converter-1.5.2/docs/assets/000077500000000000000000000000001323543074400202245ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/docs/assets/css/000077500000000000000000000000001323543074400210145ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/docs/assets/css/main.scss000066400000000000000000000003201323543074400226300ustar00rootroot00000000000000--- # this ensures Jekyll reads the file to be transformed into CSS later # only Main files contain this front matter, not partials. --- @import "typography"; .content { width: 45rem; margin: 0 auto; } jekyll-sass-converter-1.5.2/docs/index.md000066400000000000000000000017161323543074400203600ustar00rootroot00000000000000--- layout: default --- # This is an example site for Sass integration in Jekyll You have two kinds of Sass files: 1. Main files, which you wish to be output as CSS files 2. Partials, which are used by main files in `@import` statements Main files are like pages – they go where you want them to be output, and they contain the YAML front matter (`---` lines) at the top. Partials are like hidden Jekyll data, so they go in an underscored directory, which defaults to `_sass`. You site might look like this: | - _sass | - _typography.scss | - _layout.scss | - _colors.scss | - assets/css | - main.scss | - print.scss And so on. The output, in your `_site` directory, would look like this: | - assets/css | - main.css | - print.css Boom! Now you have just your SCSS/Sass converted over to CSS with all the proper inputs. See also [assets section in Jekyll's documentation](https://jekyllrb.com/docs/assets/). jekyll-sass-converter-1.5.2/jekyll-sass-converter.gemspec000066400000000000000000000016621323543074400236120ustar00rootroot00000000000000# frozen_string_literal: true lib = File.expand_path("lib", __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require "jekyll-sass-converter/version" Gem::Specification.new do |spec| spec.name = "jekyll-sass-converter" spec.version = JekyllSassConverter::VERSION spec.authors = ["Parker Moore"] spec.email = ["parkrmoore@gmail.com"] spec.summary = "A basic Sass converter for Jekyll." spec.homepage = "https://github.com/jekyll/jekyll-sass-converter" spec.license = "MIT" spec.files = `git ls-files -z`.split("\x0").grep(%r!^lib/!) spec.require_paths = ["lib"] spec.add_runtime_dependency "sass", "~> 3.4" spec.add_development_dependency "bundler", "~> 1.5" spec.add_development_dependency "jekyll", ">= 2.0" spec.add_development_dependency "rake" spec.add_development_dependency "rspec" spec.add_development_dependency "rubocop", "0.51" end jekyll-sass-converter-1.5.2/lib/000077500000000000000000000000001323543074400165405ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/lib/jekyll-sass-converter.rb000066400000000000000000000002511323543074400233310ustar00rootroot00000000000000# frozen_string_literal: true require "jekyll-sass-converter/version" require "jekyll/converters/scss" require "jekyll/converters/sass" module JekyllSassConverter end jekyll-sass-converter-1.5.2/lib/jekyll-sass-converter/000077500000000000000000000000001323543074400230065ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/lib/jekyll-sass-converter/version.rb000066400000000000000000000001311323543074400250130ustar00rootroot00000000000000# frozen_string_literal: true module JekyllSassConverter VERSION = "1.5.2".freeze end jekyll-sass-converter-1.5.2/lib/jekyll/000077500000000000000000000000001323543074400200325ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/lib/jekyll/converters/000077500000000000000000000000001323543074400222245ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/lib/jekyll/converters/sass.rb000066400000000000000000000004761323543074400235310ustar00rootroot00000000000000# frozen_string_literal: true require "sass" require "jekyll/utils" require "jekyll/converters/scss" module Jekyll module Converters class Sass < Scss safe true priority :low def matches(ext) ext =~ %r!^\.sass$!i end def syntax :sass end end end end jekyll-sass-converter-1.5.2/lib/jekyll/converters/scss.rb000066400000000000000000000063721323543074400235340ustar00rootroot00000000000000# frozen_string_literal: true require "sass" require "jekyll/utils" module Jekyll module Converters class Scss < Converter BYTE_ORDER_MARK = %r!^\xEF\xBB\xBF! SyntaxError = Class.new(ArgumentError) safe true priority :low ALLOWED_STYLES = %w(nested expanded compact compressed).freeze def matches(ext) ext =~ %r!^\.scss$!i end def output_ext(_ext) ".css" end def safe? !!@config["safe"] end def jekyll_sass_configuration options = @config["sass"] || {} unless options["style"].nil? options["style"] = options["style"].to_s.gsub(%r!\A:!, "").to_sym end options end def sass_build_configuration_options(overrides) if safe? { :load_paths => sass_load_paths, :syntax => syntax, :style => sass_style, :cache => false, } else Jekyll::Utils.symbolize_hash_keys( Jekyll::Utils.deep_merge_hashes( jekyll_sass_configuration, overrides ) ) end end def syntax :scss end def sass_dir return "_sass" if jekyll_sass_configuration["sass_dir"].to_s.empty? jekyll_sass_configuration["sass_dir"] end def sass_style style = jekyll_sass_configuration.fetch("style", :compact) ALLOWED_STYLES.include?(style.to_s) ? style.to_sym : :compact end def user_sass_load_paths Array(jekyll_sass_configuration["load_paths"]) end def sass_dir_relative_to_site_source Jekyll.sanitized_path(site_source, sass_dir) end def sass_load_paths paths = user_sass_load_paths + [sass_dir_relative_to_site_source] if safe? # Sanitize paths to prevent any attack vectors (.e.g. `/**/*`) paths.map! { |path| Jekyll.sanitized_path(site_source, path) } end # Expand file globs (e.g. `node_modules/*/node_modules` ) Dir.chdir(site_source) do paths = paths.map { |path| Dir.glob(path) }.flatten.uniq paths.map! do |path| if safe? # Sanitize again in case globbing was able to do something crazy. Jekyll.sanitized_path(site_source, path) else File.expand_path(path) end end end paths.select { |path| File.directory?(path) } end def allow_caching? !safe? end def add_charset? !!jekyll_sass_configuration["add_charset"] end def sass_configs sass_build_configuration_options({ "syntax" => syntax, "cache" => allow_caching?, "load_paths" => sass_load_paths, }) end def convert(content) output = ::Sass.compile(content, sass_configs) replacement = add_charset? ? '@charset "UTF-8";' : "" output.sub(BYTE_ORDER_MARK, replacement) rescue ::Sass::SyntaxError => e raise SyntaxError, "#{e} on line #{e.sass_line}" end private def site_source @site_source ||= File.expand_path(@config["source"]).freeze end end end end jekyll-sass-converter-1.5.2/script/000077500000000000000000000000001323543074400172765ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/script/bootstrap000077500000000000000000000000631323543074400212400ustar00rootroot00000000000000#! /bin/bash bundle install -j8 || bundle install jekyll-sass-converter-1.5.2/script/cibuild000077500000000000000000000000311323543074400206310ustar00rootroot00000000000000#! /bin/bash script/test jekyll-sass-converter-1.5.2/script/release000077500000000000000000000001271323543074400206440ustar00rootroot00000000000000#! /bin/bash # Tag and push a release. set -e script/cibuild bundle exec rake release jekyll-sass-converter-1.5.2/script/spec000077700000000000000000000000001323543074400210502testustar00rootroot00000000000000jekyll-sass-converter-1.5.2/script/test000077500000000000000000000000411323543074400201760ustar00rootroot00000000000000#!/bin/bash bundle exec rspec $@ jekyll-sass-converter-1.5.2/spec/000077500000000000000000000000001323543074400167245ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/other_sass_library/000077500000000000000000000000001323543074400226225ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/other_sass_library/_sass/000077500000000000000000000000001323543074400237325ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/other_sass_library/_sass/_color.scss000066400000000000000000000000301323543074400260750ustar00rootroot00000000000000a { color: #999999; } jekyll-sass-converter-1.5.2/spec/other_sass_library/css/000077500000000000000000000000001323543074400234125ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/other_sass_library/css/main.scss000066400000000000000000000000321323543074400252260ustar00rootroot00000000000000--- --- @import "color"; jekyll-sass-converter-1.5.2/spec/sass_converter_spec.rb000066400000000000000000000037521323543074400233320ustar00rootroot00000000000000# frozen_string_literal: true require "spec_helper" describe(Jekyll::Converters::Sass) do let(:site) do Jekyll::Site.new(site_configuration) end let(:content) do <<-SASS // tl;dr some sass $font-stack: Helvetica, sans-serif body font-family: $font-stack font-color: fuschia SASS end let(:css_output) do <<-CSS body {\n font-family: Helvetica, sans-serif;\n font-color: fuschia; } CSS end let(:invalid_content) do <<-SASS font-family: $font-stack; SASS end def compressed(content) content.gsub(%r!\s+!, "").gsub(%r!;}!, "}") + "\n" end def converter(overrides = {}) Jekyll::Converters::Sass.new(site_configuration({ "sass" => overrides })) end context "matching file extensions" do it "does not match .scss files" do expect(converter.matches(".scss")).to be_falsey end it "matches .sass files" do expect(converter.matches(".sass")).to be_truthy end end context "converting sass" do it "produces CSS" do expect(converter.convert(content)).to eql(compressed(css_output)) end it "includes the syntax error line in the syntax error message" do error_message = "Invalid CSS after \"$font-stack\": expected expression (e.g. 1px, bold), was \";\" on line 1" expect do converter.convert(invalid_content) end.to raise_error(Jekyll::Converters::Scss::SyntaxError, error_message) end it "removes byte order mark from compressed Sass" do result = converter({ "style" => :compressed }).convert("a\n content: \"\uF015\"") expect(result).to eql("a{content:\"\uF015\"}\n") expect(result.bytes.to_a[0..2]).not_to eql([0xEF, 0xBB, 0xBF]) end it "does not include the charset if asked not to" do result = converter({ "style" => :compressed, "add_charset" => true }).convert("a\n content: \"\uF015\"") expect(result).to eql("@charset \"UTF-8\";a{content:\"\uF015\"}\n") expect(result.bytes.to_a[0..2]).not_to eql([0xEF, 0xBB, 0xBF]) end end end jekyll-sass-converter-1.5.2/spec/scss_converter_spec.rb000066400000000000000000000205041323543074400233260ustar00rootroot00000000000000# frozen_string_literal: true require "spec_helper" require "tmpdir" describe(Jekyll::Converters::Scss) do let(:site) do Jekyll::Site.new(site_configuration) end let(:content) do <<-SCSS $font-stack: Helvetica, sans-serif; body { font-family: $font-stack; font-color: fuschia; } SCSS end let(:css_output) do <<-CSS body {\n font-family: Helvetica, sans-serif;\n font-color: fuschia; } CSS end let(:invalid_content) do <<-SCSS $font-stack: Helvetica body { font-family: $font-stack; SCSS end def compressed(content) content.gsub(%r!\s+!, "").gsub(%r!;}!, "}") + "\n" end def converter(overrides = {}) Jekyll::Converters::Scss.new(site_configuration({ "sass" => overrides })) end context "matching file extensions" do it "matches .scss files" do expect(converter.matches(".scss")).to be_truthy end it "does not match .sass files" do expect(converter.matches(".sass")).to be_falsey end end context "determining the output file extension" do it "always outputs the .css file extension" do expect(converter.output_ext(".always-css")).to eql(".css") end end context "when building configurations" do it "allow caching in unsafe mode" do expect(converter.sass_configs[:cache]).to be_truthy end it "set the load paths to the _sass dir relative to site source" do expect(converter.sass_configs[:load_paths]).to eql([source_dir("_sass")]) end it "allow for other styles" do expect(converter({ "style" => :compressed }).sass_configs[:style]).to eql(:compressed) end context "when specifying sass dirs" do context "when the sass dir exists" do it "allow the user to specify a different sass dir" do FileUtils.mkdir(source_dir("_scss")) expect(converter({ "sass_dir" => "_scss" }).sass_configs[:load_paths]).to eql([source_dir("_scss")]) FileUtils.rmdir(source_dir("_scss")) end it "not allow sass_dirs outside of site source" do expect( converter({ "sass_dir" => "/etc/passwd" }).sass_dir_relative_to_site_source ).to eql(source_dir("etc/passwd")) end end end context "in safe mode" do let(:verter) do Jekyll::Converters::Scss.new(site.config.merge({ "sass" => {}, "safe" => true, })) end it "does not allow caching" do expect(verter.sass_configs[:cache]).to be_falsey end it "forces load_paths to be just the local load path" do expect(verter.sass_configs[:load_paths]).to eql([source_dir("_sass")]) end it "allows the user to specify the style" do allow(verter).to receive(:sass_style).and_return(:compressed) expect(verter.sass_configs[:style]).to eql(:compressed) end it "defaults style to :compact" do expect(verter.sass_configs[:style]).to eql(:compact) end it "only contains :syntax, :cache, :style, and :load_paths keys" do expect(verter.sass_configs.keys).to eql([:load_paths, :syntax, :style, :cache]) end end end context "converting SCSS" do it "produces CSS" do expect(converter.convert(content)).to eql(compressed(css_output)) end it "includes the syntax error line in the syntax error message" do error_message = 'Invalid CSS after "body ": expected selector or at-rule, was "{" on line 2' expect do converter.convert(invalid_content) end.to raise_error(Jekyll::Converters::Scss::SyntaxError, error_message) end it "removes byte order mark from compressed SCSS" do result = converter({ "style" => :compressed }).convert("a{content:\"\uF015\"}") expect(result).to eql("a{content:\"\uF015\"}\n") expect(result.bytes.to_a[0..2]).not_to eql([0xEF, 0xBB, 0xBF]) end it "does not include the charset unless asked to" do result = converter({ "style" => :compressed, "add_charset" => true }).convert("a{content:\"\uF015\"}") expect(result).to eql("@charset \"UTF-8\";a{content:\"\uF015\"}\n") expect(result.bytes.to_a[0..2]).not_to eql([0xEF, 0xBB, 0xBF]) end end context "importing partials" do let(:test_css_file) { dest_dir("css/main.css") } before(:each) { site.process } it "outputs the CSS file" do expect(File.exist?(test_css_file)).to be_truthy end it "imports SCSS partial" do expect(File.read(test_css_file)).to eql(compressed(".half {\n width: 50%; }\n")) end it "uses a compressed style" do instance = scss_converter_instance(site) expect(instance.jekyll_sass_configuration).to eql({ "style" => :compressed }) expect(instance.sass_configs[:style]).to eql(:compressed) end end context "importing from external libraries" do let(:external_library) { source_dir("bower_components/jquery") } let(:verter) { scss_converter_instance(site) } let(:test_css_file) { dest_dir("css", "main.css") } context "unsafe mode" do let(:site) do Jekyll::Site.new(site_configuration.merge({ "source" => sass_lib, "sass" => { "load_paths" => external_library, }, })) end before(:each) do FileUtils.mkdir_p(external_library) unless File.directory?(external_library) end after(:each) do FileUtils.rmdir(external_library) if File.directory?(external_library) end it "recognizes the new load path" do expect(verter.sass_load_paths).to include(external_library) end it "ensures the sass_dir is still in the load path" do expect(verter.sass_load_paths).to include(sass_lib("_sass")) end it "brings in the grid partial" do site.process expect(File.read(test_css_file)).to eql("a {\n color: #999999; }\n") end context "with the sass_dir specified twice" do let(:site) do Jekyll::Site.new(site_configuration.merge({ "source" => sass_lib, "sass" => { "load_paths" => [ external_library, sass_lib("_sass"), ], }, })) end it "ensures the sass_dir only occurrs once in the load path" do expect(verter.sass_load_paths).to eql([external_library, sass_lib("_sass")]) end end end context "safe mode" do let(:site) do Jekyll::Site.new(site_configuration.merge({ "safe" => true, "source" => sass_lib, "sass" => { "load_paths" => external_library, }, })) end it "ignores the new load path" do expect(verter.sass_load_paths).not_to include(external_library) end it "ensures the sass_dir is the entire load path" do expect(verter.sass_load_paths).to eql([sass_lib("_sass")]) end end end context "importing from internal libraries" do let(:internal_library) { source_dir("bower_components/jquery") } let(:converter) { scss_converter_instance(site) } before(:each) do FileUtils.mkdir_p(internal_library) unless File.directory?(internal_library) end after(:each) do FileUtils.rmdir(internal_library) if File.directory?(internal_library) end context "unsafe mode" do let(:site) do Jekyll::Site.new(site_configuration.merge({ "sass" => { "load_paths" => ["bower_components/*"], }, })) end it "expands globs" do expect(converter.sass_load_paths).to include(internal_library) end end context "safe mode" do let(:site) do Jekyll::Site.new(site_configuration.merge({ "safe" => true, "sass" => { "load_paths" => [ "bower_components/*", Dir.tmpdir, "../..", ], }, })) end it "allows local load paths" do expect(converter.sass_load_paths).to include(internal_library) end it "ignores external load paths" do expect(converter.sass_load_paths).not_to include(Dir.tmpdir) end it "does not allow traversing outside source directory" do converter.sass_load_paths.each do |path| expect(path).to include(source_dir) expect(path).not_to include("..") end end end end end jekyll-sass-converter-1.5.2/spec/source/000077500000000000000000000000001323543074400202245ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/source/_config.yml000066400000000000000000000000561323543074400223540ustar00rootroot00000000000000sass: style: :compressed highlighter: rouge jekyll-sass-converter-1.5.2/spec/source/_sass/000077500000000000000000000000001323543074400213345ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/source/_sass/_color.scss000066400000000000000000000000421323543074400235020ustar00rootroot00000000000000$black: #999; a { color: $black; }jekyll-sass-converter-1.5.2/spec/source/_sass/_grid.scss000066400000000000000000000000251323543074400233120ustar00rootroot00000000000000.half { width: 50%; }jekyll-sass-converter-1.5.2/spec/source/css/000077500000000000000000000000001323543074400210145ustar00rootroot00000000000000jekyll-sass-converter-1.5.2/spec/source/css/main.scss000066400000000000000000000000301323543074400226260ustar00rootroot00000000000000--- --- @import "grid";jekyll-sass-converter-1.5.2/spec/spec_helper.rb000066400000000000000000000022131323543074400215400ustar00rootroot00000000000000# frozen_string_literal: true require "fileutils" require "jekyll" lib = File.expand_path("lib", __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require "jekyll-sass-converter" Jekyll.logger.log_level = :error RSpec.configure do |config| config.run_all_when_everything_filtered = true config.filter_run :focus config.order = "random" SOURCE_DIR = File.expand_path("source", __dir__) DEST_DIR = File.expand_path("dest", __dir__) SASS_LIB_DIR = File.expand_path("other_sass_library", __dir__) FileUtils.rm_rf(DEST_DIR) FileUtils.mkdir_p(DEST_DIR) def source_dir(*files) File.join(SOURCE_DIR, *files) end def dest_dir(*files) File.join(DEST_DIR, *files) end def sass_lib(*files) File.join(SASS_LIB_DIR, *files) end def site_configuration(overrides = {}) Jekyll.configuration(overrides.merge({ "source" => source_dir, "destination" => dest_dir, })) end def scss_converter_instance(site) if Jekyll::VERSION >= "3.0" site.find_converter_instance(Jekyll::Converters::Scss) else site.getConverterImpl(Jekyll::Converters::Scss) end end end