roger_sassc 0.4.0 → 1.0.0

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
  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