bunch 0.2.2 → 1.0.0pre1

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.
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: