guard-haml 0.4 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b3f56d6c5009f06294948811c117837430f48c1
4
+ data.tar.gz: 3571aed2a9923238a869162cdef9654fab29d949
5
+ SHA512:
6
+ metadata.gz: a052a15124ba7591ce3e91232a6883864b4b98ef189fe9d1bb4ab939d01e8177ddb3fa548dc1738beadb75fa628db31faf2f27d6dc7d33d66a48177169defb7f
7
+ data.tar.gz: b20b540d3bc4cbfc62e042612dbf708b31f5e5e9825093316915087882bd7574f247110f56a3787b3cdb215d2147e730e3e5799d3df4b45671207c517dc926de
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Guard::Haml
2
2
 
3
- Guard yo Haml, guard yo html cuz they compilin errybody out here.
3
+ Watches HAML files, compiles them to HTML on change.
4
+
5
+ [![Build Status](https://secure.travis-ci.org/manufaktor/guard-haml.png?branch=development)](http://travis-ci.org/manufaktor/guard-haml)
6
+
4
7
 
5
8
  ## Install
6
9
 
@@ -9,17 +12,19 @@ As the gem name suggests this is a guard extension. Make sure you get [guard](ht
9
12
  Install the gem:
10
13
 
11
14
  gem install guard-haml
12
-
15
+
13
16
  Add it to your Gemfile if you're using bundler (you should)
14
-
17
+
15
18
  gem 'guard-haml'
16
-
19
+
17
20
  Add a basic guard setup:
18
-
21
+
19
22
  guard init haml
20
23
 
21
24
  ## Options
22
25
 
26
+ ### Configuring the output destination
27
+
23
28
  If you want to change the output directory use the `output` option in your
24
29
  Guardfile, e.g.:
25
30
 
@@ -29,6 +34,14 @@ Guardfile, e.g.:
29
34
 
30
35
  This output is relative to the Guardfile.
31
36
 
37
+ ### Multiple output option
38
+
39
+ This lets you compile to two (or more) html files from one haml file. This comes in handy if you want to compile to both a dev and prod build directory, for example:
40
+
41
+ guard 'haml', { :input => 'markup', :output => ['public/dev', 'public/build'] } do
42
+ watch(%r{^.+(\.haml)$})
43
+ end
44
+
32
45
  If you maintain your haml files in a directory that should not be part of the output path, you can set the `input` option, e.g.:
33
46
 
34
47
  guard 'haml', :output => 'public', :input => 'src' do
@@ -36,7 +49,42 @@ If you maintain your haml files in a directory that should not be part of the ou
36
49
  end
37
50
 
38
51
  So when you edit a file `src/partials/_partial.html.haml`
39
- it will be outputted in `public/partials/_partial.html` without the `src`.
52
+ it will be saved to `public/partials/_partial.html` without the `src`.
53
+
54
+ ### File extensions
55
+
56
+ The guard extension will try to add the correct extension based off the input file name. You can provide multiple extensions to control the file name.
57
+
58
+ ```
59
+ "foo.haml" -> "foo.html"
60
+ "foo" -> "foo.html"
61
+ "foo.txt" -> "foo.txt.html"
62
+ "foo.php.haml" -> "foo.php"
63
+ ```
64
+
65
+ You can override the default extension (`html`) using the `default_ext` option:
66
+
67
+ guard 'haml', :default_ext => 'txt' do
68
+ watch %r{^src/.+(\.html\.haml)}
69
+ end
70
+
71
+ ### Compile when starting guard
72
+
73
+ If you want to compile haml files on guard start you can use `run_at_start` option.
74
+
75
+ guard 'haml', :output => 'public', :input => 'src', :run_at_start => true do
76
+ watch %r{^src/.+(\.html\.haml)}
77
+ end
78
+
79
+ ### Guard notifications
80
+
81
+ Also you can configure guard notifications (to Growl/lib-notify/Notifu) by setting `notifications` option to `true`
82
+
83
+ guard 'haml', :output => 'public', :input => 'src', :notifications => true do
84
+ watch %r{^src/.+(\.html\.haml)}
85
+ end
86
+
87
+ ### Configuring HAML
40
88
 
41
89
  If you want to pass options to the Haml engine, you can set the `haml_options` option, e.g.:
42
90
 
@@ -44,12 +92,11 @@ If you want to pass options to the Haml engine, you can set the `haml_options` o
44
92
  watch %r{^src/.+(\.html\.haml)}
45
93
  end
46
94
 
47
- This will produce compressed HTML. See [Haml Reference](http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options) for more details.
95
+ This will produce compressed HTML. See [Haml Reference](http://haml.info/docs/yardoc/file.HAML_REFERENCE.html#options) for more details.
48
96
 
49
97
  ## Development
50
98
 
51
99
  * Source is hosted on [Github: guard-haml](https://github.com/manufaktor/guard-haml)
52
100
  * Report issues/questions/feature requests on the [Github Issue tracker for guard-haml](https://github.com/manufaktor/guard-haml/issues)
53
101
 
54
- Pull requests are welcome.
55
- Specs are very welcome, make sure you support both ruby 1.8.7 and ruby 1.9.2.
102
+ Pull requests are welcome. If you are adding something new that is worth documenting, please do not forget to note it in the README.
@@ -5,60 +5,119 @@ require 'haml'
5
5
 
6
6
  module Guard
7
7
  class Haml < Guard
8
-
8
+ autoload :Notifier, 'guard/haml/notifier'
9
+
9
10
  def initialize(watchers = [], options = {})
10
11
  @options = {
11
- :notifications => true
12
- }.merge(options)
12
+ :notifications => true,
13
+ :default_ext => 'html',
14
+ :auto_append_file_ext => false
15
+ }.merge options
13
16
  super(watchers, @options)
14
17
  end
15
-
18
+
19
+ def start
20
+ run_all if @options[:run_at_start]
21
+ end
22
+
23
+ def stop
24
+ true
25
+ end
26
+
27
+ def reload
28
+ run_all
29
+ end
30
+
31
+ def run_all
32
+ run_on_changes(Watcher.match_files(self, Dir.glob(File.join('**', '*.*'))))
33
+ end
34
+
35
+ def run_on_changes(paths)
36
+ paths.each do |file|
37
+ output_files = get_output(file)
38
+ compiled_haml = compile_haml(file)
39
+ output_files.each do |output_file|
40
+ FileUtils.mkdir_p File.dirname(output_file)
41
+ File.open(output_file, 'w') { |f| f.write(compiled_haml) }
42
+ end
43
+ message = "Successfully compiled haml to html!\n"
44
+ message += "# #{file} -> #{output_files.join(', ')}".gsub("#{Bundler.root.to_s}/", '')
45
+ ::Guard::UI.info message
46
+ Notifier.notify( true, message ) if @options[:notifications]
47
+ end
48
+ notify paths
49
+ end
50
+
51
+ private
52
+
16
53
  def compile_haml file
17
54
  begin
18
55
  content = File.new(file).read
19
56
  engine = ::Haml::Engine.new(content, (@options[:haml_options] || {}))
20
57
  engine.render
21
58
  rescue StandardError => error
22
- ::Guard::UI.error "HAML Error: " + error.message
59
+ message = "HAML compilation failed!\nError: #{error.message}"
60
+ ::Guard::UI.error message
61
+ Notifier.notify( false, message ) if @options[:notifications]
23
62
  throw :task_has_failed
24
63
  end
25
64
  end
26
65
 
27
66
  # Get the file path to output the html based on the file being
28
- # built. The output path is relative to where guard is being run.
67
+ # built. The output path is relative to where guard is being run.
29
68
  #
30
- # @param file [String] path to file being built
31
- # @return [String] path to file where output should be written
69
+ # @param file [String, Array<String>] path to file being built
70
+ # @return [Array<String>] path(s) to file where output should be written
32
71
  #
33
72
  def get_output(file)
34
- file_dir = File.dirname(file)
35
- file_name = File.basename(file).split('.')[0..-2].join('.')
36
-
37
- file_name = "#{file_name}.html" if file_name.match("\.html?").nil?
73
+ input_file_dir = File.dirname(file)
74
+ file_name = get_file_name(file)
75
+ file_name = "#{file_name}.html" if append_file_ext_to_output_path?(file_name)
76
+ input_file_dir = input_file_dir.gsub(Regexp.new("#{@options[:input]}(\/){0,1}"), '') if @options[:input]
77
+ if @options[:output]
78
+ Array(@options[:output]).map do |output_dir|
79
+ File.join(output_dir, input_file_dir, file_name)
80
+ end
81
+ else
82
+ if input_file_dir == ''
83
+ [file_name]
84
+ else
85
+ [File.join(input_file_dir, file_name)]
86
+ end
87
+ end
88
+ end
38
89
 
39
- file_dir = file_dir.gsub(Regexp.new("#{@options[:input]}(\/){0,1}"), '') if @options[:input]
40
- file_dir = File.join(@options[:output], file_dir) if @options[:output]
90
+ # Generate a file name based on the provided file path.
91
+ # Provide a logical extension.
92
+ #
93
+ # Examples:
94
+ # "path/foo.haml" -> "foo.html"
95
+ # "path/foo" -> "foo.html"
96
+ # "path/foo.bar" -> "foo.bar.html"
97
+ # "path/foo.bar.haml" -> "foo.bar"
98
+ #
99
+ # @param file String path to file
100
+ # @return String file name including extension
101
+ #
102
+ def get_file_name(file)
103
+ sub_strings = File.basename(file).split('.')
104
+ base_name, extensions = sub_strings.first, sub_strings[1..-1]
41
105
 
42
- if file_dir == ''
43
- file_name
106
+ if extensions.last == 'haml'
107
+ extensions.pop
108
+ if extensions.empty?
109
+ [base_name, @options[:default_ext]].join('.')
110
+ else
111
+ [base_name, extensions].flatten.join('.')
112
+ end
44
113
  else
45
- File.join(file_dir, file_name)
114
+ [base_name, extensions, @options[:default_ext]].flatten.join('.')
46
115
  end
47
116
  end
48
-
49
- def run_all
50
- run_on_changes(Watcher.match_files(self, Dir.glob(File.join('**', '*.*'))))
51
- end
52
-
53
- def run_on_changes(paths)
54
- paths.each do |file|
55
- output_file = get_output(file)
56
- FileUtils.mkdir_p File.dirname(output_file)
57
- File.open(output_file, 'w') { |f| f.write(compile_haml(file)) }
58
- ::Guard::UI.info "# compiled haml in '#{file}' to html in '#{output_file}'"
59
- ::Guard::Notifier.notify("# compiled haml in #{file}", :title => "Guard::Haml", :image => :success) if @options[:notifications]
60
- end
61
- notify paths
117
+
118
+ def append_file_ext_to_output_path?(file_name)
119
+ return unless @options[:auto_append_file_ext]
120
+ file_name.match("\.html?").nil?
62
121
  end
63
122
 
64
123
  def notify(changed_files)
@@ -67,6 +126,5 @@ module Guard
67
126
  guard.run_on_changes paths unless paths.empty?
68
127
  end
69
128
  end
70
-
71
129
  end
72
130
  end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Guard
4
+ class Haml
5
+ class Notifier
6
+ class << self
7
+ def image result
8
+ result ? :success : :failed
9
+ end
10
+
11
+ def notify( result, message )
12
+ ::Guard::Notifier.notify( message,
13
+ :title => 'Guard::Haml',
14
+ :image => image( result )
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,11 @@
1
+ # Sample guardfile block for Guard::Haml
2
+ # You can use some options to change guard-haml configuration
3
+ # :output => 'public' set output directory for compiled files
4
+ # :input => 'src' set input directory with haml files
5
+ # :run_at_start => true compile files when guard starts
6
+ # :notifications => true send notifictions to Growl/libnotify/Notifu
7
+ # :haml_options => { :ugly => true } pass options to the Haml engine
8
+
1
9
  guard 'haml' do
2
10
  watch(/^.+(\.html\.haml)/)
3
- end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  class HamlVersion
3
- VERSION = '0.4'
3
+ VERSION = '0.5'
4
4
  end
5
5
  end
@@ -0,0 +1,10 @@
1
+ !!!
2
+ %html(lang="en")
3
+ %head
4
+ %meta(charset="utf-8")
5
+ %title Guard::Haml
6
+ %body
7
+ .content
8
+ %h1 Welcome to Guard::Haml
9
+ %p Testing
10
+ = FAILED!
@@ -0,0 +1,9 @@
1
+ !!!
2
+ %html(lang="en")
3
+ %head
4
+ %meta(charset="utf-8")
5
+ %title Guard::Haml
6
+ %body
7
+ .content
8
+ %h1 Welcome to Guard::Haml
9
+ %p Testing
@@ -0,0 +1,9 @@
1
+ !!!
2
+ %html(lang="en")
3
+ %head
4
+ %meta(charset="utf-8")
5
+ %title Guard::Haml
6
+ %body
7
+ .content
8
+ %h1 Welcome to Guard::Haml
9
+ %p Testing
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Guard::Haml::Notifier do
4
+ subject { described_class }
5
+
6
+ describe '#image' do
7
+ context 'when recieves true' do
8
+ specify { subject.image(true).should be :success }
9
+ end
10
+
11
+ context 'when recieves false' do
12
+ specify { subject.image(false).should be :failed }
13
+ end
14
+ end
15
+
16
+ describe '#notify' do
17
+ context 'when recieves true with message' do
18
+ it 'should call Guard::Notifier with success image' do
19
+ ::Guard::Notifier.should_receive(:notify).with(
20
+ 'Successful compilation!',
21
+ :title => 'Guard::Haml',
22
+ :image => :success
23
+ )
24
+ subject.notify(true, 'Successful compilation!')
25
+ end
26
+ end
27
+
28
+ context 'when recieves false with message' do
29
+ it 'should call Guard::Notifier with failed image' do
30
+ ::Guard::Notifier.should_receive(:notify).with(
31
+ 'Compilation failed!',
32
+ :title => 'Guard::Haml',
33
+ :image => :failed
34
+ )
35
+ subject.notify(false, 'Compilation failed!')
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,72 +1,259 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Guard::Haml do
4
- subject { Guard::Haml.new }
5
-
6
- describe 'run all' do
4
+ let(:subject_with_options) { described_class.new( [],
5
+ :notifications => false,
6
+ :run_at_start => true) }
7
+ let(:subject_notifiable) { described_class.new( [],
8
+ :notifications => true ) }
9
+ let(:notifier) { Guard::Haml::Notifier }
10
+
11
+ describe "class" do
12
+ it 'should autoload Notifier class' do
13
+ expect { Guard::Haml::Notifier }.not_to raise_error
14
+ end
15
+ end
16
+
17
+ describe '#new' do
18
+ context 'notifications option by default' do
19
+ specify { subject.options[:notifications].should be_true }
20
+ end
21
+
22
+ context "when recieves options hash" do
23
+ it 'should merge it to @options instance variable' do
24
+ subject_with_options.options[:notifications].should be_false
25
+ subject_with_options.options[:run_at_start].should be_true
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#start' do
31
+ context 'by default' do
32
+ it 'should not call #run_all' do
33
+ subject.should_not_receive(:run_all).and_return(true)
34
+ subject.start
35
+ end
36
+ end
37
+
38
+ context 'when run_on_start option set to true' do
39
+ it 'should call #run_all' do
40
+ subject_with_options.should_receive(:run_all).and_return(true)
41
+ subject_with_options.start
42
+ end
43
+ end
44
+
45
+ context 'when run_on_start option set to false' do
46
+ before do
47
+ subject.options[:run_at_start] = false
48
+ end
49
+
50
+ it 'should not call #run_all' do
51
+ subject.should_not_receive(:run_all).and_return(true)
52
+ subject.start
53
+ end
54
+ end
55
+ end
56
+
57
+ describe '#stop' do
58
+ specify { subject.stop.should be_true }
59
+ end
60
+
61
+ describe '#reload' do
62
+ it 'should call #run_all' do
63
+ subject.should_receive(:run_all).and_return(true)
64
+ subject.reload
65
+ end
66
+ end
67
+
68
+ describe '#run_all' do
7
69
  it 'should rebuild all files being watched' do
8
70
  Guard::Haml.stub(:run_on_change).with([]).and_return([])
9
71
  Guard.stub(:guards).and_return([subject])
10
72
  subject.run_all
11
73
  end
12
74
  end
13
-
75
+
14
76
  describe '#get_output' do
15
77
  context 'by default' do
16
- it 'should return test/index.html.haml as test/index.html' do
17
- subject.get_output('test/index.html.haml').should eq('test/index.html')
78
+ it 'should return test/index.html.haml as [test/index.html]' do
79
+ subject.send(:get_output, 'test/index.html.haml').
80
+ should eq(['test/index.html'])
18
81
  end
19
-
20
- it 'should return test/index.htm.haml as test/index.htm' do
21
- subject.get_output('test/index.htm.haml').should eq('test/index.htm')
82
+
83
+ it 'should return test/index.htm.haml as [test/index.htm]' do
84
+ subject.send(:get_output, 'test/index.htm.haml').
85
+ should eq(['test/index.htm'])
22
86
  end
23
87
 
24
- it 'should return test/index.haml as test/index.html' do
25
- subject.get_output('test/index.haml').should eq('test/index.html')
88
+ it 'should return test/index.haml as [test/index.html]' do
89
+ subject.send(:get_output, 'test/index.haml').
90
+ should eq(['test/index.html'])
26
91
  end
27
92
  end
28
-
93
+
29
94
  context 'when the output option is set to "demo/output"' do
30
95
  before do
31
96
  subject.options[:output] = 'demo/output'
32
97
  end
33
-
34
- it 'should return test/index.html.haml as demo/output/test/index.html.haml' do
35
- subject.get_output('test/index.html.haml').should eq('demo/output/test/index.html')
98
+
99
+ it 'should return test/index.html.haml as [demo/output/test/index.html.haml]' do
100
+ subject.send(:get_output, 'test/index.html.haml').
101
+ should eq(['demo/output/test/index.html'])
36
102
  end
37
103
  end
38
-
104
+
105
+ context 'when the output option is set to ["demo/output", "demo2/output"]' do
106
+ before do
107
+ subject.options[:output] = ['demo1/output', 'demo2/output']
108
+ end
109
+
110
+ it 'should return test/index.html.haml as [demo1/output/test/index.html.haml, demo2/output/test/index.html.haml]' do
111
+ subject.send(:get_output, 'test/index.html.haml').
112
+ should eq(['demo1/output/test/index.html', 'demo2/output/test/index.html'])
113
+ end
114
+ end
115
+
116
+ context 'when the default extensions is set to "txt"' do
117
+ before do
118
+ subject.options[:default_ext] = 'txt'
119
+ end
120
+
121
+ it 'should return test/index.haml as test/index.txt' do
122
+ subject.send(:get_output, 'test/index.haml').
123
+ should eq(['test/index.txt'])
124
+ end
125
+
126
+ it 'should return test/index.php.haml as test/index.php due to the second extension' do
127
+ subject.send(:get_output, 'test/index.php.haml').
128
+ should eq(['test/index.php'])
129
+ end
130
+ end
131
+
132
+
133
+
39
134
  context 'when the exclude_base_dir option is set to "test/ignore"' do
40
135
  before do
41
136
  subject.options[:input] = 'test/ignore'
42
137
  end
43
-
44
- it 'should return test/ignore/index.html.haml as index.html' do
45
- subject.get_output('test/ignore/index.html.haml').should eq('index.html')
138
+
139
+ it 'should return test/ignore/index.html.haml as [index.html]' do
140
+ subject.send(:get_output, 'test/ignore/index.html.haml').
141
+ should eq(['index.html'])
46
142
  end
47
-
143
+
48
144
  context 'when the output option is set to "demo/output"' do
49
145
  before do
50
146
  subject.options[:output] = 'demo/output'
51
147
  end
52
-
53
- it 'should return test/ignore/abc/index.html.haml as demo/output/abc/index.html' do
54
- subject.get_output('test/ignore/abc/index.html.haml').should eq('demo/output/abc/index.html')
148
+
149
+ it 'should return test/ignore/abc/index.html.haml as [demo/output/abc/index.html]' do
150
+ subject.send(:get_output, 'test/ignore/abc/index.html.haml').
151
+ should eq(['demo/output/abc/index.html'])
55
152
  end
56
153
  end
57
154
  end
155
+
156
+ context 'when the input file contains a second extension"' do
157
+ it 'should return test/index.php.haml as [test/index.php]' do
158
+ subject.send(:get_output, 'test/index.php.haml').
159
+ should eq(['test/index.php'])
160
+ end
161
+ end
162
+ end
163
+
164
+ describe '#get_file_name' do
165
+ context 'by default (if a ".haml" extension has been defined)' do
166
+ it 'should return the file name with the default extension ".html"' do
167
+ subject.send(:get_file_name, 'test/index.haml').
168
+ should eq('index.html')
169
+ end
170
+ end
171
+
172
+ context 'if no extension has been defined at all' do
173
+ it 'should return the file name with the default extension ".html"' do
174
+ subject.send(:get_file_name, 'test/index').
175
+ should eq('index.html')
176
+ end
177
+ end
178
+
179
+ context 'if an extension other than ".haml" has been defined' do
180
+ it 'should return the file name with the default extension ".html"' do
181
+ subject.send(:get_file_name, 'test/index.foo').
182
+ should eq('index.foo.html')
183
+ end
184
+ end
185
+
186
+ context 'if multiple extensions including ".haml" have been defined' do
187
+ it 'should return the file name with the extension second to last' do
188
+ subject.send(:get_file_name, 'test/index.foo.haml').
189
+ should eq('index.foo')
190
+ end
191
+ end
58
192
  end
59
-
193
+
60
194
  describe '#run_on_changes' do
61
195
  it 'should notify other guards upon completion' do
62
196
  subject.should_receive(:notify).with([])
63
197
  subject.run_on_changes([])
64
198
  end
199
+
200
+ context 'when notifications option set to true' do
201
+ let(:success_message) { "Successfully compiled haml to html!\n" }
202
+
203
+ context 'with one output' do
204
+ after do
205
+ File.unlink "#{@fixture_path}/test.html"
206
+ end
207
+
208
+ it 'should call Notifier.notify with 1 output' do
209
+ message = success_message + "# spec/fixtures/test.html.haml -> spec/fixtures/test.html"
210
+ notifier.should_receive(:notify).with(true, message)
211
+ subject_notifiable.run_on_changes(["#{@fixture_path}/test.html.haml"])
212
+ end
213
+ end
214
+
215
+ it 'should call Notifier.notify' do
216
+ message = "Successfully compiled haml to html!\n"
217
+ message += "# spec/fixtures/test.html.haml -> spec/fixtures/test.html"
218
+ notifier.should_receive(:notify).with(true, message)
219
+ subject_notifiable.run_on_changes(["#{@fixture_path}/test.html.haml"])
220
+ end
221
+
222
+ context 'with two outputs' do
223
+ before do
224
+ subject_notifiable.stub(:get_output).and_return(["#{@fixture_path}/test.html", "#{@fixture_path}/test2.html"])
225
+ end
226
+
227
+ after do
228
+ File.unlink "#{@fixture_path}/test.html"
229
+ File.unlink "#{@fixture_path}/test2.html"
230
+ end
231
+
232
+ it 'should call Notifier.notify with 2 outputs' do
233
+ message = success_message + "# spec/fixtures/test.html.haml -> spec/fixtures/test.html, spec/fixtures/test2.html"
234
+ notifier.should_receive(:notify).with(true, message)
235
+ subject_notifiable.run_on_changes(["#{@fixture_path}/test.html.haml"])
236
+ end
237
+ end
238
+ end
65
239
  end
66
240
 
67
241
  describe '#compile_haml' do
68
242
  it 'throws :task_has_failed when an error occurs' do
69
- expect { subject.compile_haml('') }.to throw_symbol :task_has_failed
243
+ expect { subject.send(:compile_haml, "#{@fixture_path}/fail_test.html.haml") }.
244
+ to throw_symbol :task_has_failed
245
+ end
246
+
247
+ context 'when notifications option set to true' do
248
+ it 'should call Notifier.notify when an error occurs' do
249
+ message = "HAML compilation failed!\n"
250
+ message += "Error: Illegal nesting: content can't be both given on the same line as %p and nested within it."
251
+ notifier.should_receive(:notify).with(false, message)
252
+ catch(:task_has_failed) do
253
+ subject_notifiable.send(:compile_haml, "#{@fixture_path}/fail_test.html.haml")
254
+ end.should be_nil
255
+
256
+ end
70
257
  end
71
258
  end
72
259
  end
@@ -8,7 +8,7 @@ RSpec.configure do |config|
8
8
 
9
9
  config.before(:each) do
10
10
  ENV["GUARD_ENV"] = 'test'
11
- @fixture_path = Pathname.new(File.expand_path('../fixtures/', __FILE__))
12
- @lib_path = Pathname.new(File.expand_path('../../lib/', __FILE__))
11
+ @fixture_path = Pathname.new "#{Bundler.root}/spec/fixtures"
12
+ @lib_path = Pathname.new "#{Bundler.root}/lib"
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,49 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-haml
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
5
- prerelease:
4
+ version: '0.5'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Immanuel Häussermann
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-06-02 00:00:00.000000000 Z
11
+ date: 2013-04-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: guard
16
- requirement: &70267091645620 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.1'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70267091645620
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '1.1'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: haml
27
- requirement: &70267091645120 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '3.0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70267091645120
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: rspec
38
- requirement: &70267091644740 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
40
51
  requirements:
41
- - - ! '>='
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
42
60
  - !ruby/object:Gem::Version
43
61
  version: '0'
44
62
  type: :development
45
63
  prerelease: false
46
- version_requirements: *70267091644740
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
47
69
  description: Compiles file.html.haml into file.html
48
70
  email:
49
71
  - haeussermann@gmail.com
@@ -51,38 +73,46 @@ executables: []
51
73
  extensions: []
52
74
  extra_rdoc_files: []
53
75
  files:
76
+ - lib/guard/haml/notifier.rb
54
77
  - lib/guard/haml/templates/Guardfile
55
78
  - lib/guard/haml/version.rb
56
79
  - lib/guard/haml.rb
57
80
  - LICENSE
58
81
  - README.md
59
82
  - Gemfile
83
+ - spec/fixtures/fail_test.html.haml
84
+ - spec/fixtures/test.html.haml
85
+ - spec/fixtures/test2.html.haml
86
+ - spec/guard/haml/notifier_spec.rb
60
87
  - spec/guard/haml_spec.rb
61
88
  - spec/spec_helper.rb
62
89
  homepage: ''
63
90
  licenses: []
91
+ metadata: {}
64
92
  post_install_message:
65
93
  rdoc_options: []
66
94
  require_paths:
67
95
  - lib
68
96
  required_ruby_version: !ruby/object:Gem::Requirement
69
- none: false
70
97
  requirements:
71
- - - ! '>='
98
+ - - '>='
72
99
  - !ruby/object:Gem::Version
73
100
  version: '0'
74
101
  required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
102
  requirements:
77
- - - ! '>='
103
+ - - '>='
78
104
  - !ruby/object:Gem::Version
79
105
  version: '0'
80
106
  requirements: []
81
107
  rubyforge_project: guard-haml
82
- rubygems_version: 1.8.10
108
+ rubygems_version: 2.0.3
83
109
  signing_key:
84
- specification_version: 3
110
+ specification_version: 4
85
111
  summary: Guard gem for Haml
86
112
  test_files:
113
+ - spec/fixtures/fail_test.html.haml
114
+ - spec/fixtures/test.html.haml
115
+ - spec/fixtures/test2.html.haml
116
+ - spec/guard/haml/notifier_spec.rb
87
117
  - spec/guard/haml_spec.rb
88
118
  - spec/spec_helper.rb