roger_sassc 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b60d9ab78717d99ca86d35f7b82b1ffc3449215f
4
- data.tar.gz: ef6e144662222e549bcca649fb7283bb2cdbdce1
3
+ metadata.gz: a5a3a241d0b52af346178cb0c34a601b43447388
4
+ data.tar.gz: 42613afcc506b5d318759ddcca4f354be8cf516b
5
5
  SHA512:
6
- metadata.gz: f6480795dc4bfc30e09e93ee3380b78379e8d99d67b2d4271d5574a3a741216dadca54fe7af9a8a92f74e17d40c5ea33a85ada8bc997ce18ef0429a174b092e7
7
- data.tar.gz: a51940be9fc2a9ee8da59767d8dd3bcf10457d283a85ac98c2ed99c5904e25df7157dba4c1938f9768220e3d3c0f647b1bb110668755b9291077e2fbb1bca423
6
+ metadata.gz: 266f120b1e519b5858da86f0f3051abb2f6d50604d3b6fb764b67bdae6c29268447ab2fe2d31d93280f8b5af0d90aae8006b447b7f78375eb588a0b8fdaa8ce1
7
+ data.tar.gz: 2234ca0a4beac1472867d0939bd597743e1fdb09fc84b6ddb1bb1827ca5008ec35a59dd8a5be258dfa791dfcaee3c72c247cd817e6cd648f107fc8c063b0713b
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## Version 1.0.0
4
+ * Update sassc
5
+ * Add sourcemap support
@@ -16,7 +16,9 @@ module RogerSassc
16
16
  @app = app
17
17
 
18
18
  defaults = {
19
- load_paths: RogerSassc.load_paths
19
+ load_paths: RogerSassc.load_paths,
20
+ source_map: true,
21
+ source_map_embed: true
20
22
  }
21
23
 
22
24
  @options = defaults.update(options)
@@ -27,28 +29,34 @@ module RogerSassc
27
29
  @options[:roger_html_path] = @project.html_path
28
30
 
29
31
  url = ::Rack::Utils.unescape(env["PATH_INFO"].to_s).sub(%r{^/}, "")
32
+ unless url.end_with?(".css") || url.end_with?(".css.map")
33
+ return @app.call(env)
34
+ end
30
35
 
31
36
  # Convert the url to an absolute path,
32
37
  # which is used to retrieve compile the scss
33
- if url.end_with?(".css") && scss_path = resolve_url(url)
34
- env["rack.errors"].puts "Invoking ruby-sassc for #{scss_path}"
35
-
36
- begin
37
- css = compile_scss(scss_path)
38
- respond(css)
39
- rescue ::SassC::SyntaxError,
40
- ::SassC::NotRenderedError,
41
- ::SassC::InvalidStyleError => sassc_error
42
- respond(debug_css(sassc_error))
43
- end
44
- else
45
- @app.call(env)
38
+ scss_path = resolve_url(url)
39
+
40
+ return @app.call(env) unless scss_path
41
+
42
+ env["rack.errors"].puts "Invoking ruby-sassc for #{scss_path}"
43
+ engine = create_scss_engine(scss_path)
44
+
45
+ begin
46
+ respond(engine, url.end_with?(".css.map"))
47
+ rescue ::SassC::SyntaxError,
48
+ ::SassC::NotRenderedError,
49
+ ::SassC::InvalidStyleError => sassc_error
50
+ respond_with_error(sassc_error)
46
51
  end
47
52
  end
48
53
 
49
54
  private
50
55
 
51
56
  def resolve_url(url)
57
+ # Make sure we strip off .map
58
+ url = url.gsub(/.map\Z/, "")
59
+
52
60
  # A .css file is requested in the browser
53
61
  url = url[0..-4] + "scss"
54
62
 
@@ -57,11 +65,16 @@ module RogerSassc
57
65
  resolver.url_to_path url, exact_match: true
58
66
  end
59
67
 
60
- def compile_scss(scss_path)
68
+ def create_scss_engine(scss_path)
61
69
  # Supply the filename for load path resolving
62
70
  @options[:filename] = scss_path.to_s
71
+ if @options[:source_map] || @options[:source_map_embed]
72
+ @options[:source_map_file] = scss_path.to_s + ".map"
73
+
74
+ @options[:source_map] = true
75
+ end
63
76
 
