asset 0.1.1 → 0.1.2

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: 479c8dc6efb7f01a5694c691ed57cc7b8c76670a
4
- data.tar.gz: bc9b8e3a07bc3fb783c4cfb241ed10fb6bb73632
3
+ metadata.gz: 45bfd8e5aba5d8941fc5dad1e7b6cfb13618f51e
4
+ data.tar.gz: fa9dfa2916357553683779b8988d60604fbd8a90
5
5
  SHA512:
6
- metadata.gz: 497dc2eca7a3fb680577b0092fd12d76105189dda0b386552a9d77a9b504205923972b9170459477b715c470d684b1b6031246868d387e8c5e6c409078817c46
7
- data.tar.gz: 2883a55245975e3f0f54f5ee06c18bd9d8c07e29af8e3faec9c0be101d741b7f4b4725f56725f5bcff2410c76b46fc3860c267dd3bce6c874893fec49363925a
6
+ metadata.gz: b3f53b15353d381dde1a06e2a798bcfcbab10bb3e5089d8bb3a216dcbb5d252830fe3a52d3e450374cd2dd0af7eec2a80563465a8e1d89eb8e24b9ea5ef97106
7
+ data.tar.gz: 6a6eec4c65c51c5b8bfc3803aecb63dbd743a94e892e113ff28799ebfd2cbd5784fb3e4b117d5bac88e0ca54886147149dfe5d1cf5716983330ba2a76f8e46ff
data/README.md CHANGED
@@ -42,8 +42,7 @@ helpers Asset::Router
42
42
  ```yaml
43
43
  # Install your manifest file in APP_ROOT/app/assets/manifest.yml
44
44
 
45
- # Asset manifest. Only the files mentioned here will be available.
46
- # Options are compress: true/false, bundle: true/false
45
+ # Asset manifest. Only the files mentioned here will be bundled.
47
46
  css:
48
47
  - app.css
49
48
  - themes/themes.css
@@ -51,21 +50,6 @@ css:
51
50
  js:
52
51
  - app.js
53
52
  - lib/cookie.js
54
-
55
- # Example with options:
56
- css:
57
- - app.css:
58
- # Compress = false will prevent the file from being compressed (default true)
59
- - compress: true
60
- # This will not be part of the bundle.js if bundle = false (default true)
61
- - bundle: true
62
- - themes/themes.css
63
-
64
- js:
65
- # The same options apply to JS files
66
- - app.js:
67
- - bundle: false
68
- - lib/cookie.js
69
53
  ```
70
54
 
