asset 0.1.9 → 0.1.10

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: c8bb24feacfd52ac3d781e350fb69baf17d96efa
4
- data.tar.gz: fe54f8ba994df28627af3deb0fa2ce2a4df8cc41
3
+ metadata.gz: 6867cd26673824ea72eeb8dd0e1cd71fb23fb380
4
+ data.tar.gz: 9f38ee1241bf966194b86bc7f6949bfe8878584d
5
5
  SHA512:
6
- metadata.gz: 6cf5ec7f3b08f25ff879f960e894c6d49654a1e9264b5edaa938a732eb5f00f5acf14c7f140e7e800b30830d2befc30b81bec9420741b150be7f4a987aea64ef
7
- data.tar.gz: f52fd0cffd5a48b9305010751025ed34a51958be0fc69f9a2f31e995a6c1941795adbf24b88b549022c60962692de0842daeec4c1af84835b8e45534888b64a5
6
+ metadata.gz: 7918c2dae433d1f4ac2fc6dc938d65d5afff0546c1346af8f49bc0ce091a5696e200bf04e4094bb05864550ae3f83699e162869e6f17b9a334a39799cd1769a0
7
+ data.tar.gz: 3941bea2e41d71310309f9ca9379328ba6ca72abd528752872f77b793f97efb5d235c58567aef44e6d6320056d7b019b03329ccc643929448d3d707b723b80e3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ **Version 0.1.10** - *2017-01-22*
2
+
3
+ - Included rubyracer as dependency, fixed Uglifier not working
4
+ - Refactored router, now 404 only if item not found
5
+
1
6
  **Version 0.1.9** - *2017-01-19*
2
7
 
3
8
  - Added auto-reload with listen gem for development mode
data/asset.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'asset'
3
- s.version = '0.1.9'
4
- s.date = '2017-01-19'
3
+ s.version = '0.1.10'
4
+ s.date = '2017-01-22'
5
5
  s.summary = "Compress and serve your CSS and JS assets automatically"
6
6
  s.description = "The only thing you need for your assets."
7
7
  s.authors = ["Fugroup Limited"]
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
 
11
11
  s.add_runtime_dependency 'rack', '>= 0'
12
12
  s.add_runtime_dependency 'sass', '>= 0'
13
+ s.add_runtime_dependency 'therubyracer', '>= 0'
13
14
  s.add_runtime_dependency 'uglifier', '>= 0'
14
15
 
15
16
  s.add_development_dependency 'sinatra', '>= 0'
data/lib/asset.rb CHANGED
@@ -6,20 +6,20 @@ require 'yaml'
6
6
  # @author: Vidar <vidar@fugroup.net>, Fugroup Ltd.
7
7
  # @license: MIT, contributions are welcome.
8
8
  module Asset
9
-
10
9
  autoload :Uglifier, 'uglifier'
11
10
  autoload :Sass, 'sass'
12
11
 
13
12
  class << self; attr_accessor :mode, :path, :cache, :favicon, :robots, :manifest, :bundle, :images, :listener, :debug; end
14
13
 
15
14
  # Default is development
16
- @mode = ENV['RACK_ENV'] || 'development'
15
+ @mode = ENV['RACK_ENV'] || 'production'
17
16
 
18
17
  # Where your assets live
19
18
  @path = File.join(Dir.pwd, 'app', 'assets')
20
19
 
21
- # Where to write the cache, default to APP_ROOT/tmp
22
- @cache = File.join(Dir.pwd, 'tmp')
20
+ # Where to write the cache, default to /tmp
21
+ # Set to APP_ROOT: @cache = File.join(Dir.pwd, 'tmp')
22
+ @cache = '/tmp'
23
23
 
24
24
  # Automatically bounce (404) for browser /favicon.ico requests
25
25
  @favicon = true
@@ -45,13 +45,9 @@ require_relative 'assets/router'
45
45
 
46
46
  # Run a listener to automatically reload the assets on change
47
47
  if ::Asset.listener and ::Asset.mode == 'development'
48
- autoload :Listen, 'listen'
49
-
50
- if defined?(Listen)
51
- # Reload assets on change
52
- listener = Listen.to(::Asset.path) do |modified, added, removed|
53
- ::Asset::Util.setup!
54
- end
55
- listener.start
48
+ begin
49
+ require 'listen'
50
+ Listen.to(::Asset.path){|m, a, r| ::Asset::Util.setup!}.start if defined?(Listen)
51
+ rescue LoadError
56
52
  end
