warningshot 0.9.4

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.
Files changed (72) hide show
  1. data/CHANGELOG +0 -0
  2. data/CONTRIBUTORS +2 -0
  3. data/LICENSE +22 -0
  4. data/README +101 -0
  5. data/Rakefile +28 -0
  6. data/TODO +148 -0
  7. data/bin/warningshot +19 -0
  8. data/bin/ws-stage.bat +3 -0
  9. data/bin/ws-stage.sh +3 -0
  10. data/images/warning_shot.png +0 -0
  11. data/images/warning_shot_sml.png +0 -0
  12. data/images/warningshot_green.png +0 -0
  13. data/images/warningshot_red.png +0 -0
  14. data/lib/core_ext/hash.rb +14 -0
  15. data/lib/core_ext/kernel.rb +8 -0
  16. data/lib/core_ext/object.rb +7 -0
  17. data/lib/core_ext/string.rb +5 -0
  18. data/lib/resolvers/core_lib_resolver.rb +76 -0
  19. data/lib/resolvers/directory_resolver.rb +31 -0
  20. data/lib/resolvers/file_resolver.rb +87 -0
  21. data/lib/resolvers/gem_resolver.rb +94 -0
  22. data/lib/resolvers/integrity_resolver.rb +69 -0
  23. data/lib/resolvers/manual_resolver.rb +19 -0
  24. data/lib/resolvers/permission_resolver.rb +72 -0
  25. data/lib/resolvers/symlink_resolver.rb +43 -0
  26. data/lib/resolvers/url_resolver.rb +76 -0
  27. data/lib/warning_shot/config.rb +132 -0
  28. data/lib/warning_shot/dependency_resolver.rb +155 -0
  29. data/lib/warning_shot/growl.rb +14 -0
  30. data/lib/warning_shot/logger.rb +27 -0
  31. data/lib/warning_shot/resolver.rb +542 -0
  32. data/lib/warning_shot/template_generator.rb +28 -0
  33. data/lib/warning_shot/version.rb +7 -0
  34. data/lib/warning_shot/warning_shot.rb +130 -0
  35. data/lib/warningshot.rb +16 -0
  36. data/tasks/gemspec.rb +48 -0
  37. data/tasks/rpsec.rb +58 -0
  38. data/tasks/yard.rb +4 -0
  39. data/templates/binaries.yml +26 -0
  40. data/templates/core_libs.yml +18 -0
  41. data/templates/directories.yml +23 -0
  42. data/templates/files.yml +18 -0
  43. data/templates/gems.yml +26 -0
  44. data/templates/manual.yml +29 -0
  45. data/templates/mounts.yml +8 -0
  46. data/templates/permissions.yml +31 -0
  47. data/templates/symlinks.yml +30 -0
  48. data/templates/urls.yml +21 -0
  49. data/test/data/mock.yaml +16 -0
  50. data/test/data/mock.yml +10 -0
  51. data/test/data/mock_resolver.rb +16 -0
  52. data/test/data/permission_test.txt +1 -0
  53. data/test/data/resolvers/file/src/that.txt +1 -0
  54. data/test/log/warningshot.log +643 -0
  55. data/test/spec/spec.opts.zoiks +0 -0
  56. data/test/spec/spec_helper.rb +11 -0
  57. data/test/spec/unit/resolvers/core_lib_resolver_spec.rb +39 -0
  58. data/test/spec/unit/resolvers/directory_resolver_spec.rb +39 -0
  59. data/test/spec/unit/resolvers/file_resolver_spec.rb +134 -0
  60. data/test/spec/unit/resolvers/gem_resolver_spec.rb +74 -0
  61. data/test/spec/unit/resolvers/integrity_resolver_spec.rb +103 -0
  62. data/test/spec/unit/resolvers/manual_resolver_spec.rb +17 -0
  63. data/test/spec/unit/resolvers/permission_resolver_spec.rb +56 -0
  64. data/test/spec/unit/resolvers/symlink_resolver_spec.rb +44 -0
  65. data/test/spec/unit/resolvers/url_resolver_spec.rb +64 -0
  66. data/test/spec/unit/warning_shot/config_spec.rb +35 -0
  67. data/test/spec/unit/warning_shot/dependency_resolver_spec.rb +43 -0
  68. data/test/spec/unit/warning_shot/resolver_spec.rb +347 -0
  69. data/test/spec/unit/warning_shot/template_generator_spec.rb +21 -0
  70. data/test/spec/unit/warning_shot/version_spec.rb +7 -0
  71. data/test/spec/unit/warning_shot/warning_shot_spec.rb +3 -0
  72. metadata +143 -0
