rack-sassc 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +131 -0
- data/Rakefile +11 -0
- data/lib/rack/sassc/version.rb +6 -0
- data/lib/rack/sassc.rb +93 -0
- data/lib/rack-sassc.rb +2 -0
- data/rack-sassc.gemspec +22 -0
- data/test/other-public/sassc/main.sass +3 -0
- data/test/other-public/stylesheets/main.css +3 -0
- data/test/other-public/stylesheets/main.css.map +12 -0
- data/test/public/css/already.css +1 -0
- data/test/public/scss/main.scss +3 -0
- data/test/test_rack_sassc.rb +198 -0
- metadata +143 -0
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
data/Gemfile
ADDED
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
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
data/rack-sassc.gemspec
ADDED
@@ -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 @@
|
|
1
|
+
.already{color:yellow}
|
@@ -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: []
|