sinatra-asset-snack 0.1.5 → 0.1.6

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzMxNmMwNWNjMzAwMTIwODk5NmMyZTJlMzdiZWFhYjNmM2MzZDU1YQ==
4
+ ZTI0NGUxZDJmYTlkODE1MzBkZTc3MmFjNTEyMzU3ODkxZDlkY2EwZA==
5
5
  data.tar.gz: !binary |-
6
- MGU2ZGI1NWI4ZTdiNGUwNTg2MjE3NzE4ZTYzMGNlNDgzZDU4YzliNQ==
7
- !binary "U0hBNTEy":
6
+ M2M2NzhlMzA5ODc3MGQ3YzAzMGViMzlkMDcxYWVmZmExYjQwNzBiMQ==
7
+ SHA512:
8
8
  metadata.gz: !binary |-
9
- ZGVhNDVjZjY0MjEwMzM1NzY3NTViYjNiZTk3NmE0OTBlZjQ0Y2I2NWY4YjZl
10
- ODkwYjZjM2Q0Zjk5ODM4ZmU1ZTc1OGUwN2ZiMjM2YTRiOTE5ZGFhYTU4MDM3
11
- ZDQyNGFiNjdmM2RiYzU3YjQ4MDJmMDkyOGZiMzc5MDJiNWJhZTM=
9
+ MTJhYmU2ZDk2MTQ2YTVkNGJkNzI0ZGY3YTMwNzMzMWRlYjExMWZiNGM3YjIz
10
+ NzEwMGM2MGI4Y2FmN2NhZGVlZjdiNmM1ZThkMTRlOWIxZDc2ZjdiYmY3Mzc1
11
+ OGU2ZDU3MjRhZmRjYmIwZjc5MDRjYTBiMTI4ZTAyYjNhNWJiZTY=
12
12
  data.tar.gz: !binary |-
13
- NTM5MzhjZjJlMjgyZGUzNTJjMzY5MjBjNDMzMDgxY2FlZWM4OGNjM2FmYzli
14
- MWViN2ZmNzk4MDFlNTQ4MDExMTFiNzUzOWYyNWNhYzUwOTk0NTZmMjlkOTE0
15
- YTVhMmU3N2QwYmMxNWRlZjNlNjc2MDgzNjNmMjYwMWRiYmE0ODc=
13
+ YWM5ZTNiYWNmNmUyYWM4NzRiZWRiODBkYjA1NzFkYzYxNWU2NzUxYzZmNjZi
14
+ NTllYzNkMzkxZmVlMTMxZDMxMDVmOWMyYThhOTE3YTgzMzY2MDMzOTYyYjEw
15
+ Yjc4MGYzOWZmZjhmZmY2MThkMjdlMmYwNGVhM2FjM2NiNGJjOTE=
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.2"
4
+ - "1.9.3"
5
+ - jruby-19mode
6
+ # script: "rake ci"
@@ -1,50 +1,50 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-asset-snack (0.1.4)
4
+ sinatra-asset-snack (0.1.5)
5
5
  coffee-script
6
6
  mime-types
7
7
  sass
8
8
  sinatra
9
+ yajl-ruby
9
10
 
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
13
14
  ansi (1.4.3)
14
- builder (3.2.0)
15
+ builder (3.2.2)
15
16
  coffee-script (2.2.0)
16
17
  coffee-script-source
17
18
  execjs
18
- coffee-script-source (1.6.2)
19
- execjs (1.4.0)
20
- multi_json (~> 1.0)
21
- hashie (2.0.3)
19
+ coffee-script-source (1.7.0)
20
+ execjs (2.1.0)
21
+ hashie (2.0.5)
22
22
  metaclass (0.0.1)
23
- mime-types (1.21)
24
- minitest (4.7.0)
25
- minitest-reporters (0.14.11)
23
+ mime-types (2.3)
24
+ minitest (4.7.4)
25
+ minitest-reporters (0.14.20)
26
26
  ansi
27
27
  builder
28
28
  minitest (>= 2.12, < 5.0)
29
29
  powerbar
30
- mocha (0.13.3)
30
+ mocha (0.14.0)
31
31
  metaclass (~> 0.0.1)
32
- multi_json (1.7.2)
33
32
  powerbar (1.0.11)
34
33
  ansi (~> 1.4.0)
35
34
  hashie (>= 1.1.0)
36
35
  rack (1.5.2)
37
- rack-protection (1.5.0)
36
+ rack-protection (1.5.3)
38
37
  rack
39
38
  rack-test (0.6.2)
40
39
  rack (>= 1.0)
41
40
  rake (10.0.4)
42
- sass (3.2.7)
43
- sinatra (1.4.2)
44
- rack (~> 1.5, >= 1.5.2)
41
+ sass (3.3.8)
42
+ sinatra (1.4.5)
43
+ rack (~> 1.4)
45
44
  rack-protection (~> 1.4)
46
45
  tilt (~> 1.3, >= 1.3.4)
47
- tilt (1.3.6)
46
+ tilt (1.4.1)
47
+ yajl-ruby (1.2.0)
48
48
 
49
49
  PLATFORMS
50
50
  ruby
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/benkitzelman/sinatra-asset-snack.png?branch=master)](https://travis-ci.org/benkitzelman/sinatra-asset-snack)
4
4
  [![Gem Version](https://badge.fury.io/rb/sinatra-asset-snack.png)](http://badge.fury.io/rb/sinatra-asset-snack)
5
+ [![endorse](https://api.coderwall.com/benkitzelman/endorsecount.png)](https://coderwall.com/benkitzelman)
5
6
 
6
7
  A lean asset compiler for Sinatra developed specifically for Coffeescript and SASS.
7
8
  It stitches all assets for a route into a single file, no uglification, no minification (configure your server to use Gzip),
@@ -59,3 +60,22 @@ See each compiler's repo for the list of configuration options
59
60
  [coffee-script](http://github.com/josh/ruby-coffee-script)
60
61
 
61
62
  [sass](http://sass-lang.com/)
63
+
64
+ ## Precompile
65
+
66
+ To precompile your assets, you must set a constant `APP_FILE` to the
67
+ source file which defines your Sinatra app.
68
+
69
+ ### Rakefile
70
+
71
+ ```ruby
72
+ APP_FILE = "lib/app/app.rb"
73
+ require 'sinatra/asset_snack/rake'
74
+ ```
75
+
76
+ This defines the rake task `assetsnack:build` which will precompile your
77
+ assets.
78
+
79
+
80
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/benkitzelman/sinatra-asset-snack/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
81
+
@@ -2,9 +2,13 @@ require 'mime/types'
2
2
  require 'sass'
3
3
  require 'coffee-script'
4
4
 
5
- here = File.dirname(__FILE__)
5
+ require 'sinatra/asset_snack/compilers/asset_compiler'
6
6
 
7
- require File.join here, 'asset_snack', 'compilers', 'asset_compiler'
7
+ require 'sinatra/asset_snack/version'
8
+ require 'sinatra/asset_snack/helpers'
9
+ require 'sinatra/asset_snack/extensions'
10
+ require 'sinatra/asset_snack/configuration'
11
+ require 'sinatra/asset_snack/asset_snack'
8
12
 
9
- Dir[File.join(here, 'asset_snack', '*.rb')].each { |f| require f }
10
- Dir[File.join(here, 'asset_snack', 'compilers', '*.rb')].each { |f| require f }
13
+ require 'sinatra/asset_snack/compilers/coffee_script_compiler'
14
+ require 'sinatra/asset_snack/compilers/sass_compiler'
@@ -1,10 +1,11 @@
1
1
  module Sinatra
2
2
  module AssetSnack
3
3
  class << self
4
- attr_reader :compilers, :configuration
4
+ attr_reader :compilers, :configuration, :app
5
5
 
6
6
  def registered(app, &block)
7
7
  @configuration = Configuration.new
8
+ @app = app # Used in precompile step
8
9
 
9
10
  app.extend ClassMethods
10
11
  app.send(:include, InstanceMethods)
@@ -13,14 +14,12 @@ module Sinatra
13
14
 
14
15
  def register_compiler(compiler, handled_extensions)
15
16
  @compilers ||= {}
16
- handled_extensions.each do |ext|
17
- @compilers[ext.downcase.to_sym] = compiler
18
- end
17
+ handled_extensions.each { |ext| @compilers[ext.downcase.to_sym] = compiler }
19
18
  end
20
19
 
21
20
  def compiler_for(file_path)
22
21
  ext = (File.extname(file_path) || '.').downcase[1..-1]
23
- @compilers[ext.to_sym]
22
+ @compilers[ext.to_sym] || Compilers::AssetCompiler
24
23
  end
25
24
 
26
25
  def assets
@@ -44,13 +43,9 @@ module Sinatra
44
43
  expand(paths).reduce({body: '', mime_type: 'text/plain'}) do |content, path|
45
44
  next unless File.exists?(path)
46
45
 
47
- if compiler = AssetSnack.compiler_for(path)
48
- compiled = compiler.compile_file(path)
49
- content_type = compiler.compiled_mime_type
50
- else
51
- compiled = File.read path
52
- content_type = MIME::Types.type_for(path).first.to_s
53
- end
46
+ compiler = AssetSnack.compiler_for(path)
47
+ compiled = compiler.compile_file(path)
48
+ content_type = compiler.compiled_mime_type || MIME::Types.type_for(path).first.to_s
54
49
 
55
50
  {
56
51
  mime_type: content_type || content[:mime_type],
@@ -60,7 +55,9 @@ module Sinatra
60
55
  end
61
56
 
62
57
  def expand(paths)
63
- paths.reduce([]) { |file_list, path| file_list + Dir.glob(path) }.uniq
58
+ paths.reduce([]) do |file_list, path|
59
+ file_list += File.file?(path) ? [path] : Dir.glob(path)
60
+ end.uniq
64
61
  end
65
62
  end # InstanceMethods
66
63
  end # AssetSnack
@@ -24,9 +24,9 @@ module Sinatra
24
24
 
25
25
  def compile_file(file_path)
26
26
  ext = ext_for file_path
27
- return unless ext && handled_extensions.include?(ext.to_sym)
28
-
29
27
  file_content = File.read file_path
28
+
29
+ return file_content unless ext && (handled_extensions || []).include?(ext.to_sym)
30
30
  new.compile(file_content, file_path)
31
31
  end
32
32
 
@@ -11,13 +11,8 @@ module Sinatra
11
11
 
12
12
  def compile(sass_script, file_path = nil)
13
13
  config = self.class.configuration
14
- if file_path && ext_for(file_path) == 'sass'
15
- config.merge!(syntax: :sass)
16
- else
17
- config.merge!(syntax: :scss)
18
- end
19
-
20
- Sass.compile(sass_script, config)
14
+ syntax = (file_path && ext_for(file_path) == 'sass') ? :sass : :scss
15
+ Sass.compile sass_script, config.merge(syntax: syntax)
21
16
  end
22
17
  end
23
18
  end # Compilers
@@ -0,0 +1,21 @@
1
+ require 'fileutils'
2
+
3
+ module Sinatra
4
+ module AssetSnack
5
+ def self.precompile!(opts={})
6
+ snack = self
7
+ Module.new do
8
+ extend snack::InstanceMethods
9
+ snack.assets.each do |assets|
10
+ path = File.join(snack.app.public_dir, assets[:route])
11
+ FileUtils.mkdir_p File.dirname(path)
12
+ puts "compiling #{path}" if opts[:verbose]
13
+ File.open(path, 'w') do |file|
14
+ file.write compile(assets[:paths])[:body]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,17 @@
1
+ unless defined?(APP_FILE)
2
+ $stderr.write "Error: Please set APP_FILE before setting up AssetSnack rake tasks.\n"
3
+ $stderr.write "Example:\n"
4
+ $stderr.write " APP_FILE = 'init.rb'\n"
5
+ $stderr.write " require 'sinatra/asset_snack/rake'\n"
6
+ $stderr.write "\n"
7
+ exit
8
+ end
9
+
10
+ namespace :assetsnack do
11
+ desc "Build assets"
12
+ task :build do
13
+ require File.expand_path(APP_FILE, Dir.pwd)
14
+ require 'sinatra/asset_snack/precompile'
15
+ Sinatra::AssetSnack.precompile!(verbose:true)
16
+ end
17
+ end
@@ -1,7 +1,7 @@
1
1
  module Sinatra
2
2
  module AssetSnack
3
3
  def self.version
4
- '0.1.5'
4
+ '0.1.6'
5
5
  end
6
6
  end # AssetSnack
7
7
  end # Sinatra
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.add_dependency 'coffee-script'
15
15
  s.add_dependency 'sass'
16
16
  s.add_dependency 'mime-types'
17
+ s.add_dependency 'yajl-ruby'
17
18
 
18
19
  s.add_development_dependency "minitest"
19
20
  s.add_development_dependency "minitest-reporters"
@@ -39,5 +39,9 @@ module Sinatra
39
39
  Sinatra::AssetSnack.assets.must_include js_assets
40
40
  Sinatra::AssetSnack.assets.must_include css_assets
41
41
  end
42
+
43
+ it 'should be able to determine public directory' do
44
+ Sinatra::AssetSnack.app.public_dir.must_equal App.public_dir
45
+ end
42
46
  end
43
- end
47
+ end
@@ -10,7 +10,6 @@ module Sinatra
10
10
  (function() {
11
11
  (function() {
12
12
  var x;
13
-
14
13
  return x = "test";
15
14
  });
16
15
 
@@ -18,7 +17,7 @@ module Sinatra
18
17
  EOS
19
18
  }
20
19
 
21
- before(:all) do
20
+ before do
22
21
  Sinatra::AssetSnack.configuration.compilers[:coffee_script] = {}
23
22
  end
24
23
 
@@ -43,4 +42,4 @@ module Sinatra
43
42
  AssetSnack.compiler_for('test.coffee').must_equal AssetSnack::Compilers::CoffeeScriptCompiler
44
43
  end
45
44
  end
46
- end
45
+ end
@@ -0,0 +1,28 @@
1
+ require './test/test_helper'
2
+ require 'sinatra/asset_snack/precompile'
3
+
4
+ module Sinatra::AssetSnack
5
+ describe "Sinatra::AssetSnack.precompile!" do
6
+ let(:app) { App.new }
7
+ let(:public) { App.public_dir }
8
+ let(:paths) do
9
+ Sinatra::AssetSnack.assets.map do |i|
10
+ File.join(public, File.dirname(i[:route]))
11
+ end
12
+ end
13
+
14
+ before do
15
+ FileUtils.rm_r(public) if Dir.exists?(public)
16
+ end
17
+
18
+ it "must write compiled files to the public directory" do
19
+ Sinatra::AssetSnack.precompile!
20
+ paths.wont_be_empty
21
+ paths.each {|dir| Dir.glob("#{dir}/*").wont_be_empty }
22
+ end
23
+
24
+ after do
25
+ FileUtils.rm_r(public) if Dir.exists?(public)
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,6 @@
1
1
  ENV['RACK_ENV'] = 'test'
2
- require 'minitest/spec'
3
2
  require 'minitest/autorun'
3
+ require 'minitest/spec'
4
4
  require "minitest/reporters"
5
5
  require "mocha/setup"
6
6
  require 'rack/test'
@@ -15,3 +15,4 @@ class App < Sinatra::Base
15
15
  asset_map '/javascript/application_js_only.js', ['test/fixtures/**/*.js']
16
16
  asset_map '/stylesheets/application.css', ['test/fixtures/**/*.scss']
17
17
  end
18
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-asset-snack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Kitzelman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-30 00:00:00.000000000 Z
11
+ date: 2014-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yajl-ruby
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: minitest
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -145,6 +159,7 @@ extensions: []
145
159
  extra_rdoc_files: []
146
160
  files:
147
161
  - .gitignore
162
+ - .travis.yml
148
163
  - Gemfile
149
164
  - Gemfile.lock
150
165
  - LICENSE.txt
@@ -158,6 +173,8 @@ files:
158
173
  - lib/sinatra/asset_snack/configuration.rb
159
174
  - lib/sinatra/asset_snack/extensions.rb
160
175
  - lib/sinatra/asset_snack/helpers.rb
176
+ - lib/sinatra/asset_snack/precompile.rb
177
+ - lib/sinatra/asset_snack/rake.rb
161
178
  - lib/sinatra/asset_snack/version.rb
162
179
  - sinatra-asset-snack.gemspec
163
180
  - test/asset_snack_test.rb
@@ -170,8 +187,8 @@ files:
170
187
  - test/fixtures/test.scss
171
188
  - test/fixtures/test_two.coffee
172
189
  - test/helpers_test.rb
190
+ - test/precompile_test.rb
173
191
  - test/test_helper.rb
174
- - travis.yml
175
192
  homepage: http://github.com/benkitzelman/sinatra-asset-snack
176
193
  licenses: []
177
194
  metadata: {}
@@ -191,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
208
  version: '0'
192
209
  requirements: []
193
210
  rubyforge_project:
194
- rubygems_version: 2.0.3
211
+ rubygems_version: 2.2.2
195
212
  signing_key:
196
213
  specification_version: 4
197
214
  summary: Real quick asset compilation of Coffeescript to Javascript and SASS to CSS
data/travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - "1.9.2"
4
- - "1.9.3"
5
- - jruby-19mode # JRuby in 1.9 mode
6
- - rbx-19mode
7
- # script: "rake ci"