jackbox 0.9.6.2

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 (88) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +5 -0
  3. data/CHANGES.txt +108 -0
  4. data/LICENSE.lic +0 -0
  5. data/LICENSE.txt +13 -0
  6. data/README.md +1395 -0
  7. data/Rakefile +6 -0
  8. data/bin/jackup +248 -0
  9. data/jackbox.gemspec +27 -0
  10. data/jackbox.jpg +0 -0
  11. data/lib/.document +0 -0
  12. data/lib/jackbox.rb +2 -0
  13. data/lib/jackbox/examples/dir.rb +80 -0
  14. data/lib/jackbox/examples/dx.rb +182 -0
  15. data/lib/jackbox/examples/transformers.rb +101 -0
  16. data/lib/jackbox/injectors.rb +2 -0
  17. data/lib/jackbox/rake.rb +2 -0
  18. data/lib/jackbox/tools/prefs.rb +2 -0
  19. data/lib/jackbox/version.rb +4 -0
  20. data/rgloader/loader.rb +23 -0
  21. data/rgloader/rgloader.darwin.bundle +0 -0
  22. data/rgloader/rgloader.freebsd.so +0 -0
  23. data/rgloader/rgloader.freebsd.x86_64.so +0 -0
  24. data/rgloader/rgloader.linux.so +0 -0
  25. data/rgloader/rgloader.linux.x86_64.so +0 -0
  26. data/rgloader/rgloader.mingw.so +0 -0
  27. data/rgloader/rgloader19.darwin.bundle +0 -0
  28. data/rgloader/rgloader19.freebsd.so +0 -0
  29. data/rgloader/rgloader19.freebsd.x86_64.so +0 -0
  30. data/rgloader/rgloader19.linux.so +0 -0
  31. data/rgloader/rgloader19.linux.x86_64.so +0 -0
  32. data/rgloader/rgloader19.mingw.so +0 -0
  33. data/rgloader/rgloader191.mingw.so +0 -0
  34. data/rgloader/rgloader192.darwin.bundle +0 -0
  35. data/rgloader/rgloader192.freebsd.so +0 -0
  36. data/rgloader/rgloader192.freebsd.x86_64.so +0 -0
  37. data/rgloader/rgloader192.linux.so +0 -0
  38. data/rgloader/rgloader192.linux.x86_64.so +0 -0
  39. data/rgloader/rgloader192.mingw.so +0 -0
  40. data/rgloader/rgloader193.darwin.bundle +0 -0
  41. data/rgloader/rgloader193.freebsd.so +0 -0
  42. data/rgloader/rgloader193.freebsd.x86_64.so +0 -0
  43. data/rgloader/rgloader193.linux.so +0 -0
  44. data/rgloader/rgloader193.linux.x86_64.so +0 -0
  45. data/rgloader/rgloader193.mingw.so +0 -0
  46. data/rgloader/rgloader20.darwin.bundle +0 -0
  47. data/rgloader/rgloader20.freebsd.so +0 -0
  48. data/rgloader/rgloader20.freebsd.x86_64.so +0 -0
  49. data/rgloader/rgloader20.linux.so +0 -0
  50. data/rgloader/rgloader20.linux.x86_64.so +0 -0
  51. data/rgloader/rgloader20.mingw.so +0 -0
  52. data/rgloader/rgloader20.mingw.x64.so +0 -0
  53. data/rgloader/rgloader21.darwin.bundle +0 -0
  54. data/rgloader/rgloader21.freebsd.so +0 -0
  55. data/rgloader/rgloader21.freebsd.x86_64.so +0 -0
  56. data/rgloader/rgloader21.linux.so +0 -0
  57. data/rgloader/rgloader21.linux.x86_64.so +0 -0
  58. data/rgloader/rgloader21.mingw.so +0 -0
  59. data/rgloader/rgloader21.mingw.x64.so +0 -0
  60. data/rgloader/rgloader22.darwin.bundle +0 -0
  61. data/rgloader/rgloader22.freebsd.so +0 -0
  62. data/rgloader/rgloader22.linux.so +0 -0
  63. data/rgloader/rgloader22.linux.x86_64.so +0 -0
  64. data/rgloader/rgloader22.mingw.so +0 -0
  65. data/rgloader/rgloader22.mingw.x64.so +0 -0
  66. data/spec/bin/jackup_cmd_shared.rb +176 -0
  67. data/spec/bin/jackup_cmd_spec.rb +292 -0
  68. data/spec/lib/abtract_spec.rb +56 -0
  69. data/spec/lib/jackbox/examples/dir_spec.rb +112 -0
  70. data/spec/lib/jackbox/examples/dx_spec.rb +346 -0
  71. data/spec/lib/jackbox/examples/result.xml +15 -0
  72. data/spec/lib/jackbox/examples/source1.xml +11 -0
  73. data/spec/lib/jackbox/examples/source2.xml +15 -0
  74. data/spec/lib/jackbox/examples/source3.xml +11 -0
  75. data/spec/lib/jackbox/examples/trasnformers_spec.rb +35 -0
  76. data/spec/lib/jackbox/injector_composition_spec.rb +950 -0
  77. data/spec/lib/jackbox/injector_directives_spec.rb +266 -0
  78. data/spec/lib/jackbox/injector_inheritance_spec.rb +799 -0
  79. data/spec/lib/jackbox/injector_introspection_spec.rb +614 -0
  80. data/spec/lib/jackbox/injector_namespacing_spec.rb +345 -0
  81. data/spec/lib/jackbox/injector_spec.rb +847 -0
  82. data/spec/lib/jackbox/injector_versioning_spec.rb +334 -0
  83. data/spec/lib/jackbox/patterns_spec.rb +410 -0
  84. data/spec/lib/jackbox/prefs_spec.rb +212 -0
  85. data/spec/lib/jackbox/reclassing_spec.rb +394 -0
  86. data/spec/lib/jackbox_spec.rb +595 -0
  87. data/spec/spec_helper.rb +139 -0
  88. metadata +218 -0
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+ =begin rdoc
3
+ abstract_spec
4
+ author: Lou Henry
5
+ :nodoc:all
6
+ =end
7
+
8
+
9
+ class Object
10
+ include Meta
11
+ end
12
+
13
+ describe Abstract do
14
+ it 'introduces module Abtract' do
15
+ Abstract.should be
16
+ end
17
+ # using public include now
18
+ describe Abstract, 'abstract class quality' do
19
+ a 'use case scenario' do
20
+ class Vector
21
+ extend Abstract
22
+ def speed
23
+ 0
24
+ end
25
+ def direction
26
+ end
27
+ end
28
+ expect{Vector.new}.to raise_error(NoMethodError)
29
+ class Velocity < Vector
30
+ def speed
31
+ super + 35
32
+ end
33
+ def direction
34
+ :north
35
+ end
36
+ end
37
+ expect{Velocity.new}.to_not raise_error
38
+ Velocity.new.speed.should == 35
39
+
40
+ end #describe Abstract
41
+ it 'should not afect later descendants' do
42
+ class First
43
+ extend Abstract
44
+ end
45
+ expect{First.new}.to raise_error(NoMethodError)
46
+ class Second < First
47
+ end
48
+ expect{Second.new}.to_not raise_error
49
+ class Third < Second
50
+ end
51
+ expect{Third.new}.to_not raise_error
52
+ end
53
+
54
+ end
55
+ end
56
+
@@ -0,0 +1,112 @@
1
+ require "spec_helper"
2
+ =begin rdoc
3
+ dir_spec
4
+ author: Lou Henry
5
+ :nodoc:all
6
+ =end
7
+
8
+ describe Dir do
9
+
10
+ #####
11
+ # Dir class tools
12
+
13
+ it 'modifies Dir class to include additional methods' do
14
+ Dir.should respond_to(:exists?)
15
+ Dir.should respond_to(:gem?)
16
+ Dir.should respond_to(:empty?)
17
+ Dir.should respond_to(:clear?)
18
+ Dir.should respond_to(:ls)
19
+ Dir.should respond_to(:la)
20
+ end
21
+
22
+ describe "Dir.gem?" do
23
+ def gem_structure
24
+ File.open File.basename(Dir.pwd) + '-0.0.1.gemspec', 'w' do |file| end
25
+ File.open 'Rakefile', 'w' do |file|; end
26
+ FileUtils.mkpath File.join('lib', File.basename(Dir.pwd))
27
+ File.open File.join('lib', File.basename(Dir.pwd) + '.rb'), 'w' do |file| end
28
+ File.open File.join('lib', File.basename(Dir.pwd), 'version.rb'), 'w' do |file|; end
29
+ end
30
+ def rem_structure
31
+ (dir = Dir['*']).each { |d| FileUtils.rm_rf d }
32
+ end
33
+
34
+ specify 'Dir.gem? should be true if directory has a gem strucure' do
35
+ gem_structure
36
+ Dir.should be_gem
37
+ end
38
+
39
+ specify 'Dir.empty? should be true if dir is empty' do
40
+ rem_structure
41
+ Dir.should be_empty
42
+ end
43
+ end
44
+
45
+ describe "Dir.empty?, Dir.clear?" do
46
+ def rfile
47
+ (1..8).map { |c| ('a'..'z').to_a.sample }.join
48
+ end
49
+
50
+ before :each do
51
+ FileUtils.rm_rf '.'
52
+ end
53
+
54
+ specify 'if files are present' do
55
+ FileUtils.touch rfile
56
+ Dir.should_not be_empty
57
+ Dir.should_not be_clear
58
+ end
59
+
60
+ specify 'if NO files are present' do
61
+ Dir.should be_empty
62
+ Dir.should be_clear
63
+ end
64
+
65
+ specify 'empty but not clear/clear is also empty' do
66
+ # add a couple of files
67
+ FileUtils.touch('.tester')
68
+ FileUtils.touch('mester')
69
+ #test for empty
70
+ Dir.should_not be_empty
71
+ Dir.should_not be_clear
72
+ File.delete('mester')
73
+ Dir.should be_empty
74
+ # test for clear of . files
75
+ Dir.should_not be_clear
76
+ File.delete('.tester')
77
+ Dir.should be_empty
78
+ Dir.should be_clear
79
+ end
80
+ end
81
+
82
+ describe 'Dir.new' do
83
+ before do
84
+ FileUtils.rm_rf '.'
85
+ end
86
+ it 'should have a somedir directory' do
87
+ # add directory
88
+ somedir = Dir.new 'somedir'
89
+ # test dir conditions
90
+ somedir.should be_instance_of(Dir)
91
+ Dir.should_not be_empty
92
+ Dir.ls.grep(/somedir/).should_not be_empty
93
+ File.should be_directory('somedir')
94
+ end
95
+ end
96
+
97
+ describe 'Dir.entries' do
98
+ before do
99
+ FileUtils.rm_rf '.'
100
+ end
101
+ it 'returns a list of members in dir' do
102
+ # add a couple of files
103
+ FileUtils.touch('.tester')
104
+ FileUtils.touch('mester')
105
+ # add a directory
106
+ somedir = Dir.new 'somedir'
107
+ # test for conditions
108
+ Dir.entries.should == ['.', '..', '.tester', 'mester', 'somedir']
109
+ end
110
+ end
111
+
112
+ end
@@ -0,0 +1,346 @@
1
+ # require "spec_helper"
2
+ # =begin rdoc
3
+ #
4
+ # #####
5
+ # # eXtra Dude: Debugger Helper specification
6
+ #
7
+ # Current Practice is:
8
+ # .
9
+ # .
10
+ # log or puts (some_variable)
11
+ # or
12
+ # open(some_file) do |file| ... or Logger.new()
13
+ # file.puts(some_variable) ... log.debug(some_variable)
14
+ # end
15
+ # ... later in the program life, these statements must be commented out
16
+ #
17
+ # We want a methodology to load some very basic debugging help over and beyond the trickery of puts statements
18
+ # in current use or that somehow crystalizes those current practices and enhances them with some helpful
19
+ # additions like loging program state info and line number. We also want the ability to call on the debugger at any
20
+ # point without much a-do, or to even automatically break into the debugger on Exception or other condition, and it has
21
+ # to be system independent, working with all versions of ruby.
22
+ #
23
+ # =end
24
+ #
25
+ #
26
+ # describe DX, :dx do
27
+ #
28
+ # before do
29
+ # tmpdir = rfolder()
30
+ # FileUtils.mkpath tmpdir
31
+ # Dir.chdir tmpdir
32
+ # end
33
+ #
34
+ # describe 'ability to break into debugger' do
35
+ #
36
+ # it 'has a method to break into debugger mode' do
37
+ # DX.should_receive :debug
38
+ # DX.debug
39
+ # end
40
+ #
41
+ # it 'can break into the debugger on exception' do
42
+ # DX.seize TypeError
43
+ # DX.should_receive :debug
44
+ # expect{String.new 3}.to raise_error
45
+ # end
46
+ #
47
+ # end
48
+ #
49
+ #
50
+ # # #####
51
+ # # # Enhanced Practice should be:
52
+ # #
53
+ # # it should automatically knows where to output with only minor options
54
+ # # it should automatically output program state at point of call
55
+ # # it should not need removal in production adding to the program function
56
+ # describe 'enhancing current debugging practice' do
57
+ #
58
+ # describe 'automatically know where to output program state with only minor options' do
59
+ #
60
+ # let!(:program){
61
+ # open 'tester', 'w+' do |file|
62
+ # file.puts %{
63
+ #
64
+ # require 'jackbox'
65
+ # require 'jackbox/examples/dx'
66
+ # some_variable = 'crap'
67
+ # def program tester
68
+ # DX.log 'this is a test'
69
+ # end
70
+ # program 'play'
71
+ #
72
+ # }
73
+ # end
74
+ # }
75
+ #
76
+ # describe 'know where to ouput' do
77
+ #
78
+ # it 'outputs to file named after the program in $0' do
79
+ # File.should exist('tester')
80
+ # launch 'tester'
81
+ # File.should exist('tester.log')
82
+ # open 'tester.log', 'r' do |f|
83
+ # f.readlines.grep(/this is a test/).should_not be_empty
84
+ # end
85
+ # end
86
+ #
87
+ # it 'creates output file in the location of the user' do
88
+ # File.should exist('tester')
89
+ # FileUtils.mkpath 'folder'
90
+ # Dir.chdir 'folder'
91
+ # launch '../tester'
92
+ # File.should exist('tester.log')
93
+ # open 'tester.log', 'r' do |f|
94
+ # f.readlines.grep(/this is a test/).should_not be_empty
95
+ # end
96
+ # end
97
+ #
98
+ # end
99
+ #
100
+ # describe 'options' do
101
+ #
102
+ # it 'has an option to output to terminal standard out' do
103
+ # DX.logger :active
104
+ # $stdout.should_receive(:write).with(/This is a screen test/)
105
+ # DX.log false, 'This is a screen test'
106
+ # end
107
+ #
108
+ # it 'has an option to output to system logs' do
109
+ # DX.syslog 'a test message for syslog'
110
+ # sleep 0.2
111
+ # if !OS.windows?
112
+ # open "/var/log/system.log", 'r' do |file|
113
+ # file.readlines.to_a[-5, 5].grep(%r{a test message for syslog}).should_not be_empty
114
+ # end
115
+ # end
116
+ # end
117
+ #
118
+ # end
119
+ #
120
+ # end
121
+ #
122
+ #
123
+ # describe 'automatically output program state at point of call. #log, #syslog, and #seize calls not only output
124
+ # the given msg but also extra program information at the point of call. If complete class DX injection is
125
+ # used then even more info is available. See below.' do
126
+ #
127
+ #
128
+ # let!(:program){
129
+ # open 'tester', 'w+' do |file|
130
+ # file.puts %{
131
+ #
132
+ # require 'jackbox'
133
+ # require 'jackbox/examples/dx'
134
+ # some_variable = 'crap'
135
+ # def program tester
136
+ # DX.log 'some programmer non-sense'
137
+ # end
138
+ # program 'play'
139
+ #
140
+ # DX.syslog 'a load of crap'
141
+ #
142
+ # }
143
+ # end
144
+ # }
145
+ #
146
+ # describe 'DX.log and DX.syslog calls' do
147
+ #
148
+ # the 'DX.log call' do
149
+ # File.should exist('tester')
150
+ # launch 'tester'
151
+ # File.should exist('tester.log')
152
+ # open 'tester.log', 'r' do |f| # in this case rspec is in $0
153
+ # lines = f.readlines
154
+ # lines.grep(/programmer non-sense/).should_not be_empty # programmer's message
155
+ # lines.grep(/tester:tester:\d+:in/).should_not be_empty # program name and file/caller info is part of the log from above
156
+ # end
157
+ # end
158
+ #
159
+ # the 'DX.syslog call' do
160
+ # File.should exist('tester')
161
+ # launch 'tester'
162
+ # File.should exist('tester.log')
163
+ # if !OS.windows?
164
+ # open "/var/log/system.log", 'r' do |f|
165
+ # lines = f.readlines
166
+ # lines[-5, 5].grep(%r{a load of crap}).should_not be_empty # programmer's message
167
+ # lines[-5, 5].grep(/tester:tester:\d+:in/).should_not be_empty # program name and file/caller info is part of the log from above
168
+ # end
169
+ # end
170
+ # end
171
+ #
172
+ # end
173
+ #
174
+ #
175
+ # describe 'DX.seize call: logging Exception information' do
176
+ #
177
+ # it 'allows system Exception info to be logged instead of stopping the program' do
178
+ # DX.logger :active
179
+ # DX.splatter :active
180
+ # DX.seize true, TypeError
181
+ # DX.should_receive :debug
182
+ # expect{String.new 3}.to raise_error
183
+ # sleep 0.2
184
+ # if !OS.windows?
185
+ # open('/var/log/system.log', 'r') do |file| # named 'rspec.log' because rspec is $0
186
+ # lines = file.readlines[-10, 10]
187
+ # lines.grep(/TypeError/).should_not be_empty
188
+ # lines.grep(/rspec/).should_not be_empty
189
+ # end
190
+ # end
191
+ # end
192
+ #
193
+ # end
194
+ # end
195
+ #
196
+ #
197
+ # describe 'no need for removal of each and every individual call in production having an
198
+ # option to "turn-off" all calls on a per module/injector basis' do
199
+ #
200
+ # the 'logger goes silent if collapse is called' do
201
+ # # call collapse on logger
202
+ # DX.logger :collapse
203
+ # DX.assert_loaded.should == nil
204
+ # DX.syslog('baa').should == nil
205
+ # end
206
+ #
207
+ # the 'debugger goes silent if collapse is called' do
208
+ # # collapse debugger
209
+ # DX.splatter :collapse
210
+ # DX.debug # nothing happens even without expectacion
211
+ # end
212
+ #
213
+ # end
214
+ #
215
+ # describe 'rebuilding the modules' do
216
+ #
217
+ # this 'is logger rebuilding' do
218
+ # DX.logger :collapse
219
+ # DX.assert_loaded('something').should == nil
220
+ # DX.syslog('boo').should be_nil
221
+ # # ...
222
+ # DX.logger :rebuild
223
+ # DX.assert_loaded('something').should_not == nil
224
+ # $stdout.should_receive(:write).with(/The hot thing/)
225
+ # DX.syslog false, 'The hot thing'
226
+ # sleep 0.2
227
+ # if !OS.windows?
228
+ # open '/var/log/system.log', 'r' do |file|
229
+ # lines = file.readlines
230
+ # lines.grep(/The hot thing/).should_not be_empty
231
+ # end
232
+ # end
233
+ # end
234
+ #
235
+ # this 'example shows splatter rebuilding' do
236
+ # DX.splatter :collapse
237
+ # DX.debug.should be_nil
238
+ # # ...
239
+ # DX.splatter :rebuild
240
+ # DX.should_receive :debug
241
+ # DX.debug
242
+ #
243
+ # # DX.seize NameError
244
+ # # DX.should_receive :debug
245
+ # # expect{eval('while crap do end')}.to raise_error
246
+ # end
247
+ #
248
+ # end
249
+ # end
250
+ #
251
+ #
252
+ # describe 'the case with complete class DX module injection to automatically output
253
+ # greater program state at point of call by creating a tracer. However and can
254
+ # slow down your times depending on context' do
255
+ #
256
+ # subject {
257
+ #
258
+ # # DX.splatter :rebuild
259
+ # # DX.logger :rebuild
260
+ #
261
+ # class Animal
262
+ # inject DX
263
+ #
264
+ # def initialize(var)
265
+ # @var = var
266
+ # end
267
+ # def crawl arg1, *args
268
+ # val = arg1
269
+ # h = args
270
+ # something = 'nothing'
271
+ # syslog 'We are in a crawl'
272
+ # self
273
+ # end
274
+ # def annomaly
275
+ # debug
276
+ # end
277
+ # self
278
+ # end
279
+ #
280
+ # }
281
+ #
282
+ # it 'outputs caller info' do
283
+ # subject.new("snail").crawl("in dirt", "slowly")
284
+ # sleep 0.2
285
+ # if !OS.windows?
286
+ # open('/var/log/system.log', 'r') do |file| # naned 'rspec.log' because rspec is $0
287
+ # lines = file.readlines[-10, 10]
288
+ # lines.grep(/We are in a crawl/).should_not be_empty
289
+ # lines.grep(/@var\W+snail/).should_not be_empty
290
+ # lines.grep(/arg1\W+in dirt/).should_not be_empty
291
+ # lines.grep(/args\W+slowly/).should_not be_empty
292
+ # lines.grep(/something\W+nothing/).should_not be_empty
293
+ # end
294
+ # end
295
+ # end
296
+ #
297
+ # the 'same goes from the #seize call' do
298
+ # class Animal
299
+ # inject DX
300
+ #
301
+ # def disease
302
+ # seize false, TypeError
303
+ # String.new 3
304
+ # end
305
+ # end
306
+ # dog = subject.new('dog')
307
+ # DX.should_receive :debug
308
+ # expect{dog.disease}.to raise_error
309
+ # end
310
+ #
311
+ # it 'is also possible to log from the seize call' do
312
+ # class Animal
313
+ # inject DX
314
+ #
315
+ # def secret
316
+ # seize true, ZeroDivisionError # break false turns into a log entry
317
+ # var = 1/0
318
+ # end
319
+ # end
320
+ # emu = subject.new('emu')
321
+ # DX.should_receive :debug
322
+ # expect{emu.secret}.to raise_error
323
+ # sleep 0.2
324
+ # if !OS.windows?
325
+ # open('/var/log/system.log', 'r') do |file| # naned 'rspec.log' because rspec is $0
326
+ # lines = file.readlines[-10, 10]
327
+ # lines.grep(/ZeroDivisionError/).should_not be_empty
328
+ # lines.grep(/rspec.+?dx_spec.rb/).should_not be_empty
329
+ # end
330
+ # end
331
+ # end
332
+ #
333
+ # it 'still allows program stops for debug' do
334
+ # weirdo = subject.new('cat-dog')
335
+ # weirdo.should_receive :debug
336
+ # weirdo.annomaly
337
+ # end
338
+ #
339
+ # # it 'is not posible to include DX at the top level' do
340
+ # # expect{Object.inject DX}.to raise_error
341
+ # # end
342
+ #
343
+ # end
344
+ #
345
+ # end
346
+ #