57
53
  end
data/lib/assets/item.rb CHANGED
@@ -26,19 +26,24 @@ module Asset
26
26
  File.join('/assets', @type, (p? ? @kpath : @path))
27
27
  end
28
28
 
29
- # Get the content. Pass key = false to fetch from disk instead of the cache.
30
- def content(key = nil)
31
- key ? (@cached ||= cached) : (@joined ||= joined)
29
+ # Get the content, will be compressed in production typically.
30
+ def content(compress = p?)
31
+ compress ? cached : joined
32
32
  end
33
33
 
34
34
  # The cached content
35
35
  def cached
36
- return File.read(cache_path) rescue compressed.tap{|r| write_cache(r)}
36
+ @cached ||= (read_cache || write_cache)
37
+ end
38
+
39
+ # Read cache
40
+ def read_cache
41
+ File.read(cache_path) rescue nil
37
42
  end
38
43
 
39
44
  # Store in cache
40
- def write_cache(r)
41
- File.open(cache_path, 'w'){|f| f.write(r)}
45
+ def write_cache
46
+ compressed.tap{|c| File.open(cache_path, 'w'){|f| f.write(c)}}
42
47
  end
43
48
 
44
49
  # Cache path
@@ -57,7 +62,7 @@ module Asset
57
62
  when 'css'
58
63
  Sass::Engine.new(joined, :syntax => :scss, :cache => false, :style => :compressed).render rescue joined
59
64
  when 'js'
60
- Uglifier.compile(joined, {}) rescue joined
65
+ Uglifier.compile(joined, :mangle => false, :comments => :none) rescue joined
61
66
  end
62
67
  end
63
68
 
data/lib/assets/router.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  module Asset
2
+ # The Router class is a small Rack middleware that matches the asset URLs
3
+ # and serves the content, compressed if you are in production mode.
2
4
  class Router
3
5
 
4
- # Mime types
6
+ # Mime types for responses
5
7
  MIME = {'js' => 'application/javascript; charset=UTF-8', 'css' => 'text/css; charset=UTF-8', 'txt' => 'text/plain; charset=UTF-8'}
6
8
 
7
9
  # Init
@@ -19,17 +21,18 @@ module Asset
19
21
 
20
22
  # Match /assets?/:type/path
21
23
  when /^(\/assets)?\/(js|css)\/(.+)/
24
+ # Extract type and path
22
25
  type, path = $2, $3
23
- path =~ /-([a-f0-9]{1,32})\.(css|js)$/
26
+
27
+ # Extract digest key if any
28
+ path =~ /-([a-f0-9]{32})\.(css|js)$/
24
29
  path.gsub!("-#{@key}", '') if (@key = $1)
25
30
 
26
31
  # Find the item
27
32
  item = ::Asset.manifest.find{|i| i.path == path and i.type == type}
28
33
 
29
- # Not found if no item, wrong key or no content
30
- return not_found if !item or (@key and @key != item.key) or !item.content(@key)
31
-
32
- found(item)
34
+ # Return the content or not found
35
+ item ? found(item) : not_found
33
36
 
34
37
  # Bounce favicon requests
35
38
  when (::Asset.favicon and /^\/favicon\.ico$/)
@@ -49,12 +52,14 @@ module Asset
49
52
 
50
53
  # Found
51
54
  def found(item)
52
- [ 200, {'Content-Type' => MIME[item.type],
53
- 'Content-Length' => item.content(@key).size,
55
+ content = item.content(!!@key)
56
+ [ 200, {
57
+ 'Content-Type' => MIME[item.type],
58
+ 'Content-Length' => content.size,
54
59
  'Cache-Control' => 'max-age=86400, public',
55
60
  'Expires' => (Time.now + 86400*30).utc.rfc2822,
56
61
  'Last-Modified' => item.modified.utc.rfc2822
57
- }, [item.content(@key)]]
62
+ }, [content]]
58
63
  end
59
64
 
60
65
  # Not found
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fugroup Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-19 00:00:00.000000000 Z
11
+ date: 2017-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: therubyracer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: uglifier
43
57
  requirement: !ruby/object:Gem::Requirement