guard-haskell 1.1.0 → 1.2.0
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.
- checksums.yaml +8 -8
- data/CHANGELOG.md +4 -0
- data/Guardfile +6 -0
- data/README.md +22 -0
- data/guard-haskell.gemspec +1 -0
- data/lib/guard/haskell.rb +24 -15
- data/lib/guard/haskell/repl.rb +18 -15
- data/lib/guard/haskell/version.rb +1 -1
- data/spec/{haskell_spec.rb → guard/haskell_spec.rb} +108 -26
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NmQxYWQ2YzZiMmUwOGY3YTMzNjIzM2IyYTNjNjcxODk5ZGMyYzFlMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjEzZjFmZjk3ZWUyNTA4Yjc3MDkwOTgwZTJjNzQ1YzViYjU3NWMyNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTE2OTEzZWNjMmZmZjllNTEzMDBlMWMwNmJiYTFmOGMzOGU0NDc2MjNjOWRh
|
10
|
+
YjQ2MjI0NjkwODNjMDZiMWNkYTRlNzE2MjhiODkyMDBjMTE3OGI3ZGY1MDQ1
|
11
|
+
YWQ2NjU1ZjFiZjAwOWFhNTVmNjFjNjhhYWQ3NTQ4NTkzNmM2ZGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDljODRhOGVmZTYzZjcwNjlhOWUxODcxZDM2ZDliNGE1MjM4YTJmODA0ZDUx
|
14
|
+
MTY2NTQ1MzdlNjM2NjBmY2Y3NWM3OGI4ZWM1ZGQxNTNhYjgzOGEzNDE3MWY3
|
15
|
+
MjY3NDM4MTFjMTQ1YzMxN2IyMzBlMTVmMzMyYzc5NDc1MDU4ODI=
|
data/CHANGELOG.md
ADDED
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -71,6 +71,28 @@ Pass custom ghci options, for example, `-XCPP` directives like `-DTEST` (default
|
|
71
71
|
|
72
72
|
"Top" spec location (default: `test/Spec.hs`).
|
73
73
|
|
74
|
+
## Known problems
|
75
|
+
|
76
|
+
### App you test uses the GHC API
|
77
|
+
|
78
|
+
Unfortunately, testing such applications with `guard-haskell` is basically impossible
|
79
|
+
because `ghci` uses `GHC API` too. Sooner or later you will see something like:
|
80
|
+
|
81
|
+
```
|
82
|
+
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
|
83
|
+
HUnitzm1zi2zi5zi2_TestziHUnitziBase_zdwzdcshowsPrec_slow
|
84
|
+
whilst processing object file
|
85
|
+
/home/maksenov/.cabal/lib/HUnit-1.2.5.2/ghc-7.6.2/HSHUnit-1.2.5.2.o
|
86
|
+
This could be caused by:
|
87
|
+
* Loading two different object files which export the same symbol
|
88
|
+
* Specifying the same object file twice on the GHCi command line
|
89
|
+
* An incorrect `package.conf' entry, causing some object to be
|
90
|
+
loaded twice.
|
91
|
+
GHCi cannot safely continue in this situation. Exiting now. Sorry.
|
92
|
+
```
|
93
|
+
|
94
|
+
Fragile concurrent access is a known limitation of the `GHC API`, which hopefully will be eventually fixed.
|
95
|
+
|
74
96
|
[0]: https://github.com/guard/guard#readme
|
75
97
|
[1]: http://hspec.github.io/
|
76
98
|
[2]: http://hspec.github.io/hspec-discover.html
|
data/guard-haskell.gemspec
CHANGED
data/lib/guard/haskell.rb
CHANGED
@@ -22,7 +22,7 @@ module ::Guard
|
|
22
22
|
|
23
23
|
require 'guard/haskell/repl'
|
24
24
|
|
25
|
-
attr_reader :repl, :top_spec, :ghci_options, :targets
|
25
|
+
attr_reader :repl, :top_spec, :ghci_options, :targets, :last_run
|
26
26
|
attr_reader :all_on_start, :all_on_pass
|
27
27
|
|
28
28
|
def initialize options = {}
|
@@ -43,7 +43,6 @@ module ::Guard
|
|
43
43
|
|
44
44
|
if all_on_start
|
45
45
|
run_all
|
46
|
-
success?
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
@@ -58,28 +57,39 @@ module ::Guard
|
|
58
57
|
|
59
58
|
def run_all
|
60
59
|
repl.run
|
60
|
+
success?
|
61
61
|
end
|
62
62
|
|
63
63
|
def run pattern
|
64
|
-
if
|
65
|
-
repl.run(pattern)
|
66
|
-
else
|
64
|
+
if last_run == :runtime_failure
|
67
65
|
repl.rerun
|
66
|
+
else
|
67
|
+
repl.run(pattern)
|
68
68
|
end
|
69
|
+
success?
|
69
70
|
end
|
70
71
|
|
71
72
|
def success?
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
73
|
+
case [last_run, repl.result]
|
74
|
+
when [:runtime_failure, :success],
|
75
|
+
[:compile_failure, :success]
|
76
|
+
@last_run = :success
|
77
|
+
Notifier.notify('Success')
|
78
|
+
if all_on_pass
|
79
|
+
run_all
|
79
80
|
end
|
81
|
+
when [:success, :success]
|
80
82
|
Notifier.notify('Success')
|
81
|
-
|
82
|
-
|
83
|
+
when [:runtime_failure, :compile_failure],
|
84
|
+
[:runtime_failure, :runtime_failure],
|
85
|
+
[:compile_failure, :compile_failure]
|
86
|
+
Notifier.notify('Failure', image: :failed)
|
87
|
+
when [:compile_failure, :runtime_failure],
|
88
|
+
[:success, :runtime_failure]
|
89
|
+
@last_run = :runtime_failure
|
90
|
+
Notifier.notify('Failure', image: :failed)
|
91
|
+
when [:success, :compile_failure]
|
92
|
+
@last_run = :compile_failure
|
83
93
|
Notifier.notify('Failure', image: :failed)
|
84
94
|
end
|
85
95
|
end
|
@@ -95,7 +105,6 @@ module ::Guard
|
|
95
105
|
case paths.first
|
96
106
|
when /(.+)Spec\.l?hs$/, /(.+)\.l?hs$/
|
97
107
|
run($1.strip_lowercase_directories.path_to_module_name)
|
98
|
-
success?
|
99
108
|
end
|
100
109
|
end
|
101
110
|
end
|
data/lib/guard/haskell/repl.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
require 'io/wait'
|
2
1
|
require 'open3'
|
3
2
|
|
4
3
|
class ::Guard::Haskell::Repl
|
5
|
-
attr_reader :stdin, :reader, :thread, :
|
4
|
+
attr_reader :stdin, :reader, :thread, :result
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@running = false
|
8
|
+
@result = :success
|
9
|
+
end
|
6
10
|
|
7
11
|
def start ghci_options
|
8
12
|
cmd = ["ghci"]
|
9
|
-
Dir["*"].each { |
|
13
|
+
Dir["*"].each { |d| cmd << "-i#{d}" if File.directory?(d) }
|
10
14
|
sandbox = ::Dir[".cabal-sandbox/*packages.conf.d"].first
|
11
15
|
cmd << "-package-db=#{sandbox}" if sandbox
|
12
16
|
cmd.concat(ghci_options)
|
@@ -14,25 +18,24 @@ class ::Guard::Haskell::Repl
|
|
14
18
|
@stdin, stdout, @thread = ::Open3.popen2e(*cmd)
|
15
19
|
@reader = ::Thread.new do
|
16
20
|
loop do
|
17
|
-
|
18
|
-
if n > 0
|
19
|
-
out = stdout.read(n)
|
21
|
+
while (out = stdout.gets)
|
20
22
|
print out
|
21
23
|
if @running
|
22
24
|
case out
|
23
25
|
when /\d+ examples?, 0 failures/
|
24
|
-
@
|
26
|
+
@result = :success
|
27
|
+
@running = false
|
28
|
+
when /\d+ examples?, \d+ failures?/
|
29
|
+
@result = :runtime_failure
|
25
30
|
@running = false
|
26
|
-
when
|
27
|
-
/Failed, modules loaded:/,
|
31
|
+
when /Failed, modules loaded:/,
|
28
32
|
/\*{3} Exception:/,
|
29
|
-
/phase `C preprocessor' failed
|
30
|
-
|
33
|
+
/phase `C preprocessor' failed/,
|
34
|
+
/^GHCi runtime linker: fatal error:/
|
35
|
+
@result = :compile_failure
|
31
36
|
@running = false
|
32
37
|
end
|
33
38
|
end
|
34
|
-
else
|
35
|
-
sleep(0.1)
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
@@ -59,9 +62,9 @@ class ::Guard::Haskell::Repl
|
|
59
62
|
_repl ":reload\n:main --color --rerun\n"
|
60
63
|
end
|
61
64
|
|
62
|
-
def
|
65
|
+
def result
|
63
66
|
while @running do sleep(0.01) end
|
64
|
-
@
|
67
|
+
@result
|
65
68
|
end
|
66
69
|
|
67
70
|
def _repl command
|
@@ -79,7 +79,7 @@ describe ::Guard::Haskell do
|
|
79
79
|
it "runs all specs on start with :all_on_start option enabled" do
|
80
80
|
custom_guard = ::Guard::Haskell.new(all_on_start: true)
|
81
81
|
|
82
|
-
|
82
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run)
|
83
83
|
expect(custom_guard).to receive(:success?)
|
84
84
|
|
85
85
|
custom_guard.start
|
@@ -111,6 +111,15 @@ describe ::Guard::Haskell do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
describe "#run" do
|
114
|
+
it "checks success after run" do
|
115
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
116
|
+
expect(guard).to receive(:success?)
|
117
|
+
guard.instance_variable_set(:@last_run, :success)
|
118
|
+
|
119
|
+
guard.start
|
120
|
+
guard.run("Foo")
|
121
|
+
end
|
122
|
+
|
114
123
|
it "runs specs matching pattern if last run was a success" do
|
115
124
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
116
125
|
guard.instance_variable_set(:@last_run, :success)
|
@@ -119,36 +128,98 @@ describe ::Guard::Haskell do
|
|
119
128
|
guard.run("Foo")
|
120
129
|
end
|
121
130
|
|
122
|
-
it "
|
131
|
+
it "runs specs matching pattern if last run was a compile time failure" do
|
132
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
133
|
+
guard.instance_variable_set(:@last_run, :compile_failure)
|
134
|
+
|
135
|
+
guard.start
|
136
|
+
guard.run("Foo")
|
137
|
+
end
|
138
|
+
|
139
|
+
it "reruns previous specs if last run was a runtime failure" do
|
123
140
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:rerun)
|
124
|
-
guard.instance_variable_set(:@last_run, :
|
141
|
+
guard.instance_variable_set(:@last_run, :runtime_failure)
|
125
142
|
|
126
143
|
guard.start
|
127
144
|
guard.run("Foo")
|
128
145
|
end
|
129
146
|
end
|
130
147
|
|
131
|
-
describe "#
|
132
|
-
it "
|
133
|
-
::Guard::Haskell::Repl.
|
134
|
-
|
135
|
-
|
136
|
-
guard.instance_variable_set(:@last_run, :failure)
|
148
|
+
describe "#run_all" do
|
149
|
+
it "checks success after run" do
|
150
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run)
|
151
|
+
expect(guard).to receive(:success?)
|
152
|
+
guard.instance_variable_set(:@last_run, :success)
|
137
153
|
|
138
154
|
guard.start
|
139
|
-
guard.
|
140
|
-
expect(guard.instance_variable_get(:@last_run)).to eq(:success)
|
155
|
+
guard.run_all
|
141
156
|
end
|
157
|
+
end
|
142
158
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
159
|
+
describe "#success" do
|
160
|
+
def notify(before, received, after)
|
161
|
+
::Guard::Haskell::Repl.any_instance.stub(:result) { received }
|
162
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
163
|
+
yield
|
164
|
+
guard.instance_variable_set(:@last_run, before)
|
148
165
|
|
149
166
|
guard.start
|
150
167
|
guard.success?
|
151
|
-
expect(guard.instance_variable_get(:@last_run)).to eq(
|
168
|
+
expect(guard.instance_variable_get(:@last_run)).to eq(after)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "notifies on success after success" do
|
172
|
+
notify(:success, :success, :success) do
|
173
|
+
expect(::Guard::Notifier).to receive(:notify).with('Success')
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
it "notifies on success after runtime failure" do
|
178
|
+
notify(:runtime_failure, :success, :success) do
|
179
|
+
expect(::Guard::Notifier).to receive(:notify).with('Success')
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
it "notifies on success after compile time failure" do
|
184
|
+
notify(:compile_failure, :success, :success) do
|
185
|
+
expect(::Guard::Notifier).to receive(:notify).with('Success')
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
it "notifies on runtime failure after success" do
|
190
|
+
notify(:success, :runtime_failure, :runtime_failure) do
|
191
|
+
expect(::Guard::Notifier).to receive(:notify).with('Failure', image: :failed)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
it "notifies on runtime failure after runtime failure" do
|
196
|
+
notify(:runtime_failure, :runtime_failure, :runtime_failure) do
|
197
|
+
expect(::Guard::Notifier).to receive(:notify).with('Failure', image: :failed)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
it "notifies on runtime failure after compile time failure" do
|
202
|
+
notify(:compile_failure, :runtime_failure, :runtime_failure) do
|
203
|
+
expect(::Guard::Notifier).to receive(:notify).with('Failure', image: :failed)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
it "notifies on compile time failure after success" do
|
208
|
+
notify(:success, :compile_failure, :compile_failure) do
|
209
|
+
expect(::Guard::Notifier).to receive(:notify).with('Failure', image: :failed)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
it "notifies on compile time failure after runtime failure" do
|
214
|
+
notify(:runtime_failure, :compile_failure, :runtime_failure) do
|
215
|
+
expect(::Guard::Notifier).to receive(:notify).with('Failure', image: :failed)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
it "notifies on compile time failure after compile time failure" do
|
220
|
+
notify(:compile_failure, :compile_failure, :compile_failure) do
|
221
|
+
expect(::Guard::Notifier).to receive(:notify).with('Failure', image: :failed)
|
222
|
+
end
|
152
223
|
end
|
153
224
|
|
154
225
|
it "does not run all specs on success after failure by default" do
|
@@ -161,10 +232,21 @@ describe ::Guard::Haskell do
|
|
161
232
|
guard.success?
|
162
233
|
end
|
163
234
|
|
164
|
-
it "runs all specs on success after failure with :all_on_pass option" do
|
165
|
-
::Guard::Haskell::Repl.any_instance.stub(:
|
235
|
+
it "runs all specs on success after runtime failure with :all_on_pass option" do
|
236
|
+
::Guard::Haskell::Repl.any_instance.stub(:result) { :success }
|
237
|
+
custom_guard = ::Guard::Haskell.new(all_on_pass: true)
|
238
|
+
custom_guard.instance_variable_set(:@last_run, :runtime_failure)
|
239
|
+
|
240
|
+
expect(custom_guard).to receive(:run_all)
|
241
|
+
|
242
|
+
custom_guard.start
|
243
|
+
custom_guard.success?
|
244
|
+
end
|
245
|
+
|
246
|
+
it "runs all specs on success after compile time failure with :all_on_pass option" do
|
247
|
+
::Guard::Haskell::Repl.any_instance.stub(:result) { :success }
|
166
248
|
custom_guard = ::Guard::Haskell.new(all_on_pass: true)
|
167
|
-
custom_guard.instance_variable_set(:@last_run, :
|
249
|
+
custom_guard.instance_variable_set(:@last_run, :compile_failure)
|
168
250
|
|
169
251
|
expect(custom_guard).to receive(:run_all)
|
170
252
|
|
@@ -194,7 +276,7 @@ describe ::Guard::Haskell do
|
|
194
276
|
describe "#run_on_modifications" do
|
195
277
|
it "run specs for simple haskell files" do
|
196
278
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
197
|
-
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:
|
279
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
198
280
|
|
199
281
|
guard.start
|
200
282
|
guard.run_on_modifications(["Foo.hs"])
|
@@ -202,7 +284,7 @@ describe ::Guard::Haskell do
|
|
202
284
|
|
203
285
|
it "run specs for simple literate haskell files" do
|
204
286
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
205
|
-
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:
|
287
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
206
288
|
|
207
289
|
guard.start
|
208
290
|
guard.run_on_modifications(["Foo.lhs"])
|
@@ -210,7 +292,7 @@ describe ::Guard::Haskell do
|
|
210
292
|
|
211
293
|
it "run specs for *complex* haskell files" do
|
212
294
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Bar.Baz")
|
213
|
-
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:
|
295
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
214
296
|
|
215
297
|
guard.start
|
216
298
|
guard.run_on_modifications(["foo/Bar/Baz.hs"])
|
@@ -218,7 +300,7 @@ describe ::Guard::Haskell do
|
|
218
300
|
|
219
301
|
it "run specs for simple haskell spec files" do
|
220
302
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
221
|
-
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:
|
303
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
222
304
|
|
223
305
|
guard.start
|
224
306
|
guard.run_on_modifications(["FooSpec.hs"])
|
@@ -226,7 +308,7 @@ describe ::Guard::Haskell do
|
|
226
308
|
|
227
309
|
it "run specs for simple literate haskell spec files" do
|
228
310
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Foo")
|
229
|
-
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:
|
311
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
230
312
|
|
231
313
|
guard.start
|
232
314
|
guard.run_on_modifications(["FooSpec.lhs"])
|
@@ -234,7 +316,7 @@ describe ::Guard::Haskell do
|
|
234
316
|
|
235
317
|
it "run specs for *complex* haskell spec files" do
|
236
318
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:run).with("Bar.Baz")
|
237
|
-
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:
|
319
|
+
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
238
320
|
|
239
321
|
guard.start
|
240
322
|
guard.run_on_modifications(["foo/Bar/BazSpec.hs"])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-haskell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matvey Aksenov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: guard
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Guard::Haskell automatically runs your specs
|
70
84
|
email: matvey.aksenov@gmail.com
|
71
85
|
executables: []
|
@@ -74,7 +88,9 @@ extra_rdoc_files: []
|
|
74
88
|
files:
|
75
89
|
- .gitignore
|
76
90
|
- .travis.yml
|
91
|
+
- CHANGELOG.md
|
77
92
|
- Gemfile
|
93
|
+
- Guardfile
|
78
94
|
- LICENSE
|
79
95
|
- README.md
|
80
96
|
- Rakefile
|
@@ -83,7 +99,7 @@ files:
|
|
83
99
|
- lib/guard/haskell/repl.rb
|
84
100
|
- lib/guard/haskell/templates/Guardfile
|
85
101
|
- lib/guard/haskell/version.rb
|
86
|
-
- spec/haskell_spec.rb
|
102
|
+
- spec/guard/haskell_spec.rb
|
87
103
|
- spec/spec_helper.rb
|
88
104
|
homepage: https://github.com/supki/guard-haskell#readme
|
89
105
|
licenses:
|
@@ -110,5 +126,5 @@ signing_key:
|
|
110
126
|
specification_version: 4
|
111
127
|
summary: Guard gem for Haskell
|
112
128
|
test_files:
|
113
|
-
- spec/haskell_spec.rb
|
129
|
+
- spec/guard/haskell_spec.rb
|
114
130
|
- spec/spec_helper.rb
|