64
- ::SassC::Engine.new(File.read(scss_path), @options).render
77
+ ::SassC::Engine.new(File.read(scss_path), @options)
65
78
  end
66
79
 
67
80
  def debug_css(sassc_error)
@@ -87,12 +100,24 @@ module RogerSassc
87
100
  @resolver ||= Roger::Resolver.new(@project.html_path)
88
101
  end
89
102
 
90
- def respond(css)
103
+ def respond_with_error(err)
104
+ resp = ::Rack::Response.new do |res|
105
+ res.status = 200
106
+ res.headers["Content-Type"] = "text/css"
107
+ # last modified header
108
+ res.write debug_css(err)
109
+ end
110
+ resp.finish
111
+ end
112
+
113
+ def respond(engine, map = false)
114
+ css = engine.render
115
+
91
116
  resp = ::Rack::Response.new do |res|
92
117
  res.status = 200
93
118
  res.headers["Content-Type"] = "text/css"
94
119
  # last modified header
95
- res.write css
120
+ res.write map ? engine.source_map : css
96
121
  end
97
122
  resp.finish
98
123
  end
@@ -13,7 +13,7 @@ module RogerSassc
13
13
 
14
14
  if File.exist?(file)
15
15
  digest = Digest::SHA256.file(file).hexdigest
16
- finger_printed_path = "#{path}?v=#{digest}"
16
+ finger_printed_path = "#{path.value}?v=#{digest}"
17
17
  else
18
18
  finger_printed_path = path.value
19
19
  end
@@ -1,4 +1,4 @@
1
1
  # Version number
2
2
  module RogerSassc
3
- VERSION = "0.4.0"
3
+ VERSION = "1.0.0"
4
4
  end
data/roger_sassc.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "sassc", "~> 1.2.0"
20
+ spec.add_dependency "sassc", "~> 1.10.0"
21
21
  spec.add_dependency "roger", "~> 1.0"
22
22
  spec.add_dependency "rack"
23
23
 
@@ -1,8 +1,8 @@
1
1
  /*
2
- Error: invalid property name
2
+ Error: Invalid CSS after "...ckground: #fff;": expected "}", was ""
3
3
  on line 2 of test/fixtures/errors/syntax.scss
4
4
  >> background: #fff;
5
- -------------------^
5
+ --------------------^
6
6
 
7
7
 
8
8
  Load paths:
@@ -12,4 +12,4 @@ Load paths:
12
12
  body:before {
13
13
  white-space: pre;
14
14
  font-family: monospace;
15
- content: 'Error: invalid property name\A on line 2 of test/fixtures/errors/syntax.scss\A>> background: #fff;\A -------------------^\A'; }
15
+ content: 'Error: Invalid CSS after "...ckground: #fff;": expected "}", was ""\A on line 2 of test/fixtures/errors/syntax.scss\A>> background: #fff;\A --------------------^\A'; }
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "file": "general.css",
4
+ "sources": [
5
+ "general.scss",
6
+ "src/_variables.scss"
7
+ ],
8
+ "mappings": "AAEA,AACE,SADO,CACP,cAAc,CAAC;EACb,KAAK,ECJD,IAAI,GDKT",
9
+ "names": []
10
+ }
@@ -0,0 +1,4 @@
1
+ .selector .baby-selector {
2
+ color: #000; }
3
+
4
+ /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiZ2VuZXJhbC5jc3MiLAoJInNvdXJjZXMiOiBbCgkJImdlbmVyYWwuc2NzcyIsCgkJInNyYy9fdmFyaWFibGVzLnNjc3MiCgldLAoJIm1hcHBpbmdzIjogIkFBRUEsQUFDRSxTQURPLENBQ1AsY0FBYyxDQUFDO0VBQ2IsS0FBSyxFQ0pELElBQUksR0RLVCIsCgkibmFtZXMiOiBbXQp9 */
@@ -10,8 +10,16 @@ module RogerSassc
10
10
  include FixtureHelper
11
11
 
12
12
  def setup
13
+ setup_app(source_map: false, source_map_embed: false)
14
+ end
15
+
16
+ def teardown
17
+ @middleware.project.destroy
18
+ end
19
+
20
+ def setup_app(options = {})
13
21
  @app = proc { [200, {}, ["YAM"]] } # Yet another middleware
