snowball 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.
- data/bin/roll.js +25 -0
- data/lib/snowball/config.rb +21 -21
- data/lib/snowball/roller.rb +5 -4
- data/lib/snowball/sinatra.rb +8 -7
- data/lib/snowball/version.rb +1 -1
- data/spec/fixtures/js/raw-2.js +1 -0
- data/spec/fixtures/js/raw.coffee +1 -0
- data/spec/fixtures/snowball_app.rb +2 -1
- data/spec/snowball_spec.rb +13 -1
- metadata +6 -2
data/bin/roll.js
CHANGED
@@ -11,6 +11,10 @@ var argv = optimist
|
|
11
11
|
.option('help', {
|
12
12
|
desc : 'Show this help'
|
13
13
|
})
|
14
|
+
.option('raw', {
|
15
|
+
alias : 'r',
|
16
|
+
desc : 'Just compile entry file, without using browserify.'
|
17
|
+
})
|
14
18
|
.option('require', {
|
15
19
|
alias : 'r',
|
16
20
|
desc : 'A module name or file to bundle.require()\n'
|
@@ -38,6 +42,27 @@ var argv = optimist
|
|
38
42
|
if (argv.help) {
|
39
43
|
return optimist.showHelp()
|
40
44
|
}
|
45
|
+
if (argv.raw) {
|
46
|
+
var compilers = {
|
47
|
+
coffee: function (data) {
|
48
|
+
var coffee = require("coffee-script");
|
49
|
+
return coffee.compile(data);
|
50
|
+
}
|
51
|
+
};
|
52
|
+
(argv._.concat(argv.entry || [])).forEach(function (entry) {
|
53
|
+
// todo: keep a map of extension => compiler instead (in order to support jade compiling too)
|
54
|
+
var compile = compilers[path.extname(entry).replace(/^\./, "")];
|
55
|
+
fs.readFile(entry, function (err, data) {
|
56
|
+
if (err) throw err;
|
57
|
+
if (compile) data = compile(data.toString());
|
58
|
+
process.stdout.write("\n");
|
59
|
+
process.stdout.write(data);
|
60
|
+
process.stdout.write("\n");
|
61
|
+
});
|
62
|
+
});
|
63
|
+
return;
|
64
|
+
}
|
65
|
+
|
41
66
|
|
42
67
|
// Parse argv.env properly
|
43
68
|
// turns argv.env strings like ['FOO=bar', 'BAZ=qux', ...] into an object of { FOO: 'bar', BAZ:'qux' }
|
data/lib/snowball/config.rb
CHANGED
@@ -2,50 +2,50 @@
|
|
2
2
|
module Snowball
|
3
3
|
class Config
|
4
4
|
class Builder
|
5
|
-
def initialize(config)
|
5
|
+
def initialize(config = {})
|
6
6
|
@config = config
|
7
|
+
@config[:extensions] ||= [:js, :coffee]
|
8
|
+
@config[:source_paths] ||= []
|
9
|
+
@config[:raw] ||= []
|
10
|
+
@config[:source] ||= []
|
11
|
+
@config[:includes] ||= []
|
12
|
+
@config[:ignores] = []
|
13
|
+
@config[:env] ||= {}
|
14
|
+
@config[:prelude] ||= true
|
7
15
|
end
|
8
16
|
def http_path(path)
|
9
|
-
@config
|
17
|
+
@config[:http_path] = path
|
10
18
|
end
|
11
19
|
alias_method :set_serve_path, :http_path # todo: deprecate
|
12
20
|
def source_path(path)
|
13
|
-
@config
|
21
|
+
@config[:source_paths] << File.expand_path(path)
|
14
22
|
end
|
15
23
|
|
16
24
|
alias_method :add_load_path, :source_path # todo: deprecate
|
17
25
|
def raw(glob_string)
|
18
|
-
@config
|
26
|
+
@config[:raw] << glob_string
|
27
|
+
end
|
28
|
+
|
29
|
+
def source(glob_string)
|
30
|
+
@config[:source] << glob_string
|
19
31
|
end
|
20
32
|
|
21
33
|
def ignore(node_module)
|
22
|
-
@config
|
34
|
+
@config[:ignores] << node_module
|
23
35
|
end
|
24
36
|
|
25
37
|
def setenv(*args)
|
26
|
-
@config
|
27
|
-
@config
|
38
|
+
@config[:env].merge!(args.first) and return if args.size == 1
|
39
|
+
@config[:env][args.first] = args[1]
|
28
40
|
end
|
29
41
|
|
30
42
|
def include(node_module)
|
31
|
-
@config
|
43
|
+
@config[:includes] << node_module
|
32
44
|
end
|
33
45
|
|
34
46
|
def prelude(bool)
|
35
|
-
@config
|
47
|
+
@config[:prelude] = bool
|
36
48
|
end
|
37
49
|
end
|
38
|
-
|
39
|
-
attr_accessor :http_path, :source_paths, :raw, :extensions, :includes, :ignores, :prelude, :env
|
40
|
-
|
41
|
-
def initialize
|
42
|
-
@extensions = [:js, :coffee]
|
43
|
-
@source_paths = []
|
44
|
-
@raw = []
|
45
|
-
@includes = []
|
46
|
-
@ignores = []
|
47
|
-
@env = {}
|
48
|
-
@prelude = true
|
49
|
-
end
|
50
50
|
end
|
51
51
|
end
|
data/lib/snowball/roller.rb
CHANGED
@@ -8,16 +8,17 @@ module Snowball
|
|
8
8
|
def self.roll(entry, opts)
|
9
9
|
args = []
|
10
10
|
|
11
|
-
ignores = opts
|
11
|
+
ignores = opts[:ignores].dup
|
12
12
|
ignores.unshift *%w(jsdom xmlhttprequest location navigator)
|
13
13
|
ignores.uniq!
|
14
14
|
|
15
15
|
args << ignores.map { |node_module| "--ignore #{node_module}" }.join(" ")
|
16
|
-
args << opts
|
17
|
-
args << "--prelude #{!!opts
|
16
|
+
args << opts[:includes].map { |node_module| "--require #{node_module}" }.join(" ")
|
17
|
+
args << "--prelude #{!!opts[:prelude]}"
|
18
18
|
args << "--entry #{entry}"
|
19
|
+
args << "--raw" if opts[:raw]
|
19
20
|
|
20
|
-
args += (opts
|
21
|
+
args += (opts[:env] || {}).map do |k,v|
|
21
22
|
"--env #{k}=#{v}"
|
22
23
|
end
|
23
24
|
|
data/lib/snowball/sinatra.rb
CHANGED
@@ -4,8 +4,8 @@ module Sinatra
|
|
4
4
|
module Snowball
|
5
5
|
# Resolves a file relative to the source path
|
6
6
|
def self.resolve_file(config, file)
|
7
|
-
source_paths = config
|
8
|
-
extensions = config
|
7
|
+
source_paths = config[:source_paths]
|
8
|
+
extensions = config[:extensions]
|
9
9
|
|
10
10
|
source_paths.each do |source_path|
|
11
11
|
try_file = File.expand_path(File.join(source_path, file))
|
@@ -27,29 +27,30 @@ module Sinatra
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def snowball(&block)
|
30
|
-
config =
|
30
|
+
config = {}
|
31
31
|
builder = ::Snowball::Config::Builder.new(config)
|
32
32
|
builder.send(:instance_eval, &block)
|
33
33
|
self.set :snowball, config
|
34
|
-
self.get "#{config
|
34
|
+
self.get "#{config[:http_path]}/*" do |bundle|
|
35
35
|
begin
|
36
36
|
entryfile = Snowball.resolve_file(config, bundle)
|
37
37
|
rescue Errno::ENOENT => e
|
38
38
|
halt 404, "File #{bundle} not found"
|
39
39
|
end
|
40
40
|
|
41
|
-
if File.extname(bundle) != '.js' or config.
|
41
|
+
if File.extname(bundle) != '.js' or config[:source].any? { |glob_str| File.fnmatch(glob_str, entryfile) }
|
42
42
|
send_file entryfile
|
43
43
|
else
|
44
|
+
raw = config[:raw].any? { |glob_str| File.fnmatch(glob_str, entryfile) }
|
44
45
|
content_type :js
|
45
|
-
[200, ::Snowball::Roller.roll(*[entryfile, config].compact)]
|
46
|
+
[200, ::Snowball::Roller.roll(*[entryfile, config.merge({:raw => raw})].compact)]
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
50
51
|
module Helpers
|
51
52
|
def javascript_path(file)
|
52
|
-
"#{self.settings.snowball
|
53
|
+
"#{self.settings.snowball[:http_path]}/#{file}.js"
|
53
54
|
end
|
54
55
|
|
55
56
|
def javascript_tag(file, opts={})
|
data/lib/snowball/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
console.log("That is awesome!");
|
@@ -0,0 +1 @@
|
|
1
|
+
alert "I knew it!" if elvis?
|
data/spec/snowball_spec.rb
CHANGED
@@ -31,12 +31,24 @@ describe "SnowballApp" do
|
|
31
31
|
last_response.body.should match compiled
|
32
32
|
end
|
33
33
|
|
34
|
-
it "serves the coffee-script file
|
34
|
+
it "serves the coffee-script file as source if requested with .coffee as extension" do
|
35
35
|
get "/js/require.coffee"
|
36
36
|
last_response.status.should eq 200
|
37
37
|
last_response.body.should match Regexp.escape("test = ->")
|
38
38
|
end
|
39
39
|
|
40
|
+
it "serves the javascript entry raw (not browserified) it matches the configured glob strings" do
|
41
|
+
get "/js/raw-2.js"
|
42
|
+
last_response.status.should eq 200
|
43
|
+
last_response.body.should match Regexp.escape('console.log("That is awesome!");')
|
44
|
+
end
|
45
|
+
|
46
|
+
it "serves the coffeescript entry raw (combiled, but not browserified) it matches the configured glob strings" do
|
47
|
+
get "/js/raw.js"
|
48
|
+
last_response.status.should eq 200
|
49
|
+
last_response.body.should match Regexp.escape('alert("I knew it!");')
|
50
|
+
end
|
51
|
+
|
40
52
|
it "includes transitive dependencies" do
|
41
53
|
get "/js/require.js"
|
42
54
|
last_response.status.should eq 200
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snowball
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -123,6 +123,8 @@ files:
|
|
123
123
|
- spec/fixtures/js/hello.jade
|
124
124
|
- spec/fixtures/js/pastry/tart.js
|
125
125
|
- spec/fixtures/js/pastry/tartlet.coffee
|
126
|
+
- spec/fixtures/js/raw-2.js
|
127
|
+
- spec/fixtures/js/raw.coffee
|
126
128
|
- spec/fixtures/js/require-error.js
|
127
129
|
- spec/fixtures/js/require.coffee
|
128
130
|
- spec/fixtures/js/some.coffee
|
@@ -164,6 +166,8 @@ test_files:
|
|
164
166
|
- spec/fixtures/js/hello.jade
|
165
167
|
- spec/fixtures/js/pastry/tart.js
|
166
168
|
- spec/fixtures/js/pastry/tartlet.coffee
|
169
|
+
- spec/fixtures/js/raw-2.js
|
170
|
+
- spec/fixtures/js/raw.coffee
|
167
171
|
- spec/fixtures/js/require-error.js
|
168
172
|
- spec/fixtures/js/require.coffee
|
169
173
|
- spec/fixtures/js/some.coffee
|