71
55
  ```erb
data/app.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class App < Sinatra::Base
2
2
 
3
- # helpers Asset::Helpers
3
+ helpers Asset::Helpers
4
4
 
5
5
  configure do
6
6
  # Settings
@@ -19,6 +19,7 @@ class App < Sinatra::Base
19
19
 
20
20
  # Liquid setup
21
21
  Liquid::Template.file_system = Liquid::LocalFileSystem.new(APP_VIEWS)
22
+ Liquid::Template.register_filter(::Asset::Filters)
22
23
 
23
24
  # Set up loggers and tmp files
24
25
  Dir.mkdir('./tmp') unless File.exists?('./tmp')
@@ -39,6 +40,10 @@ class App < Sinatra::Base
39
40
  erb(:index)
40
41
  end
41
42
 
43
+ get('/liquid') do
44
+ liquid(:index)
45
+ end
46
+
42
47
  # Default not found page
43
48
  not_found do
44
49
  "404, Not found".tap{|m| puts m}
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.1'
4
- s.date = '2017-01-16'
3
+ s.version = '0.1.2'
4
+ s.date = '2017-01-18'
5
5
  s.summary = "Compress and serve your CSS and JS automatically"
6
6
  s.description = "The only thing you need for your assets."
7
7
  s.authors = ["Fugroup Limited"]
data/lib/asset.rb CHANGED
@@ -8,7 +8,7 @@ autoload :Tilt, 'tilt'
8
8
  # @author: Vidar <vidar@fugroup.net>, Fugroup Ltd.
9
9
  # @license: MIT, contributions are welcome.
10
10
  module Asset
11
- class << self; attr_accessor :mode, :path, :cache, :favicon, :robots, :manifest, :images, :debug; end
11
+ class << self; attr_accessor :mode, :path, :cache, :favicon, :robots, :manifest, :bundle, :images, :debug; end
12
12
 
13
13
  # Default is development
14
14
  @mode = ENV['RACK_ENV'] || 'development'
@@ -35,8 +35,12 @@ require_relative 'assets/item'
35
35
  # Load the manifest
36
36
  ::Asset.manifest = ::Asset::Util.load_manifest
37
37
 
38
+ # Load the bundle
39
+ ::Asset.bundle = YAML.load_file(File.join(::Asset.path, 'manifest.yml'))
40
+
38
41
  # Load the images
39
42
  ::Asset.images = ::Asset::Util.load_images
40
43
 
41
44
  require_relative 'assets/helpers'
45
+ require_relative 'assets/filters'
42
46
  require_relative 'assets/router'
@@ -0,0 +1,7 @@
1
+ module Asset
2
+ module Filters
3
+
4
+ include ::Asset::Helpers
5
+
6
+ end
7
+ end
@@ -1,6 +1,11 @@
1
1
  module Asset
2
2
  module Helpers
3
3
 
4
+ # Asset URL
5
+ def asset_url(path)
6
+ ::Asset.manifest.find{|i| i.path == path}.src rescue path
7
+ end
8
+
4
9
  # Script tags
5
10
  def script_tag(*paths)
6
11
  tag('js', *paths) do |src|
@@ -18,7 +23,9 @@ module Asset
18
23
  # Image tags
19
24
  def image_tag(path)
20
25
  b = ::Asset.images[path] rescue nil
21
- %{<img src="/assets/images/#{CGI.escapeHTML(path)}#{b ? "?#{b}" : ''}">} rescue path
26
+ # Just slip through if the path starts with http(s) or //
27
+ src = path =~ /^(http[s]?)?:?\/\// ? path : %{/assets/images/#{path}}
28
+ %{<img src="#{src}#{b ? "?#{b}" : ''}">} rescue path
22
29
  end
23
30
 
24
31
  private
@@ -26,13 +33,11 @@ module Asset
26
33
  # Build the tags
27
34
  def tag(type, *paths, &block)
28
35
  paths.map do |path|
29
-
30
36
  # Yield the source back to the tag builder
31
37
  item = ::Asset.manifest.find{|i| i.path == path}
32
38
 
33
39
  # Src is same as path if item not found
34
- item ? item.files.map{|src| yield(%{/assets/#{type}/#{src}})} : yield(path)
35
-
40
+ item ? item.files.map{|f| yield(asset_url(f))} : yield(path)
36
41
  end.flatten.join("\n")
37
42
  end
38
43
 
data/lib/assets/item.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  module Asset
2
2
  class Item
3
3
 
4
- attr_accessor :path, :type, :key, :modified, :compress, :bundle, :app, :name, :kpath
4
+ attr_accessor :path, :type, :key, :modified, :app, :name, :kpath
5
5
 
6
6
  # Init
7
7
  def initialize(*args)
8
- @path, @type, @key, @modified, @compress, @bundle = args
8
+ @path, @type, @key, @modified = args
9
9
  @app = !!(@path =~ /^bundle\.(js|css)$/)
10
10
  @name = @path.rpartition('.')[0]
11
11
  @kpath = "#{@name}-#{kext}"
@@ -13,17 +13,22 @@ module Asset
13
13
 
14
14
  # Get the files for this item
15
15
  def files
16
- (@app and !p?) ? bundle_files : [p? ? @kpath : @path]
16
+ (@app and !p?) ? bundle_files : [@path]
17
+ end
18
+
19
+ # Get the full path
20
+ def src
21
+ File.join('/assets', @type, (p? ? @kpath : @path))
17
22
  end
18
23
 
19
24
  # Get the files for the bundle
20
25
  def bundle_files
21
- @bundle_files ||= ::Asset.manifest.select{|i| i.type == @type and i.bundle and !i.app}.map{|i| p? ? i.kpath : i.path}
26
+ @bundle_files ||= ::Asset.manifest.select{|i| ::Asset.bundle[type].include?(i.path) and i.type == @type and !i.app}.map{|i| i.path}
22
27
  end
23
28
 
24
29
  # Get the content. Pass cache = false to fetch from disk instead of the cache.
25
30
  def content(key = nil)
26
- (!key or !@compress) ? (@joined ||= joined) : (@cached ||= cached)
31
+ !key ? (@joined ||= joined) : (@cached ||= cached)
27
32
  end
28
33
 
29
34
  # The cached content
data/lib/assets/util.rb CHANGED
@@ -18,36 +18,27 @@ module Asset
18
18
 
19
19
  # Load manifest
20
20
  def self.load_manifest
21
- list = YAML.load_file(File.join(::Asset.path, 'manifest.yml'))
21
+ list = Dir["#{Asset.path}/{css,js}/**/*"].select{|f| File.file?(f)}.map{|f| f.gsub(Asset.path + '/', '')}
22
22
  manifest = []
23
+ list.each do |file|
24
+ file =~ /(js|css)\/(.+)/
25
+ type, name = $1, $2
23
26
 
24
- list.each do |type, files|
25
- max = Time.new(0).utc
26
- files.each do |name|
27
+ # Get the modified time of the asset
28
+ modified = mtime("#{type}/#{name}")
27
29
 
28
- # Depending on the options, the name can be a string or a Hash
29
- h = name.is_a?(Hash)
30
-
31
- # Path looks like app.js or similar
32
- path = h ? name.keys[0] : name
33
-
34
- # Get the modified time of the asset
35
- modified = mtime("#{type}/#{path}")
30
+ # Loading manifest with items
31
+ manifest << ::Asset::Item.new(name, type, digest(name, modified), modified)
32
+ end
36
33
 
37
- # Record max to know the latest change
38
- max = modified if modified > max
34
+ # Insert the css bundle
35
+ max = manifest.select{|r| r.type == 'css'}.map{|r| r.modified}.max
36
+ manifest.insert(0, ::Asset::Item.new('bundle.css', 'css', digest('bundle.css', max), max))
39
37
 
40
- # Loading manifest with items
41
- manifest << ::Asset::Item.new(
42
- path, type, digest(path, modified), modified,
43
- (h ? name['compress'] : true), (h ? name['bundle'] : true))
44
- end
38
+ # Insert the js bundle
39
+ max = manifest.select{|r| r.type == 'js'}.map{|r| r.modified}.max
40
+ manifest.insert(0, ::Asset::Item.new('bundle.js', 'js', digest('bundle.js', max), max))
45
41
 
46
- # Insert the bundle
47
- manifest.insert(0, ::Asset::Item.new(
48
- "bundle.#{type}", type,
49
- digest("bundle.#{type}", max), max))
50
- end
51
42
  manifest
52
43
  end
53
44
 
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.1
4
+ version: 0.1.2
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-16 00:00:00.000000000 Z
11
+ date: 2017-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -193,6 +193,7 @@ files:
193
193
  - asset.gemspec
194
194
  - config.ru
195
195
  - lib/asset.rb
196
+ - lib/assets/filters.rb
196
197
  - lib/assets/helpers.rb
197
198
  - lib/assets/item.rb
198
199
  - lib/assets/router.rb