sinatra-asset-snack 0.0.1
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.
- data/.gitignore +1 -0
- data/README.md +45 -0
- data/lib/sinatra/asset_snack/asset_compiler.rb +28 -0
- data/lib/sinatra/asset_snack/asset_snack.rb +59 -0
- data/lib/sinatra/asset_snack/coffee_compiler.rb +12 -0
- data/lib/sinatra/asset_snack/helpers.rb +11 -0
- data/lib/sinatra/asset_snack/sass_compiler.rb +12 -0
- data/lib/sinatra/asset_snack/version.rb +7 -0
- data/lib/sinatra/asset_snack.rb +5 -0
- data/sinatra-asset-snack.gemspec +16 -0
- metadata +105 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
.*.swp
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# AssetSnack for Sinatra
|
2
|
+
|
3
|
+
A lean asset compiler for Sinatra developed specifically for Coffeescript and SASS.
|
4
|
+
It stitches all assets for a route into a single file, no uglification, no minification (configure your server to use Gzip),
|
5
|
+
just lean, fast compilation.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
### Bundler users
|
9
|
+
|
10
|
+
If you use Bundler, add it to your *Gemfile.*
|
11
|
+
|
12
|
+
``` ruby
|
13
|
+
gem install sinatra-asset-snack
|
14
|
+
```
|
15
|
+
|
16
|
+
|
17
|
+
## Setup
|
18
|
+
|
19
|
+
Install the plugin configure your routes.
|
20
|
+
|
21
|
+
``` ruby
|
22
|
+
require 'sinatra/asset_snack'
|
23
|
+
|
24
|
+
class App < Sinatra::Base
|
25
|
+
register Sinatra::AssetSnack
|
26
|
+
asset_map '/javascript/application.js', ['assets/js/**/*.js', 'assets/js/**/*.coffee']
|
27
|
+
asset_map '/stylesheets/application.css', ['assets/stylesheets/**/*.css', 'assets/stylesheets/**/*.scss']
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
In your view / layout reference your assets using the relevant tag
|
32
|
+
```
|
33
|
+
<link rel="stylesheet" href="/stylesheets/application.css" type="text/css" />
|
34
|
+
<script src="/javascript/application.js" type="text/javascript"></script>
|
35
|
+
```
|
36
|
+
|
37
|
+
If you want - use the helpers to add cache busting
|
38
|
+
```
|
39
|
+
<link rel="stylesheet" href="<%= nocache '/stylesheets/application.css' %>" type="text/css" />
|
40
|
+
<script src="<%= nocache '/javascript/application.js' %>" type="text/javascript"></script>
|
41
|
+
```
|
42
|
+
|
43
|
+
[sinatra]: http://sinatrarb.com
|
44
|
+
[coffee-script]: http://github.com/josh/ruby-coffee-script
|
45
|
+
[sass]: http://sass-lang.com/
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Sinatra
|
2
|
+
module AssetSnack
|
3
|
+
class AssetCompiler
|
4
|
+
|
5
|
+
class << self
|
6
|
+
attr_reader :compiled_mime_type, :handled_extensions
|
7
|
+
|
8
|
+
def compile_file(file_path)
|
9
|
+
ext = File.extname(file_path).downcase[1..-1]
|
10
|
+
return unless ext && handled_extensions.include?(ext.to_sym)
|
11
|
+
|
12
|
+
file_content = File.read file_path
|
13
|
+
new.compile(file_content)
|
14
|
+
end
|
15
|
+
|
16
|
+
def handle_extensions(*extensions)
|
17
|
+
@handled_extensions = extensions
|
18
|
+
AssetSnack.register_compiler self, extensions
|
19
|
+
end
|
20
|
+
|
21
|
+
def mime_type(type)
|
22
|
+
@compiled_mime_type = type
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end #Asset
|
28
|
+
end #GreyNomad
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Sinatra
|
2
|
+
module AssetSnack
|
3
|
+
class << self
|
4
|
+
attr_reader :compilers
|
5
|
+
|
6
|
+
def registered(app)
|
7
|
+
app.extend ClassMethods
|
8
|
+
app.send(:include, InstanceMethods)
|
9
|
+
app.send(:helpers, Helpers)
|
10
|
+
end
|
11
|
+
|
12
|
+
def register_compiler(compiler, handled_extensions)
|
13
|
+
@compilers ||= {}
|
14
|
+
handled_extensions.each do |ext|
|
15
|
+
@compilers[ext.downcase.to_sym] = compiler
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def compiler_for(file_path)
|
20
|
+
ext = (File.extname(file_path) || '.').downcase[1..-1]
|
21
|
+
@compilers[ext.to_sym] unless ext.nil?
|
22
|
+
end
|
23
|
+
end # self
|
24
|
+
|
25
|
+
module ClassMethods
|
26
|
+
def asset_map(route, paths)
|
27
|
+
self.get route do
|
28
|
+
content = compile paths
|
29
|
+
[200, {'Content-Type' => content[:mime_type]}, content[:body]]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end # ClassMethods
|
33
|
+
|
34
|
+
module InstanceMethods
|
35
|
+
def compile(paths)
|
36
|
+
expand(paths).reduce({body: ''}) do |content, path|
|
37
|
+
next unless File.exists?(path)
|
38
|
+
|
39
|
+
if compiler = AssetSnack.compiler_for(path)
|
40
|
+
compiled = compiler.compile_file(path)
|
41
|
+
content_type = compiler.compiled_mime_type
|
42
|
+
else
|
43
|
+
compiled = File.read(path)
|
44
|
+
end
|
45
|
+
|
46
|
+
{
|
47
|
+
mime_type: content_type || content[:mime_type] || 'text/plain',
|
48
|
+
body: content[:body] + "\n\n/** #{File.basename path} **/\n\n" + compiled
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def expand(paths)
|
54
|
+
paths.reduce([]) { |file_list, path| file_list + Dir.glob(path) }.uniq
|
55
|
+
end
|
56
|
+
end #InstanceMethods
|
57
|
+
|
58
|
+
end # AssetSnack
|
59
|
+
end #Sinatra
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require './lib/sinatra/asset_snack'
|
2
|
+
Gem::Specification.new do |s|
|
3
|
+
s.name = 'sinatra-asset-snack'
|
4
|
+
s.version = Sinatra::AssetSnack.version
|
5
|
+
s.summary = 'Real quick asset compilation of Coffeescript to Javascript and SASS to CSS for Sinatra'
|
6
|
+
s.description = 'Simple and effective asset compilation, supporting Coffeescript and SASS. A lean alternative to larger, slower asset management gems.'
|
7
|
+
s.authors = ['Ben Kitzelman']
|
8
|
+
s.email = ['benkitzelman@hotmail.com']
|
9
|
+
s.homepage = 'http://github.com/benkitzelman/sinatra-asset-snack'
|
10
|
+
s.files = `git ls-files`.strip.split("\n")
|
11
|
+
s.executables = Dir['bin/*'].map { |f| File.basename(f) }
|
12
|
+
|
13
|
+
s.add_dependency 'sinatra'
|
14
|
+
s.add_dependency 'coffee-script'
|
15
|
+
s.add_dependency 'sass'
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra-asset-snack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ben Kitzelman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: coffee-script
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sass
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Simple and effective asset compilation, supporting Coffeescript and SASS.
|
63
|
+
A lean alternative to larger, slower asset management gems.
|
64
|
+
email:
|
65
|
+
- benkitzelman@hotmail.com
|
66
|
+
executables: []
|
67
|
+
extensions: []
|
68
|
+
extra_rdoc_files: []
|
69
|
+
files:
|
70
|
+
- .gitignore
|
71
|
+
- README.md
|
72
|
+
- lib/sinatra/asset_snack.rb
|
73
|
+
- lib/sinatra/asset_snack/asset_compiler.rb
|
74
|
+
- lib/sinatra/asset_snack/asset_snack.rb
|
75
|
+
- lib/sinatra/asset_snack/coffee_compiler.rb
|
76
|
+
- lib/sinatra/asset_snack/helpers.rb
|
77
|
+
- lib/sinatra/asset_snack/sass_compiler.rb
|
78
|
+
- lib/sinatra/asset_snack/version.rb
|
79
|
+
- sinatra-asset-snack.gemspec
|
80
|
+
homepage: http://github.com/benkitzelman/sinatra-asset-snack
|
81
|
+
licenses: []
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 1.8.24
|
101
|
+
signing_key:
|
102
|
+
specification_version: 3
|
103
|
+
summary: Real quick asset compilation of Coffeescript to Javascript and SASS to CSS
|
104
|
+
for Sinatra
|
105
|
+
test_files: []
|