vitrine 0.0.17 → 0.0.18

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: 2fcf49c459400509a306d68ac41f7fa0eb330322
4
- data.tar.gz: 18797aa7373fcd1dd90fc9274f14f8ee133baf0d
3
+ metadata.gz: dc4ee8209933285451897b7e350f08d688415809
4
+ data.tar.gz: ee63f9d1f096126084c62426139533431c5a474e
5
5
  SHA512:
6
- metadata.gz: 0c07c3645db4170a981d9ffc192222db4ee9f0b7456705c93facacf581f69fe4168926e0778c336d5055dbb8386491f203c8b126ab323ed62a4a0e2903938bc2
7
- data.tar.gz: 2f53f0309e7775e470c5325e0dee47c2f7670ca7316e626cf6533bf4442c53d69cc4cab08570fb922d09aec9ef76acbd5d01effb51537a36acc3c009769c8017
6
+ metadata.gz: 14101114ebe8d809b452a2424b19833335498949cb39ed280377854f6fa06e8051c9d1c089f5fbc774aec7b1c89e8dbf9c4fc088f4c0f20799f4414b42c8e174
7
+ data.tar.gz: 65ccc5b3cf467b38a8ad86ba5d2f48bf9e6e89aed72345e60311162ef6ca39246fb4d8150561899be080f0e6f431ac055a8bd3cd0d489b9ae6d808349ac1a50f
data/Gemfile CHANGED
@@ -2,9 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  gem 'sinatra', '~> 1.4', require: 'sinatra/base'
4
4
  gem 'coffee-script', '~> 2.2'
5
- gem 'sass', '~> 3'
6
- gem 'guard', '~> 2.2'
7
- gem 'guard-livereload'
5
+ gem 'sass', '3.3.0.rc.2'
8
6
  gem 'rack-contrib'
9
7
  gem 'rack-livereload'
10
8
 
@@ -27,30 +27,41 @@ class Vitrine::AssetCompiler < Sinatra::Base
27
27
  attr_accessor :public_dir
28
28
 
29
29
  # Try to find SCSS replacement for missing CSS
30
- get /(.+)\.css/ do | basename |
30
+ get /(.+)\.css$/ do | basename |
31
+ # Return vanilla CSS
32
+ if File.exist?(File.join(get_public, basename + '.css'))
33
+ return send_file(File.join(get_public, basename + '.css'))
34
+ end
35
+
31
36
  begin
32
37
  # TODO: handle .sass ext as well
33
38
  scss_source_path = File.join(get_public, "#{basename}.scss")
34
39
  mtime_cache(scss_source_path)
35
40
  content_type 'text/css', :charset => 'utf-8'
36
-
37
- # TODO: Examine http://sass-lang.com/documentation/file.SASS_REFERENCE.html
38
- # It already has provisions for error display, among other things
39
- Sass.compile_file(scss_source_path, cache_location: '/tmp/vitrine/sass-cache')
41
+ Vitrine.compile_sass(scss_source_path, get_public)
40
42
  rescue Errno::ENOENT # Missing SCSS
41
43
  forward_or_halt "No such CSS or SCSS file found"
42
44
  rescue Exception => e # CSS syntax error or something alike
43
- # Add a generated DOM element before <body/> to inject
44
- # a visible error message
45
- error_tpl = 'body:before {
46
- background: white; padding: 3px; font-family: monospaced; color: red;
47
- font-size: 14px; content: %s }'
48
- css_message = error_tpl % [e.class, "\n", "--> ", e.message].join.inspect
49
- # If we halt with 500 this will not be shown as CSS
50
- halt 200, css_message
45
+ # Add a generated DOM element before <body/> to inject
46
+ # a visible error message
47
+ error_tpl = 'body:before {
48
+ background: white; padding: 3px; font-family: monospaced; color: red;
49
+ font-size: 14px; content: %s }'
50
+ css_message = error_tpl % [e.class, "\n", "--> ", e.message].join.inspect
51
+ # If we halt with 500 this will not be shown as CSS
52
+ halt 200, css_message
51
53
  end
52
54
  end
53
55
 