14
- @middleware = Middleware.new @app
22
+ @middleware = Middleware.new @app, options
15
23
 
16
24
  # Inject mock project
17
25
  @middleware.project = Roger::Testing::MockProject.new
@@ -22,10 +30,6 @@ module RogerSassc
22
30
  @request = Rack::MockRequest.new(@middleware)
23
31
  end
24
32
 
25
- def teardown
26
- @middleware.project.destroy
27
- end
28
-
29
33
  def test_middleware_can_be_called
30
34
  assert(@middleware.respond_to?(:call))
31
35
  end
@@ -43,7 +47,25 @@ module RogerSassc
43
47
  path = fixture_path "general.scss"
44
48
  expected_css = fixture "output.css"
45
49
  @middleware.resolver = mock_resolver("test/fixtures/general.scss", path)
46
- assert_equal @request.get("/test/fixtures/general.css").body, expected_css
50
+ assert_equal expected_css, @request.get("/test/fixtures/general.css").body
51
+ end
52
+
53
+ def test_response_with_source_map
54
+ setup_app(source_map: true)
55
+
56
+ path = fixture_path "general.scss"
57
+ expected_css = fixture "output.css.map"
58
+ @middleware.resolver = mock_resolver("test/fixtures/general.scss", path)
59
+ assert_equal expected_css, @request.get("/test/fixtures/general.css.map").body
60
+ end
61
+
62
+ def test_inline_source_map
63
+ setup_app(source_map: true)
64
+
65
+ path = fixture_path "general.scss"
66
+ expected_css = fixture "output_with_map.css"
67
+ @middleware.resolver = mock_resolver("test/fixtures/general.scss", path)
68
+ assert_equal expected_css, @request.get("/test/fixtures/general.css").body
47
69
  end
48
70
 
49
71
  def test_debug_syntax_error
metadata CHANGED
@@ -1,125 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roger_sassc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edwin van der Graaf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-20 00:00:00.000000000 Z
11
+ date: 2016-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sassc
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.0
19
+ version: 1.10.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.0
26
+ version: 1.10.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: roger
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rack
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 1.1.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: test-unit
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 3.1.2
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.1.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: simplecov
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: 0.10.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.10.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 0.31.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.31.0
125
125
  description:
@@ -129,10 +129,11 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
- - .gitignore
133
- - .hound.yml
134
- - .rubocop.yml
135
- - .travis.yml
132
+ - ".gitignore"
133
+ - ".hound.yml"
134
+ - ".rubocop.yml"
135
+ - ".travis.yml"
136
+ - CHANGELOG.md
136
137
  - Gemfile
137
138
  - LICENSE.txt
138
139
  - README.md
@@ -154,6 +155,8 @@ files:
154
155
  - test/fixtures/general.scss
155
156
  - test/fixtures/images/logo.svg
156
157
  - test/fixtures/output.css
158
+ - test/fixtures/output.css.map
159
+ - test/fixtures/output_with_map.css
157
160
  - test/fixtures/raise.scss
158
161
  - test/fixtures/src/_variables.scss
159
162
  - test/helpers/fixture_helper.rb
@@ -171,17 +174,17 @@ require_paths:
171
174
  - lib
172
175
  required_ruby_version: !ruby/object:Gem::Requirement
173
176
  requirements:
174
- - - '>='
177
+ - - ">="
175
178
  - !ruby/object:Gem::Version
176
179
  version: '0'
177
180
  required_rubygems_version: !ruby/object:Gem::Requirement
178
181
  requirements:
179
- - - '>='
182
+ - - ">="
180
183
  - !ruby/object:Gem::Version
181
184
  version: '0'
182
185
  requirements: []
183
186
  rubyforge_project:
184
- rubygems_version: 2.2.2
187
+ rubygems_version: 2.5.1
185
188
  signing_key:
186
189
  specification_version: 4
187
190
  summary: Sass plugin for Roger based on libsass
@@ -197,6 +200,8 @@ test_files:
197
200
  - test/fixtures/general.scss
198
201
  - test/fixtures/images/logo.svg
199
202
  - test/fixtures/output.css
203
+ - test/fixtures/output.css.map
204
+ - test/fixtures/output_with_map.css
200
205
  - test/fixtures/raise.scss
201
206
  - test/fixtures/src/_variables.scss
202
207
  - test/helpers/fixture_helper.rb