bunch 0.2.2 → 1.0.0pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -6
  3. data/Gemfile +3 -1
  4. data/Guardfile +5 -0
  5. data/LICENSE.txt +22 -0
  6. data/Rakefile +7 -12
  7. data/bin/bunch +2 -5
  8. data/bunch.gemspec +30 -23
  9. data/lib/bunch.rb +37 -81
  10. data/lib/bunch/cli.rb +40 -74
  11. data/lib/bunch/combiner.rb +121 -0
  12. data/lib/bunch/compiler.rb +52 -0
  13. data/lib/bunch/compilers/coffee_script.rb +23 -0
  14. data/lib/bunch/compilers/ejs.rb +28 -0
  15. data/lib/bunch/compilers/jade.rb +28 -0
  16. data/lib/bunch/compilers/jst.rb +38 -0
  17. data/lib/bunch/compilers/null.rb +19 -0
  18. data/lib/bunch/compilers/sass.rb +55 -0
  19. data/lib/bunch/content_hash.rb +37 -0
  20. data/lib/bunch/css_minifier.rb +121 -0
  21. data/lib/bunch/file.rb +18 -0
  22. data/lib/bunch/file_cache.rb +159 -0
  23. data/lib/bunch/file_tree.rb +153 -0
  24. data/lib/bunch/ignorer.rb +38 -0
  25. data/lib/bunch/js_minifier.rb +38 -0
  26. data/lib/bunch/middleware.rb +16 -67
  27. data/lib/bunch/pipeline.rb +30 -0
  28. data/lib/bunch/server.rb +56 -0
  29. data/lib/bunch/simple_cache.rb +36 -0
  30. data/lib/bunch/tree_merge.rb +29 -0
  31. data/lib/bunch/version.rb +3 -1
  32. data/spec/bunch/cli_spec.rb +85 -0
  33. data/spec/bunch/combiner_spec.rb +107 -0
  34. data/spec/bunch/compiler_spec.rb +73 -0
  35. data/spec/bunch/compilers/coffee_script_spec.rb +23 -0
  36. data/spec/bunch/compilers/ejs_spec.rb +27 -0
  37. data/spec/bunch/compilers/jade_spec.rb +28 -0
  38. data/spec/bunch/compilers/sass_spec.rb +120 -0
  39. data/spec/bunch/css_minifier_spec.rb +31 -0
  40. data/spec/bunch/file_cache_spec.rb +151 -0
  41. data/spec/bunch/file_tree_spec.rb +127 -0
  42. data/spec/bunch/ignorer_spec.rb +26 -0
  43. data/spec/bunch/js_minifier_spec.rb +35 -0
  44. data/spec/bunch/middleware_spec.rb +41 -0
  45. data/spec/bunch/pipeline_spec.rb +31 -0
  46. data/spec/bunch/server_spec.rb +90 -0
  47. data/spec/bunch/simple_cache_spec.rb +55 -0
  48. data/spec/bunch/tree_merge_spec.rb +30 -0
  49. data/spec/bunch_spec.rb +6 -0
  50. data/spec/example_tree/directory/_combine +2 -0
  51. data/{example/js/test1.js → spec/example_tree/directory/file1} +0 -0
  52. data/{example/js/test2/test2a.js → spec/example_tree/directory/file2} +0 -0
  53. data/{example/js/test2/test2c.js → spec/example_tree/file3} +0 -0
  54. data/spec/spec_helper.rb +38 -0
  55. metadata +224 -102
  56. data/.yardopts +0 -1
  57. data/README.md +0 -4
  58. data/config.ru +0 -6
  59. data/example/config.ru +0 -6
  60. data/example/css/test1.css +0 -1
  61. data/example/css/test2/test2a.scss +0 -1
  62. data/example/css/test2/test2b.css +0 -1
  63. data/example/js/.bunchignore +0 -1
  64. data/example/js/test2/_.yml +0 -2
  65. data/example/js/test2/foo.js +0 -1
  66. data/example/js/test2/test2b.js +0 -1
  67. data/example/js/test3/test3a.js +0 -1
  68. data/example/js/test3/test3b/_.yml +0 -1
  69. data/example/js/test3/test3b/test3bi.js +0 -1
  70. data/example/js/test3/test3b/test3bii.js +0 -1
  71. data/example/js/test4/_.yml +0 -1
  72. data/example/js/test4/test4a.js +0 -1
  73. data/example/js/test4/test4b.coffee +0 -1
  74. data/example/js/test4/test4c.coffee +0 -1
  75. data/example/js/test5/test5a.jst.ejs +0 -1
  76. data/lib/bunch/abstract_node.rb +0 -25
  77. data/lib/bunch/cache.rb +0 -40
  78. data/lib/bunch/coffee_node.rb +0 -39
  79. data/lib/bunch/directory_node.rb +0 -82
  80. data/lib/bunch/ejs_node.rb +0 -50
  81. data/lib/bunch/file_node.rb +0 -25
  82. data/lib/bunch/jade_node.rb +0 -50
  83. data/lib/bunch/null_node.rb +0 -11
  84. data/lib/bunch/rack.rb +0 -38
  85. data/lib/bunch/sass_node.rb +0 -39
  86. data/test/middleware_test.rb +0 -26
  87. data/test/rack_test.rb +0 -93
  88. data/test/test_helper.rb +0 -21
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ module Bunch
6
+ describe Ignorer do
7
+ let(:input_tree) do
8
+ FileTree.from_hash(
9
+ "a" => {"b" => "bb", "c" => "cc", ".DS_Store" => "asfd" }
10
+ )
11
+ end
12
+
13
+ it "ignores .DS_Store files" do
14
+ result = Ignorer.new(input_tree).result
15
+ result.to_hash.must_equal("a" => { "b" => "bb", "c" => "cc" })
16
+ end
17
+
18
+ it "ignores other patterns" do
19
+ pattern = /b/
20
+ Ignorer::PATTERNS << pattern
21
+ result = Ignorer.new(input_tree).result
22
+ result.to_hash.must_equal("a" => { "c" => "cc" })
23
+ Ignorer::PATTERNS.delete pattern
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ module Bunch
6
+ describe JsMinifier do
7
+ let(:file_contents) do
8
+ "(function () { return 10; })();"
9
+ end
10
+
11
+ let(:minified_contents) do
12
+ "!function(){return 10}();"
13
+ end
14
+
15
+ let(:input_tree) do
16
+ FileTree.from_hash(
17
+ "a" => file_contents, "b" => { "c.js" => file_contents }
18
+ )
19
+ end
20
+
21
+ it "minifies .js files, ignoring other files" do
22
+ result = JsMinifier.new(input_tree).result.to_hash
23
+ result["a"].must_equal file_contents
24
+ result["b"]["c.js"].must_equal minified_contents
25
+ end
26
+
27
+ it "raises if the gem isn't available" do
28
+ JsMinifier.any_instance.stubs(:require).raises(LoadError)
29
+ exception = assert_raises(RuntimeError) do
30
+ JsMinifier.new(nil)
31
+ end
32
+ exception.message.must_include "gem install"
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: UTF-8
2
+
3
+ require "spec_helper"
4
+ require "rack"
5
+
6
+ module Bunch
7
+ describe Middleware do
8
+ let(:app) { stub(:app) }
9
+ let(:root) { ::File.expand_path("../../example_tree", __FILE__) }
10
+ let(:middleware) do
11
+ Middleware.new(app, "/javascripts" => root, environment: "production")
12
+ end
13
+
14
+ it "serves matching requests" do
15
+ env = Rack::MockRequest.env_for("/javascripts/directory")
16
+
17
+ status, headers, body = middleware.call(env)
18
+
19
+ status.must_equal 200
20
+ headers["Content-Type"].must_equal "text/plain"
21
+ body.must_equal ["2\n\n1\n"]
22
+ end
23
+
24
+ it "cascades if there's no appropriate mapping" do
25
+ env = Rack::MockRequest.env_for("/alskjdlakj")
26
+ app.expects(:call).with(env).returns "OK"
27
+
28
+ middleware.call(env).must_equal "OK"
29
+ end
30
+
31
+ it "doesn't cascade if the Bunch server 404s" do
32
+ root = ::File.expand_path("../../example_tree", __FILE__)
33
+ env = Rack::MockRequest.env_for("/javascripts/directories")
34
+ app.expects(:call).never
35
+
36
+ status, headers, body = middleware.call(env)
37
+
38
+ status.must_equal 404
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ module Bunch
6
+ describe Pipeline do
7
+ it "applies an empty pipeline to a tree" do
8
+ pipeline = Pipeline.new([])
9
+ hash = { "a" => { "b" => "c", "d" => "e" }, "f" => "g" }
10
+ in_tree = FileTree.from_hash(hash)
11
+ out_tree = pipeline.process(in_tree)
12
+ out_tree.to_hash.must_equal hash
13
+ end
14
+
15
+ it "compiles, combines, and minifies CoffeeScript files" do
16
+ pipeline = Pipeline.new [Compiler, Combiner, JsMinifier]
17
+ in_tree = FileTree.from_hash(
18
+ "a" => {
19
+ "_combine" => "c\nb\n",
20
+ "b.coffee" => "local = 'world'\n@B = hello: local",
21
+ "c.coffee" => "@C = goodnight: 'moon'"
22
+ }
23
+ )
24
+ # obviously this is really brittle, but it's just for acceptance anyway
25
+ pipeline.process(in_tree).to_hash.must_equal(
26
+ "a.js" => "!function(){this.C={goodnight:\"moon\"}}.call(this)," \
27
+ "function(){var o;o=\"world\",this.B={hello:o}}.call(this);"
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,90 @@
1
+ # encoding: UTF-8
2
+
3
+ require "spec_helper"
4
+ require "rack"
5
+
6
+ module Bunch
7
+ describe Server do
8
+ describe "from the filesystem" do
9
+ let(:root) { ::File.expand_path("../../example_tree", __FILE__) }
10
+ let(:server) { Server.new(root: root, environment: "development") }
11
+
12
+ it "serves a combined file" do
13
+ env = Rack::MockRequest.env_for("/directory")
14
+
15
+ status, headers, body = server.call(env)
16
+
17
+ status.must_equal 200
18
+ headers["Content-Type"].must_equal "text/plain"
19
+ body.must_equal ["2\n\n1\n"]
20
+ end
21
+
22
+ it "serves a non-combined file" do
23
+ env = Rack::MockRequest.env_for("/file3")
24
+
25
+ status, headers, body = server.call(env)
26
+
27
+ status.must_equal 200
28
+ headers["Content-Type"].must_equal "text/plain"
29
+ body.must_equal ["3\n"]
30
+ end
31
+
32
+ it "serves 404 if asked for a nonexistent path" do
33
+ env = Rack::MockRequest.env_for("/nonexistent_file")
34
+
35
+ status, headers, body = server.call(env)
36
+
37
+ status.must_equal 404
38
+ headers["Content-Type"].must_equal "text/plain"
39
+ body.must_equal ["Not Found"]
40
+ end
41
+ end
42
+
43
+ it "shows a backtrace if there's an error" do
44
+ reader = proc { raise "WTF!??" }
45
+ server = Server.new(reader: reader, environment: "development")
46
+ env = Rack::MockRequest.env_for("/file3")
47
+
48
+ status, headers, body = server.call(env)
49
+
50
+ status.must_equal 500
51
+ headers["Content-Type"].must_equal "text/plain"
52
+ body[0].must_match(/WTF!\?\?/)
53
+ end
54
+
55
+ describe "serving a JavaScript file" do
56
+ let(:tree) { FileTree.from_hash("foo.js" => "hello;") }
57
+ let(:reader) { proc { tree } }
58
+ let(:server) { Server.new(reader: reader, environment: "development") }
59
+ let(:env) { Rack::MockRequest.env_for("/foo.js") }
60
+
61
+ it "serves the correct MIME type for the requested file" do
62
+ status, headers, body = server.call(env)
63
+
64
+ status.must_equal 200
65
+ headers["Content-Type"].must_equal "application/javascript"
66
+ body.must_equal ["hello;"]
67
+ end
68
+
69
+ it "includes caching headers by default" do
70
+ status, headers, body = server.call(env)
71
+
72
+ %w(Cache-Control Pragma Expires).each do |header_name|
73
+ assert headers.has_key?(header_name), "Missing #{header_name} header"
74
+ end
75
+ end
76
+ end
77
+
78
+ it "shows a backtrace if there's an error" do
79
+ reader = proc { raise "WTF!??" }
80
+ server = Server.new(reader: reader, environment: "development")
81
+ env = Rack::MockRequest.env_for("/file3")
82
+
83
+ status, headers, body = server.call(env)
84
+
85
+ status.must_equal 500
86
+ headers["Content-Type"].must_equal "text/plain"
87
+ body[0].must_match(/WTF!\?\?/)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ module Bunch
6
+ describe SimpleCache do
7
+ let(:input_tree) do
8
+ FileTree.from_hash("a" => "aa", "b" => { "c" => "cc", "d" => "dd" })
9
+ end
10
+
11
+ let(:input_tree_2) do
12
+ FileTree.from_hash("a" => "aa", "b" => { "c" => "ce", "d" => "dd" })
13
+ end
14
+
15
+ let(:input_tree_3) do
16
+ FileTree.from_hash("a" => "aa", "b" => { "d" => "dd", "c" => "cc" })
17
+ end
18
+
19
+ it "delegates to the underlying processor" do
20
+ processor = stub(result: FileTree.from_hash("fff" => "ggg"))
21
+ cache = SimpleCache.new(stub(new: processor))
22
+ cache.new(input_tree).result.to_hash.must_equal "fff" => "ggg"
23
+ end
24
+
25
+ it "caches the results" do
26
+ processor = stub
27
+ processor.stubs(:result).
28
+ returns(FileTree.from_hash("fff" => "ggg")).then.
29
+ returns(FileTree.from_hash("hhh" => "jjj"))
30
+ cache = SimpleCache.new(stub(new: processor))
31
+ cache.new(input_tree).result.to_hash.must_equal "fff" => "ggg"
32
+ cache.new(input_tree).result.to_hash.must_equal "fff" => "ggg"
33
+ end
34
+
35
+ it "expires the results if the input tree changes" do
36
+ processor = stub
37
+ processor.stubs(:result).
38
+ returns(FileTree.from_hash("fff" => "ggg")).then.
39
+ returns(FileTree.from_hash("hhh" => "jjj"))
40
+ cache = SimpleCache.new(stub(new: processor))
41
+ cache.new(input_tree).result.to_hash.must_equal "fff" => "ggg"
42
+ cache.new(input_tree_2).result.to_hash.must_equal "hhh" => "jjj"
43
+ end
44
+
45
+ it "isn't order-dependent" do
46
+ processor = stub
47
+ processor.stubs(:result).
48
+ returns(FileTree.from_hash("fff" => "ggg")).then.
49
+ returns(FileTree.from_hash("hhh" => "jjj"))
50
+ cache = SimpleCache.new(stub(new: processor))
51
+ cache.new(input_tree).result.to_hash.must_equal "fff" => "ggg"
52
+ cache.new(input_tree_3).result.to_hash.must_equal "fff" => "ggg"
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+
3
+ require "spec_helper"
4
+
5
+ module Bunch
6
+ describe TreeMerge do
7
+ let(:empty) { FileTree.from_hash({}) }
8
+ let(:tree_1) { FileTree.from_hash("a" => {"b" => "1", "c" => "2"}) }
9
+ let(:tree_2) { FileTree.from_hash("a" => {"d" => "3"}, "e" => "4") }
10
+ let(:tree_3) { FileTree.from_hash("a" => {"b" => "9"}) }
11
+
12
+ it "no-ops if one tree is empty" do
13
+ TreeMerge.new(empty, tree_1).result.must_equal tree_1
14
+ TreeMerge.new(tree_1, empty).result.must_equal tree_1
15
+ end
16
+
17
+ it "merges two trees with partially-overlapping structures" do
18
+ output = FileTree.from_hash(
19
+ "a" => {"b" => "1", "c" => "2", "d" => "3"}, "e" => "4"
20
+ )
21
+ TreeMerge.new(tree_1, tree_2).result.must_equal output
22
+ end
23
+
24
+ it "prioritizes the left tree over the right one" do
25
+ output = FileTree.from_hash("a" => {"b" => "9", "c" => "2"})
26
+ TreeMerge.new(tree_1, tree_3).result.must_equal tree_1
27
+ TreeMerge.new(tree_3, tree_1).result.must_equal output
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Bunch do
6
+ end
@@ -0,0 +1,2 @@
1
+ file2
2
+ file1
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ if ENV["COVERAGE"]
4
+ require "simplecov"
5
+ SimpleCov.start
6
+ end
7
+
8
+ require "minitest/spec"
9
+ require "minitest/autorun"
10
+ require "minitest/pride"
11
+
12
+ require "mocha/setup"
13
+ require "pry"
14
+
15
+ require "bunch"
16
+
17
+ module Mocha
18
+ module ParameterMatchers
19
+ def responds_to(*messages)
20
+ RespondsTo.new(messages.flatten)
21
+ end
22
+
23
+ class RespondsTo < Base
24
+ def initialize(messages)
25
+ @messages = messages
26
+ end
27
+
28
+ def matches?(available_parameters)
29
+ parameter = available_parameters.shift
30
+ @messages.all? { |msg| parameter.respond_to?(msg) }
31
+ end
32
+
33
+ def mocha_inspect
34
+ "responds_to(#{@messages.map(&:mocha_inspect).join(", ")})"
35
+ end
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,223 +1,345 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bunch
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.2.2
4
+ version: 1.0.0pre1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ryan Fitzgerald
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-18 00:00:00.000000000 Z
11
+ date: 2013-07-15 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- version_requirements: !ruby/object:Gem::Requirement
14
+ name: mime-types
15
+ requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
20
- none: false
21
- name: mime-types
19
+ version: '1.16'
22
20
  type: :runtime
23
21
  prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: yard
24
29
  requirement: !ruby/object:Gem::Requirement
25
30
  requirements:
26
- - - ! '>='
31
+ - - ~>
27
32
  - !ruby/object:Gem::Version
28
- version: '0'
29
- none: false
33
+ version: 0.8.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.3
30
41
  - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 4.3.3
48
+ type: :development
49
+ prerelease: false
31
50
  version_requirements: !ruby/object:Gem::Requirement
32
51
  requirements:
33
- - - ! '>='
52
+ - - ~>
34
53
  - !ruby/object:Gem::Version
35
- version: '0'
36
- none: false
37
- name: yard
54
+ version: 4.3.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.13.1
38
62
  type: :development
39
63
  prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.13.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdiscount
40
71
  requirement: !ruby/object:Gem::Requirement
41
72
  requirements:
42
- - - ! '>='
73
+ - - '>='
43
74
  - !ruby/object:Gem::Version
44
75
  version: '0'
45
- none: false
46
- - !ruby/object:Gem::Dependency
76
+ type: :development
77
+ prerelease: false
47
78
  version_requirements: !ruby/object:Gem::Requirement
48
79
  requirements:
49
- - - ! '>='
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
50
88
  - !ruby/object:Gem::Version
51
89
  version: '0'
52
- none: false
53
- name: rdiscount
54
90
  type: :development
55
91
  prerelease: false
56
- requirement: !ruby/object:Gem::Requirement
92
+ version_requirements: !ruby/object:Gem::Requirement
57
93
  requirements:
58
- - - ! '>='
94
+ - - '>='
59
95
  - !ruby/object:Gem::Version
60
96
  version: '0'
61
- none: false
62
97
  - !ruby/object:Gem::Dependency
63
- version_requirements: !ruby/object:Gem::Requirement
98
+ name: guard
99
+ requirement: !ruby/object:Gem::Requirement
64
100
  requirements:
65
- - - ! '>='
101
+ - - '>='
66
102
  - !ruby/object:Gem::Version
67
103
  version: '0'
68
- none: false
69
- name: shoulda-context
70
104
  type: :development
71
105
  prerelease: false
72
- requirement: !ruby/object:Gem::Requirement
106
+ version_requirements: !ruby/object:Gem::Requirement
73
107
  requirements:
74
- - - ! '>='
108
+ - - '>='
75
109
  - !ruby/object:Gem::Version
76
110
  version: '0'
77
- none: false
78
111
  - !ruby/object:Gem::Dependency
79
- version_requirements: !ruby/object:Gem::Requirement
112
+ name: guard-minitest
113
+ requirement: !ruby/object:Gem::Requirement
80
114
  requirements:
81
- - - ! '>='
115
+ - - '>='
82
116
  - !ruby/object:Gem::Version
83
117
  version: '0'
84
- none: false
85
- name: mocha
86
118
  type: :development
87
119
  prerelease: false
88
- requirement: !ruby/object:Gem::Requirement
120
+ version_requirements: !ruby/object:Gem::Requirement
89
121
  requirements:
90
- - - ! '>='
122
+ - - '>='
91
123
  - !ruby/object:Gem::Version
92
124
  version: '0'
93
- none: false
94
125
  - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
95
134
  version_requirements: !ruby/object:Gem::Requirement
96
135
  requirements:
97
- - - ! '>='
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
98
144
  - !ruby/object:Gem::Version
99
145
  version: '0'
100
- none: false
101
- name: coffee-script
102
146
  type: :development
103
147
  prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rack
104
155
  requirement: !ruby/object:Gem::Requirement
105
156
  requirements:
106
- - - ! '>='
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
107
165
  - !ruby/object:Gem::Version
108
166
  version: '0'
109
- none: false
110
167
  - !ruby/object:Gem::Dependency
168
+ name: coffee-script
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
111
176
  version_requirements: !ruby/object:Gem::Requirement
112
177
  requirements:
113
- - - ! '>='
178
+ - - '>='
114
179
  - !ruby/object:Gem::Version
115
180
  version: '0'
116
- none: false
181
+ - !ruby/object:Gem::Dependency
117
182
  name: sass
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
118
188
  type: :development
119
189
  prerelease: false
120
- requirement: !ruby/object:Gem::Requirement
190
+ version_requirements: !ruby/object:Gem::Requirement
121
191
  requirements:
122
- - - ! '>='
192
+ - - '>='
123
193
  - !ruby/object:Gem::Version
124
194
  version: '0'
125
- none: false
126
195
  - !ruby/object:Gem::Dependency
196
+ name: ejs
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
127
204
  version_requirements: !ruby/object:Gem::Requirement
128
205
  requirements:
129
- - - ! '>='
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: ruby-jade
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
130
214
  - !ruby/object:Gem::Version
131
215
  version: '0'
132
- none: false
133
- name: ejs
134
216
  type: :development
135
217
  prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: uglifier
136
225
  requirement: !ruby/object:Gem::Requirement
137
226
  requirements:
138
- - - ! '>='
227
+ - - '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '>='
139
235
  - !ruby/object:Gem::Version
140
236
  version: '0'
141
- none: false
142
237
  description: Directory-structure-based asset bundling.
143
238
  email:
144
- - rfitz@academia.edu
239
+ - rwfitzge@gmail.com
145
240
  executables:
146
241
  - bunch
147
242
  extensions: []
148
243
  extra_rdoc_files: []
149
244
  files:
150
245
  - .gitignore
151
- - .yardopts
152
246
  - Gemfile
153
- - README.md
247
+ - Guardfile
248
+ - LICENSE.txt
154
249
  - Rakefile
155
250
  - bin/bunch
156
251
  - bunch.gemspec
157
- - config.ru
158
- - example/config.ru
159
- - example/css/test1.css
160
- - example/css/test2/test2a.scss
161
- - example/css/test2/test2b.css
162
- - example/js/.bunchignore
163
- - example/js/test1.js
164
- - example/js/test2/_.yml
165
- - example/js/test2/foo.js
166
- - example/js/test2/test2a.js
167
- - example/js/test2/test2b.js
168
- - example/js/test2/test2c.js
169
- - example/js/test3/test3a.js
170
- - example/js/test3/test3b/_.yml
171
- - example/js/test3/test3b/test3bi.js
172
- - example/js/test3/test3b/test3bii.js
173
- - example/js/test4/_.yml
174
- - example/js/test4/test4a.js
175
- - example/js/test4/test4b.coffee
176
- - example/js/test4/test4c.coffee
177
- - example/js/test5/test5a.jst.ejs
178
252
  - lib/bunch.rb
179
- - lib/bunch/abstract_node.rb
180
- - lib/bunch/cache.rb
181
253
  - lib/bunch/cli.rb
182
- - lib/bunch/coffee_node.rb
183
- - lib/bunch/directory_node.rb
184
- - lib/bunch/ejs_node.rb
185
- - lib/bunch/file_node.rb
186
- - lib/bunch/jade_node.rb
254
+ - lib/bunch/combiner.rb
255
+ - lib/bunch/compiler.rb
256
+ - lib/bunch/compilers/coffee_script.rb
257
+ - lib/bunch/compilers/ejs.rb
258
+ - lib/bunch/compilers/jade.rb
259
+ - lib/bunch/compilers/jst.rb
260
+ - lib/bunch/compilers/null.rb
261
+ - lib/bunch/compilers/sass.rb
262
+ - lib/bunch/content_hash.rb
263
+ - lib/bunch/css_minifier.rb
264
+ - lib/bunch/file.rb
265
+ - lib/bunch/file_cache.rb
266
+ - lib/bunch/file_tree.rb
267
+ - lib/bunch/ignorer.rb
268
+ - lib/bunch/js_minifier.rb
187
269
  - lib/bunch/middleware.rb
188
- - lib/bunch/null_node.rb
189
- - lib/bunch/rack.rb
190
- - lib/bunch/sass_node.rb
270
+ - lib/bunch/pipeline.rb
271
+ - lib/bunch/server.rb
272
+ - lib/bunch/simple_cache.rb
273
+ - lib/bunch/tree_merge.rb
191
274
  - lib/bunch/version.rb
192
- - test/middleware_test.rb
193
- - test/rack_test.rb
194
- - test/test_helper.rb
195
- homepage: ''
275
+ - spec/bunch/cli_spec.rb
276
+ - spec/bunch/combiner_spec.rb
277
+ - spec/bunch/compiler_spec.rb
278
+ - spec/bunch/compilers/coffee_script_spec.rb
279
+ - spec/bunch/compilers/ejs_spec.rb
280
+ - spec/bunch/compilers/jade_spec.rb
281
+ - spec/bunch/compilers/sass_spec.rb
282
+ - spec/bunch/css_minifier_spec.rb
283
+ - spec/bunch/file_cache_spec.rb
284
+ - spec/bunch/file_tree_spec.rb
285
+ - spec/bunch/ignorer_spec.rb
286
+ - spec/bunch/js_minifier_spec.rb
287
+ - spec/bunch/middleware_spec.rb
288
+ - spec/bunch/pipeline_spec.rb
289
+ - spec/bunch/server_spec.rb
290
+ - spec/bunch/simple_cache_spec.rb
291
+ - spec/bunch/tree_merge_spec.rb
292
+ - spec/bunch_spec.rb
293
+ - spec/example_tree/directory/_combine
294
+ - spec/example_tree/directory/file1
295
+ - spec/example_tree/directory/file2
296
+ - spec/example_tree/file3
297
+ - spec/spec_helper.rb
298
+ homepage: https://github.com/academia-edu/bunch
196
299
  licenses: []
300
+ metadata: {}
197
301
  post_install_message:
198
302
  rdoc_options: []
199
303
  require_paths:
200
304
  - lib
201
305
  required_ruby_version: !ruby/object:Gem::Requirement
202
306
  requirements:
203
- - - ! '>='
307
+ - - '>='
204
308
  - !ruby/object:Gem::Version
205
309
  version: '0'
206
- none: false
207
310
  required_rubygems_version: !ruby/object:Gem::Requirement
208
311
  requirements:
209
- - - ! '>='
312
+ - - '>'
210
313
  - !ruby/object:Gem::Version
211
- version: '0'
212
- none: false
314
+ version: 1.3.1
213
315
  requirements: []
214
- rubyforge_project: bunch
215
- rubygems_version: 1.8.24
316
+ rubyforge_project:
317
+ rubygems_version: 2.0.2
216
318
  signing_key:
217
- specification_version: 3
319
+ specification_version: 4
218
320
  summary: Directory-structure-based asset bundling.
219
321
  test_files:
220
- - test/middleware_test.rb
221
- - test/rack_test.rb
222
- - test/test_helper.rb
322
+ - spec/bunch/cli_spec.rb
323
+ - spec/bunch/combiner_spec.rb
324
+ - spec/bunch/compiler_spec.rb
325
+ - spec/bunch/compilers/coffee_script_spec.rb
326
+ - spec/bunch/compilers/ejs_spec.rb
327
+ - spec/bunch/compilers/jade_spec.rb
328
+ - spec/bunch/compilers/sass_spec.rb
329
+ - spec/bunch/css_minifier_spec.rb
330
+ - spec/bunch/file_cache_spec.rb
331
+ - spec/bunch/file_tree_spec.rb
332
+ - spec/bunch/ignorer_spec.rb
333
+ - spec/bunch/js_minifier_spec.rb
334
+ - spec/bunch/middleware_spec.rb
335
+ - spec/bunch/pipeline_spec.rb
336
+ - spec/bunch/server_spec.rb
337
+ - spec/bunch/simple_cache_spec.rb
338
+ - spec/bunch/tree_merge_spec.rb
339
+ - spec/bunch_spec.rb
340
+ - spec/example_tree/directory/_combine
341
+ - spec/example_tree/directory/file1
342
+ - spec/example_tree/directory/file2
343
+ - spec/example_tree/file3
344
+ - spec/spec_helper.rb
223
345
  has_rdoc: