jsus 0.3.4 → 0.3.5

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.
@@ -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
-