jsus 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+
4
+ # Until I figure out how to test this stuff better, here is what is going on:
5
+ # * main thread is set as a timeout thread. it launches some child threads
6
+ # and goes to sleep until woken up or timed out
7
+ #
8
+ # * FSSM thread watches for filesystem updates
9
+ # Note: there is a 1 second delay after FSSM launch, it can be slow even
10
+ # on fast enough systems
11
+ #
12
+ describe Jsus::Util::Watcher do
13
+ let(:directory) { File.expand_path("spec/tmp/watcher") }
14
+
15
+ before(:each) do
16
+ FileUtils.rm_rf(directory)
17
+ FileUtils.mkdir_p(directory)
18
+ end
19
+
20
+ after(:each) do
21
+ FileUtils.rm_rf(directory)
22
+ end
23
+
24
+ describe ".watch" do
25
+ let(:watched_file) { "#{directory}/hello.js" }
26
+ def watch(directory, callback_countdown = 1, &block)
27
+ @main_thread = Thread.current
28
+ @watcher_thread = Thread.new do
29
+ described_class.watch(directory) do |*args|
30
+ yield(*args)
31
+ callback_countdown -= 1
32
+ @main_thread.wakeup if callback_countdown <= 0
33
+ end
34
+ end
35
+ @watcher_thread.abort_on_exception = true
36
+ sleep(1) # give it some time to init
37
+ end # watch
38
+
39
+ def stop_watching(timeout = 5)
40
+ sleep(timeout) if timeout && timeout > 0
41
+ @watcher_thread.kill
42
+ end # stop_watching
43
+
44
+ it "should trigger the callback on file creation" do
45
+ watch(directory) do
46
+ @callback_called = true
47
+ end
48
+ File.open(watched_file, "w+") {|f| f << "var Hello = 1;"}
49
+ stop_watching
50
+ @callback_called.should be_true
51
+ end
52
+
53
+ it "should trigger the callback on file update" do
54
+ File.open(watched_file, "w+") {|f| f << "var Hello = 1;"}
55
+ watch(directory) do
56
+ @callback_called = true
57
+ end
58
+ @callback_called.should be_false
59
+ File.open(watched_file, "a+") {|f| f << "var World = 2;"}
60
+ stop_watching
61
+ @callback_called.should be_true
62
+ end
63
+
64
+ it "should trigger the callback on file removal" do
65
+ File.open(watched_file, "w+") {|f| f << "var Hello = 1;"}
66
+ watch(directory) do
67
+ @callback_called = true
68
+ end
69
+ @callback_called.should be_false
70
+ FileUtils.rm_f(watched_file)
71
+ stop_watching
72
+ @callback_called.should be_true
73
+ end
74
+
75
+ it "should pass a filename to the callback" do
76
+ watch(directory) do |filename|
77
+ @filename = filename
78
+ end
79
+ File.open(watched_file, "w+") {|f| f << "var Hello = 1;"}
80
+ stop_watching
81
+ @filename.should == watched_file
82
+ end
83
+
84
+ it "should ignore events happening between callback calls" do
85
+ @callback_called_times = 0
86
+ watch(directory, 2) do
87
+ @callback_called_times += 1
88
+ other_file = "#{directory}/output.js"
89
+ Thread.new { File.open(other_file, "w+") {|f| f.puts "// Hello, world 2" } }
90
+ sleep(3)
91
+ end
92
+ File.open(watched_file, "w+") {|f| f.puts "// Hello, world" }
93
+ stop_watching
94
+ @callback_called_times.should == 1
95
+ end
96
+
97
+ it "should accept multiple input directories and ignore events happening at two dirs at once" do
98
+ inner_directory = "#{directory}/inner"
99
+ FileUtils.mkdir_p(inner_directory)
100
+ watched_file = "#{inner_directory}/hello.js"
101
+ @callback_called_times = 0
102
+ watch([inner_directory, directory], 2) do
103
+ @callback_called_times += 1
104
+ sleep(1) # Simulate some work
105
+ end
106
+ File.open(watched_file, "w+") {|f| f.puts "var Hello = 1;"}
107
+ stop_watching
108
+ @callback_called_times.should == 1
109
+ end
110
+
111
+ it "should catch exceptions in callbacks" do
112
+ watch(directory) do |filename|
113
+ @callback_called = true
114
+ Jsus.logger = Jsus::Util::Logger.new("/dev/null")
115
+ raise "Terrible, terrible error"
116
+ end
117
+ File.open(watched_file, "w+") {|f| f << "var Hello = 1;"}
118
+ stop_watching
119
+ @callback_called.should == true
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jsus::Util do
4
+ describe "#try_load" do
5
+ before(:each) do
6
+ @old_logger = Jsus.logger
7
+ Jsus.logger = Jsus::Util::Logger.new("/dev/null")
8
+ end
9
+
10
+ after(:each) do
11
+ Jsus.logger = @old_logger
12
+ end
13
+
14
+ it "should return true if it is possible to require file" do
15
+ Jsus::Util.try_load('pathname').should be_true
16
+ end
17
+
18
+ it "should return false if LoadError happens" do
19
+ Jsus::Util.try_load('wakka-wakka-wakka').should be_false
20
+ end
21
+
22
+ it "should use second argument as load name" do
23
+ Jsus::Util.try_load('Net::HTTP', 'net/http').should be_true
24
+ end
25
+
26
+ it "should log error when load error happens" do
27
+ lambda {
28
+ Jsus::Util.try_load('wakka-wakka-wakka')
29
+ }.should change(Jsus.logger.buffer, :size).by(1)
30
+ end
31
+ end
32
+ end
@@ -11,4 +11,4 @@ def cleanup
11
11
  `rm -rf spec/data/Basic/public`
12
12
  `rm -rf spec/data/OutsideDependencies/public`
13
13
  `rm -rf spec/tmp/`
14
- end
14
+ end
metadata CHANGED
@@ -1,245 +1,235 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jsus
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.5
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 4
10
- version: 0.3.4
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Mark Abramov
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-08-30 00:00:00 +04:00
12
+ date: 2011-09-15 00:00:00.000000000 +04:00
19
13
  default_executable: jsus
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- prerelease: false
23
- type: :runtime
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
33
16
  name: activesupport
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- prerelease: false
37
- type: :runtime
38
- requirement: &id002 !ruby/object:Gem::Requirement
17
+ requirement: &70183689893660 !ruby/object:Gem::Requirement
39
18
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- name: json_pure
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- prerelease: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
51
23
  type: :runtime
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- name: rgl
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
24
  prerelease: false
65
- type: :development
66
- requirement: &id004 !ruby/object:Gem::Requirement
25
+ version_requirements: *70183689893660
26
+ - !ruby/object:Gem::Dependency
27
+ name: json_pure
28
+ requirement: &70183689893140 !ruby/object:Gem::Requirement
67
29
  none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- name: rake
76
- version_requirements: *id004
77
- - !ruby/object:Gem::Dependency
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
78
35
  prerelease: false
79
- type: :development
80
- requirement: &id005 !ruby/object:Gem::Requirement
36
+ version_requirements: *70183689893140
37
+ - !ruby/object:Gem::Dependency
38
+ name: rgl
39
+ requirement: &70183689892580 !ruby/object:Gem::Requirement
81
40
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- name: rspec
90
- version_requirements: *id005
91
- - !ruby/object:Gem::Dependency
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :runtime
92
46
  prerelease: false
93
- type: :development
94
- requirement: &id006 !ruby/object:Gem::Requirement
47
+ version_requirements: *70183689892580
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ requirement: &70183689891900 !ruby/object:Gem::Requirement
95
51
  none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 0
102
- version: "0"
103
- name: cucumber
104
- version_requirements: *id006
105
- - !ruby/object:Gem::Dependency
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
106
57
  prerelease: false
58
+ version_requirements: *70183689891900
59
+ - !ruby/object:Gem::Dependency
60
+ name: rspec
61
+ requirement: &70183689891400 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
107
67
  type: :development
108
- requirement: &id007 !ruby/object:Gem::Requirement
68
+ prerelease: false
69
+ version_requirements: *70183689891400
70
+ - !ruby/object:Gem::Dependency
71
+ name: cucumber
72
+ requirement: &70183689890860 !ruby/object:Gem::Requirement
109
73
  none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- hash: 3
114
- segments:
115
- - 0
116
- version: "0"
117
- name: jeweler
118
- version_requirements: *id007
119
- - !ruby/object:Gem::Dependency
74
+ requirements:
75
+ - - =
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.3
78
+ type: :development
120
79
  prerelease: false
80
+ version_requirements: *70183689890860
81
+ - !ruby/object:Gem::Dependency
82
+ name: jeweler
83
+ requirement: &70183689890320 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
121
89
  type: :development
122
- requirement: &id008 !ruby/object:Gem::Requirement
90
+ prerelease: false
91
+ version_requirements: *70183689890320
92
+ - !ruby/object:Gem::Dependency
93
+ name: murdoc
94
+ requirement: &70183689889800 !ruby/object:Gem::Requirement
123
95
  none: false
124
- requirements:
96
+ requirements:
125
97
  - - ~>
126
- - !ruby/object:Gem::Version
127
- hash: 13
128
- segments:
129
- - 0
130
- - 1
131
- - 11
98
+ - !ruby/object:Gem::Version
132
99
  version: 0.1.11
