classy_assets 0.4.5 → 0.5.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: 071cf12d4977029619a07f43d51d42b06831b46e
4
- data.tar.gz: a7ae31ad871a479cb334e3a18bfabc1493c5ffaf
3
+ metadata.gz: d46c96e739ac209aa3be084cb29edc50b128add9
4
+ data.tar.gz: aadd3440b39e892a6274140698bbe05324c8cf22
5
5
  SHA512:
6
- metadata.gz: 1ecd15e916bb7a54aee854446be3a98ad7b350e5730ab755acc753f55dd48c9de7bd2e8e0dd352bd09a56d091d4e58ec53684d102ffa55367a1db305ee5f9737
7
- data.tar.gz: cd53c57c9c0c8b69192c356bae93e4000fbbceb5d58dd752baa657701afed5cb80797220b8a2272cd67d2c7eb7180c3873b1787f71e940532df2058dcb27f1ed
6
+ metadata.gz: 80185477cad1aadc5f8d472bae056b27a66454bf145c2604f5c987a39eabec5d9b40ebf4792e5cbdd59abd40d24ee197162e03a18260d3f7b733156f81f42817
7
+ data.tar.gz: 22d8aef7596fa473f83907f5092832e4757b5a8b392d2a67ea185f8cfc4999a3f5e66a9553724184af3df802253388472e177ccb58cca64258934d55c521f138
@@ -25,6 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.add_dependency 'uglifier'
26
26
  gem.add_dependency 'yui-compressor'
27
27
  gem.add_dependency 'sinatra'
28
+ gem.add_dependency 'escape_utils'
28
29
 
29
30
  gem.add_development_dependency 'bundler', '~> 1.3'
30
31
  gem.add_development_dependency 'rake'
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'sass/script/functions'
4
+
5
+ module Sass::Script::Functions
6
+ def asset_path(source)
7
+ Sass::Script::String.new(ClassyAssets.asset_url_for(source.value), :string)
8
+ end
9
+
10
+ def asset_url(source)
11
+ Sass::Script::String.new(%Q{url("#{ClassyAssets.asset_url_for(source.value)}")}, :string)
12
+ end
13
+
14
+ def asset_data_uri(source)
15
+ Sass::Script::String.new(%Q{url("#{ClassyAssets.asset_data_uri_for(path.value)}")}, :string)
16
+ end
17
+
18
+ declare :asset_path, args: [:source]
19
+ declare :asset_url, args: [:source]
20
+ declare :asset_data_uri, args: [:source]
21
+ end
@@ -0,0 +1,91 @@
1
+ # encoding: utf-8
2
+
3
+ require 'pathname'
4
+ require 'sprockets/sass_importer'
5
+
6
+ module Sprockets
7
+ class SassImporter < ::Sass::Importers::Filesystem
8
+ GLOB = /\*|\[.+\]/
9
+
10
+ attr_reader :context
11
+ private :context
12
+
13
+ def initialize(context, root)
14
+ @context = context
15
+ super root.to_s
16
+ end
17
+
18
+ def extensions
19
+ {
20
+ 'css' => :scss,
21
+ 'css.erb' => :scss,
22
+ 'scss.erb' => :scss,
23
+ 'sass.erb' => :sass
24
+ }.merge!(super)
25
+ end
26
+
27
+ def find(name, options = {})
28
+ return nil if name =~ GLOB # globs must be relative
29
+ engine_from_path(name, root, options)
30
+ end
31
+
32
+ def find_relative(name, base, options)
33
+ if name =~ GLOB
34
+ glob_imports(name, Pathname.new(base), options)
35
+ else
36
+ engine_from_path(name, File.dirname(base), options)
37
+ end
38
+ end
39
+
40
+ protected
41
+
42
+ def each_globbed_file(glob, base_pathname, options)
43
+ Dir["#{base_pathname}/#{glob}"].sort.each do |filename|
44
+ next if filename == options[:filename]
45
+ yield filename if File.directory?(filename) || context.asset_requirable?(filename)
46
+ end
47
+ end
48
+
49
+ def glob_imports(glob, base_pathname, options)
50
+ contents = ""
51
+ each_globbed_file(glob, base_pathname.dirname, options) do |filename|
52
+ if File.directory?(filename)
53
+ context.depend_on(filename)
54
+ elsif context.asset_requirable?(filename)
55
+ context.depend_on(filename)
56
+ contents << "@import #{Pathname.new(filename).relative_path_from(base_pathname.dirname).to_s.inspect};\n"
57
+ end
58
+ end
59
+ return nil if contents.empty?
60
+ Sass::Engine.new(contents, options.merge(
61
+ filename: base_pathname.to_s,
62
+ importer: self,
63
+ syntax: :scss
64
+ ))
65
+ end
66
+
67
+ def engine_from_path(name, dir, options)
68
+ full_filename, syntax = Sass::Util.destructure(find_real_file(dir, name, options))
69
+ return unless full_filename && File.readable?(full_filename)
70
+
71
+ engine = Sass::Engine.new(evaluate(full_filename), options.merge(
72
+ filename: full_filename,
73
+ importer: self,
74
+ syntax: syntax
75
+ ))
76
+
77
+ if engine && (filename = engine.options[:filename])
78
+ @context.depend_on(filename)
79
+ end
80
+
81
+ engine
82
+ end
83
+
84
+ def evaluate(filename)
85
+ attributes = context.environment.attributes_for(filename)
86
+ processors = context.environment.preprocessors(attributes.content_type) +
87
+ attributes.engines.reverse - [Sprockets::ScssTemplate, Sprockets::SassTemplate]
88
+ context.evaluate(filename, processors: processors)
89
+ end
90
+ end
91
+ end
@@ -1,3 +1,3 @@
1
1
  module ClassyAssets
