rack-sassc 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a2b6576825c66fc983efbdb31c7c9f140f6b6d75bfcdf7b5b4ca05f98ccccbe8
4
+ data.tar.gz: fc2728ba84d1ea93577ed8e40da1492d84541fb83d35edf9bf76769094aa2ec5
5
+ SHA512:
6
+ metadata.gz: 44aa927dc2e90882201445447589ab5df67c538c212ca2777dd72f604e933bc0be7e539f1f33c57d1b06bc0153145a074ff07ea93094f8144e8dcf2c22c1f36f
7
+ data.tar.gz: 29ce04609231b501f4028a7c53c93af24793b843ea6692f489e6e4a07e7f844507a48c8245b1f4976f258e449858ad9fa7d2aa90008c5cce24e4834a9d0b9dbf
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .DS_STORE
2
+ *.swp
3
+ .ruby-version
4
+ pkg/
5
+ Gemfile.lock
6
+ *.gem
7
+ .bundle/
8
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2019 Mickael Riga
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
20
+
data/README.md ADDED
@@ -0,0 +1,131 @@
1
+ Rack::SassC
2
+ ===========
3
+
4
+ Rack middleware for processing sass/scss files. The current version has many
5
+ limitations but feel free to send pull requests if you find a bug or if you wish
6
+ to improve the functionnalities.
7
+
8
+ The current behaviour implies these limitations:
9
+
10
+ The files are processed each time they are requested. Since by default it does
11
+ it only when not in production, the speed penalty is kind of acceptable. But I
12
+ intend to improve it and use modification time.
13
+
14
+ The location of the public directory and directory names for CSS and SCSS are
15
+ editable, but both are assumed to be directly placed inside the public
16
+ directory.
17
+
18
+ The files cannot be nested, they are assumed to be directly inside the SCSS
19
+ directory, and the generated files are therefore created directly inside the CSS
20
+ directory.
21
+
22
+ There is no special error handling yet. Any error will raise a typical error
23
+ page.
24
+
25
+ Installation
26
+ ------------
27
+
28
+ Add this line to your application's Gemfile:
29
+
30
+ ```ruby
31
+ gem 'rack-sassc'
32
+ ```
33
+
34
+ And then execute:
35
+
36
+ ```ruby
37
+ bundle install
38
+ ```
39
+
40
+ Or install it yourself as:
41
+
42
+ ```ruby
43
+ gem install rack-sassc
44
+ ```
45
+
46
+ Usage
47
+ -----
48
+
49
+ In your `config.ru`:
50
+
51
+ ```ruby
52
+ require 'rack/sassc'
53
+
54
+ use Rack::SassC
55
+ ```
56
+
57
+ This is the basic usage with default behaviour, which is equivalent to using
58
+ these options:
59
+
60
+ ```ruby
61
+ require 'rack/sassc'
62
+
63
+ use Rack::SassC, {
64
+ check: ENV['RACK_ENV'] != 'production',
65
+ public_location: 'public',
66
+ syntax: :scss,
67
+ css_dirname: :css,
68
+ scss_dirname: :scss,
69
+ create_map_file: true,
70
+ }
71
+ ```
72
+
73
+ Here is the explanation for each option:
74
+
75
+ `check` determines if the files are processed or not. Setting it to `false` is
76
+ equivalent to not having the middleware at all. By default it is `true` if the
77
+ rack environment is NOT `production`. The value of `check` can also be a Proc
78
+ which receives the `env` on each request.
79
+
80
+ `public_location` is where you serve static files on your app. It is set to
81
+ "public" by default. Whatever path you set it to will be expanded.
82
+
83
+ `scss_dirname` and `css_dirname` are just the name of the directories in which
84
+ we search for template files and we generate css/map files.
85
+
86
+ `syntax` is `:scss` or `:sass`. It is used for the engine, but also for the
87
+ extension of template files, which means they have to match.
88
+
89
+ `create_map_file` is self explanatory. No map file will be created if set to
90
+ `false`.
91
+
92
+ Additionally, you can pass another option called `engine_opts`. It will be
93
+ merged with the default options of the SassC engine. For example if you don't
94
+ want a compressed output, you could do this:
95
+
96
+ ```ruby
97
+ use Rack::SassC, {
98
+ engine_opts: {style: :nested}
99
+ }
100
+ ```
101
+
102
+ The default options for the engine are the following:
103
+
104
+ ```ruby
105
+ {
106
+ style: :compressed,
107
+ syntax: @opts[:syntax],
108
+ load_paths: [location(@opts[:scss_dirname])],
109
+ }
110
+ ```
111
+
112
+ Or this when no map file is to be created:
113
+
114
+ ```ruby
115
+ {
116
+ style: :compressed,
117
+ syntax: @opts[:syntax],
118
+ load_paths: [location(@opts[:scss_dirname])],
119
+ source_map_file: "#{filename}.css.map",
120
+ source_map_contents: true,
121
+ }
122
+ ```
123
+
124
+ Alternatives
125
+ ------------
126
+
127
+ As far as I know the only alternative to this library is
128
+ [SasscRack](https://github.com/hkrutzer/sasscrack) by
129
+ [hkrutzer](https://github.com/hkrutzer) which arguably has a much better name
130
+ than mine `;-)`
131
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ t.warning = false
6
+ t.options = '--pride'
7
+ end
8
+
9
+ desc "Run tests"
10
+ task :default => :test
11
+
@@ -0,0 +1,6 @@
1
+ module Rack
2
+ class SassC
3
+ VERSION = '0.0.0'
4
+ end
5
+ end
6
+
data/lib/rack/sassc.rb ADDED
@@ -0,0 +1,93 @@
1
+ require 'sassc'
2
+
3
+ module Rack
4
+ class SassC
5
+
6
+ attr_reader :opts
7
+
8
+ def initialize app, opts={}
9
+ @app = app
10
+
11
+ @opts = {
12
+ check: ENV['RACK_ENV'] != 'production',
13
+ public_location: 'public',
14
+ syntax: :scss,
15
+ css_dirname: :css,
16
+ scss_dirname: :scss,
17
+ create_map_file: true,
18
+ }.merge(opts)
19
+
20
+ @opts[:public_location] = ::File.expand_path @opts[:public_location]
21
+ end
22
+
23
+ def call env
24
+ handle_path(env['PATH_INFO']) if must_check?(env)
25
+ @app.call env
26
+ end
27
+
28
+ def location dirname
29
+ ::File.join @opts[:public_location], dirname.to_s
30
+ end
31
+
32
+ def filepath dirname, filename, ext
33
+ ::File.join location(dirname), "#{filename}.#{ext}"
34
+ end
35
+
36
+ private
37
+
38
+ def must_check? env
39
+ if @opts[:check].respond_to? :call
40
+ @opts[:check].call env
41
+ else
42
+ @opts[:check]
43
+ end
44
+ end
45
+
46
+ def handle_path path_info
47
+ return unless path_info[/\/#{@opts[:css_dirname]}\/[^\/]+\.css$/]
48
+
49
+ filename = ::File.basename path_info, '.*'
50
+ scss_filepath = filepath(@opts[:scss_dirname], filename, @opts[:syntax])
51
+ return unless ::File.exist?(scss_filepath)
52
+
53
+ scss = ::File.read(scss_filepath)
54
+ engine = ::SassC::Engine.new(scss, build_engine_opts(filename))
55
+ css_filepath = filepath(@opts[:css_dirname], filename, :css)
56
+
57
+ ::File.open(css_filepath, 'w') do |css_file|
58
+ css_file.write(engine.render)
59
+ end
60
+
61
+ if @opts[:create_map_file]
62
+ ::File.open("#{css_filepath}.map", 'w') do |map_file|
63
+ map_file.write(engine.source_map)
64
+ end
65
+ end
66
+ end
67
+
68
+ def build_engine_opts filename
69
+ engine_opts = {
70
+ style: :compressed,
71
+ syntax: @opts[:syntax],
72
+ load_paths: [location(@opts[:scss_dirname])],
73
+ }
74
+
75
+ if @opts[:create_map_file]
76
+ engine_opts.merge!({
77
+ source_map_file: "#{filename}.css.map",
78
+ source_map_contents: true,
79
+ })
80
+ end
81
+
82
+ if @opts.has_key?(:engine_opts)
83
+ engine_opts.merge! @opts[:engine_opts]
84
+ end
85
+
86
+ engine_opts
87
+ end
88
+
89
+ end
90
+ end
91
+
92
+ require 'rack/sassc/version'
93
+
data/lib/rack-sassc.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'rack/sassc'
2
+
@@ -0,0 +1,22 @@
1
+ require File.join(File.dirname(__FILE__), 'lib/rack/sassc/version')
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'rack-sassc'
5
+ s.version = Rack::SassC::VERSION
6
+ s.summary = "Rack middleware for SassC"
7
+ s.description = "Rack middleware for SassC which process sass/scss files when in development environment."
8
+ s.authors = ["Mickael Riga"]
9
+ s.email = ["mig@mypeplum.com"]
10
+ s.files = `git ls-files -z`.split("\x0")
11
+ s.homepage = "https://github.com/mig-hub/rack-sassc"
12
+ s.license = 'MIT'
13
+ s.require_paths = ["lib"]
14
+
15
+ s.add_dependency 'rack', '>= 1.0'
16
+ s.add_dependency 'sassc', '~> 2.0'
17
+ s.add_development_dependency 'minitest', '~> 5.8'
18
+ s.add_development_dependency 'rack-test', '~> 0.6'
19
+ s.add_development_dependency "rake"
20
+ s.add_development_dependency "bundler"
21
+ end
22
+
@@ -0,0 +1,3 @@
1
+ body
2
+ color: blue
3
+
@@ -0,0 +1,3 @@
1
+ body{color:blue}
2
+
3
+ /*# sourceMappingURL=main.css.map */
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "file": "stdin.css",
4
+ "sources": [
5
+ "stdin"
6
+ ],
7
+ "sourcesContent": [
8
+ "body {\n color: blue; }\n\n"
9
+ ],
10
+ "names": [],
11
+ "mappings": "AAAA,AAAA,IAAI,AAAC,CACH,KAAK,CAAE,IAAI,CAAG"
12
+ }
@@ -0,0 +1 @@
1
+ .already{color:yellow}
@@ -0,0 +1,3 @@
1
+ body {
2
+ color: yellow;
3
+ }
@@ -0,0 +1,198 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require 'rack/sassc'
4
+ require 'rack/test'
5
+ require 'minitest/autorun'
6
+
7
+ # Simulate a setup where `public` is in the current directory
8
+ Dir.chdir('test')
9
+
10
+ class TestRackSassC < MiniTest::Test
11
+
12
+ include Rack::Test::Methods
13
+
14
+ KEEP_IN_CSS_DIR = ['already.css']
15
+
16
+ def setup
17
+ teardown
18
+ @inner_app = inner_app
19
+ @app_options = {}
20
+ end
21
+
22
+ def teardown
23
+ Dir.children('public/css').each do |f|
24
+ ::File.delete("public/css/#{f}") unless KEEP_IN_CSS_DIR.include?(f)
25
+ end
26
+ if ::File.exist? "public/scss/tmp.scss"
27
+ ::File.delete "public/scss/tmp.scss"
28
+ end
29
+ end
30
+
31
+ def app
32
+ Rack::Lint.new(Rack::SassC.new(@inner_app, @app_options))
33
+ end
34
+
35
+ def inner_app
36
+ Rack::Static.new(lambda {|env|
37
+ [200, {'Content-Type'=>'text/plain'}, ["Inner"]]
38
+ }, {
39
+ urls: ["/css", "/scss"],
40
+ root: "public"
41
+ })
42
+ end
43
+
44
+ def inner_app_other
45
+ Rack::Static.new(lambda {|env|
46
+ [200, {'Content-Type'=>'text/plain'}, ["Inner"]]
47
+ }, {
48
+ urls: ["/stylesheets", "/sassc"],
49
+ root: "other-public"
50
+ })
51
+ end
52
+
53
+ def test_non_css_request_is_served
54
+ get "/"
55
+ assert_equal 200, last_response.status
56
+ assert_equal "Inner", last_response.body
57
+ assert_css_dir_untouched
58
+ end
59
+
60
+ def test_existing_file_without_sassc_template_is_served
61
+ # Files that are already css from a library or something.
62
+ get "/css/already.css"
63
+ assert_equal 200, last_response.status
64
+ assert_equal 'text/css', last_response.headers['Content-Type']
65
+ assert last_response.body[/\.already\{color:yellow\}/]
66
+ assert_css_dir_untouched
67
+ end
68
+
69
+ def test_non_existing_file_without_sassc_template_is_not_found
70
+ # There is neither a file in css or in scss
71
+ get "/css/notfound.css"
72
+ assert_equal 404, last_response.status
73
+ assert_css_dir_untouched
74
+ end
75
+
76
+ def test_file_with_sassc_template_but_wrong_css_path_pass_through
77
+ # There is corresponding file in scss but the css path is wrong
78
+ get "/wrong-css/main.css"
79
+ assert_equal 200, last_response.status
80
+ assert_equal "Inner", last_response.body
81
+ assert_css_dir_untouched
82
+ end
83
+
84
+ def test_file_with_sassc_template_is_created_and_served
85
+ get "/css/main.css"
86
+ assert_equal 200, last_response.status
87
+ assert_equal 'text/css', last_response.headers['Content-Type']
88
+ assert last_response.body[/body\{color:yellow\}/]
89
+ assert last_response.body[/sourceMappingURL=main\.css\.map/]
90
+ assert_created_in_css_dir "main.css", "main.css.map"
91
+ end
92
+
93
+ def test_file_with_sassc_template_is_uptodate
94
+ ::File.open('public/scss/tmp.scss', 'w') do |file|
95
+ file.write "body{color:yellow}"
96
+ end
97
+ get "/css/tmp.css"
98
+ ::File.open('public/scss/tmp.scss', 'w') do |file|
99
+ file.write "body{color:orange}"
100
+ end
101
+ get "/css/tmp.css"
102
+ assert_equal 200, last_response.status
103
+ assert_equal 'text/css', last_response.headers['Content-Type']
104
+ assert last_response.body[/body\{color:orange\}/]
105
+ refute last_response.body[/yellow/]
106
+ assert last_response.body[/sourceMappingURL=tmp\.css\.map/]
107
+ assert_created_in_css_dir "tmp.css", "tmp.css.map"
108
+ end
109
+
110
+ def test_option_to_not_create_map_file
111
+ @app_options = {create_map_file: false}
112
+ get "/css/main.css"
113
+ assert_equal 200, last_response.status
114
+ assert_equal 'text/css', last_response.headers['Content-Type']
115
+ assert last_response.body[/body\{color:yellow\}/]
116
+ refute last_response.body[/sourceMappingURL/]
117
+ assert_created_in_css_dir "main.css"
118
+ end
119
+
120
+ def test_middleware_can_be_disabled_via_check_option
121
+ @app_options = {check: false}
122
+ get "/css/main.css"
123
+ assert_equal 404, last_response.status
124
+ assert_css_dir_untouched
125
+ end
126
+
127
+ def test_check_option_can_be_a_proc
128
+ @app_options = {
129
+ check: proc{ |env|
130
+ assert_equal '/css/main.css', env['PATH_INFO']
131
+ false
132
+ }
133
+ }
134
+ get "/css/main.css"
135
+ assert_equal 404, last_response.status
136
+ assert_css_dir_untouched
137
+ end
138
+
139
+ def test_public_location_option_is_expanded
140
+ local_opts = {public_location: 'other-public'}
141
+ local_app = Rack::SassC.new(inner_app, local_opts)
142
+ assert_equal ::File.expand_path('other-public'), local_app.opts[:public_location]
143
+ # Make sure the original opts hash is unchanged
144
+ assert_equal 'other-public', local_opts[:public_location]
145
+ end
146
+
147
+ def test_location_returns_expanded_path_in_public
148
+ local_opts = {public_location: 'other_public'}
149
+ local_app = Rack::SassC.new(inner_app, local_opts)
150
+ assert_equal ::File.join(::File.expand_path('other_public'), 'dir'), local_app.location(:dir)
151
+ end
152
+
153
+ def test_filepath_returns_expanded_path_in_public
154
+ local_opts = {public_location: 'other_public'}
155
+ local_app = Rack::SassC.new(inner_app, local_opts)
156
+ assert_equal ::File.join(::File.expand_path('other_public'), 'dir', 'main.sass'), local_app.filepath(:dir, :main, :sass)
157
+ end
158
+
159
+ def test_works_with_different_dirnames_and_syntax
160
+ @inner_app = inner_app_other
161
+ @app_options = {
162
+ public_location: 'other-public',
163
+ css_dirname: :stylesheets,
164
+ scss_dirname: :sassc,
165
+ syntax: :sass
166
+ }
167
+ get "/stylesheets/main.css"
168
+ assert_equal 200, last_response.status
169
+ assert_equal 'text/css', last_response.headers['Content-Type']
170
+ assert last_response.body[/body\{color:blue\}/]
171
+ assert last_response.body[/sourceMappingURL=main\.css\.map/]
172
+ assert_created_in_css_dir "main.css", "main.css.map"
173
+ end
174
+
175
+ private
176
+
177
+ # This will assert the files were created
178
+ # but also fail if other files where created that
179
+ # are not passed as argument. Therefore the list
180
+ # of files created needs to be exhaustive.
181
+ def assert_created_in_css_dir *created_files
182
+ if @app_options.has_key?(:public_location) and @app_options.has_key?(:css_dirname)
183
+ possible_files = created_files.dup
184
+ path = "#{@app_options[:public_location]}/#{@app_options[:css_dirname]}"
185
+ else
186
+ possible_files = KEEP_IN_CSS_DIR + created_files
187
+ path = 'public/css'
188
+ end
189
+ assert_equal possible_files.sort, Dir.children(path).sort
190
+ end
191
+
192
+ # Sugar for legibility
193
+ def assert_css_dir_untouched
194
+ assert_created_in_css_dir
195
+ end
196
+
197
+ end
198
+
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-sassc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mickael Riga
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sassc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack-test
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Rack middleware for SassC which process sass/scss files when in development
98
+ environment.
99
+ email:
100
+ - mig@mypeplum.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - Gemfile
107
+ - LICENSE
108
+ - README.md
109
+ - Rakefile
110
+ - lib/rack-sassc.rb
111
+ - lib/rack/sassc.rb
112
+ - lib/rack/sassc/version.rb
113
+ - rack-sassc.gemspec
114
+ - test/other-public/sassc/main.sass
115
+ - test/other-public/stylesheets/main.css
116
+ - test/other-public/stylesheets/main.css.map
117
+ - test/public/css/already.css
118
+ - test/public/scss/main.scss
119
+ - test/test_rack_sassc.rb
120
+ homepage: https://github.com/mig-hub/rack-sassc
121
+ licenses:
122
+ - MIT
123
+ metadata: {}
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubygems_version: 3.0.3
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Rack middleware for SassC
143
+ test_files: []