133
- name: murdoc
134
- version_requirements: *id008
135
- - !ruby/object:Gem::Dependency
136
- prerelease: false
137
100
  type: :development
138
- requirement: &id009 !ruby/object:Gem::Requirement
139
- none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- hash: 3
144
- segments:
145
- - 0
146
- version: "0"
147
- name: ruby-debug19
148
- version_requirements: *id009
149
- - !ruby/object:Gem::Dependency
150
101
  prerelease: false
151
- type: :development
152
- requirement: &id010 !ruby/object:Gem::Requirement
102
+ version_requirements: *70183689889800
103
+ - !ruby/object:Gem::Dependency
104
+ name: ruby-debug19
105
+ requirement: &70183689889200 !ruby/object:Gem::Requirement
153
106
  none: false
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- hash: 3
158
- segments:
159
- - 0
160
- version: "0"
161
- name: ruby-debug
162
- version_requirements: *id010
163
- - !ruby/object:Gem::Dependency
164
- prerelease: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
165
111
  type: :development
166
- requirement: &id011 !ruby/object:Gem::Requirement
112
+ prerelease: false
113
+ version_requirements: *70183689889200
114
+ - !ruby/object:Gem::Dependency
115
+ name: linecache
116
+ requirement: &70183689803380 !ruby/object:Gem::Requirement
167
117
  none: false
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- hash: 3
172
- segments:
173
- - 0
174
- version: "0"
175
- name: fssm
176
- version_requirements: *id011
177
- - !ruby/object:Gem::Dependency
118
+ requirements:
119
+ - - =
120
+ - !ruby/object:Gem::Version
121
+ version: '0.45'
122
+ type: :development
178
123
  prerelease: false
124
+ version_requirements: *70183689803380
125
+ - !ruby/object:Gem::Dependency
126
+ name: ruby-debug
127
+ requirement: &70183689802820 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
179
133
  type: :development
180
- requirement: &id012 !ruby/object:Gem::Requirement
134
+ prerelease: false
135
+ version_requirements: *70183689802820
136
+ - !ruby/object:Gem::Dependency
137
+ name: fssm
138
+ requirement: &70183689801980 !ruby/object:Gem::Requirement
181
139
  none: false
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- hash: 3
186
- segments:
187
- - 0
188
- version: "0"
189
- name: yui-compressor
190
- version_requirements: *id012
191
- - !ruby/object:Gem::Dependency
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
192
145
  prerelease: false
146
+ version_requirements: *70183689801980
147
+ - !ruby/object:Gem::Dependency
148
+ name: yuicompressor
149
+ requirement: &70183689801500 !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
193
155
  type: :development
194
- requirement: &id013 !ruby/object:Gem::Requirement
156
+ prerelease: false
157
+ version_requirements: *70183689801500
158
+ - !ruby/object:Gem::Dependency
159
+ name: uglifier
160
+ requirement: &70183689800940 !ruby/object:Gem::Requirement
195
161
  none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
- version: "0"
203
- name: sinatra
204
- version_requirements: *id013
205
- - !ruby/object:Gem::Dependency
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
206
167
  prerelease: false
168
+ version_requirements: *70183689800940
169
+ - !ruby/object:Gem::Dependency
170
+ name: front-compiler
171
+ requirement: &70183689800380 !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ! '>='
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
207
177
  type: :development
208
- requirement: &id014 !ruby/object:Gem::Requirement
178
+ prerelease: false
179
+ version_requirements: *70183689800380
180
+ - !ruby/object:Gem::Dependency
181
+ name: closure-compiler
182
+ requirement: &70183689799700 !ruby/object:Gem::Requirement
209
183
  none: false
210
- requirements:
211
- - - ">="
212
- - !ruby/object:Gem::Version
213
- hash: 3
214
- segments:
215
- - 0
216
- version: "0"
217
- name: rack-test
218
- version_requirements: *id014
219
- - !ruby/object:Gem::Dependency
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
220
189
  prerelease: false
190
+ version_requirements: *70183689799700
191
+ - !ruby/object:Gem::Dependency
192
+ name: sinatra
193
+ requirement: &70183689798960 !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
221
199
  type: :development
222
- requirement: &id015 !ruby/object:Gem::Requirement
200
+ prerelease: false
201
+ version_requirements: *70183689798960
202
+ - !ruby/object:Gem::Dependency
203
+ name: rack-test
204
+ requirement: &70183689798300 !ruby/object:Gem::Requirement
223
205
  none: false
224
- requirements:
225
- - - ">="
226
- - !ruby/object:Gem::Version
227
- hash: 3
228
- segments:
229
- - 0
230
- version: "0"
206
+ requirements:
207
+ - - ! '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ type: :development
211
+ prerelease: false
212
+ version_requirements: *70183689798300
213
+ - !ruby/object:Gem::Dependency
231
214
  name: yard
