hamljsx 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/engine.rb +51 -0
  3. data/lib/hamljsx.rb +3 -36
  4. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa2b2763cb274fb0bbb3311ccc51ed6a2f357a82
4
- data.tar.gz: 3e26671904156fb077a841ba6571f05e0739272f
3
+ metadata.gz: 21ca603caadeca5ef4fc47f5d0214ec4f388ba81
4
+ data.tar.gz: 7c36a64f4f786b938d6a5cd3a7f01629c57b2c86
5
5
  SHA512:
6
- metadata.gz: 7c0e1abd33a13bbd6972c5b3e437f5dc6331f874f970d602a94410008fd12929c7ff2dce3fbceea0a25a674f5f83d147980bfb95fe491697e1c96f119bb83d01
7
- data.tar.gz: 9c3ce9359180616e5d53a4584e77111c75e0dfe556e2a5f5dcd2d280f3cf8cc8bafb77baac705296147778d1f69495d4e9f57f20dda281d108ff06509e025acf
6
+ metadata.gz: c9294f47207886169265505117fbaf04d9623864c37795950b496215187fca8a8ad07c0e81ab4ad7d42b22dce0d143efd2984cfb10f7cd696e1c28c0bc56cf15
7
+ data.tar.gz: cf342a236a19398fc721bb176315c677d84b832eff80bbefffa4095b25bc67f67365df723e24d04c34420b83764bbcdb1305c596cf530b6de4ef05148f11b521
@@ -0,0 +1,51 @@
1
+ require 'haml'
2
+
3
+ class HamlJsxEngine
4
+ MARKER_START = "(~"
5
+ MARKER_END = "~)"
6
+
7
+ def self.evaluate(data)
8
+ result = ""
9
+ offset = 0
10
+
11
+ while true
12
+ idx_start = data.index(MARKER_START, offset)
13
+ if idx_start
14
+ idx_start += 1
15
+ idx_end = data.index(MARKER_END, idx_start + MARKER_END.length)-1
16
+
17
+ result += data[offset..(idx_start-1)]
18
+ offset = idx_end + MARKER_END.length
19
+
20
+ haml = data[(idx_start + MARKER_START.length)..(idx_end-1)]
21
+
22
+ # Escape { } so they'll survive the HAML render
23
+ haml.gsub!(/\{/,"'{")
24
+ haml.gsub!(/\}/,"}'")
25
+
26
+ # Remove spaces offset
27
+ first_indent = haml.match(/\s*/)[0]
28
+ haml.gsub!(/^#{first_indent}/,"")
29
+
30
+ # Dot optimization
31
+ haml.gsub!(/^(\s*)\.(\(|$)/,'\1%div\2')
32
+
33
+ # Remove comments
34
+ haml.gsub!(/^\s*\/\/.*$/,'')
35
+ haml.gsub!(/\/\*.*?\*\//,'')
36
+
37
+ html = Haml::Engine.new(haml).render
38
+ html.gsub!("class=","className=")
39
+ html.gsub!(/\'{/,"{")
40
+ html.gsub!(/\}\'/,"}")
41
+
42
+ result += html
43
+ else
44
+ result += data[offset..-1]
45
+ break
46
+ end
47
+ end
48
+
49
+ result
50
+ end
51
+ end
@@ -1,48 +1,15 @@
1
1
  require 'tilt'
2
2
  require 'rails'
3
3
 
4
- class HamlJsxTemplate < Tilt::Template
5
- MARKER_START = "(~"
6
- MARKER_END = "~)"
4
+ require 'engine'
7
5
 
6
+ class HamlJsxTemplate < Tilt::Template
8
7
  def prepare
9
8
  Haml::Options.defaults[:format] = :xhtml
10
9
  end
11
10
 
12
11
  def evaluate(context, locals, &block)
13
- result = ""
14
- offset = 0
15
-
16
- while true
17
- idx_start = @data.index(MARKER_START, offset)
18
- if idx_start
19
- idx_start += 1
20
- idx_end = @data.index(MARKER_END, idx_start + MARKER_END.length)-1
21
-
22
- result += @data[offset..(idx_start-1)]
23
- offset = idx_end + MARKER_END.length
24
-
25
- haml = @data[(idx_start + MARKER_START.length)..(idx_end-1)]
26
- haml.gsub!(/\{/,"'{")
27
- haml.gsub!(/\}/,"}'")
28
- first_indent = haml.match(/\s*/)[0]
29
- haml.gsub!(/^#{first_indent}/,"")
30
-
31
- haml.gsub!(/^.$/,"%div")
32
-
33
- html = Haml::Engine.new(haml).render
34
- html.gsub!("class=","className=")
35
- html.gsub!(/\'{/,"{")
36
- html.gsub!(/\}\'/,"}")
37
-
38
- result += html
39
- else
40
- result += @data[offset..-1]
41
- break
42
- end
43
- end
44
-
45
- result
12
+ HamlJsxEngine.evaluate(@data)
46
13
  end
47
14
  end
48
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamljsx
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Hassin
@@ -19,6 +19,7 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - lib/hamljsx.rb
22
+ - lib/engine.rb
22
23
  homepage: http://rubygems.org/gems/hamljsx
23
24
  licenses:
24
25
  - license.md