guard-coffeescript 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -20,11 +20,29 @@ Add guard definition to your Guardfile by running this command:
20
20
 
21
21
  guard init coffeescript
22
22
 
23
- == Dependencies
23
+ == CoffeeScript
24
24
 
25
- Since CoffeeScripts is no more a Ruby gem it cannot be installed with Bundler, so you have to install it on your own.
26
- Please consult the {CoffeeScript documentation}[http://jashkenas.github.com/coffee-script/] for more information about
27
- how to install the latest CoffeeScript version.
25
+ Guard::CoffeeScript uses {Ruby CoffeeScript}[http://github.com/josh/ruby-coffee-script/] to compile the CoffeeScripts.
26
+ This enables the guard to compile the CoffeeScripts with node.js, JavaScript Core or V8
27
+
28
+ === node.js
29
+
30
+ Please refer to the {CoffeeScript documentation}[http://jashkenas.github.com/coffee-script/] for more information about
31
+ how to install the latest CoffeeScript version on node.js.
32
+
33
+ === JavaScript Core
34
+
35
+ JavaScript Core is only available on Mac OS X. To use JavaScript Core you don't have to install anything, because
36
+ JavaScript Core is packaged with Mac OS X.
37
+
38
+ === V8
39
+
40
+ To use CoffeeScript on V8, simple add `therubyracer` to your Gemfile. The Ruby Racer acts as a bridge between Ruby
41
+ and the V8 engine, that will be automatically installed by the Ruby Racer.
42
+
43
+ group :development do
44
+ gem 'therubyracer'
45
+ end
28
46
 
29
47
  == Usage
30
48
 
@@ -38,13 +56,13 @@ Please read {guard doc}[http://github.com/guard/guard#readme] for more info abou
38
56
  === Standard ruby gems
39
57
 
40
58
  guard 'coffeescript' do
41
- watch('^coffeescripts/(.*)\.coffee')
59
+ watch(%r{coffeescripts/.+\.coffee})
42
60
  end
43
61
 
44
62
  === Rails app
45
63
 
46
64
  guard 'coffeescript', :output => 'public/javascripts/compiled' do
47
- watch('^app/coffeescripts/(.*)\.coffee')
65
+ watch(%r{app/coffeescripts/.+\.coffee})
48
66
  end
49
67
 
50
68
  == Options
@@ -65,7 +83,7 @@ A file
65
83
 
66
84
  that has been detected by the watch
67
85
 
68
- watch('^app/coffeescripts/(.*)\.coffee')
86
+ watch(%r{app/coffeescripts/.+\.coffee})
69
87
 
70
88
  with an output directory of
71
89
 
@@ -75,7 +93,7 @@ will be compiled to
75
93
 
76
94
  public/javascripts/compiled/ui/buttons/toggle_button.js
77
95
 
78
- This behaviour can be switched off by passing the option ':shallow => true' to the guard, so that all JavaScripts will
96
+ This behaviour can be switched off by passing the option `:shallow => true` to the guard, so that all JavaScripts will
79
97
  be compiled directly to the output directory.
80
98
 
81
99
  == Development
@@ -3,7 +3,7 @@ require 'guard/guard'
3
3
  require 'guard/watcher'
4
4
 
5
5
  module Guard
6
- class CoffeeScript < Guard
6
+ class CoffeeScriptGuard < Guard
7
7
 
8
8
  autoload :Inspector, 'guard/coffeescript/inspector'
9
9
  autoload :Runner, 'guard/coffeescript/runner'
@@ -1,5 +1,5 @@
1
1
  module Guard
2
- class CoffeeScript
2
+ class CoffeeScriptGuard
3
3
  module Inspector
4
4
  class << self
5
5
 
@@ -1,5 +1,7 @@
1
+ require 'coffee_script'
2
+
1
3
  module Guard
2
- class CoffeeScript
4
+ class CoffeeScriptGuard
3
5
  module Runner
4
6
  class << self
5
7
 
@@ -9,8 +11,8 @@ module Guard
9
11
  notify_result(changed_files, errors)
10
12
 
11
13
  changed_files
12
- rescue LoadError
13
- ::Guard::UI.error "Command 'coffee' not found. Please install CoffeeScript."
14
+ rescue CoffeeScript::EngineError => e
15
+ ::Guard::UI.error "CoffeeScript engine error: " + e.message
14
16
  end
15
17
 
16
18
  private
@@ -27,9 +29,14 @@ module Guard
27
29
 
28
30
  directories.each do |directory, scripts|
29
31
  scripts.each do |file|
30
- content, success = compile(file, options)
31
- changed_file = process_compile_result(content, file, directory, errors, success)
32
- changed_files << changed_file
32
+ begin
33
+ content = compile(file, options)
34
+ changed_files << process_compile_result(content, file, directory)
35
+ rescue CoffeeScript::CompilationError => e
36
+ error_message = file + ': ' + e.message
37
+ errors << error_message
38
+ ::Guard::UI.error(error_message)
39
+ end
33
40
  end
34
41
  end
35
42
 
@@ -37,23 +44,15 @@ module Guard
37
44
  end
38
45
 
39
46
  def compile(file, options)
40
- content = Compiler.compile(File.open(file), options)
41
- [content, $?.success?]
47
+ CoffeeScript.compile(File.read(file), options)
42
48
  end
43
49
 
44
- def process_compile_result(content, file, directory, errors, success)
45
- if success
46
- FileUtils.mkdir_p(File.expand_path(directory)) if !File.directory?(directory)
47
- filename = File.join(directory, File.basename(file.gsub(/coffee$/, 'js')))
48
- File.open(File.expand_path(filename), 'w') { |f| f.write(content) }
50
+ def process_compile_result(content, file, directory)
51
+ FileUtils.mkdir_p(File.expand_path(directory)) if !File.directory?(directory)
52
+ filename = File.join(directory, File.basename(file.gsub(/coffee$/, 'js')))
53
+ File.open(File.expand_path(filename), 'w') { |f| f.write(content) }
49
54
 
50
- filename
51
- else
52
- errors << file + ': ' + content.split("\n").select { |line| line =~ /^Error:/ }.join("\n")
53
- ::Guard::UI.error(content)
54
-
55
- nil
56
- end
55
+ filename
57
56
  end
58
57
 
59
58
  def detect_nested_directories(watchers, files, options)
@@ -63,7 +62,7 @@ module Guard
63
62
 
64
63
  watchers.product(files).each do |watcher, file|
65
64
  if matches = file.match(watcher.pattern)
66
- target = File.join(options[:output], File.dirname(matches[1])).gsub(/\/\.$/, '')
65
+ target = matches[1] ? File.join(options[:output], File.dirname(matches[1])).gsub(/\/\.$/, '') : options[:output]
67
66
  if directories[target]
68
67
  directories[target] << file
69
68
  else
@@ -1,3 +1,3 @@
1
1
  guard 'coffeescript', :output => 'public/javascripts/compiled' do
2
- watch('^app/coffeescripts/(.*)\.coffee')
2
+ watch(%r{app/coffeescripts/.+\.coffee})
3
3
  end
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  module CoffeeScriptVersion
3
- VERSION = '0.1.5'
3
+ VERSION = '0.1.6'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-coffeescript
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 1
9
- - 5
10
- version: 0.1.5
8
+ - 6
9
+ version: 0.1.6
11
10
  platform: ruby
12
11
  authors:
13
12
  - Michael Kessler
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-11-12 00:00:00 +01:00
17
+ date: 2011-01-19 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ~>
28
27
  - !ruby/object:Gem::Version
29
- hash: 19
30
28
  segments:
31
29
  - 0
32
30
  - 2
@@ -35,35 +33,33 @@ dependencies:
35
33
  type: :runtime
36
34
  version_requirements: *id001
37
35
  - !ruby/object:Gem::Dependency
38
- name: bundler
36
+ name: coffee-script
39
37
  prerelease: false
40
38
  requirement: &id002 !ruby/object:Gem::Requirement
41
39
  none: false
42
40
  requirements:
43
41
  - - ~>
44
42
  - !ruby/object:Gem::Version
45
- hash: 19
46
43
  segments:
47
- - 1
48
- - 0
49
44
  - 2
50
- version: 1.0.2
51
- type: :development
45
+ - 1
46
+ - 1
47
+ version: 2.1.1
48
+ type: :runtime
52
49
  version_requirements: *id002
53
50
  - !ruby/object:Gem::Dependency
54
- name: rspec
51
+ name: bundler
55
52
  prerelease: false
56
53
  requirement: &id003 !ruby/object:Gem::Requirement
57
54
  none: false
58
55
  requirements:
59
56
  - - ~>
60
57
  - !ruby/object:Gem::Version
61
- hash: 13
62
58
  segments:
63
- - 2
64
- - 0
65
59
  - 1
66
- version: 2.0.1
60
+ - 0
61
+ - 7
62
+ version: 1.0.7
67
63
  type: :development
68
64
  version_requirements: *id003
69
65
  - !ruby/object:Gem::Dependency
@@ -74,14 +70,28 @@ dependencies:
74
70
  requirements:
75
71
  - - ~>
76
72
  - !ruby/object:Gem::Version
77
- hash: 19
78
73
  segments:
79
74
  - 0
80
75
  - 1
81
- - 4
82
- version: 0.1.4
76
+ - 9
77
+ version: 0.1.9
83
78
  type: :development
84
79
  version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 2
90
+ - 2
91
+ - 0
92
+ version: 2.2.0
93
+ type: :development
94
+ version_requirements: *id005
85
95
  description: Guard::CoffeeScript automatically generates your JavaScripts from your CoffeeScripts
86
96
  email:
87
97
  - michi@netzpiraten.ch
@@ -92,7 +102,6 @@ extensions: []
92
102
  extra_rdoc_files: []
93
103
 
94
104
  files:
95
- - lib/guard/coffeescript/compiler.rb
96
105
  - lib/guard/coffeescript/inspector.rb
97
106
  - lib/guard/coffeescript/runner.rb
98
107
  - lib/guard/coffeescript/templates/Guardfile
@@ -114,7 +123,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
123
  requirements:
115
124
  - - ">="
116
125
  - !ruby/object:Gem::Version
117
- hash: 3
118
126
  segments:
119
127
  - 0
120
128
  version: "0"
@@ -123,7 +131,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
131
  requirements:
124
132
  - - ">="
125
133
  - !ruby/object:Gem::Version
126
- hash: 23
127
134
  segments:
128
135
  - 1
129
136
  - 3
@@ -1,75 +0,0 @@
1
- module Guard
2
- class CoffeeScript
3
-
4
- # This has been kindly borrowed from https://github.com/josh/ruby-coffee-script/raw/master/lib/coffee_script.rb
5
- # due to namespace conflicts with the guards own CoffeeScript class
6
- #
7
- # The only change to the original file is to redirect stderr to stdout when executing the compiler,
8
- # so that the error messages can easily be parsed and sent to the Growl notifier.
9
- #
10
- module Compiler
11
- class << self
12
- def locate_coffee_bin
13
- out = `which coffee`
14
- if $?.success?
15
- out.chomp
16
- else
17
- raise LoadError, "could not find `coffee` in PATH"
18
- end
19
- end
20
-
21
- def coffee_bin
22
- @@coffee_bin ||= locate_coffee_bin
23
- end
24
-
25
- def coffee_bin=(path)
26
- @@coffee_bin = path
27
- end
28
-
29
- def version
30
- `#{coffee_bin} --version`[/(\d|\.)+/]
31
- end
32
-
33
- # Compile a script (String or IO) to JavaScript.
34
- def compile(script, options = {})
35
- args = "-sp"
36
-
37
- if options[:wrap] == false ||
38
- options.key?(:bare) ||
39
- options.key?(:no_wrap)
40
- args += " --#{no_wrap_flag}"
41
- end
42
-
43
- execute_coffee(script, args)
44
- end
45
-
46
- # Evaluate a script (String or IO) and return the stdout.
47
- # Note: the first argument will be process.argv[3], the second
48
- # process.argv[4], etc.
49
- def evaluate(script, *args)
50
- execute_coffee(script, "-s #{args.join(' ')}")
51
- end
52
-
53
- private
54
- def execute_coffee(script, args)
55
- command = "#{coffee_bin} #{args} 2>&1"
56
- script = script.read if script.respond_to?(:read)
57
-
58
- IO.popen(command, "w+") do |f|
59
- f << script
60
- f.close_write
61
- f.read
62
- end
63
- end
64
-
65
- def no_wrap_flag
66
- if `#{coffee_bin} --help`.lines.grep(/--no-wrap/).any?
67
- 'no-wrap'
68
- else
69
- 'bare'
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end