232
- version_requirements: *id015
215
+ requirement: &70183689797440 !ruby/object:Gem::Requirement
216
+ none: false
217
+ requirements:
218
+ - - ! '>='
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ type: :development
222
+ prerelease: false
223
+ version_requirements: *70183689797440
233
224
  description: Javascript packager and dependency resolver
234
225
  email: markizko@gmail.com
235
- executables:
226
+ executables:
236
227
  - jsus
237
228
  extensions: []
238
-
239
- extra_rdoc_files:
229
+ extra_rdoc_files:
240
230
  - README.md
241
231
  - TODO
242
- files:
232
+ files:
243
233
  - .document
244
234
  - .rspec
245
235
  - .travis.yml
@@ -315,7 +305,10 @@ files:
315
305
  - features/step_definitions/cli_steps.rb
316
306
  - features/support/env.rb
317
307
  - jsus.gemspec
308
+ - lib/extensions/rgl.rb
318
309
  - lib/jsus.rb
310
+ - lib/jsus/cli.rb
311
+ - lib/jsus/compiler.rb
319
312
  - lib/jsus/container.rb
320
313
  - lib/jsus/middleware.rb
321
314
  - lib/jsus/package.rb
@@ -334,9 +327,11 @@ files:
334
327
  - lib/jsus/util/validator.rb
335
328
  - lib/jsus/util/validator/base.rb
336
329
  - lib/jsus/util/validator/mooforge.rb
330
+ - lib/jsus/util/watcher.rb
337
331
  - markup/index_template.haml
338
332
  - markup/stylesheet.css
339
333
  - markup/template.haml
334
+ - spec/benchmarks/topsort.rb
340
335
  - spec/data/Basic/README
341
336
  - spec/data/Basic/app/javascripts/Orwik/Source/Library/Color.js
342
337
  - spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js
@@ -415,6 +410,7 @@ files:
415
410
  - spec/data/test_source_one.js
416
411
  - spec/data/unicode_source.js
417
412
  - spec/data/unicode_source_with_bom.js
413
+ - spec/extensions/rgl_spec.rb
418
414
  - spec/jsus/container_spec.rb
419
415
  - spec/jsus/middleware_spec.rb
420
416
  - spec/jsus/package_spec.rb
@@ -422,6 +418,7 @@ files:
422
418
  - spec/jsus/pool_spec.rb
423
419
  - spec/jsus/source_file_spec.rb
424
420
  - spec/jsus/tag_spec.rb
421
+ - spec/jsus/util/compressor_spec.rb
425
422
  - spec/jsus/util/documenter_spec.rb
426
423
  - spec/jsus/util/file_cache_spec.rb
427
424
  - spec/jsus/util/inflection_spec.rb
@@ -429,41 +426,37 @@ files:
429
426
  - spec/jsus/util/tree_spec.rb
430
427
  - spec/jsus/util/validator/base_spec.rb
431
428
  - spec/jsus/util/validator/mooforge_spec.rb
429
+ - spec/jsus/util/watcher_spec.rb
430
+ - spec/jsus/util_spec.rb
432
431
  - spec/shared/class_stubs.rb
433
432
  - spec/spec_helper.rb
434
433
  has_rdoc: true
435
- homepage: http://github.com/markiz/jsus
436
- licenses:
434
+ homepage: http://github.com/jsus/jsus
435
+ licenses:
437
436
  - Public Domain
438
437
  post_install_message:
439
438
  rdoc_options: []
440
-
441
- require_paths:
439
+ require_paths:
442
440
  - lib
443
- required_ruby_version: !ruby/object:Gem::Requirement
441
+ required_ruby_version: !ruby/object:Gem::Requirement
444
442
  none: false
445
- requirements:
446
- - - ">="
447
- - !ruby/object:Gem::Version
448
- hash: 3
449
- segments:
443
+ requirements:
444
+ - - ! '>='
445
+ - !ruby/object:Gem::Version
446
+ version: '0'
447
+ segments:
450
448
  - 0
451
- version: "0"
452
- required_rubygems_version: !ruby/object:Gem::Requirement
449
+ hash: -2563432584055133632
450
+ required_rubygems_version: !ruby/object:Gem::Requirement
453
451
  none: false
454
- requirements:
455
- - - ">="
456
- - !ruby/object:Gem::Version
457
- hash: 3
458
- segments:
459
- - 0
460
- version: "0"
452
+ requirements:
453
+ - - ! '>='
454
+ - !ruby/object:Gem::Version
455
+ version: '0'
461
456
  requirements: []
462
-
463
457
  rubyforge_project:
464
458
  rubygems_version: 1.6.2
465
459
  signing_key:
466
460
  specification_version: 3
467
461
  summary: Javascript packager and dependency resolver
468
462
  test_files: []
469
-