@@ -0,0 +1,347 @@
1
+ require $test_data / 'mock_resolver'
2
+
3
+ describe WarningShot::Resolver do
4
+ it 'should provide a base set of resolvers' do
5
+ WarningShot::Resolver.descendents.class.should be(Array)
6
+ WarningShot::Resolver.descendents.empty?.should be(false)
7
+ end
8
+
9
+ it 'should allow a resolver to set a order' do
10
+ MockResolver.order 500
11
+ MockResolver.order.should be(500)
12
+ end
13
+
14
+ it 'should allow a resolver to be disabled' do
15
+ MockResolver.disable!
16
+ MockResolver.disabled?.should be(true)
17
+ MockResolver.instance_variable_set('@disabled',false)
18
+ end
19
+
20
+ it 'should allow a resolution branch to be set' do
21
+ MockResolver.branch :a_test_branch
22
+ MockResolver.branch.should == :a_test_branch
23
+ end
24
+
25
+ it 'should allow a description to be set' do
26
+ MockResolver.description "An awesome mock resolver"
27
+ MockResolver.description.should == "An awesome mock resolver"
28
+ end
29
+
30
+ it 'should allow the CLI to be extended' do
31
+ MockResolver.cli(
32
+ :short => "-t",
33
+ :long => "--test=STRING",
34
+ :description => "Test extending the CLI",
35
+ :default => 'whatever',
36
+ :name => 'rspec_test',
37
+ :type => String,
38
+ :default_desc => "Default: whatever"
39
+ )
40
+
41
+ WarningShot.parser.to_s.include?("Test extending the CLI").should be(true)
42
+ end
43
+
44
+ it 'should be able to cast YAML data to an Object the resolver can work with' do
45
+ MockDependency = Struct.new :more, :less
46
+
47
+ MockResolver.cast do |dep|
48
+ MockDependency.new dep[:more], dep[:less]
49
+ end
50
+
51
+ yaml_hash = {:more => 'is less', :less => 'is more'}
52
+ my_obj = MockResolver.yaml_to_object(yaml_hash)
53
+ my_obj.class.should be(MockDependency)
54
+ my_obj.more.should == (yaml_hash[:more])
55
+ end
56
+
57
+ it 'should be able to register a test' do
58
+ MockResolver.register :test do |dependency|
59
+ "This is a dependency test #{dependency}"
60
+ end
61
+
62
+ MockResolver.tests.first[:test].call("TEST").should == "This is a dependency test TEST"
63
+ MockResolver.flush_tests!
64
+
65
+ MockResolver.register :test do
66
+ "This is a test"
67
+ end
68
+
69
+ MockResolver.tests.first[:test].call("TEST").should == "This is a test"
70
+ end
71
+
72
+ it 'should allow a resolver to flush out tests' do
73
+ MockResolver.register :test do |dependency|
74
+ 'This is a dependency test'
75
+ end
76
+
77
+ MockResolver.tests.empty?.should be(false)
78
+ MockResolver.flush_tests!
79
+ MockResolver.tests.empty?.should be(true)
80
+ end
81
+
82
+ it 'should be able to register a conditional test' do
83
+ is_test_env = lambda{ |dependency|
84
+ WarningShot.environment == 'test'
85
+ }
86
+ MockResolver.flush_tests!
87
+ MockResolver.register :test, :if => is_test_env do |dependency|
88
+ 'This is a conditional dependency test'
89
+ end
90
+
91
+ MockResolver.tests.first[:test].call(nil).should == 'This is a conditional dependency test'
92
+ MockResolver.tests.first[:if].class.should be(Proc)
93
+ end
94
+
95
+ it 'should be able to specify additional attributes for a test' do
96
+ test_details = {
97
+ :name => :named_test,
98
+ :desc => "This is a named test",
99
+ }
100
+
101
+ MockResolver.flush_tests!
102
+ MockResolver.register :test, test_details do |dependency|
103
+ 'This is a named test'
104
+ end
105
+
106
+ (MockResolver.tests.first[:name]== :named_test).should be(true)
107
+ MockResolver.tests.first[:desc].should == test_details[:desc]
108
+ end
109
+
110
+ it 'should be able to register multiple tests' do
111
+ MockResolver.flush_tests!
112
+ MockResolver.register :test do
113
+ 'Pass one'
114
+ end
115
+ MockResolver.register :test do
116
+ 'Pass two'
117
+ end
118
+
119
+ MockResolver.tests.length.should be(2)
120
+ MockResolver.tests.last[:test].call(nil).should == 'Pass two'
121
+ end
122
+
123
+ it 'should be able to register a resolution' do
124
+ MockResolver.register :resolution do |dependency|
125
+ "I resolved the issue, #{dependency}."
126
+ end
127
+
128
+ MockResolver.resolutions.first[:resolution].call('sirs').should == "I resolved the issue, sirs."
129
+
130
+ MockResolver.flush_resolutions!
131
+
132
+ MockResolver.register :resolution do
133
+ "This is a resolution"
134
+ end
135
+
136
+ MockResolver.resolutions.first[:resolution].call(nil).should == "This is a resolution"
137
+ end
138
+
139
+ it 'should raise an exception if :if and :unless are specified on the same test or resolution' do
140
+ lambda{
141
+ MockResolver.register :resolution, :if => lambda{}, :unless => lambda{} do
142
+ puts 'This should fail'
143
+ end
144
+ }.should raise_error(Exception)
145
+
146
+ lambda{
147
+ MockResolver.register :test, :if => lambda{}, :unless => lambda{} do
148
+ puts 'This should fail'
149
+ end
150
+ }.should raise_error(Exception)
151
+ end
152
+
153
+ it 'should allow a resolver to flush out resolutions' do
154
+ MockResolver.register :resolution do |dependency|
155
+ 'This is a dependency resolution'
156
+ end
157
+
158
+ MockResolver.resolutions.empty?.should be(false)
159
+ MockResolver.flush_resolutions!
160
+ MockResolver.resolutions.empty?.should be(true)
161
+ end
162
+
163
+ it 'should be able to register a conditional resolution' do
164
+ is_test_env = lambda{ |dependency|
165
+ WarningShot.environment == 'production'
166
+ }
167
+ MockResolver.flush_resolutions!
168
+ MockResolver.register :resolution, :if => is_test_env do |dependency|
169
+ "id only resolve if this was production"
170
+ end
171
+
172
+ MockResolver.resolutions.first[:resolution].call(nil).should == "id only resolve if this was production"
173
+ MockResolver.resolutions.first[:if].class.should be(Proc)
174
+ end
175
+
176
+ it 'should be able to specify additional attributes for a resolution' do
177
+ res_details = {
178
+ :name => :named_resolution,
179
+ :desc => "This is a named resolution",
180
+ }
181
+
182
+ MockResolver.flush_resolutions!
183
+ MockResolver.register :resolution, res_details do |dependency|
184
+ 'This is a named resolution'
185
+ end
186
+
187
+ (MockResolver.resolutions.first[:name]== :named_resolution).should be(true)
188
+ MockResolver.resolutions.first[:desc].should == res_details[:desc]
189
+ end
190
+
191
+ it 'should be able to register multiple resolutions' do
192
+ MockResolver.flush_resolutions!
193
+ MockResolver.register :resolution do
194
+ 'Part one of fix'
195
+ end
196
+ MockResolver.register :resolution do
197
+ 'Part two of fix'
198
+ end
199
+
200
+ MockResolver.resolutions.length.should be(2)
201
+ MockResolver.resolutions.last[:resolution].call(nil).should == 'Part two of fix'
202
+ end
203
+
204
+ it 'should allow before filters for tests' do
205
+ MockResolver.before :test do
206
+ puts "Im before a test"
207
+ end
208
+
209
+ MockResolver.before_filters(:test).length.should be(1)
210
+ end
211
+
212
+ it 'should allow after filters for tests' do
213
+ MockResolver.after :test do
214
+ puts "Im after a test"
215
+ end
216
+
217
+ MockResolver.after_filters(:test).length.should be(1)
218
+ end
219
+
220
+ it 'should allow before filters for resolutions' do
221
+ MockResolver.before :resolution do
222
+ puts "Im before a resolution"
223
+ end
224
+
225
+ MockResolver.before_filters(:resolution).length.should be(1)
226
+ end
227
+
228
+ it 'should allow after filters for resolutions' do
229
+ MockResolver.after :resolution do
230
+ puts "Im after a resolution"
231
+ end
232
+
233
+ MockResolver.after_filters(:resolution).length.should be(1)
234
+ end
235
+
236
+ it 'should be able to specify an :if condition on tests' do
237
+ #This is false, wtf? Fuck string comparison.
238
+ condition = lambda{ ("david lee roth" > "eddie van halen") }
239
+ MockResolver.register(:test, :if => condition, :name => :rock_out_test) {|dep| true}
240
+
241
+ MockResolver.tests(:rock_out_test)[:if].call.should be(false)
242
+ end
243
+
244
+ it 'should be able to specify an :unless condition on tests' do
245
+ # String comparison has no taste in music
246
+ condition = lambda{ ("weezer" > "the rentals") }
247
+ MockResolver.register(:test, :unless => condition, :name => :rock_out_test2) {|dep| true}
248
+
249
+ MockResolver.tests(:rock_out_test2)[:unless].call.should be(true)
250
+ end
251
+
252
+ it 'should be able to specify an :if condition on resolutions' do
253
+ condition = lambda{ (3 > 5) }
254
+ MockResolver.register(:resolution, :if => condition, :name => :number_resolution) {|dep| true}
255
+
256
+ MockResolver.resolutions(:number_resolution)[:if].call.should be(false)
257
+ end
258
+
259
+ it 'should be able to specify an :unless condition on resolutions' do
260
+ condition = lambda{ (5 == 5) }
261
+ MockResolver.register(:resolution, :unless => condition, :name => :number_resolution1) {|dep| true}
262
+
263
+ MockResolver.resolutions(:number_resolution1)[:unless].call.should be(true)
264
+ end
265
+
266
+ it 'should increment #passed if the test passed' do
267
+ pending
268
+ end
269
+
270
+ it 'should increment #failed if the test failed' do
271
+ pending
272
+ end
273
+
274
+ it 'should increment #resolved if the resolution passed' do
275
+ pending
276
+ end
277
+
278
+ it 'should increment #unresolved if the resolution was unresolved' do
279
+ pending
280
+ end
281
+
282
+ it 'should be able to determine if a test passed' do
283
+ MockResolver.flush_tests!
284
+ MockResolver.flush_resolutions!
285
+
286
+ test_meta = {
287
+ :name => :process_block_test,
288
+ :test => lambda {|dep| dep[:fav_color] == :blue}
289
+ }
290
+
291
+ dep = {:fav_color => :blue}
292
+
293
+ MockResolver.new.send(:process_block, :test, dep, test_meta).should be(true)
294
+ end
295
+
296
+ it 'should be able to determine if a test failed' do
297
+ MockResolver.flush_tests!
298
+ MockResolver.flush_resolutions!
299
+
300
+ test_meta = {
301
+ :name => :process_block_test,
302
+ :test => lambda {|dep| dep[:fav_color] == :blue}
303
+ }
304
+
305
+ dep = {:fav_color => :red}
306
+
307
+ MockResolver.new.send(:process_block, :test, dep, test_meta).should be(false)
308
+ end
309
+
310
+ it 'should be able to determine if a resolution passed' do
311
+ MockResolver.flush_tests!
312
+ MockResolver.flush_resolutions!
313
+
314
+ resolution_meta = {
315
+ :name => :process_block_test,
316
+ :resolution => lambda {|dep|
317
+ dep[:fav_color] = :blue
318
+ dep[:fav_color] == :blue
319
+ }
320
+ }
321
+
322
+ dep = {:fav_color => :red}
323
+
324
+ MockResolver.new.send(:process_block, :resolution, dep, resolution_meta).should be(true)
325
+ end
326
+
327
+ it 'should be able to determine if a resolution failed' do
328
+ MockResolver.flush_tests!
329
+ MockResolver.flush_resolutions!
330
+
331
+ resolution_meta = {
332
+ :name => :process_block_test,
333
+ :resolution => lambda {|dep|
334
+ begin
335
+ dep[:fav_color] = :blue
336
+ rescue Exception
337
+ # nada
338
+ end
339
+ dep[:fav_color] == :blue
340
+ }
341
+ }
342
+
343
+ dep = {:fav_color => :red}.freeze
344
+
345
+ MockResolver.new.send(:process_block, :resolution, dep, resolution_meta).should be(false)
346
+ end
347
+ end
@@ -0,0 +1,21 @@
1
+ describe WarningShot::TemplateGenerator do
2
+
3
+ before :all do
4
+ @test_path = $test_data / 'yaml_configs'
5
+ end
6
+
7
+ after :all do
8
+ FileUtils.rm_rf @test_path
9
+ end
10
+
11
+ it "should be able to generate templates" do
12
+ WarningShot::TemplateGenerator.respond_to?(:create).should be(true)
13
+ WarningShot::TemplateGenerator.create(@test_path)
14
+ end
15
+
16
+ it "should have generate YAML config files" do
17
+ yaml_files = Dir[@test_path / WarningShot::ConfigExt]
18
+ yaml_files.empty?.should be(false)
19
+ end
20
+
21
+ end
@@ -0,0 +1,7 @@
1
+ describe WarningShot, 'VERSION' do
2
+ it 'should combine MAJOR, MINOR and REVISION' do
3
+ v = [WarningShot::MAJOR, WarningShot::MINOR, WarningShot::REVISION].join('.')
4
+ WarningShot::VERSION.should == (v)
5
+ end
6
+
7
+ end
@@ -0,0 +1,3 @@
1
+ describe WarningShot do
2
+
3
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: warningshot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.4
5
+ platform: ruby
6
+ authors:
7
+ - Cory ODaniel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-15 00:00:00 -07:00
13
+ default_executable: warningshot
14
+ dependencies: []
15
+
16
+ description: WarningShot Dependency Resolution Framework.
17
+ email: warningshot@coryodaniel.com.com
18
+ executables:
19
+ - warningshot
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - LICENSE
25
+ - TODO
26
+ files:
27
+ - LICENSE
28
+ - README
29
+ - Rakefile
30
+ - TODO
31
+ - CHANGELOG
32
+ - CONTRIBUTORS
33
+ - bin/warningshot
34
+ - bin/ws-stage.bat
35
+ - bin/ws-stage.sh
36
+ - test/data
37
+ - test/data/mock.yaml
38
+ - test/data/mock.yml
39
+ - test/data/mock_resolver.rb
40
+ - test/data/permission_test.txt
41
+ - test/data/resolvers
42
+ - test/data/resolvers/file
43
+ - test/data/resolvers/file/src
44
+ - test/data/resolvers/file/src/that.txt
45
+ - test/log
46
+ - test/log/warningshot.log
47
+ - test/output
48
+ - test/spec
49
+ - test/spec/integration
50
+ - test/spec/integration/core_ext
51
+ - test/spec/integration/resolvers
52
+ - test/spec/integration/warning_shot
53
+ - test/spec/spec.opts.zoiks
54
+ - test/spec/spec_helper.rb
55
+ - test/spec/unit
56
+ - test/spec/unit/core_ext
57
+ - test/spec/unit/resolvers
58
+ - test/spec/unit/resolvers/core_lib_resolver_spec.rb
59
+ - test/spec/unit/resolvers/directory_resolver_spec.rb
60
+ - test/spec/unit/resolvers/file_resolver_spec.rb
61
+ - test/spec/unit/resolvers/gem_resolver_spec.rb
62
+ - test/spec/unit/resolvers/integrity_resolver_spec.rb
63
+ - test/spec/unit/resolvers/manual_resolver_spec.rb
64
+ - test/spec/unit/resolvers/permission_resolver_spec.rb
65
+ - test/spec/unit/resolvers/symlink_resolver_spec.rb
66
+ - test/spec/unit/resolvers/url_resolver_spec.rb
67
+ - test/spec/unit/warning_shot
68
+ - test/spec/unit/warning_shot/config_spec.rb
69
+ - test/spec/unit/warning_shot/dependency_resolver_spec.rb
70
+ - test/spec/unit/warning_shot/resolver_spec.rb
71
+ - test/spec/unit/warning_shot/template_generator_spec.rb
72
+ - test/spec/unit/warning_shot/version_spec.rb
73
+ - test/spec/unit/warning_shot/warning_shot_spec.rb
74
+ - lib/core_ext
75
+ - lib/core_ext/hash.rb
76
+ - lib/core_ext/kernel.rb
77
+ - lib/core_ext/object.rb
78
+ - lib/core_ext/string.rb
79
+ - lib/resolvers
80
+ - lib/resolvers/core_lib_resolver.rb
81
+ - lib/resolvers/directory_resolver.rb
82
+ - lib/resolvers/file_resolver.rb
83
+ - lib/resolvers/gem_resolver.rb
84
+ - lib/resolvers/integrity_resolver.rb
85
+ - lib/resolvers/manual_resolver.rb
86
+ - lib/resolvers/permission_resolver.rb
87
+ - lib/resolvers/symlink_resolver.rb
88
+ - lib/resolvers/url_resolver.rb
89
+ - lib/warning_shot
90
+ - lib/warning_shot/config.rb
91
+ - lib/warning_shot/dependency_resolver.rb
92
+ - lib/warning_shot/growl.rb
93
+ - lib/warning_shot/logger.rb
94
+ - lib/warning_shot/resolver.rb
95
+ - lib/warning_shot/template_generator.rb
96
+ - lib/warning_shot/version.rb
97
+ - lib/warning_shot/warning_shot.rb
98
+ - lib/warningshot.rb
99
+ - tasks/gemspec.rb
100
+ - tasks/rpsec.rb
101
+ - tasks/yard.rb
102
+ - templates/binaries.yml
103
+ - templates/core_libs.yml
104
+ - templates/directories.yml
105
+ - templates/files.yml
106
+ - templates/gems.yml
107
+ - templates/manual.yml
108
+ - templates/mounts.yml
109
+ - templates/permissions.yml
110
+ - templates/symlinks.yml
111
+ - templates/urls.yml
112
+ - images/warning_shot.png
113
+ - images/warning_shot_sml.png
114
+ - images/warningshot_green.png
115
+ - images/warningshot_red.png
116
+ has_rdoc: true
117
+ homepage: http://warningshot.lighthouseapp.com
118
+ post_install_message:
119
+ rdoc_options: []
120
+
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 1.8.6
128
+ version:
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: "0"
134
+ version:
135
+ requirements: []
136
+
137
+ rubyforge_project:
138
+ rubygems_version: 1.2.0
139
+ signing_key:
140
+ specification_version: 2
141
+ summary: WarningShot Dependency Resolution Framework.
142
+ test_files: []
143
+