jspp 0.1.8 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,53 @@
1
+ JavaScript preprocessor
2
+ ===============
3
+ Minimal preprocessing with `/*>*/`
4
+
5
+
6
+ Usage
7
+ ----
8
+ `jspp input > output`
9
+
10
+ Example
11
+ ----
12
+ <table><tr>
13
+ <td>main.js
14
+ <pre>/*> script.js */
15
+
16
+ var style = "/*> css/style.css */";</pre></td>
17
+ <td>css/style.css
18
+ <pre>html, body {margin:0; padding:0}
19
+ /*> http://nv.github.com/js-preprocessor/example/css/style-child.css */
20
+ .my-style {background: #fffacc}
21
+ </pre></td>
22
+ <td><br/>css/style-child.css
23
+ <pre>.i-am-child {}
24
+ </pre></td>
25
+ </tr><tr>
26
+ <td><br/>script.js
27
+ <pre>var my_script;</pre></td>
28
+ </tr></table>
29
+
30
+ $ jspp example/main.js
31
+ var my_script;
32
+
33
+ var style = "html, body {margin:0; padding:0}\
34
+ .i-am-child {}\
35
+ .my-style {background: #fffacc}"
36
+
37
+ JavaScript preprocessor in a wild:
38
+ [GitHub Live Preview](http://github.com/NV/github-live-preview).
39
+
40
+ Installation
41
+ ----
42
+ [Ruby gem](http://rubygems.org/gems/jspp)
43
+
44
+ $ gem install jspp
45
+
46
+ Why reinvent the wheel?
47
+ ----
48
+ [Sprockets](http://github.com/sstephenson/sprockets) can't include non-JS files.
49
+ JS preprocessor can.
50
+
51
+ [Juicer](http://github.com/cjohansen/juicer) can include one JS file to another via
52
+ `@depend` statement, but can't include CSS file to JS as multiline string.
53
+ JS preprocessor can do it via `"/*> some_file */"`.
data/bin/jspp CHANGED
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- HELP = <<-multiline
3
+ require 'jspp'
4
+
5
+ if $stdin.tty? and ARGV.empty? or ARGV.delete'-h' or ARGV.delete'--help'
6
+ puts <<-how_to_use
4
7
 
5
8
  JavaScript Preprocessor
6
9
 
@@ -11,7 +14,7 @@ Example: main.js: /*> script.js */
11
14
  var style = "/*> style.css */";
12
15
 
13
16
  style.css: html, body {margin:0; padding:0}
14
- /*> http://nv.github.com/js-preprocessor/example/style-child.css */
17
+ /*> http://nv.github.com/js-preprocessor/example/css/style-child.css */
15
18
  .my-style {background: #fffacc}
16
19
 
17
20
  style-child.css: .i-am-child {}
@@ -23,34 +26,8 @@ Example: main.js: /*> script.js */
23
26
  var style = "html, body {margin:0; padding:0}\\
24
27
  .i-am-child {}\\
25
28
  .my-style {background: #fffacc}"
26
- multiline
27
-
28
- DIR = File.dirname ARGV.first || '.'
29
- R_INCLUDE = %r{/\*>\s*(.+?)\s*\*/}
30
- R_INCLUDE_INSIDE_STRING = %r{"#{R_INCLUDE.source}"}
31
-
32
-
33
- def get_file path=''
34
- if path.index'http://' or path.index'https://'
35
- require 'open-uri'
36
- open(path).read
37
- else
38
- File.read File.join(DIR, path)
39
- end
40
- end
41
-
42
- def parse text=''
43
- text.gsub!(R_INCLUDE_INSIDE_STRING) {
44
- '"' << parse(get_file $1).gsub(/$/, '\\').chop << '"'
45
- }
46
- text.gsub!(R_INCLUDE) {
47
- parse get_file $1
48
- }
49
- text
50
- end
51
-
52
- if $stdin.tty? and ARGV.empty? or ARGV.delete'-h' or ARGV.delete'--help'
53
- puts HELP
29
+ how_to_use
54
30
  else
55
- print parse ARGF.read
31
+ DIR = File.dirname ARGV.first || '.'
32
+ print JSPP(ARGF.read, DIR)
56
33
  end
@@ -0,0 +1 @@
1
+ .i-am-child {}
@@ -0,0 +1,3 @@
1
+ html, body {margin:0; padding:0}
2
+ /*> http://github.com/NV/js-preprocessor/raw/gh-pages/example/css/style-child.css */
3
+ .my-style {background: #fffacc}
@@ -0,0 +1,3 @@
1
+ /*> script.js */
2
+
3
+ var style = "/*> css/style.css */";
@@ -0,0 +1 @@
1
+ var my_script;
@@ -0,0 +1,38 @@
1
+ class JSPP
2
+
3
+ INCLUDE = %r{/\*>\s*(.+?)\s*\*/}
4
+ INCLUDE_INSIDE_STRING = %r{"#{INCLUDE.source}"}
5
+
6
+ def get_file path, base_dir='.'
7
+ if path.index'http://' or path.index'https://'
8
+ require 'open-uri'
9
+ file = open(path).read
10
+ dir = File.dirname path
11
+ else
12
+ full_path = File.join base_dir, path
13
+ file = File.read full_path
14
+ dir = File.dirname full_path
15
+ end
16
+ [file, dir]
17
+ end
18
+
19
+ def parse text='', base_dir='.'
20
+ text.gsub!(INCLUDE_INSIDE_STRING) {
21
+ file, dir = get_file $1, base_dir
22
+ parsed = parse file, dir
23
+ '"' << parsed.gsub(/$/, '\\').chop << '"'
24
+ }
25
+ text.gsub!(INCLUDE) {
26
+ file, dir = get_file $1, base_dir
27
+ parse file, dir
28
+ }
29
+ text
30
+ end
31
+ end
32
+
33
+ module Kernel
34
+ def JSPP text, base_dir='.'
35
+ JSPP.new.parse text, base_dir
36
+ end
37
+ private :JSPP
38
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec'
2
+ DIR = File.dirname __FILE__
3
+ require DIR + '/../lib/jspp'
4
+ require 'fakeweb'
5
+
6
+ PETS = "Cat, dog, turtle, hamster, parrot\n"
7
+ PETS_URL = 'http://elv1s.ru/x/pets.txt'
8
+ FakeWeb.register_uri :get, PETS_URL, :body => PETS
9
+ EXAMPLE = DIR + '/../example'
10
+ CHILD_CSS = File.read(EXAMPLE + '/css/style-child.css')
11
+ FakeWeb.register_uri :get, 'http://nv.github.com/js-preprocessor/example/css/style-child.css', :body => CHILD_CSS
@@ -0,0 +1,30 @@
1
+ require 'helper'
2
+
3
+ describe JSPP do
4
+ describe '#get_file' do
5
+ it 'fetches URI' do
6
+ JSPP.new.get_file(PETS_URL).first.should == PETS
7
+ end
8
+ it 'reads file' do
9
+ main_js = EXAMPLE + '/main.js'
10
+ JSPP.new.get_file(main_js, '/').first.should == File.read(main_js)
11
+ end
12
+ end
13
+
14
+ describe '#parse' do
15
+ it 'include files' do
16
+ file = File.read(EXAMPLE + '/main.js')
17
+ JSPP.new.parse(file, EXAMPLE).should == <<-result
18
+ var my_script;
19
+
20
+ var style = "html, body {margin:0; padding:0}\\
21
+ .i-am-child {}\\
22
+ .my-style {background: #fffacc}\\
23
+ ";
24
+ result
25
+ end
26
+ it 'returns same text if no /*> file */ was found' do
27
+ JSPP.new.parse(PETS).should == PETS
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -3,10 +3,10 @@ name: jspp
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
+ - 1
6
7
  - 0
7
8
  - 1
8
- - 8
9
- version: 0.1.8
9
+ version: 1.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nikita Vasilyev
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-14 00:00:00 +03:00
17
+ date: 2010-03-20 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -27,8 +27,9 @@ extensions: []
27
27
  extra_rdoc_files: []
28
28
 
29
29
  files:
30
+ - lib/jspp.rb
30
31
  - bin/jspp
31
- - test/jspp_test.rb
32
+ - README.md
32
33
  has_rdoc: true
33
34
  homepage: http://github.com/NV/js-preprocessor
34
35
  licenses: []
@@ -37,7 +38,7 @@ post_install_message:
37
38
  rdoc_options: []
38
39
 
39
40
  require_paths:
40
- - bin
41
+ - lib
41
42
  required_ruby_version: !ruby/object:Gem::Requirement
42
43
  requirements:
43
44
  - - ">="
@@ -60,4 +61,9 @@ signing_key:
60
61
  specification_version: 3
61
62
  summary: JavaScript preprocessor
62
63
  test_files:
63
- - test/jspp_test.rb
64
+ - spec/helper.rb
65
+ - spec/jspp_spec.rb
66
+ - example/css/style-child.css
67
+ - example/css/style.css
68
+ - example/main.js
69
+ - example/script.js
@@ -1,30 +0,0 @@
1
- require "test/unit"
2
-
3
- class JSPreprocessorTest < Test::Unit::TestCase
4
-
5
- DIR = File.dirname __FILE__
6
- EXAMPLE = File.join DIR, '..', 'example', ''
7
- JSPP = File.join DIR, '..', 'bin', 'jspp'
8
-
9
- def jspp(name='')
10
- `#{JSPP} #{EXAMPLE}#{name}`
11
- end
12
-
13
- def test_examples
14
- assert_equal File.read("#{EXAMPLE}style-child.css"), jspp('style-child.css')
15
- assert_equal <<-multiline, jspp('style.css')
16
- html, body {margin:0; padding:0}
17
- .i-am-child {}
18
- .my-style {background: #fffacc}
19
- multiline
20
- assert_equal File.read("#{EXAMPLE}script.js"), jspp('script.js')
21
- assert_equal <<-multiline, jspp('main.js')
22
- var my_script;
23
-
24
- var style = "html, body {margin:0; padding:0}\\
25
- .i-am-child {}\\
26
- .my-style {background: #fffacc}\\
27
- ";
28
- multiline
29
- end
30
- end