56
+ # Try to find SCSS replacement for missing CSS
57
+ get /(.+)\.css\.map$/ do | basename |
58
+ # TODO: handle .sass ext as well
59
+ scss_source_path = File.join(get_public, "#{basename}.scss")
60
+ mtime_cache(scss_source_path)
61
+ content_type 'application/json', :charset => 'utf-8'
62
+ Vitrine.compile_sass_source_map(scss_source_path, get_public)
63
+ end
64
+
54
65
  # Generate a sourcemap for CoffeeScript files
55
66
  get /(.+)\.js\.map$/ do | basename |
56
67
  begin
data/lib/sourcemaps.rb CHANGED
@@ -3,6 +3,49 @@ require 'json'
3
3
 
4
4
  module Vitrine
5
5
 
6
+ # We need to override the Sass importer
7
+ # so that it gives us URLs relative to the server root for sourcemaps
8
+ class Imp < Sass::Importers::Filesystem
9
+ def public_url(of_filesystem_path)
10
+ scss_uri = '/' + Pathname.new(of_filesystem_path).relative_path_from(Pathname.new(root)).to_s
11
+ end
12
+ end
13
+
14
+ # Compile a SASS/SCSS file to CSS
15
+ def self.compile_sass_and_sourcemap(scss_path, public_folder_path)
16
+ # Compute the paths relative to the webserver public root
17
+ scss_uri = '/' + Pathname.new(scss_path).relative_path_from(Pathname.new(public_folder_path)).to_s
18
+ css_uri = scss_uri.gsub(/\.scss$/, '.css')
19
+ sourcemap_uri= css_uri + '.map'
20
+
21
+ engine_opts = {importer: Imp.new(public_folder_path), sourcemap: true, cache: false}
22
+ map_options = {css_path: css_uri, sourcemap_path: sourcemap_uri }
23
+
24
+ engine = Sass::Engine.for_file(scss_path, engine_opts)
25
+
26
+ # Determine the sourcemap URL for the SASS file
27
+ rendered, mapping = engine.render_with_sourcemap(sourcemap_uri)
28
+
29
+ # Serialize the sourcemap
30
+ # We need to pass css_uri: so that the generated sourcemap refers to the
31
+ # file that can be pulled of the server as opposed to a file on the filesystem
32
+ sourcemap_body = mapping.to_json(map_options)
33
+
34
+ [rendered, sourcemap_body]
35
+ end
36
+
37
+ # Compile SASS and return the source map only
38
+ def self.compile_sass_source_map(scss_path, public_folder_path)
39
+ css, map = compile_sass_and_sourcemap(scss_path, public_folder_path)
40
+ map
41
+ end
42
+
43
+ # Compiles SASS and it's sourcemap and returns the CSS only
44
+ def self.compile_sass(scss_path, public_folder_path)
45
+ css, map = compile_sass_and_sourcemap(scss_path, public_folder_path)
46
+ css
47
+ end
48
+
6
49
  # Compile a script (String or IO) to JavaScript.
7
50
  # This is a version lifted from here
8
51
  # https://github.com/josh/ruby-coffee-script/blob/114b65b638f66ba04b60bf9c24b54360260f9898/lib/coffee_script.rb
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vitrine
2
- VERSION = '0.0.17'
2
+ VERSION = '0.0.18'
3
3
  end
@@ -69,17 +69,29 @@ class TestVitrineAssetCompiler < Test::Unit::TestCase
69
69
  end
70
70
 
71
71
  def test_compiles_scss_when_requested_as_css
72
- write_public 'styles.scss' do | f |
72
+ write_public '/les-styles-rococo/styles.scss' do | f |
73
73
  f.puts '.foo {'
74
74
  f.puts '.bar { font-size: 10px; }'
75
75
  f.puts '}'
76
76
  end
77
77
 
78
- get '/styles.css'
78
+ get '/les-styles-rococo/styles.css'
79
79
 
80
80
  assert last_response.ok?
81
81
  assert_not_nil last_response.headers['ETag'], 'Should set ETag for the compiled version'
