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.
- data/Gemfile +8 -0
- data/Guardfile +21 -0
- data/Manifest +73 -8
- data/README.md +110 -1
- data/Rakefile +15 -5
- data/bin/coyote +2 -1
- data/coyote.gemspec +12 -12
- data/lib/coyote.rb +7 -45
- data/lib/coyote/assets.rb +24 -0
- data/lib/coyote/assets/base.rb +33 -0
- data/lib/coyote/assets/coffeescript.rb +10 -16
- data/lib/coyote/assets/javascript.rb +4 -4
- data/lib/coyote/assets/less.rb +21 -16
- data/lib/coyote/bundles.rb +22 -0
- data/lib/coyote/bundles/base.rb +112 -0
- data/lib/coyote/bundles/css.rb +19 -0
- data/lib/coyote/bundles/javascript.rb +21 -0
- data/lib/coyote/cli.rb +4 -5
- data/lib/coyote/compiler.rb +46 -0
- data/lib/coyote/dsl.rb +29 -0
- data/lib/coyote/fs_listeners.rb +42 -0
- data/lib/coyote/fs_listeners/base.rb +46 -0
- data/lib/coyote/fs_listeners/darwin.rb +4 -4
- data/lib/coyote/fs_listeners/linux.rb +4 -4
- data/lib/coyote/fs_listeners/polling.rb +2 -2
- data/lib/coyote/fs_listeners/windows.rb +3 -3
- data/lib/coyote/notifier.rb +43 -0
- data/lib/coyote/rake.rb +15 -36
- data/lib/coyote/version.rb +3 -0
- data/spec/assets/asset/script.coffee +0 -0
- data/spec/assets/asset/script.js +0 -0
- data/spec/assets/asset/stylesheet.less +0 -0
- data/spec/assets/asset/weird.asdf +0 -0
- data/spec/assets/assets/coffeescript/script1.coffee +4 -0
- data/spec/assets/assets/coffeescript/script2.coffee +1 -0
- data/spec/assets/assets/coffeescript/script3.js +1 -0
- data/spec/assets/assets/coffeescript/script4.coffee +1 -0
- data/spec/assets/assets/javascript/script1.js +3 -0
- data/spec/assets/assets/javascript/script2.js +3 -0
- data/spec/assets/assets/javascript/script3.js +1 -0
- data/spec/assets/assets/javascript/script4.js +0 -0
- data/spec/assets/assets/javascript/script5.js +1 -0
- data/spec/assets/assets/javascript/scripts/script6.js +0 -0
- data/spec/assets/assets/javascript/scripts/script7.js +1 -0
- data/spec/assets/assets/javascript/scripts2/script8.js +0 -0
- data/spec/assets/assets/less/stylesheet1.less +5 -0
- data/spec/assets/assets/less/stylesheet2.less +3 -0
- data/spec/assets/assets/less/stylesheet3.less +0 -0
- data/spec/assets/assets/less/stylesheet4.less +0 -0
- data/spec/assets/assets/less/stylesheet5.css +0 -0
- data/spec/assets/bundle/script.js +0 -0
- data/spec/assets/bundle/stylesheet.css +0 -0
- data/spec/assets/bundle/weird.asdf +0 -0
- data/spec/assets/bundles/base/directory1/directory1_script.js +4 -0
- data/spec/assets/bundles/base/directory1/directory2/directory2_script.js +0 -0
- data/spec/assets/bundles/base/jquery.js +1 -0
- data/spec/assets/bundles/base/output.js +3 -0
- data/spec/assets/bundles/base/script1.js +3 -0
- data/spec/assets/bundles/base/script2.js +3 -0
- data/spec/assets/bundles/base/script3.js +1 -0
- data/spec/assets/bundles/base/script4.js +0 -0
- data/spec/assets/bundles/base/script5.js +3 -0
- data/spec/assets/bundles/base/script6.js +3 -0
- data/spec/assets/bundles/css/stylesheet1.css +0 -0
- data/spec/assets/bundles/css/weird_file.asdf +1 -0
- data/spec/assets/bundles/javascript/script1.js +0 -0
- data/spec/assets/bundles/javascript/weird_file.asdf +1 -0
- data/spec/assets/compiler/javascript/output.js +3 -0
- data/spec/assets/compiler/javascript/script3.js +3 -0
- data/spec/assets/compiler/javascript/script4.js +1 -0
- data/spec/assets/integration/javascript/output.js +3 -0
- data/spec/assets/integration/javascript/script1.js +3 -0
- data/spec/assets/integration/javascript/script2.js +1 -0
- data/spec/coyote/assets/base_spec.rb +54 -0
- data/spec/coyote/assets/coffeescript_spec.rb +20 -0
- data/spec/coyote/assets/less_spec.rb +22 -0
- data/spec/coyote/assets_spec.rb +27 -0
- data/spec/coyote/bundles/base_spec.rb +123 -0
- data/spec/coyote/bundles/css_spec.rb +17 -0
- data/spec/coyote/bundles/javascript_spec.rb +17 -0
- data/spec/coyote/bundles_spec.rb +26 -0
- data/spec/coyote/cli_spec.rb +1 -0
- data/spec/coyote/compiler_spec.rb +113 -0
- data/spec/coyote/dsl_spec.rb +21 -0
- data/spec/coyote/fs_listeners_spec.rb +38 -0
- data/spec/coyote/notifier_spec.rb +25 -0
- data/spec/coyote_spec.rb +21 -0
- data/spec/spec_helper.rb +6 -0
- metadata +108 -29
- data/test/scripts/input1.js +0 -1
- data/test/scripts/input2.js +0 -1
- data/test/scripts/input3.js +0 -1
- data/test/scripts/input4.js +0 -1
- data/test/scripts/lib/input5.coffee +0 -3
- data/test/scripts/lib/input6.js +0 -1
- data/test/scripts/lib/keystone/input7.js +0 -2
- data/test/scripts/vendor/input8.coffee +0 -1
@@ -1,5 +1,5 @@
|
|
1
|
-
module Coyote
|
2
|
-
class Darwin <
|
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
|
-
|
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
|
-
|
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 <
|
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
|
-
|
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
|
-
|
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 Windows <
|
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
|
-
|
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,
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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 @@
|
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
console.log("spec/assets/bundle/javascript/jquery.js");
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require script4.js
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
wat
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
wat
|
@@ -0,0 +1 @@
|
|
1
|
+
console.log("script4.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
|