2
- VERSION = "0.4.5"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/classy_assets.rb CHANGED
@@ -1,14 +1,23 @@
1
1
  # encoding: utf-8
2
2
 
3
+ # ensure these come first to avoid tilt warnings
3
4
  require 'compass'
4
5
  require 'sass'
5
6
  require 'coffee_script'
6
- require 'sprockets'
7
+
8
+ # stdlib
9
+ require 'base64'
10
+ require 'escape_utils'
7
11
  require 'sinatra/base'
12
+ require 'sprockets'
13
+
14
+ # classy assets components
8
15
  require 'classy_assets/configuration'
9
- require 'classy_assets/sass_script_functions'
16
+ require 'classy_assets/sass/script/functions'
17
+ require 'classy_assets/sprockets/sass_importer'
10
18
  require 'classy_assets/version'
11
19
 
20
+ # Utility methods
12
21
  module ClassyAssets
13
22
  def self.asset_url_for(asset)
14
23
  asset = Configuration.sprockets[asset].send(determine_path_type)
@@ -16,6 +25,12 @@ module ClassyAssets
16
25
  "#{Configuration.asset_host}/#{Configuration.asset_prefix}/#{asset}#{debug}"
17
26
  end
18
27
 
28
+ def self.asset_data_uri_for(asset)
29
+ asset = Configuration.sprockets[asset]
30
+ base64 = Base64.encode64(asset.to_s).gsub(/\s+/, "")
31
+ "data:#{asset.content_type};base64,#{EscapeUtils.escape_url(base64)}"
32
+ end
33
+
19
34
  def self.asset_tag_from(sources, ext)
20
35
  sources = [sources] unless sources.is_a? Array
21
36
  sources.map do |source|
@@ -29,4 +44,3 @@ module ClassyAssets
29
44
  (Configuration.asset_digest) ? :digest_path : :logical_path
30
45
  end
31
46
  end
32
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: classy_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - StyleSeek Engineering
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: escape_utils
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -170,7 +184,8 @@ files:
170
184
  - lib/classy_assets.rb
171
185
  - lib/classy_assets/cli.rb
172
186
  - lib/classy_assets/configuration.rb
173
- - lib/classy_assets/sass_script_functions.rb
187
+ - lib/classy_assets/sass/script/functions.rb
188
+ - lib/classy_assets/sprockets/sass_importer.rb
174
189
  - lib/classy_assets/tasks.rb
175
190
  - lib/classy_assets/tasks/assets.rake
176
191
  - lib/classy_assets/version.rb
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'sass/script/functions'
4
-
5
- module Sass::Script
6
- module Functions
7
- def asset_path(source)
8
- assert_type source, :String
9
- ClassyAssets.asset_url_for(source)
10
- end
11
-
12
- declare :asset_path, args: [:source]
13
- end
14
- end