nanoc 4.10.0 → 4.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 046c9869b2f916776a4f0fe741916842cbbc68b584e11b606abac58b854a9f44
4
- data.tar.gz: aeb902ad7fca66c89b63d46e2e9e8508c08e1cc3cdeb8dcbf0c45698d8c6a905
3
+ metadata.gz: 780927fbc58c76e3906df40019201441f6675433afbd34222ae79e7daeb0f4f0
4
+ data.tar.gz: 0c62c92d07ef676a555a8cf7c680226048788ae6cab56bcdd82ab2227d091794
5
5
  SHA512:
6
- metadata.gz: 93124b5f9eab590c046853ef39aa1c58516a365f2f721e7f1de73a34c0c4916ea1c3331a6c5db5e218e5921b0ef77abb5b50f5caf832d832eb0cc328133d58a8
7
- data.tar.gz: f3c544d01d70da7ac4379311208fd57932ba26ca157b039fdda05d4c96f8c7f6fbe93a45376ad4bf4e2cf3c10e5c2e9a6157a8b729dd58006a675b9ffc3a48ce
6
+ metadata.gz: 11011bf293454e1c66b644ed12864e1a8c6ab72a18548e2f770048097918cc08c5f48410968cec0bcaff85cd14f052ff4c78fc2040f19fe75232e283f949fc6d
7
+ data.tar.gz: d6fbdaca866cf1b79b4bac978a1c09c3dbd36ad2b6a1d4d90e832f04b3e5133e7496e1e247bcafaff1b53baca9cf0cfd354eee69504757163115ed05c7910fd5
data/NEWS.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Nanoc news
2
2
 