82
- assert last_response.body.include?('.foo .bar {'), 'Should have compiled the CSS rule'
82
+ assert_include last_response.body, '.foo .bar {'
83
+ assert_include last_response.body, '*# sourceMappingURL=/les-styles-rococo/styles.css.map */'
84
+
85
+ get '/les-styles-rococo/styles.css.map'
86
+
87
+ assert last_response.ok?
88
+ assert_equal "application/json;charset=utf-8", last_response.content_type
89
+ resp = {"version"=> 3,
90
+ "mappings"=> "AACA,SAAK;EAAE,SAAS,EAAE,IAAI",
91
+ "sources"=> ["/les-styles-rococo/styles.scss"],
92
+ "file" => "styles.css"
93
+ }
94
+ assert_equal resp, JSON.parse(last_response.body)
83
95
  end
84
96
 
85
97
  def test_displays_decent_alerts_for_scss_errors
data/vitrine.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "vitrine"
8
- s.version = "0.0.17"
8
+ s.version = "0.0.18"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Julik Tarkhanov"]
12
- s.date = "2014-01-08"
12
+ s.date = "2014-01-12"
13
13
  s.description = " Serves ERB templates with live CoffeeScript and SASS "
14
14
  s.email = "me@julik.nl"
15
15
  s.executables = ["vitrine"]
@@ -49,9 +49,7 @@ Gem::Specification.new do |s|
49
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
50
  s.add_runtime_dependency(%q<sinatra>, ["~> 1.4"])
51
51
  s.add_runtime_dependency(%q<coffee-script>, ["~> 2.2"])
52
- s.add_runtime_dependency(%q<sass>, ["~> 3"])
53
- s.add_runtime_dependency(%q<guard>, ["~> 2.2"])
54
- s.add_runtime_dependency(%q<guard-livereload>, [">= 0"])
52
+ s.add_runtime_dependency(%q<sass>, ["= 3.3.0.rc.2"])
55
53
  s.add_runtime_dependency(%q<rack-contrib>, [">= 0"])
56
54
  s.add_runtime_dependency(%q<rack-livereload>, [">= 0"])
57
55
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
@@ -64,9 +62,7 @@ Gem::Specification.new do |s|
64
62
  else
65
63
  s.add_dependency(%q<sinatra>, ["~> 1.4"])
66
64
  s.add_dependency(%q<coffee-script>, ["~> 2.2"])
67
- s.add_dependency(%q<sass>, ["~> 3"])
68
- s.add_dependency(%q<guard>, ["~> 2.2"])
69
- s.add_dependency(%q<guard-livereload>, [">= 0"])
65
+ s.add_dependency(%q<sass>, ["= 3.3.0.rc.2"])
70
66
  s.add_dependency(%q<rack-contrib>, [">= 0"])
71
67
  s.add_dependency(%q<rack-livereload>, [">= 0"])
72
68
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
@@ -80,9 +76,7 @@ Gem::Specification.new do |s|
80
76
  else
81
77
  s.add_dependency(%q<sinatra>, ["~> 1.4"])
82
78
  s.add_dependency(%q<coffee-script>, ["~> 2.2"])
83
- s.add_dependency(%q<sass>, ["~> 3"])
84
- s.add_dependency(%q<guard>, ["~> 2.2"])
85
- s.add_dependency(%q<guard-livereload>, [">= 0"])
79
+ s.add_dependency(%q<sass>, ["= 3.3.0.rc.2"])
86
80
  s.add_dependency(%q<rack-contrib>, [">= 0"])
87
81
  s.add_dependency(%q<rack-livereload>, [">= 0"])
88
82
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vitrine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-08 00:00:00.000000000 Z
11
+ date: 2014-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -42,44 +42,16 @@ dependencies:
42
42
  name: sass
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: '3'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '3'
55
- - !ruby/object:Gem::Dependency
56
- name: guard
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '2.2'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ~>
67
- - !ruby/object:Gem::Version
68
- version: '2.2'
69
- - !ruby/object:Gem::Dependency
70
- name: guard-livereload
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
45
+ - - '='
74
46
  - !ruby/object:Gem::Version
75
- version: '0'
47
+ version: 3.3.0.rc.2
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - '>='
52
+ - - '='
81
53
  - !ruby/object:Gem::Version
82
- version: '0'
54
+ version: 3.3.0.rc.2
83
55
  - !ruby/object:Gem::Dependency
84
56
  name: rack-contrib
85
57
  requirement: !ruby/object:Gem::Requirement