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
@@ -1,5 +1,5 @@
1
- module Coyote
2
- class Darwin < FSListener
1
+ module Coyote::FSListeners
2
+ class Darwin < Base
3
3
  attr_reader :fsevent
4
4
 
5
5
  def initialize
@@ -26,13 +26,13 @@ module Coyote
26
26
  def self.usable?
27
27
  require 'rb-fsevent'
28
28
  if !defined?(FSEvent::VERSION) || Gem::Version.new(FSEvent::VERSION) < Gem::Version.new('0.3.9')
29
- print "Please update rb-fsevent (>= 0.3.9)\n".red
29
+ notify "Please update rb-fsevent (>= 0.3.9)", :failure
30
30
  false
31
31
  else
32
32
  true
33
33
  end
34
34
  rescue LoadError
35
- print "Please install rb-fsevent gem for Mac OSX FSEvents support\n".red
35
+ notify "Please install rb-fsevent gem for Mac OSX FSEvents support", :failure
36
36
  false
37
37
  end
38
38
 
@@ -1,5 +1,5 @@
1
- module Coyote
2
- class Linux < FSListener
1
+ module Coyote::FSListeners
2
+ class Linux < Base
3
3
  attr_reader :inotify, :files, :latency, :callback
4
4
 
5
5
  def initialize
@@ -33,13 +33,13 @@ module Coyote
33
33
  def self.usable?
34
34
  require 'rb-inotify'
35
35
  if !defined?(INotify::VERSION) || Gem::Version.new(INotify::VERSION.join('.')) < Gem::Version.new('0.5.1')
36
- print "Please update rb-inotify (>= 0.5.1)\n".red
36
+ notify "Please update rb-inotify (>= 0.5.1)", :failure
37
37
  false
38
38
  else
39
39
  true
40
40
  end
41
41
  rescue LoadError
42
- print "Please install rb-inotify gem for Linux inotify support\n".red
42
+ notify "Please install rb-inotify gem for Linux inotify support", :failure
43
43
  false
44
44
  end
45
45
 
@@ -1,5 +1,5 @@
1
- module Coyote
2
- class Polling < FSListener
1
+ module Coyote::FSListeners
2
+ class Polling < Base
3
3
  attr_reader :callback, :latency
4
4
 
5
5
  def initialize
@@ -1,5 +1,5 @@
1
- module Coyote
2
- class Windows < FSListener
1
+ module Coyote::FSListeners
2
+ class Windows < Base
3
3
  attr_reader :fchange
4
4
 
5
5
  def initialize
@@ -28,7 +28,7 @@ module Coyote
28
28
  require 'rb-fchange'
29
29
  true
30
30
  rescue LoadError
31
- print "Please install rb-fchange gem for Windows file events support\n".red
31
+ notify "Please install rb-fchange gem for Windows file events support", :failure
32
32
  false
33
33
  end
34
34
 
@@ -0,0 +1,43 @@
1
+ require 'colored'
2
+
3
+ module Coyote
4
+ class Notifier
5
+ def self.notify(message, options)
6
+ message = String(message)
7
+
8
+ if options.include? :timestamp
9
+ message = timestamp message
10
+ end
11
+
12
+ options.each do |option|
13
+ if colors.has_key? option
14
+ message = color(message, colors[option])
15
+ end
16
+ end
17
+
18
+ puts message
19
+ end
20
+
21
+ def self.timestamp(message)
22
+ "#{Time.new.strftime("%I:%M:%S")} #{message}"
23
+ end
24
+
25
+ def self.color(message, color)
26
+ message.send(color)
27
+ end
28
+
29
+ def self.colors
30
+ {:success => :green,
31
+ :warning => :yellow,
32
+ :failure => :red }
33
+ end
34
+ end
35
+
36
+ module Notifications
37
+ def notify(message, *args)
38
+ Coyote::Notifier.notify(message, args)
39
+ end
40
+ end
41
+ end
42
+
43
+
data/lib/coyote/rake.rb CHANGED
@@ -1,41 +1,20 @@
1
- require 'coyote'
2
-
3
- def coyote(task_name, *args, &block)
1
+ require 'coyote/dsl'
4
2
 
