coyote 1.0.2 → 1.0.3

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "coyote"
5
- s.version = "1.0.2"
5
+ s.version = "1.0.3"
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"]
@@ -1,3 +1,4 @@
1
+ require 'benchmark'
1
2
  require 'fileutils'
2
3
  require 'coyote/bundle'
3
4
  require 'coyote/fs_listener'
@@ -6,39 +7,44 @@ include Coyote::Notifications
6
7
 
7
8
  module Coyote
8
9
 
9
- VERSION = '1.0.2'
10
+ VERSION = '1.0.3'
10
11
 
11
12
  def self.run(input_path, output_path, options = {})
12
13
  @@input_path = input_path
13
14
  @@output_path = output_path
14
15
  @@options = options
15
- bundle = Coyote::Bundle.new(input_path, output_path)
16
- build bundle
17
- watch bundle if @@options[:watch]
16
+ @@bundle = Coyote::Bundle.new(input_path, output_path)
17
+ build { |bundle| bundle.update! }
18
+ watch if @@options[:watch]
18
19
  end
19
20
 
21
+
20
22
  def self.options
21
23
  ['compress', 'watch', 'quiet', 'version']
22
24
  end
23
25
 
24
- def self.build(bundle)
25
- notify bundle.manifest unless @@options[:quiet]
26
- bundle.compress! if @@options[:compress]
27
- bundle.save
28
- notify "#{Time.new.strftime("%I:%M:%S")} Saved bundle to #{@@output_path} [#{bundle.files.length} files]", :success
26
+
27
+ def self.build(&block)
28
+ time = Benchmark.realtime do
29
+ yield @@bundle unless block.nil?
30
+ notify @@bundle.manifest unless @@options[:quiet]
31
+ @@bundle.compress! if @@options[:compress]
32
+ @@bundle.save
33
+ end
34
+
35
+ notify "#{Time.new.strftime("%I:%M:%S")} Saved bundle to #{@@output_path} [#{@@bundle.files.length} files in #{(time).round(5)}s]", :success
29
36
  end
30
37
 
31
38
 
32
- def self.watch(bundle)
39
+ def self.watch
33
40
  listener = Coyote::FSListener.select_and_init
34
41
 
35
42
  listener.on_change do |changed_files|
36
- changed_files = bundle.files & changed_files
43
+ changed_files = @@bundle.files & changed_files
37
44
 
38
45
  if changed_files.length > 0
39
46
  notify "#{Time.new.strftime("%I:%M:%S")} Detected change, recompiling...", :warning
40
- bundle.update! changed_files
41
- build bundle
47
+ build { |bundle| bundle.update! changed_files }
42
48
  end
43
49
  end
44
50
 
@@ -31,7 +31,10 @@ module Coyote
31
31
  @contents = File.exists?(@absolute_path) ? File.open(@absolute_path, 'r').read : ""
32
32
  find_dependencies
33
33
  end
34
-
34
+
35
+ def dependencies_have_changed?
36
+ @last_dependencies != @dependencies
37
+ end
35
38
 
36
39
  protected
37
40
 
@@ -42,6 +45,7 @@ module Coyote
42
45
  end
43
46
 
44
47
  def find_dependencies
48
+ @last_dependencies = @dependencies
45
49
  matches = @contents.scan(require_pattern)
46
50
  @dependencies = matches.reverse.collect { |match| "#{@relative_directory}/#{match.last.strip}" }
47
51
  end
@@ -8,11 +8,9 @@ module Coyote
8
8
  attr_reader :contents
9
9
 
10
10
  def initialize(entry_point, output_path)
11
+ @entry_point = entry_point
11
12
  @output_path = output_path
12
- @assets = {}
13
- @contents = ""
14
- add entry_point
15
- update!
13
+ build
16
14
  end
17
15
 
18
16
 
@@ -35,15 +33,42 @@ module Coyote
35
33
 
36
34
 
37
35
  def update!(changed_files = [])
38
- @contents = ""
36
+ bundle_should_rebuild = false
39
37
 
40
38
  unless changed_files.empty?
41
39
  changed_files.each do |path|
42
- @assets["#{Dir.pwd}/#{path}"].update!
40
+ asset = @assets["#{Dir.pwd}/#{path}"]
41
+ asset.update!
42
+ if asset.dependencies_have_changed?
43
+ bundle_should_rebuild = true
44
+ end
43
45
  end
44
46
  end
45
47
 
46
- files(true).each { |path| @contents += "#{@assets[path].contents} \n\n" }
48
+ if bundle_should_rebuild
49
+ notify "#{Time.new.strftime("%I:%M:%S")} Dependencies have changed. Refreshing bundle and recompiling...", :failure
50
+ build
51
+ else
52
+ refresh
53
+ end
54
+ end
55
+
56
+
57
+ def refresh
58
+ @contents = ""
59
+ files(true).each { |path| @contents += "#{@assets[path].contents} \n\n" }
60
+ end
61
+
62
+
63
+ def build
64
+ empty!
65
+ add @entry_point
66
+ end
67
+
68
+
69
+ def empty!
70
+ @assets = {}
71
+ @contents = ""
47
72
  end
48
73
 
49
74
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coyote
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rb-fsevent
16
- requirement: &2165621740 !ruby/object:Gem::Requirement
16
+ requirement: &2168553680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2165621740
24
+ version_requirements: *2168553680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: term-ansicolor
27
- requirement: &2165621140 !ruby/object:Gem::Requirement
27
+ requirement: &2168552860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.5
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2165621140
35
+ version_requirements: *2168552860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rb-fsevent
38
- requirement: &2165620600 !ruby/object:Gem::Requirement
38
+ requirement: &2168552160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.4.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2165620600
46
+ version_requirements: *2168552160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: term-ansicolor
49
- requirement: &2165620040 !ruby/object:Gem::Requirement
49
+ requirement: &2168551280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.0.5
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2165620040
57
+ version_requirements: *2168551280
58
58
  description: An intelligent command-line tool for combining, compressing and compiling
59
59
  your JavaScript and CoffeeScript files.
60
60
  email: developer@imulus.com