erb_to_slim 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2b43f654f30aaa455b055c0049a878d1dfbb0c94
4
+ data.tar.gz: a1d9512f1a36cf8ffe7e50374564292514bee974
5
+ SHA512:
6
+ metadata.gz: 9ad3c8143a373e671c91c7cdb0239bc5b08e35a1ba9c9b50af02dd6b2718dbf1c7a9c23b78010f44083f1845062feb4f7d27c509cf7de273be48c366bfe7bd6e
7
+ data.tar.gz: eb3f3a7fbff8b257c54c66d9c9596ad64412c57c33acb830eb48c8f1c70088d54cbbba855323fdea39ed6be06cd2052fc8ba623d039891a29558c92da3003ab7
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # ErbToSlim
2
+
3
+ The most stupid ERB to Slim Converter.
4
+
5
+ ## Usage
6
+ ```sh
7
+ $ gem install erb_to_slim
8
+ ```
9
+
10
+ Goto ERB template directory:
11
+
12
+ ```sh
13
+ $ erb_to_slim
14
+ ```
15
+
16
+ It will convert all `*.html.erb` files in current directory and subdirectory to `*.html.slim`,
17
+ and rename original file to `*.html.erb.bak`.
18
+
19
+ ## How it works
20
+
21
+ [ERbToSlim](https://github.com/zw963/erb_to_slim) convert ERB to Slim directly with REGEXP.
22
+ You need Ruby 1.9+ to support the newest regular expression syntax.
23
+
24
+ ## Feature
25
+ * Minimum modified, not change indentation/outline.
26
+ * No any gem dependency, YEAH!
27
+
28
+ ## Limitations
29
+ * Only support html.erb format.
30
+ * This gem just do match and replace with REGEXP, not do any syntactic analysis or
31
+ indent detection, so, before process, please format ERB file with your's favorate editor.
32
+ * This gem is not test fully, consider all cases is not possible.
33
+ So, before you try, ensure about you well understood Slim,
34
+ and can fix any unexpected error manually.
35
+
36
+ ## Author
37
+
38
+ Billy.zheng (zw963)
39
+
40
+ ## OFFICIAL REPO
41
+ https://github.com/zw963/erb_to_slim
42
+
43
+ ## Contact
44
+ If you found any bug, please file an issue at [github](https://github.com/zw963/erb_to_slim/issues).
45
+
data/bin/erb_to_slim ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require_relative '../lib/erb_to_slim'
5
+
6
+ Dir.chdir Dir.pwd do
7
+ Dir['**/*.{html.erb}'].each do |file|
8
+ include ErbToSlim::Engine
9
+
10
+ stream = File.read(file)
11
+
12
+ stream.markup_js_tag
13
+ stream.cleanup_close_tag
14
+ stream.replace_html_tag
15
+ stream.replace_erb_exec_tag
16
+ stream.replace_erb_eval_tag
17
+ stream.replace_string_literal
18
+ stream.replace_tag_with_id
19
+ stream.replace_tag_with_class
20
+ stream.finally_clean_up
21
+
22
+ File.open("#{File.basename(file, '.erb')}.slim", "w") do |f|
23
+ f.write(stream)
24
+ end
25
+ File.rename(file, "#{file}.bak")
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require_relative 'erb_to_slim/pattern'
4
+ require_relative 'erb_to_slim/engine'
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require_relative 'pattern'
4
+
5
+ module ErbToSlim
6
+ module Engine
7
+ include Pattern
8
+
9
+ def markup_js_tag
10
+ gsub!(js_tag) { $&.gsub(/\n[\s\t]*/, '\&@ ') }
11
+ self
12
+ end
13
+
14
+ def cleanup_close_tag
15
+ gsub!(close_tag, '')
16
+ self
17
+ end
18
+
19
+ def replace_html_tag
20
+ gsub!(html_tag) { $4.empty? ? "#$1#$2#$3" : "#$1#$2#$3 #$4" }
21
+ self
22
+ end
23
+
24
+ def replace_erb_exec_tag
25
+ gsub!(erb_exec_tag) { "- #$1".gsub(/\n[\s\t]*/, '\&- ') }
26
+ self
27
+ end
28
+
29
+ def replace_erb_eval_tag
30
+ gsub!(erb_eval_tag) do
31
+ $2.nil? ? "#$1= #{$3.gsub(/\n[\s\t]*/, '\&= ')}" : "#$1#$2 = #{$3.gsub(/\n[\s\t]*/, '\&= ')}"
32
+ end
33
+ self
34
+ end
35
+
36
+ def replace_string_literal
37
+ gsub!(string_literal) { $2.nil? ? "#$1| #$2#$3" : $& }
38
+ self
39
+ end
40
+
41
+ def replace_tag_with_id
42
+ gsub!(tag_with_id) { $1 == 'div' ? "\##$4#$2#$5" : "#$1\##$4#$2#$5" }
43
+ self
44
+ end
45
+
46
+ def replace_tag_with_class
47
+ gsub!(tag_with_class) { $1 == 'div' ? ".#{$4.tr(' ', '.')}#$2#$5" : "#$1.#{$4.tr(' ', '.')}#$2#$5" }
48
+ self
49
+ end
50
+
51
+ def finally_clean_up
52
+ gsub!('@ ', '')
53
+ gsub!(/<%= *(.*?) *-?%>/, '#{\1}')
54
+ self
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,80 @@
1
+ # get from http://htmldog.com/reference/htmltags/
2
+
3
+ a
4
+ abbr
5
+ acronym
6
+ address
7
+ area
8
+ b
9
+ base
10
+ bdo
11
+ big
12
+ blockquote
13
+ body
14
+ br
15
+ button
16
+ caption
17
+ cite
18
+ code
19
+ col
20
+ colgroup
21
+ dd
22
+ del
23
+ dfn
24
+ div
25
+ dl
26
+ DOCTYPE
27
+ dt
28
+ em
29
+ fieldset
30
+ form
31
+ h1
32
+ h2
33
+ h3
34
+ h4
35
+ h5
36
+ h6
37
+ head
38
+ html
39
+ hr
40
+ i
41
+ img
42
+ input
43
+ ins
44
+ kbd
45
+ label
46
+ legend
47
+ li
48
+ link
49
+ map
50
+ meta
51
+ noscript
52
+ object
53
+ ol
54
+ optgroup
55
+ option
56
+ p
57
+ param
58
+ pre
59
+ q
60
+ samp
61
+ script
62
+ select
63
+ small
64
+ span
65
+ strong
66
+ style
67
+ sub
68
+ sup
69
+ table
70
+ tbody
71
+ td
72
+ textarea
73
+ tfoot
74
+ th
75
+ thead
76
+ title
77
+ tr
78
+ tt
79
+ ul
80
+ var
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module ErbToSlim
4
+ module Pattern
5
+ def html_tags_array
6
+ @html_tags_array ||= File.readlines(File.expand_path('../html_tag_list.txt', __FILE__))
7
+ .reject {|line| line =~ /^#|^$/ }.map(&:chomp)
8
+ end
9
+
10
+ def html_tags_list
11
+ @html_tags_list ||= html_tags_array.join('|')
12
+ end
13
+
14
+ def indentation
15
+ /[\s\t]*+/
16
+ end
17
+
18
+ def multiline_string_which_not_match(str)
19
+ str_escaped = str.gsub(/[!<>=?]/, '\\\\\&')
20
+ /(?:.(?!#{str_escaped}))*?/m
21
+ end
22
+
23
+ def js_tag
24
+ /<script *(type="text\/javascript")? *>(#{multiline_string_which_not_match('<script')})<\/script>/
25
+ end
26
+
27
+ def erb_exec_tag
28
+ /<%(?!=)\s*((?m:.*?))\s*-?%>/
29
+ end
30
+
31
+ def close_tag
32
+ /\s*(<% *end *-?%>|(@ )?<\/\w+>)$/
33
+ end
34
+
35
+ def html_tag
36
+ /( *)<(\w+)(.*?) *(?<!%)\/?> *(.*)?/
37
+ end
38
+
39
+ def erb_eval_tag
40
+ /^(#{indentation})(#{html_tags_list})? *<%=\s*(#{multiline_string_which_not_match('<%=')})\s*-?%>$/
41
+ end
42
+
43
+ def string_literal
44
+ /^(#{indentation})((?:#{html_tags_list}|\||-|=|\#|@))?\b *(.*)$/
45
+ end
46
+
47
+ def tag_with_id
48
+ /(\w+)(.*?) *id *= *(["'])(.*?)\3(.*?) *$/
49
+ end
50
+
51
+ def tag_with_class
52
+ /([\w#]+)(.*?) *class *= *(["'])(.*?)\3(.*?) *$/
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module ErbToSlim
4
+ VERSION = '0.0.1'
5
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: erb_to_slim
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Billy(zw963)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Erb to Slim converter
28
+ email:
29
+ - zw963@163.com
30
+ executables:
31
+ - erb_to_slim
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - README.md
36
+ - bin/erb_to_slim
37
+ - lib/erb_to_slim.rb
38
+ - lib/erb_to_slim/engine.rb
39
+ - lib/erb_to_slim/html_tag_list.txt
40
+ - lib/erb_to_slim/pattern.rb
41
+ - lib/erb_to_slim/version.rb
42
+ homepage: http://github.com/zw963/erb_to_slim
43
+ licenses: []
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.9.1
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.2.2
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Converts Erb templates to Slim templates
65
+ test_files: []
66
+ has_rdoc: