jsrequire 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jsrequire}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["aekym"]
12
- s.date = %q{2010-07-28}
12
+ s.date = %q{2010-08-10}
13
13
  s.description = %q{Organizes requirements of assets in JavaScript files, resolved dependencies of js files and helps include depending css files.}
14
14
  s.email = %q{me@aekym.com}
15
15
  s.extra_rdoc_files = [
@@ -28,8 +28,12 @@ Gem::Specification.new do |s|
28
28
  "test/fixtures/different-place/b.js",
29
29
  "test/fixtures/javascripts/a.js",
30
30
  "test/fixtures/javascripts/c.js",
31
+ "test/fixtures/javascripts/coffee/coke.coffee",
32
+ "test/fixtures/javascripts/coffee/other.coffee",
33
+ "test/fixtures/javascripts/coffee/tea.js",
31
34
  "test/fixtures/javascripts/file.with.dot.js",
32
35
  "test/fixtures/javascripts/hook.js",
36
+ "test/fixtures/javascripts/i_can_cook.coffee",
33
37
  "test/fixtures/javascripts/namespace/a.js",
34
38
  "test/fixtures/javascripts/namespace/json_reader.js",
35
39
  "test/fixtures/javascripts/namespace/norequire.js",
@@ -1,4 +1,5 @@
1
1
  class JsRequire
2
+ ALLOWED_EXTENSIONS = %w(coffee js)
2
3
 
3
4
  class FileNotFoundInLoadpath < ArgumentError; end
4
5
 
@@ -128,7 +129,7 @@ class JsRequire
128
129
  end
129
130
 
130
131
 
131
- def find_file(filename, current_dir = nil)
132
+ def find_file_with_extension(filename, current_dir = nil)
132
133
  return filename if is_file?(filename)
133
134
 
134
135
  loadpaths = @extract_loadpaths + @additional_loadpaths
@@ -147,7 +148,21 @@ class JsRequire
147
148
  end
148
149
  end
149
150
 
150
- raise FileNotFoundInLoadpath, "File '#{filename}' not found in loadpaths '#{loadpaths.join("', '")}'."
151
+ false
152
+ end
153
+
154
+ def find_file(filename, current_dir = nil)
155
+ file = false
156
+
157
+ file = find_file_with_extension(filename, current_dir)
158
+ return file unless file == false
159
+
160
+ ALLOWED_EXTENSIONS.each do |extension|
161
+ file = find_file_with_extension("#{filename}.#{extension}", current_dir)
162
+ return file unless file == false
163
+ end
164
+
165
+ raise FileNotFoundInLoadpath, "File '#{filename}' not found in loadpaths '#{(@extract_loadpaths + @additional_loadpaths).join("', '")}'."
151
166
  end
152
167
 
153
168
  def exec_preprocessor(action, parameter)
@@ -167,21 +182,12 @@ class JsRequire
167
182
  js = []
168
183
 
169
184
  File.open(filename, "r").each_line do |line|
170
- if line =~ /^
171
- \s* # optional leading whitespace
172
- \/\*\s* # opening comment
173
- (\w+)\s+ # action
174
- (.*) # parameter
175
- \*\/\s*$/x # closing comment
176
-
177
- action = $1
178
- parameter = $2.strip
179
-
185
+ if val = parse_line(line)
180
186
  # fire callbacks
181
- action, parameter = exec_preprocessor(action, parameter)
187
+ action, parameter = exec_preprocessor(val[0], val[1])
182
188
 
183
189
  case action
184
- when "js" then js << "#{parameter}.js"
190
+ when "js" then js << parameter
185
191
  end
186
192
  else
187
193
  break
@@ -191,6 +197,28 @@ class JsRequire
191
197
  js.uniq.map { |f| find_file(f, File.dirname(filename)) }
192
198
  end
193
199
 
200
+ def parse_line(line)
201
+ case line
202
+ when /^
203
+ \s* # optional leading whitespace
204
+ \/\*\s* # opening comment
205
+ (\w+)\s+ # action
206
+ (.*) # parameter
207
+ \*\/\s*$ # closing comment
208
+ /x then
209
+ [$1, $2.strip]
210
+ when /^
211
+ \s* # optional leading whitespace
212
+ \#\s* # opening comment
213
+ (\w+)\s+ # action
214
+ (.*)$ # parameter
215
+ /x then
216
+ [$1, $2.strip]
217
+ else
218
+ nil
219
+ end
220
+ end
221
+
194
222
 
195
223
  def extract_dependencies_recursive(files, included_files = [])
196
224
  js = []
@@ -0,0 +1,3 @@
1
+ # js coffee/tea
2
+
3
+
@@ -0,0 +1 @@
1
+ /* js .coke */
@@ -0,0 +1,2 @@
1
+ # js coffee.other
2
+
@@ -117,6 +117,10 @@ class TestJsRequire < Test::Unit::TestCase
117
117
  assert_equal additional_loadpaths, @jsrequire.instance_eval("@additional_loadpaths")
118
118
  end
119
119
 
120
+ should "work with CoffeeScript files, too" do
121
+ assert_requires("i_can_cook.coffee", ["coffee/other.coffee", "coffee/tea.js", "coffee/coke.coffee"])
122
+ end
123
+
120
124
  end
121
125
 
122
126
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsrequire
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - aekym
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-28 00:00:00 +02:00
18
+ date: 2010-08-10 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -40,8 +40,12 @@ files:
40
40
  - test/fixtures/different-place/b.js
41
41
  - test/fixtures/javascripts/a.js
42
42
  - test/fixtures/javascripts/c.js
43
+ - test/fixtures/javascripts/coffee/coke.coffee
44
+ - test/fixtures/javascripts/coffee/other.coffee
45
+ - test/fixtures/javascripts/coffee/tea.js
43
46
  - test/fixtures/javascripts/file.with.dot.js
44
47
  - test/fixtures/javascripts/hook.js
48
+ - test/fixtures/javascripts/i_can_cook.coffee
45
49
  - test/fixtures/javascripts/namespace/a.js
46
50
  - test/fixtures/javascripts/namespace/json_reader.js
47
51
  - test/fixtures/javascripts/namespace/norequire.js