zassets 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/Gemfile +3 -0
- data/README.md +48 -0
- data/bin/zassets +6 -0
- data/lib/sprockets/less_template.rb +45 -0
- data/lib/zassets.rb +8 -0
- data/lib/zassets/cli.rb +82 -0
- data/lib/zassets/compiler.rb +25 -0
- data/lib/zassets/config.rb +36 -0
- data/lib/zassets/exceptions.rb +3 -0
- data/lib/zassets/server.rb +45 -0
- data/lib/zassets/sprockets_env.rb +27 -0
- data/lib/zassets/version.rb +3 -0
- data/zassets.gemspec +31 -0
- metadata +157 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
z'assets
|
2
|
+
========
|
3
|
+
|
4
|
+
z'assets is a tool to manage assets for your web application. It uses
|
5
|
+
sprockets to handle the assets and sprockets-helpers to provide
|
6
|
+
required helpers.
|
7
|
+
|
8
|
+
Currently the following asset kinds are handled:
|
9
|
+
|
10
|
+
* JavaScript
|
11
|
+
* CoffeeScript
|
12
|
+
* CSS
|
13
|
+
* LESS
|
14
|
+
|
15
|
+
|
16
|
+
Usage
|
17
|
+
-----
|
18
|
+
|
19
|
+
Create a `config/zassets.yaml` file in your app:
|
20
|
+
|
21
|
+
verbose: false
|
22
|
+
host: ::1
|
23
|
+
port: 9292
|
24
|
+
base_url: '/assets'
|
25
|
+
paths:
|
26
|
+
- 'assets/styles'
|
27
|
+
public_path: 'public/assets'
|
28
|
+
compile:
|
29
|
+
- 'main.css'
|
30
|
+
|
31
|
+
Then you can launch development HTTP server with the following command:
|
32
|
+
|
33
|
+
zassets serve
|
34
|
+
|
35
|
+
And compile your assets:
|
36
|
+
|
37
|
+
zassets
|
38
|
+
|
39
|
+
You can override some config options using command line arguments, the
|
40
|
+
complete list is printed on the standard output on `zassets --help`.
|
41
|
+
|
42
|
+
|
43
|
+
Installation
|
44
|
+
------------
|
45
|
+
|
46
|
+
Assuming you have a working rubygems installation:
|
47
|
+
|
48
|
+
gem install zassets
|
data/bin/zassets
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'tilt'
|
2
|
+
|
3
|
+
module Sprockets
|
4
|
+
class LessTemplate < Tilt::Template
|
5
|
+
self.default_mime_type = 'text/css'
|
6
|
+
|
7
|
+
def self.engine_initialized?
|
8
|
+
defined? ::Less
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize_engine
|
12
|
+
require_template_library 'less'
|
13
|
+
end
|
14
|
+
|
15
|
+
def prepare
|
16
|
+
end
|
17
|
+
|
18
|
+
def evaluate(context, locals, &block)
|
19
|
+
options = {
|
20
|
+
:filename => eval_file,
|
21
|
+
:paths => [File.dirname(eval_file)]
|
22
|
+
}
|
23
|
+
parser = ::Less::Parser.new(options)
|
24
|
+
tree = parser.parse(data)
|
25
|
+
depend_on(context, eval_file)
|
26
|
+
tree.to_css
|
27
|
+
rescue ::Less::ParseError => e
|
28
|
+
context.__LINE__ = e.line
|
29
|
+
raise e
|
30
|
+
end
|
31
|
+
|
32
|
+
def depend_on(context, path)
|
33
|
+
parser = ::Less::Parser.new({
|
34
|
+
:filename => path,
|
35
|
+
:paths => [File.dirname(path)]
|
36
|
+
})
|
37
|
+
parser.parse(File.read(path))
|
38
|
+
parser.imports.each do |i|
|
39
|
+
dependency_path = File.join(File.dirname(path), i)
|
40
|
+
context.depend_on(dependency_path)
|
41
|
+
depend_on(context, dependency_path)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/zassets.rb
ADDED
data/lib/zassets/cli.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module ZAssets
|
4
|
+
class CLI
|
5
|
+
def initialize(args)
|
6
|
+
@options = args_parse! args
|
7
|
+
end
|
8
|
+
|
9
|
+
def args_parse!(args)
|
10
|
+
options = {}
|
11
|
+
parser = OptionParser.new do |o|
|
12
|
+
o.banner = "Usage: #{File.basename $0} [options] [compile|serve]"
|
13
|
+
|
14
|
+
o.on '-v', '--verbose', 'Enable verbose mode' do |v|
|
15
|
+
options[:verbose] = v
|
16
|
+
end
|
17
|
+
|
18
|
+
o.on '-c', '--config FILE', 'Load default options from FILE' do |f|
|
19
|
+
options[:config_file] = f
|
20
|
+
end
|
21
|
+
|
22
|
+
o.on '-o', '--host HOST', 'Listen on HOST (default: ::1)' do |h|
|
23
|
+
options[:host] = h
|
24
|
+
end
|
25
|
+
|
26
|
+
o.on '-p', '--port PORT', 'Listen on PORT (default: 9292)' do |p|
|
27
|
+
options[:port] = p
|
28
|
+
end
|
29
|
+
|
30
|
+
o.on '-h', '--help', 'Show this message' do
|
31
|
+
puts o
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
o.on '-V', '--version', 'Show version' do
|
36
|
+
puts VERSION
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
begin
|
42
|
+
parser.parse! args
|
43
|
+
rescue OptionParser::InvalidOption => e
|
44
|
+
warn e.message
|
45
|
+
puts parser
|
46
|
+
exit 64
|
47
|
+
end
|
48
|
+
|
49
|
+
if args.last && args.last == 'serve'
|
50
|
+
options[:command] = :serve
|
51
|
+
elsif ! args.last
|
52
|
+
options[:command] = :compile
|
53
|
+
else
|
54
|
+
puts parser
|
55
|
+
exit 64
|
56
|
+
end
|
57
|
+
|
58
|
+
options
|
59
|
+
end
|
60
|
+
|
61
|
+
def config
|
62
|
+
@config ||= Config.new @options
|
63
|
+
end
|
64
|
+
|
65
|
+
def run
|
66
|
+
case config[:command]
|
67
|
+
when :serve
|
68
|
+
server.run
|
69
|
+
when :compile
|
70
|
+
compiler.compile
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def compiler
|
75
|
+
@compiler ||= Compiler.new config
|
76
|
+
end
|
77
|
+
|
78
|
+
def server
|
79
|
+
@server ||= Server.new config
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
|
3
|
+
module ZAssets
|
4
|
+
class Compiler
|
5
|
+
def initialize(config)
|
6
|
+
@config = config
|
7
|
+
end
|
8
|
+
|
9
|
+
def compile
|
10
|
+
if @config[:compile]
|
11
|
+
manifest.compile(@config[:compile])
|
12
|
+
else
|
13
|
+
manifest.compile
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def manifest
|
18
|
+
@manifest ||= Sprockets::Manifest.new(environment, @config[:public_path])
|
19
|
+
end
|
20
|
+
|
21
|
+
def environment
|
22
|
+
@environment ||= SprocketsEnv.new(@config)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module ZAssets
|
4
|
+
class Config
|
5
|
+
def initialize(options)
|
6
|
+
o = defaults_options
|
7
|
+
o.merge! load_options(options[:config_file]) if options[:config_file]
|
8
|
+
o.merge! options
|
9
|
+
@options = o
|
10
|
+
end
|
11
|
+
|
12
|
+
def defaults_options
|
13
|
+
{
|
14
|
+
:verbose => false,
|
15
|
+
:host => '::1',
|
16
|
+
:port => 9292,
|
17
|
+
:base_url => '/assets',
|
18
|
+
:paths => [],
|
19
|
+
:public_path => 'public/assets',
|
20
|
+
:compile => []
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_options(filepath)
|
25
|
+
return {} unless options = YAML.load_file(filepath)
|
26
|
+
options.keys.each do |key|
|
27
|
+
options[(key.to_sym rescue key) || key] = options.delete(key)
|
28
|
+
end
|
29
|
+
options
|
30
|
+
end
|
31
|
+
|
32
|
+
def [](key)
|
33
|
+
@options[key]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rack'
|
2
|
+
|
3
|
+
module ZAssets
|
4
|
+
class Server
|
5
|
+
def initialize(config)
|
6
|
+
@config = config
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
handler = Rack::Handler.default
|
11
|
+
handler.run app, options do |server|
|
12
|
+
[:INT, :TERM].each do |sig|
|
13
|
+
trap(sig) { server.respond_to?(:stop!) ? server.stop! : server.stop }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def options
|
19
|
+
@options ||= {
|
20
|
+
:environment => :development,
|
21
|
+
:Host => @config[:host],
|
22
|
+
:Port => @config[:port]
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def app
|
27
|
+
sprockets_mount_point = @config[:base_url]
|
28
|
+
sprockets_env = SprocketsEnv.new(@config)
|
29
|
+
|
30
|
+
@app ||= Rack::Builder.new do
|
31
|
+
use Rack::CommonLogger
|
32
|
+
use Rack::ShowExceptions
|
33
|
+
use Rack::Lint
|
34
|
+
|
35
|
+
map sprockets_mount_point do
|
36
|
+
run sprockets_env
|
37
|
+
end
|
38
|
+
|
39
|
+
map '/' do
|
40
|
+
run Rack::File.new 'docroot'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
require 'sprockets-helpers'
|
3
|
+
|
4
|
+
module Sprockets
|
5
|
+
autoload :LessTemplate, 'sprockets/less_template'
|
6
|
+
end
|
7
|
+
|
8
|
+
module ZAssets
|
9
|
+
class SprocketsEnv < Sprockets::Environment
|
10
|
+
def initialize(config)
|
11
|
+
super '.'
|
12
|
+
|
13
|
+
self.logger.level = Logger::DEBUG if config[:verbose]
|
14
|
+
|
15
|
+
self.register_engine '.less', ::Sprockets::LessTemplate
|
16
|
+
|
17
|
+
config[:paths].each { |p| append_path p }
|
18
|
+
|
19
|
+
Sprockets::Helpers.configure do |c|
|
20
|
+
c.environment = self
|
21
|
+
c.prefix = config[:base_url]
|
22
|
+
c.digest = true
|
23
|
+
c.public_path = config[:public_path]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/zassets.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'zassets/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'zassets'
|
6
|
+
s.version = ZAssets::VERSION
|
7
|
+
s.summary = "zassets-#{ZAssets::VERSION}"
|
8
|
+
s.description = <<-eoh.gsub(/^ +/, '')
|
9
|
+
Standalone asset manager based on sprockets and sprockets-helpers.
|
10
|
+
eoh
|
11
|
+
s.homepage = 'https://rubygems.org/gems/zassets'
|
12
|
+
|
13
|
+
s.author = 'Thibault Jouan'
|
14
|
+
s.email = 'tj@a13.fr'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split "\n"
|
17
|
+
s.executables = s.files.grep(/\Abin\//).map { |f| File.basename(f) }
|
18
|
+
|
19
|
+
s.add_dependency 'sprockets', '~> 2.4'
|
20
|
+
s.add_dependency 'sprockets-helpers', '~> 0.4'
|
21
|
+
|
22
|
+
s.add_dependency 'rake', '~> 0.9.2.2'
|
23
|
+
|
24
|
+
#s.add_dependency 'thin', '~> 1.3'
|
25
|
+
#s.add_dependency 'eventmachine', '~> 1.0.0.beta.4'
|
26
|
+
#s.add_dependency 'puma', '~> 1.4'
|
27
|
+
|
28
|
+
s.add_dependency 'therubyracer', '~> 0.10'
|
29
|
+
s.add_dependency 'coffee-script', '~> 2.2'
|
30
|
+
s.add_dependency 'less', '~> 2.2'
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zassets
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Thibault Jouan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sprockets
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.4'
|
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: '2.4'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sprockets-helpers
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0.4'
|
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.4'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.2.2
|
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.9.2.2
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: therubyracer
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.10'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.10'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: coffee-script
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '2.2'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '2.2'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: less
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '2.2'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '2.2'
|
110
|
+
description: ! 'Standalone asset manager based on sprockets and sprockets-helpers.
|
111
|
+
|
112
|
+
'
|
113
|
+
email: tj@a13.fr
|
114
|
+
executables:
|
115
|
+
- zassets
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- .gitignore
|
120
|
+
- Gemfile
|
121
|
+
- README.md
|
122
|
+
- bin/zassets
|
123
|
+
- lib/sprockets/less_template.rb
|
124
|
+
- lib/zassets.rb
|
125
|
+
- lib/zassets/cli.rb
|
126
|
+
- lib/zassets/compiler.rb
|
127
|
+
- lib/zassets/config.rb
|
128
|
+
- lib/zassets/exceptions.rb
|
129
|
+
- lib/zassets/server.rb
|
130
|
+
- lib/zassets/sprockets_env.rb
|
131
|
+
- lib/zassets/version.rb
|
132
|
+
- zassets.gemspec
|
133
|
+
homepage: https://rubygems.org/gems/zassets
|
134
|
+
licenses: []
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ! '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project:
|
153
|
+
rubygems_version: 1.8.23
|
154
|
+
signing_key:
|
155
|
+
specification_version: 3
|
156
|
+
summary: zassets-0.0.1
|
157
|
+
test_files: []
|