coyote 1.1.0 → 1.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/Gemfile +8 -0
  2. data/Guardfile +21 -0
  3. data/Manifest +73 -8
  4. data/README.md +110 -1
  5. data/Rakefile +15 -5
  6. data/bin/coyote +2 -1
  7. data/coyote.gemspec +12 -12
  8. data/lib/coyote.rb +7 -45
  9. data/lib/coyote/assets.rb +24 -0
  10. data/lib/coyote/assets/base.rb +33 -0
  11. data/lib/coyote/assets/coffeescript.rb +10 -16
  12. data/lib/coyote/assets/javascript.rb +4 -4
  13. data/lib/coyote/assets/less.rb +21 -16
  14. data/lib/coyote/bundles.rb +22 -0
  15. data/lib/coyote/bundles/base.rb +112 -0
  16. data/lib/coyote/bundles/css.rb +19 -0
  17. data/lib/coyote/bundles/javascript.rb +21 -0
  18. data/lib/coyote/cli.rb +4 -5
  19. data/lib/coyote/compiler.rb +46 -0
  20. data/lib/coyote/dsl.rb +29 -0
  21. data/lib/coyote/fs_listeners.rb +42 -0
  22. data/lib/coyote/fs_listeners/base.rb +46 -0
  23. data/lib/coyote/fs_listeners/darwin.rb +4 -4
  24. data/lib/coyote/fs_listeners/linux.rb +4 -4
  25. data/lib/coyote/fs_listeners/polling.rb +2 -2
  26. data/lib/coyote/fs_listeners/windows.rb +3 -3
  27. data/lib/coyote/notifier.rb +43 -0
  28. data/lib/coyote/rake.rb +15 -36
  29. data/lib/coyote/version.rb +3 -0
  30. data/spec/assets/asset/script.coffee +0 -0
  31. data/spec/assets/asset/script.js +0 -0
  32. data/spec/assets/asset/stylesheet.less +0 -0
  33. data/spec/assets/asset/weird.asdf +0 -0
  34. data/spec/assets/assets/coffeescript/script1.coffee +4 -0
  35. data/spec/assets/assets/coffeescript/script2.coffee +1 -0
  36. data/spec/assets/assets/coffeescript/script3.js +1 -0
  37. data/spec/assets/assets/coffeescript/script4.coffee +1 -0
  38. data/spec/assets/assets/javascript/script1.js +3 -0
  39. data/spec/assets/assets/javascript/script2.js +3 -0
  40. data/spec/assets/assets/javascript/script3.js +1 -0
  41. data/spec/assets/assets/javascript/script4.js +0 -0
  42. data/spec/assets/assets/javascript/script5.js +1 -0
  43. data/spec/assets/assets/javascript/scripts/script6.js +0 -0
  44. data/spec/assets/assets/javascript/scripts/script7.js +1 -0
  45. data/spec/assets/assets/javascript/scripts2/script8.js +0 -0
  46. data/spec/assets/assets/less/stylesheet1.less +5 -0
  47. data/spec/assets/assets/less/stylesheet2.less +3 -0
  48. data/spec/assets/assets/less/stylesheet3.less +0 -0
  49. data/spec/assets/assets/less/stylesheet4.less +0 -0
  50. data/spec/assets/assets/less/stylesheet5.css +0 -0
  51. data/spec/assets/bundle/script.js +0 -0
  52. data/spec/assets/bundle/stylesheet.css +0 -0
  53. data/spec/assets/bundle/weird.asdf +0 -0
  54. data/spec/assets/bundles/base/directory1/directory1_script.js +4 -0
  55. data/spec/assets/bundles/base/directory1/directory2/directory2_script.js +0 -0
  56. data/spec/assets/bundles/base/jquery.js +1 -0
  57. data/spec/assets/bundles/base/output.js +3 -0
  58. data/spec/assets/bundles/base/script1.js +3 -0
  59. data/spec/assets/bundles/base/script2.js +3 -0
  60. data/spec/assets/bundles/base/script3.js +1 -0
  61. data/spec/assets/bundles/base/script4.js +0 -0
  62. data/spec/assets/bundles/base/script5.js +3 -0
  63. data/spec/assets/bundles/base/script6.js +3 -0
  64. data/spec/assets/bundles/css/stylesheet1.css +0 -0
  65. data/spec/assets/bundles/css/weird_file.asdf +1 -0
  66. data/spec/assets/bundles/javascript/script1.js +0 -0
  67. data/spec/assets/bundles/javascript/weird_file.asdf +1 -0
  68. data/spec/assets/compiler/javascript/output.js +3 -0
  69. data/spec/assets/compiler/javascript/script3.js +3 -0
  70. data/spec/assets/compiler/javascript/script4.js +1 -0
  71. data/spec/assets/integration/javascript/output.js +3 -0
  72. data/spec/assets/integration/javascript/script1.js +3 -0
  73. data/spec/assets/integration/javascript/script2.js +1 -0
  74. data/spec/coyote/assets/base_spec.rb +54 -0
  75. data/spec/coyote/assets/coffeescript_spec.rb +20 -0
  76. data/spec/coyote/assets/less_spec.rb +22 -0
  77. data/spec/coyote/assets_spec.rb +27 -0
  78. data/spec/coyote/bundles/base_spec.rb +123 -0
  79. data/spec/coyote/bundles/css_spec.rb +17 -0
  80. data/spec/coyote/bundles/javascript_spec.rb +17 -0
  81. data/spec/coyote/bundles_spec.rb +26 -0
  82. data/spec/coyote/cli_spec.rb +1 -0
  83. data/spec/coyote/compiler_spec.rb +113 -0
  84. data/spec/coyote/dsl_spec.rb +21 -0
  85. data/spec/coyote/fs_listeners_spec.rb +38 -0
  86. data/spec/coyote/notifier_spec.rb +25 -0
  87. data/spec/coyote_spec.rb +21 -0
  88. data/spec/spec_helper.rb +6 -0
  89. metadata +108 -29
  90. data/test/scripts/input1.js +0 -1
  91. data/test/scripts/input2.js +0 -1
  92. data/test/scripts/input3.js +0 -1
  93. data/test/scripts/input4.js +0 -1
  94. data/test/scripts/lib/input5.coffee +0 -3
  95. data/test/scripts/lib/input6.js +0 -1
  96. data/test/scripts/lib/keystone/input7.js +0 -2
  97. data/test/scripts/vendor/input8.coffee +0 -1
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source :rubygems
2
+
3
+ gem "rspec", "~> 2.10.0"
4
+ gem "guard", "~> 1.0.3"
5
+ gem "guard-rspec", "~> 0.7.3"
6
+ gem "simplecov", "~> 0.6.4"
7
+ gem "growl", "~> 1.0.3"
8
+ gem "colored", "1.2"
data/Guardfile ADDED
@@ -0,0 +1,21 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+ require 'growl'
4
+
5
+
6
+ guard 'rspec', :version => 2, :notification => true do
7
+ watch(%r{^spec/.+_spec\.rb$})
8
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
9
+ watch('spec/spec_helper.rb') { "spec" }
10
+
11
+ # Rails example
12
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
13
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
14
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
15
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
16
+ watch('config/routes.rb') { "spec/routing" }
17
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
18
+ # Capybara request specs
19
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
20
+ end
21
+
data/Manifest CHANGED
@@ -1,28 +1,93 @@
1
+ Gemfile
2
+ Guardfile
1
3
  README.md
2
4
  Rakefile
3
5
  bin/coyote
4
6
  coyote.gemspec
5
7
  lib/coyote.rb
6
8
  lib/coyote/asset.rb
9
+ lib/coyote/assets.rb
10
+ lib/coyote/assets/base.rb
7
11
  lib/coyote/assets/coffeescript.rb
8
12
  lib/coyote/assets/javascript.rb
9
13
  lib/coyote/assets/less.rb
10
14
  lib/coyote/bundle.rb
15
+ lib/coyote/bundles.rb
16
+ lib/coyote/bundles/base.rb
17
+ lib/coyote/bundles/css.rb
18
+ lib/coyote/bundles/javascript.rb
11
19
  lib/coyote/cli.rb
12
20
  lib/coyote/closure_compiler.rb
21
+ lib/coyote/compiler.rb
22
+ lib/coyote/dsl.rb
13
23
  lib/coyote/fs_listener.rb
24
+ lib/coyote/fs_listeners.rb
25
+ lib/coyote/fs_listeners/base.rb
14
26
  lib/coyote/fs_listeners/darwin.rb
15
27
  lib/coyote/fs_listeners/linux.rb
16
28
  lib/coyote/fs_listeners/polling.rb
17
29
  lib/coyote/fs_listeners/windows.rb
18
30
  lib/coyote/notifications.rb
31
+ lib/coyote/notifier.rb
19
32
  lib/coyote/rake.rb
20
- test/scripts/input1.js
21
- test/scripts/input2.js
22
- test/scripts/input3.js
23
- test/scripts/input4.js
24
- test/scripts/lib/input5.coffee
25
- test/scripts/lib/input6.js
26
- test/scripts/lib/keystone/input7.js
27
- test/scripts/vendor/input8.coffee
33
+ lib/coyote/version.rb
34
+ spec/assets/asset/script.coffee
35
+ spec/assets/asset/script.js
36
+ spec/assets/asset/stylesheet.less
37
+ spec/assets/asset/weird.asdf
38
+ spec/assets/assets/coffeescript/script1.coffee
39
+ spec/assets/assets/coffeescript/script2.coffee
40
+ spec/assets/assets/coffeescript/script3.js
41
+ spec/assets/assets/coffeescript/script4.coffee
42
+ spec/assets/assets/javascript/script1.js
43
+ spec/assets/assets/javascript/script2.js
44
+ spec/assets/assets/javascript/script3.js
45
+ spec/assets/assets/javascript/script4.js
46
+ spec/assets/assets/javascript/script5.js
47
+ spec/assets/assets/javascript/scripts/script6.js
48
+ spec/assets/assets/javascript/scripts/script7.js
49
+ spec/assets/assets/javascript/scripts2/script8.js
50
+ spec/assets/assets/less/stylesheet1.less
51
+ spec/assets/assets/less/stylesheet2.less
52
+ spec/assets/assets/less/stylesheet3.less
53
+ spec/assets/assets/less/stylesheet4.less
54
+ spec/assets/assets/less/stylesheet5.css
55
+ spec/assets/bundle/script.js
56
+ spec/assets/bundle/stylesheet.css
57
+ spec/assets/bundle/weird.asdf
58
+ spec/assets/bundles/base/directory1/directory1_script.js
59
+ spec/assets/bundles/base/directory1/directory2/directory2_script.js
60
+ spec/assets/bundles/base/jquery.js
61
+ spec/assets/bundles/base/output.js
62
+ spec/assets/bundles/base/script1.js
63
+ spec/assets/bundles/base/script2.js
64
+ spec/assets/bundles/base/script3.js
65
+ spec/assets/bundles/base/script4.js
66
+ spec/assets/bundles/base/script5.js
67
+ spec/assets/bundles/base/script6.js
68
+ spec/assets/bundles/css/stylesheet1.css
69
+ spec/assets/bundles/css/weird_file.asdf
70
+ spec/assets/bundles/javascript/script1.js
71
+ spec/assets/bundles/javascript/weird_file.asdf
72
+ spec/assets/compiler/javascript/output.js
73
+ spec/assets/compiler/javascript/script3.js
74
+ spec/assets/compiler/javascript/script4.js
75
+ spec/assets/integration/javascript/output.js
76
+ spec/assets/integration/javascript/script1.js
77
+ spec/assets/integration/javascript/script2.js
78
+ spec/coyote/assets/base_spec.rb
79
+ spec/coyote/assets/coffeescript_spec.rb
80
+ spec/coyote/assets/less_spec.rb
81
+ spec/coyote/assets_spec.rb
82
+ spec/coyote/bundles/base_spec.rb
83
+ spec/coyote/bundles/css_spec.rb
84
+ spec/coyote/bundles/javascript_spec.rb
85
+ spec/coyote/bundles_spec.rb
86
+ spec/coyote/cli_spec.rb
87
+ spec/coyote/compiler_spec.rb
88
+ spec/coyote/dsl_spec.rb
89
+ spec/coyote/fs_listeners_spec.rb
90
+ spec/coyote/notifier_spec.rb
91
+ spec/coyote_spec.rb
92
+ spec/spec_helper.rb
28
93
  Manifest
data/README.md CHANGED
@@ -1,4 +1,113 @@
1
1
  COYOTE
2
2
  =============
3
3
 
4
- TODO: documentation
4
+ ##A speedy tool for combining and compressing your JavaScript, CoffeeScript, CSS and LESS source files.
5
+
6
+ Coyote combines your source files into a single script or stylesheet to reduce HTTP overhead and make development easier. It has built-in support for <a href="https://github.com/sstephenson/sprockets">Sprockets-style</a> dependency syntax (`#= require x`) and a lightning-fast, built-in watch mechanism to detect changes to your source files and recompile on the fly. For increased optimization, you can optionally run the final compilation through the Google Closure Compiler before save.
7
+
8
+
9
+
10
+
11
+ ###Installation
12
+
13
+ $ gem install coyote
14
+
15
+
16
+
17
+ ###Command Line Interface
18
+
19
+ **Syntax:**
20
+
21
+ $ coyote [input_filepath]:[output_filepath]
22
+
23
+ **Example**
24
+
25
+ $ coyote src/application.coffee:build/application.min.js
26
+
27
+
28
+
29
+ ###Options
30
+
31
+ <table>
32
+ <thead>
33
+ <th>Option</th>
34
+ <th>Description</th>
35
+ </thead>
36
+ <tbody>
37
+ <tr>
38
+ <th>-c, --compress</th>
39
+ <td>Compress the final compilation with the Google Closure Compiler</td>
40
+ </tr>
41
+ <tr>
42
+ <th>-w, --watch</th>
43
+ <td>Use the built-in watch mechanism to observe your source files and re-compile when something changes</td>
44
+ </tr>
45
+ <tr>
46
+ <th>-q, --quiet</th>
47
+ <td>Quiet the command-line output</td>
48
+ </tr>
49
+ <tr>
50
+ <th>-v, --version</th>
51
+ <td>Get the version of your Coyote gem</td>
52
+ </tr>
53
+ </tbody>
54
+ </table>
55
+
56
+
57
+
58
+ ###Requiring Source Files
59
+
60
+ Coyote has support for [Sprockets-style](https://github.com/sstephenson/sprockets) requires, with one exception. Instead of using `require_tree`, you can simply use `require` and Coyote will automatically detect if the path is a source file or a directory.
61
+
62
+
63
+ **Syntax:** (JavaScript)
64
+
65
+ //= require other_file.js
66
+ //= require some_directory
67
+
68
+ **Syntax:** (CoffeeScript)
69
+
70
+ #= require other_file.coffee
71
+ #= require some_directory
72
+
73
+ Paths used in `require` statements are evaluated relative to the file which contains them.
74
+
75
+
76
+ ###Using with Rake
77
+
78
+ Coyote ships with convenience methods for neatly defining tasks in your Rakefile:
79
+
80
+
81
+ require 'coyote/rake'
82
+
83
+ coyote :build do |config|
84
+ config.input = "src/application.coffee"
85
+ config.output = "build/application.min.js"
86
+ config.options = { :compress => true }
87
+ end
88
+
89
+ coyote :watch do |config|
90
+ config.input = "src/application.coffee"
91
+ config.output = "build/application.min.js"
92
+ config.options = { :quiet => true }
93
+ end
94
+
95
+
96
+ This will create two Rake tasks, `build` and `watch`, which you can run as standard tasks: `rake build` and `rake watch`.
97
+
98
+
99
+ ###Contribute
100
+ **We'd love your help. Fork us so we can make Coyote better.**
101
+
102
+ $ git clone git://github.com/imulus/coyote
103
+
104
+
105
+ ###Download
106
+
107
+ You can download this project in either
108
+ [zip](http://github.com/imulus/coyote/zipball/master) or [tar](http://github.com/imulus/coyote/tarball/master) formats.
109
+
110
+ or get the source code on GitHub : [imulus/coyote](http://github.com/imulus/coyote)
111
+
112
+
113
+
data/Rakefile CHANGED
@@ -6,26 +6,32 @@ require 'echoe'
6
6
  $: << File.expand_path(File.dirname(__FILE__) + "/lib")
7
7
  require 'coyote'
8
8
 
9
+ task :default => :spec
10
+
11
+ task :spec do
12
+ sh "rspec ."
13
+ end
14
+
9
15
  Echoe.new('coyote', Coyote::VERSION) do |p|
10
- p.description = "An intelligent command-line tool for combining, compressing and compiling your JavaScript and CoffeeScript files."
11
- p.summary = "Coyote selectively concatenates your files, combining them into a single file with the option of running the output through the Google Closure Compiler before save. It can be used to observe your source files for changes and will recompile and save on the fly for easy development."
16
+ p.description = "A speedy tool for combining and compressing your JavaScript, CoffeeScript, CSS and LESS source files."
17
+ p.summary = "Coyote combines your source files into a single script or stylesheet to reduce HTTP overhead and make development easier. It has built-in support for Sprockets-style dependency syntax (`#= require x`) and a lightning-fast, built-in watch mechanism to detect changes to your source files and recompile on the fly. For increased optimization, you can optionally run the final compilation through the Google Closure Compiler before save."
12
18
  p.url = "http://github.com/imulus/coyote"
13
19
  p.author = "Imulus"
14
20
  p.email = "developer@imulus.com"
15
- p.ignore_pattern = ["tmp/*", "test/*"]
21
+ p.ignore_pattern = ["./spec/*", "./tmp/*", "./test/*"]
16
22
 
17
23
  dependencies = Array.new
18
24
  target_os = Config::CONFIG['target_os']
19
25
 
20
26
  if target_os =~ /darwin/i
21
27
  dependencies << "rb-fsevent >=0.4.0"
22
- dependencies << "term-ansicolor >=1.0.5"
28
+ dependencies << "colored >=1.2"
23
29
  elsif target_os =~ /linux/i
24
30
  dependencies << "rb-inotify >=0.8.4"
25
31
  elsif target_os =~ /mswin|mingw/i
26
32
  dependencies << "rb-fchange >=0.0.5"
27
33
  end
28
-
34
+
29
35
  p.development_dependencies = dependencies
30
36
  p.runtime_dependencies = dependencies
31
37
  end
@@ -35,3 +41,7 @@ task :build do
35
41
  `rake build_gemspec`
36
42
  `gem build coyote.gemspec`
37
43
  end
44
+
45
+
46
+
47
+
data/bin/coyote CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  $: << File.expand_path(File.dirname(__FILE__) + "/../lib")
4
4
  require 'rubygems'
5
- require 'coyote/cli'
5
+ require 'coyote'
6
+ require 'coyote/cli'
data/coyote.gemspec CHANGED
@@ -2,41 +2,41 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "coyote"
5
- s.version = "1.1.0"
5
+ s.version = "1.2.0.rc1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Imulus"]
9
- s.date = "2012-03-19"
10
- s.description = "An intelligent command-line tool for combining, compressing and compiling your JavaScript and CoffeeScript files."
9
+ s.date = "2012-06-11"
10
+ s.description = "A speedy tool for combining and compressing your JavaScript, CoffeeScript, CSS and LESS source files."
11
11
  s.email = "developer@imulus.com"
12
12
  s.executables = ["coyote"]
13
- s.extra_rdoc_files = ["README.md", "bin/coyote", "lib/coyote.rb", "lib/coyote/asset.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/assets/less.rb", "lib/coyote/bundle.rb", "lib/coyote/cli.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb", "lib/coyote/rake.rb"]
14
- s.files = ["README.md", "Rakefile", "bin/coyote", "coyote.gemspec", "lib/coyote.rb", "lib/coyote/asset.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/assets/less.rb", "lib/coyote/bundle.rb", "lib/coyote/cli.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb", "lib/coyote/rake.rb", "test/scripts/input1.js", "test/scripts/input2.js", "test/scripts/input3.js", "test/scripts/input4.js", "test/scripts/lib/input5.coffee", "test/scripts/lib/input6.js", "test/scripts/lib/keystone/input7.js", "test/scripts/vendor/input8.coffee", "Manifest"]
13
+ s.extra_rdoc_files = ["README.md", "bin/coyote", "lib/coyote.rb", "lib/coyote/asset.rb", "lib/coyote/assets.rb", "lib/coyote/assets/base.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/assets/less.rb", "lib/coyote/bundle.rb", "lib/coyote/bundles.rb", "lib/coyote/bundles/base.rb", "lib/coyote/bundles/css.rb", "lib/coyote/bundles/javascript.rb", "lib/coyote/cli.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/compiler.rb", "lib/coyote/dsl.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners.rb", "lib/coyote/fs_listeners/base.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb", "lib/coyote/notifier.rb", "lib/coyote/rake.rb", "lib/coyote/version.rb"]
14
+ s.files = ["Gemfile", "Guardfile", "README.md", "Rakefile", "bin/coyote", "coyote.gemspec", "lib/coyote.rb", "lib/coyote/asset.rb", "lib/coyote/assets.rb", "lib/coyote/assets/base.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/assets/less.rb", "lib/coyote/bundle.rb", "lib/coyote/bundles.rb", "lib/coyote/bundles/base.rb", "lib/coyote/bundles/css.rb", "lib/coyote/bundles/javascript.rb", "lib/coyote/cli.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/compiler.rb", "lib/coyote/dsl.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners.rb", "lib/coyote/fs_listeners/base.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb", "lib/coyote/notifier.rb", "lib/coyote/rake.rb", "lib/coyote/version.rb", "spec/assets/asset/script.coffee", "spec/assets/asset/script.js", "spec/assets/asset/stylesheet.less", "spec/assets/asset/weird.asdf", "spec/assets/assets/coffeescript/script1.coffee", "spec/assets/assets/coffeescript/script2.coffee", "spec/assets/assets/coffeescript/script3.js", "spec/assets/assets/coffeescript/script4.coffee", "spec/assets/assets/javascript/script1.js", "spec/assets/assets/javascript/script2.js", "spec/assets/assets/javascript/script3.js", "spec/assets/assets/javascript/script4.js", "spec/assets/assets/javascript/script5.js", "spec/assets/assets/javascript/scripts/script6.js", "spec/assets/assets/javascript/scripts/script7.js", "spec/assets/assets/javascript/scripts2/script8.js", "spec/assets/assets/less/stylesheet1.less", "spec/assets/assets/less/stylesheet2.less", "spec/assets/assets/less/stylesheet3.less", "spec/assets/assets/less/stylesheet4.less", "spec/assets/assets/less/stylesheet5.css", "spec/assets/bundle/script.js", "spec/assets/bundle/stylesheet.css", "spec/assets/bundle/weird.asdf", "spec/assets/bundles/base/directory1/directory1_script.js", "spec/assets/bundles/base/directory1/directory2/directory2_script.js", "spec/assets/bundles/base/jquery.js", "spec/assets/bundles/base/output.js", "spec/assets/bundles/base/script1.js", "spec/assets/bundles/base/script2.js", "spec/assets/bundles/base/script3.js", "spec/assets/bundles/base/script4.js", "spec/assets/bundles/base/script5.js", "spec/assets/bundles/base/script6.js", "spec/assets/bundles/css/stylesheet1.css", "spec/assets/bundles/css/weird_file.asdf", "spec/assets/bundles/javascript/script1.js", "spec/assets/bundles/javascript/weird_file.asdf", "spec/assets/compiler/javascript/output.js", "spec/assets/compiler/javascript/script3.js", "spec/assets/compiler/javascript/script4.js", "spec/assets/integration/javascript/output.js", "spec/assets/integration/javascript/script1.js", "spec/assets/integration/javascript/script2.js", "spec/coyote/assets/base_spec.rb", "spec/coyote/assets/coffeescript_spec.rb", "spec/coyote/assets/less_spec.rb", "spec/coyote/assets_spec.rb", "spec/coyote/bundles/base_spec.rb", "spec/coyote/bundles/css_spec.rb", "spec/coyote/bundles/javascript_spec.rb", "spec/coyote/bundles_spec.rb", "spec/coyote/cli_spec.rb", "spec/coyote/compiler_spec.rb", "spec/coyote/dsl_spec.rb", "spec/coyote/fs_listeners_spec.rb", "spec/coyote/notifier_spec.rb", "spec/coyote_spec.rb", "spec/spec_helper.rb", "Manifest"]
15
15
  s.homepage = "http://github.com/imulus/coyote"
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Coyote", "--main", "README.md"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = "coyote"
19
19
  s.rubygems_version = "1.8.17"
20
- s.summary = "Coyote selectively concatenates your files, combining them into a single file with the option of running the output through the Google Closure Compiler before save. It can be used to observe your source files for changes and will recompile and save on the fly for easy development."
20
+ s.summary = "Coyote combines your source files into a single script or stylesheet to reduce HTTP overhead and make development easier. It has built-in support for Sprockets-style dependency syntax (`#= require x`) and a lightning-fast, built-in watch mechanism to detect changes to your source files and recompile on the fly. For increased optimization, you can optionally run the final compilation through the Google Closure Compiler before save."
21
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  s.specification_version = 3
24
24
 
25
25
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
26
  s.add_runtime_dependency(%q<rb-fsevent>, [">= 0.4.0"])
27
- s.add_runtime_dependency(%q<term-ansicolor>, [">= 1.0.5"])
27
+ s.add_runtime_dependency(%q<colored>, [">= 1.2"])
28
28
  s.add_development_dependency(%q<rb-fsevent>, [">= 0.4.0"])
29
- s.add_development_dependency(%q<term-ansicolor>, [">= 1.0.5"])
29
+ s.add_development_dependency(%q<colored>, [">= 1.2"])
30
30
  else
31
31
  s.add_dependency(%q<rb-fsevent>, [">= 0.4.0"])
32
- s.add_dependency(%q<term-ansicolor>, [">= 1.0.5"])
32
+ s.add_dependency(%q<colored>, [">= 1.2"])
33
33
  s.add_dependency(%q<rb-fsevent>, [">= 0.4.0"])
34
- s.add_dependency(%q<term-ansicolor>, [">= 1.0.5"])
34
+ s.add_dependency(%q<colored>, [">= 1.2"])
35
35
  end
36
36
  else
37
37
  s.add_dependency(%q<rb-fsevent>, [">= 0.4.0"])
38
- s.add_dependency(%q<term-ansicolor>, [">= 1.0.5"])
38
+ s.add_dependency(%q<colored>, [">= 1.2"])
39
39
  s.add_dependency(%q<rb-fsevent>, [">= 0.4.0"])
40
- s.add_dependency(%q<term-ansicolor>, [">= 1.0.5"])
40
+ s.add_dependency(%q<colored>, [">= 1.2"])
41
41
  end
42
42
  end
data/lib/coyote.rb CHANGED
@@ -1,50 +1,12 @@
1
- require 'benchmark'
2
- require 'fileutils'
3
- require 'coyote/bundle'
4
- require 'coyote/fs_listener'
5
- require 'coyote/notifications'
1
+ require 'coyote/version'
2
+ require 'coyote/compiler'
3
+ require 'coyote/notifier'
6
4
  include Coyote::Notifications
7
5
 
8
6
  module Coyote
9
- VERSION = '1.1.0'
10
-
11
- def self.run(input_path, output_path, options = {})
12
- @@input_path = input_path
13
- @@output_path = output_path
14
- @@options = options
15
- @@bundle = Coyote::Bundle.new(input_path, output_path)
16
- build { |bundle| bundle.update! }
17
- watch if @@options[:watch]
18
- end
19
-
20
- def self.options
21
- ['compress', 'watch', 'quiet', 'version']
22
- end
23
-
24
- def self.build(&block)
25
- time = Benchmark.realtime do
26
- yield @@bundle unless block.nil?
27
- notify @@bundle.manifest unless @@options[:quiet]
28
- @@bundle.compress! if @@options[:compress]
29
- @@bundle.save
30
- end
31
-
32
- notify "#{Time.new.strftime("%I:%M:%S")} Saved bundle to #{@@output_path} [#{@@bundle.files.length} files in #{(time).round(5)}s]", :success
7
+
8
+ def self.compile(input, output, options={})
9
+ Compiler.new(input, output, options).compile!
33
10
  end
34
11
 
35
- def self.watch
36
- listener = Coyote::FSListener.select_and_init
37
-
38
- listener.on_change do |changed_files|
39
- changed_files = @@bundle.files & changed_files
40
-
41
- if changed_files.length > 0
42
- notify "#{Time.new.strftime("%I:%M:%S")} Detected change, recompiling...", :warning
43
- build { |bundle| bundle.update! changed_files }
44
- end
45
- end
46
-
47
- notify "#{Time.new.strftime("%I:%M:%S")} Watching for changes to your bundle. CTRL+C to stop."
48
- listener.start
49
- end
50
- end
12
+ end
@@ -0,0 +1,24 @@
1
+ require 'coyote/assets/base'
2
+ require 'coyote/assets/javascript'
3
+ require 'coyote/assets/coffeescript'
4
+ require 'coyote/assets/less'
5
+
6
+ module Coyote
7
+
8
+ module Asset
9
+ def self.new(path)
10
+ Coyote::Assets.choose(path)
11
+ end
12
+ end
13
+
14
+ module Assets
15
+ def self.choose(path)
16
+ case File.extname(path)
17
+ when /\.js/i ; JavaScript.new(path)
18
+ when /\.coffee/i ; CoffeeScript.new(path)
19
+ when /\.less/i ; Less.new(path)
20
+ else ; Base.new(path)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ module Coyote::Assets
2
+ class Base
3
+
4
+ class << self
5
+ def require_pattern(pattern = nil)
6
+ @require_pattern ||= pattern || Regexp.new(/\/\/=\s*require\s*(.*)$/i)
7
+ end
8
+ end
9
+
10
+
11
+ require_pattern Regexp.new(/\/\/=\s*require\s*(.*)$/i)
12
+
13
+ attr_accessor :contents
14
+ attr_reader :path, :relative_path, :contents, :dependencies
15
+
16
+ def initialize(path)
17
+ @path = File.expand_path path
18
+ @relative_path = @path.gsub("#{Dir.pwd}/", '')
19
+ update!
20
+ end
21
+
22
+ def find_dependencies
23
+ matches = self.contents.scan self.class.require_pattern
24
+ @dependencies = matches.reverse.map { |match| match.last.strip }
25
+ end
26
+
27
+ def update!
28
+ self.contents = IO.read(@path)
29
+ find_dependencies
30
+ end
31
+
32
+ end
33
+ end