3
+ def coyote(*args, &block)
4
+ runner = Coyote::DSL.new(&block)
5
+
5
6
  args ||= []
6
7
 
7
- args.insert 0, task_name
8
-
9
- # Create an anonymous class with input, output and options accessors
10
- config = Struct.new(:input, :output, :options).new
11
-
12
- # Start off with options as an empty hash
13
- config.options = {}
14
-
15
- # Give them the config struct to configure in the block
16
- yield config
17
-
18
- # Make sure we've got an input
19
- if config.input.empty?
20
- notify "Coyote: Input filepath must be defined", :failure
21
- exit 0
8
+ args.insert 0, :build
9
+ Rake::Task.define_task(*args) do
10
+ runner.options[:watch] = false
11
+ runner.run
22
12
  end
23
13
 
24
- # Make sure we've got an output
25
- if config.output.empty?
26
- notify "Coyote: Output filepath must be defined", :failure
27
- exit 0
28
- end
29
-
30
- # If they call the task 'watch', then let's set the watch option for them
31
- if task_name == :watch
32
- config.options[:watch] = true
33
- end
34
-
35
- # Pass the runner along to Rake as a proc
36
- body = proc {
37
- Coyote::run(config.input, config.output, config.options)
38
- }
39
-
40
- Rake::Task.define_task(*args, &body)
41
- end
14
+ args[0] = :watch
15
+ Rake::Task.define_task(*args) do
16
+ runner.options[:watch] = true
17
+ runner.run
18
+ end
19
+
20
+ end
@@ -0,0 +1,3 @@
1
+ module Coyote
2
+ VERSION = "1.2.0.rc1"
3
+ end
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ #= require script2.coffee
2
+ #= require script3.js
3
+
4
+ console.log "spec/assets/coffeescript/script1.coffee"
@@ -0,0 +1 @@
1
+ console.log "spec/assets/coffeescript/script2.coffee"
@@ -0,0 +1 @@
1
+ console.log "spec/assets/coffeescript/script3.js"
@@ -0,0 +1 @@
1
+ console.log "hello world!"
@@ -0,0 +1,3 @@
1
+ // file: script1.js
2
+
3
+ console.log("hello world!");
@@ -0,0 +1,3 @@
1
+ // file: script2.js
2
+
3
+ console.log("hello world!");
@@ -0,0 +1 @@
1
+ //= require script4.js
File without changes
@@ -0,0 +1 @@
1
+ //= require scripts/script6.js
File without changes
@@ -0,0 +1 @@
1
+ //= require ../scripts2/script8.js
File without changes
@@ -0,0 +1,5 @@
1
+ @red : #f00;
2
+
3
+ body {
4
+ background: @red;
5
+ }
@@ -0,0 +1,3 @@
1
+ @import 'stylesheet3.less';
2
+ @import 'stylesheet4.less';
3
+ @import 'stylesheet5.css';
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ it "only adds file that exist" do
2
+ bundle.add("spec/assets/bundles/base/does_not_exist.js")
3
+ bundle.files.should == []
4
+ end
@@ -0,0 +1 @@
1
+ console.log("spec/assets/bundle/javascript/jquery.js");
@@ -0,0 +1,3 @@
1
+ console.log("spec/assets/bundle/javascript/jquery.js");//= require jquery.js
2
+
3
+ console.log("spec/assets/bundle/javascript/script5.js");
@@ -0,0 +1,3 @@
1
+ // file: script1.js
2
+
3
+ console.log("hello world!");
@@ -0,0 +1,3 @@
1
+ // file: script2.js
2
+
3
+ console.log("hello world!");
@@ -0,0 +1 @@
1
+ //= require script4.js
File without changes
@@ -0,0 +1,3 @@
1
+ //= require jquery.js
2
+
3
+ console.log("spec/assets/bundle/javascript/script5.js");
@@ -0,0 +1,3 @@
1
+ //= require jquery.js
2
+
3
+ console.log("spec/assets/bundle/javascript/script6.js");
File without changes
@@ -0,0 +1 @@
1
+ wat
File without changes
@@ -0,0 +1,3 @@
1
+ console.log("script4.js");//= require script4.js
2
+
3
+ console.log("script3.js");
@@ -0,0 +1,3 @@
1
+ //= require script4.js
2
+
3
+ console.log("script3.js");
@@ -0,0 +1 @@
1
+ console.log("script4.js");
@@ -0,0 +1,3 @@
1
+ console.log("script2.js");//= require script2.js
2
+
3
+ console.log("script1.js");
@@ -0,0 +1,3 @@
1
+ //= require script2.js
2
+
3
+ console.log("script1.js");
@@ -0,0 +1 @@
1
+ console.log("script2.js");
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+ require 'coyote/assets/base'
3
+
4
+ module Coyote::Assets
5
+
6
+ describe Base do
7
+ context "#path" do
8
+ it "is the full path to the file" do
9
+ asset = Base.new("spec/assets/assets/javascript/script1.js")
10
+ asset.path.should == File.expand_path("spec/assets/assets/javascript/script1.js")
11
+ end
12
+ end
13
+
14
+ context "#relative_path" do
15
+ it "is the path to the file relative from the process" do
16
+ asset = Base.new("spec/../spec/assets/assets/javascript/script1.js")
17
+ asset.relative_path.should == "spec/assets/assets/javascript/script1.js"
18
+ end
19
+ end
20
+
21
+ context "#contents" do
22
+ it "returns the contents of the file" do
23
+ asset = Base.new("spec/assets/assets/javascript/script1.js")
24
+ asset.contents.should == IO.read("spec/assets/assets/javascript/script1.js")
25
+ end
26
+ end
27
+
28
+ context "#dependencies" do
29
+ it "returns the relative filepaths of its dependencies" do
30
+ asset = Base.new("spec/assets/assets/javascript/script3.js")
31
+ asset.dependencies.should include("script4.js")
32
+ end
33
+
34
+ it "can find files in relative directories" do
35
+ asset = Base.new("spec/assets/assets/javascript/script5.js")
36
+ asset.dependencies.should include("scripts/script6.js")
37
+ end
38
+
39
+ it "can back out of a directory to find other files" do
40
+ asset = Base.new("spec/assets/assets/javascript/scripts/script7.js")
41
+ asset.dependencies.should include("../scripts2/script8.js")
42
+ end
43
+ end
44
+
45
+ context "#update!" do
46
+ it "reads the file in from disk" do
47
+ asset = Base.new("spec/assets/assets/javascript/scripts/script7.js")
48
+ asset.update!
49
+ asset.contents.should_not be_nil
50
+ end
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'coyote/assets/coffeescript'
3
+
4
+ module Coyote::Assets
5
+ describe CoffeeScript do
6
+ context "#dependencies" do
7
+ it "finds dependencies" do
8
+ asset = CoffeeScript.new("spec/assets/assets/coffeescript/script1.coffee")
9
+ asset.dependencies.should include("script2.coffee", "script3.js")
10
+ end
11
+ end
12
+
13
+ context "compile!" do
14
+ it "compiles the contents" do
15
+ asset = CoffeeScript.new("spec/assets/assets/coffeescript/script4.coffee")
16
+ asset.contents.should == `cat spec/assets/assets/coffeescript/script4.coffee | coffee -sc`
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'coyote/assets'
3
+
4
+ module Coyote::Assets
5
+ describe Less do
6
+ context "compile!" do
7
+ it "compiles the contents" do
8
+ asset = Less.new("spec/assets/assets/less/stylesheet1.less")
9
+ asset.compile!
10
+ asset.contents.should == `lessc spec/assets/assets/less/stylesheet1.less`
11
+ end
12
+ end
13
+
14
+ context "#dependencies" do
15
+ it "finds dependencies" do
16
+ asset = Less.new("spec/assets/assets/less/stylesheet2.less")
17
+ asset.dependencies.should include("stylesheet3.less", "stylesheet4.less", "stylesheet5.css")
18
+ end
19
+ end
20
+
21
+ end
22
+ end