3
+ ## 4.10.1 (2018-10-16)
4
+
5
+ Fixes:
6
+
7
+ * Made Nanoc no longer crash when the Sass gem is not available (#1371)
8
+
3
9
  ## 4.10.0 (2018-10-14)
4
10
 
5
11
  Features:
@@ -1,19 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nanoc::Filters
4
- Nanoc::Filter.define(:sass) do |content, params = {}|
5
- include Sass
6
- css(self, @item_rep, content, params)
7
- end
8
-
9
- Nanoc::Filter.define(:sass_sourcemap) do |content, params = {}|
10
- include Sass
11
- sourcemap(self, @item_rep, content, params)
12
- end
4
+ module SassCommon
5
+ REQUIRES = %w[sass nanoc/filters/sass/importer nanoc/filters/sass/functions].freeze
13
6
 
14
- require 'sass'
15
-
16
- module Sass
17
7
  def css(filter, rep, content, params)
18
8
  css, = render(filter, rep, content, params)
19
9
  css
@@ -27,7 +17,7 @@ module Nanoc::Filters
27
17
  private
28
18
 
29
19
  def render(filter, rep, content, params = {})
30
- importer = NanocSassImporter.new(filter)
20
+ importer = Nanoc::Filters::SassCommon::Importer.new(filter)
31
21
 
32
22
  options = params.merge(
33
23
  load_paths: [importer, *params[:load_paths]&.reject { |p| p.is_a?(String) && %r{^content/} =~ p }],
@@ -41,113 +31,27 @@ module Nanoc::Filters
41
31
  css, sourcemap = sourcemap_path ? engine.render_with_sourcemap(sourcemap_path) : engine.render
42
32
  [css, sourcemap&.to_json(css_uri: rep.path, type: rep.path.nil? ? :inline : :auto)]
43
33
  end
34
+ end
44
35
 
45
- # @api private
46
- class NanocSassImporter < ::Sass::Importers::Filesystem
47
- attr_reader :filter
48
-
49
- def initialize(filter)
50
- @filter = filter
51
- super('.')
52
- end
53
-
54
- def find_relative(name, base_identifier, options)
55
- base_raw_filename = filter.items[base_identifier].raw_filename
56
-
57
- # we can't resolve a relative filename from an in-memory item
58
- return unless base_raw_filename
59
-
60
- raw_filename, syntax = ::Sass::Util.destructure(find_real_file(File.dirname(base_raw_filename), name, options))
61
- return unless raw_filename
62
-
63
- item = raw_filename_to_item(raw_filename)
64
- # it doesn't make sense to import a file, from Nanoc's content if the corresponding item has been deleted
65
- raise "unable to map #{raw_filename} to any item" if item.nil?
66
-
67
- filter.depend_on([item])
68
-
69
- options[:syntax] = syntax
70
- options[:filename] = item.identifier.to_s
71
- options[:importer] = self
72
- ::Sass::Engine.new(item.raw_content, options)
73
- end
74
-
75
- def find(identifier, options)
76
- items = filter.items.find_all(identifier)
77
- return if items.empty?
78
-
79
- content = if items.size == 1
80
- items.first.compiled_content
81
- else
82
- items.map { |item| %(@import "#{item.identifier}";) }.join("\n")
83
- end
84
-
85
- options[:syntax] = :scss
86
- options[:filename] = identifier.to_s
87
- options[:importer] = self
88
- ::Sass::Engine.new(content, options)
89
- end
90
-
91
- def key(identifier, _options)
92
- [self.class.name + ':' + root, identifier.to_s]
93
- end
94
-
95
- def public_url(identifier, _sourcemap_directory)
96
- path = filter.items[identifier].path
97
- return path unless path.nil?
98
-
99
- raw_filename = filter.items[identifier].raw_filename
100
- return if raw_filename.nil?
101
-
102
- ::Sass::Util.file_uri_from_path(raw_filename)
103
- end
104
-
105
- def to_s
106
- 'Nanoc Sass Importer'
107
- end
108
-
109
- def self.raw_filename_to_item_map_for_config(config, items)
110
- @raw_filename_to_item_map ||= {}
111
- @raw_filename_to_item_map[config.object_id] ||=
112
- {}.tap do |map|
113
- items.each do |item|
114
- if item.raw_filename
115
- path = Pathname.new(item.raw_filename).realpath.to_s
116
- map[path] = item
117
- end
118
- end
119
- end
120
- end
36
+ class SassFilter < Nanoc::Filter
37
+ identifier :sass
121
38
 
122
- def raw_filename_to_item(filename)
123
- realpath = Pathname.new(filename).realpath.to_s
39
+ include SassCommon
40
+ requires(*SassCommon::REQUIRES)
124
41
 
125
- map = self.class.raw_filename_to_item_map_for_config(filter.config, filter.items)
126
- map[realpath]
127
- end
42
+ def run(content, params = {})
43
+ css(self, @item_rep, content, params)
128
44
  end
129
45
  end
130
46
 
131
- module ::Sass::Script::Functions
132
- def nanoc(string, params)
133
- assert_type string, :String
134
- assert_type params, :Hash
135
- result = options[:importer].filter.instance_eval(string.value)
136
- case result
137
- when TrueClass, FalseClass
138
- bool(result)
139
- when Array
140
- list(result, :comma)
141
- when Hash
142
- map(result)
143
- when nil
144
- null
145
- when Numeric
146
- number(result)
147
- else
148
- params['unquote'] ? unquoted_string(result) : quoted_string(result)
149
- end
47
+ class SassSourcemapFilter < Nanoc::Filter
48
+ identifier :sass_sourcemap
49
+
50
+ include SassCommon
51
+ requires(*SassCommon::REQUIRES)
52
+
53
+ def run(content, params = {})
54
+ sourcemap(self, @item_rep, content, params)
150
55
  end
151
- declare :nanoc, [:string], var_kwargs: true
152
56
  end
153
57
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ::Sass::Script::Functions
4
+ def nanoc(string, params)
5
+ assert_type string, :String
6
+ assert_type params, :Hash
7
+ result = options[:importer].filter.instance_eval(string.value)
8
+ case result
9
+ when TrueClass, FalseClass
10
+ bool(result)
11
+ when Array
12
+ list(result, :comma)
13
+ when Hash
14
+ map(result)
15
+ when nil
16
+ null
17
+ when Numeric
18
+ number(result)
19
+ else
20
+ params['unquote'] ? unquoted_string(result) : quoted_string(result)
21
+ end
22
+ end
23
+ declare :nanoc, [:string], var_kwargs: true
24
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nanoc::Filters::SassCommon
4
+ # @api private
5
+ class Importer < ::Sass::Importers::Filesystem
6
+ attr_reader :filter
7
+
8
+ def initialize(filter)
9
+ @filter = filter
10
+ super('.')
11
+ end
12
+
13
+ def find_relative(name, base_identifier, options)
14
+ base_raw_filename = filter.items[base_identifier].raw_filename
15
+
16
+ # we can't resolve a relative filename from an in-memory item
17
+ return unless base_raw_filename
18
+
19
+ raw_filename, syntax = ::Sass::Util.destructure(find_real_file(File.dirname(base_raw_filename), name, options))
20
+ return unless raw_filename
21
+
22
+ item = raw_filename_to_item(raw_filename)
23
+ # it doesn't make sense to import a file, from Nanoc's content if the corresponding item has been deleted
24
+ raise "unable to map #{raw_filename} to any item" if item.nil?
25
+
26
+ filter.depend_on([item])
27
+
28
+ options[:syntax] = syntax
29
+ options[:filename] = item.identifier.to_s
30
+ options[:importer] = self
31
+ ::Sass::Engine.new(item.raw_content, options)
32
+ end
33
+
34
+ def find(identifier, options)
35
+ items = filter.items.find_all(identifier)
36
+ return if items.empty?
37
+
38
+ content = if items.size == 1
39
+ items.first.compiled_content
40
+ else
41
+ items.map { |item| %(@import "#{item.identifier}";) }.join("\n")
42
+ end
43
+
44
+ options[:syntax] = :scss
45
+ options[:filename] = identifier.to_s
46
+ options[:importer] = self
47
+ ::Sass::Engine.new(content, options)
48
+ end
49
+
50
+ def key(identifier, _options)
51
+ [self.class.name + ':' + root, identifier.to_s]
52
+ end
53
+
54
+ def public_url(identifier, _sourcemap_directory)
55
+ path = filter.items[identifier].path
56
+ return path unless path.nil?
57
+
58
+ raw_filename = filter.items[identifier].raw_filename
59
+ return if raw_filename.nil?
60
+
61
+ ::Sass::Util.file_uri_from_path(raw_filename)
62
+ end
63
+
64
+ def to_s
65
+ 'Nanoc Sass Importer'
66
+ end
67
+
68
+ def self.raw_filename_to_item_map_for_config(config, items)
69
+ @raw_filename_to_item_map ||= {}
70
+ @raw_filename_to_item_map[config.object_id] ||=
71
+ {}.tap do |map|
72
+ items.each do |item|
73
+ if item.raw_filename
74
+ path = Pathname.new(item.raw_filename).realpath.to_s
75
+ map[path] = item
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ def raw_filename_to_item(filename)
82
+ realpath = Pathname.new(filename).realpath.to_s
83
+
84
+ map = self.class.raw_filename_to_item_map_for_config(filter.config, filter.items)
85
+ map[realpath]
86
+ end
87
+ end
88
+ end
data/lib/nanoc/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Nanoc
4
4
  # The current Nanoc version.
5
- VERSION = '4.10.0'
5
+ VERSION = '4.10.1'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.10.0
4
+ version: 4.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Defreyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-14 00:00:00.000000000 Z
11
+ date: 2018-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -401,6 +401,8 @@ files:
401
401
  - lib/nanoc/filters/relativize_paths.rb
402
402
  - lib/nanoc/filters/rubypants.rb
403
403
  - lib/nanoc/filters/sass.rb
404
+ - lib/nanoc/filters/sass/functions.rb
405
+ - lib/nanoc/filters/sass/importer.rb
404
406
  - lib/nanoc/filters/slim.rb
405
407
  - lib/nanoc/filters/typogruby.rb
406
408
  - lib/nanoc/filters/uglify_js.rb