rhtml 0.0.2 → 0.0.4
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.
- data/README.md +24 -9
- data/lib/rhtml.rb +4 -70
- data/lib/rhtml/html.rb +51 -0
- data/lib/rhtml/shortcut.rb +5 -0
- data/lib/rhtml/tag.rb +31 -0
- data/lib/rhtml/version.rb +1 -1
- metadata +15 -5
- checksums.yaml +0 -15
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Rhtml
|
2
2
|
|
3
3
|
A DSL to write html in pure ruby.
|
4
|
-
**write test
|
4
|
+
**write test tomorrow**
|
5
5
|
|
6
6
|
## Installation
|
7
7
|
|
@@ -20,20 +20,23 @@ Or install it yourself as:
|
|
20
20
|
## Usage
|
21
21
|
|
22
22
|
```ruby
|
23
|
-
html! {
|
23
|
+
Rhtml.html! {
|
24
24
|
body {
|
25
25
|
div(class: "post", id: 1) {
|
26
26
|
title "first post"
|
27
27
|
br
|
28
28
|
p "hello world"
|
29
29
|
div(class: "comment") {
|
30
|
-
|
31
|
-
"
|
32
|
-
|
30
|
+
(1..5).each do |id|
|
31
|
+
p(class: "grey") {
|
32
|
+
"comment #{id}"
|
33
|
+
}
|
34
|
+
end
|
33
35
|
}
|
34
36
|
}
|
35
37
|
}
|
36
38
|
}
|
39
|
+
|
37
40
|
```
|
38
41
|
** converted to html **
|
39
42
|
|
@@ -42,15 +45,27 @@ html! {
|
|
42
45
|
<body>
|
43
46
|
<div class='post' id='1'>
|
44
47
|
<title>
|
45
|
-
first post
|
48
|
+
first post
|
46
49
|
</title>
|
47
|
-
<br
|
50
|
+
<br/>
|
48
51
|
<p>
|
49
|
-
hello world
|
52
|
+
hello world
|
50
53
|
</p>
|
51
54
|
<div class='comment'>
|
52
55
|
<p class='grey'>
|
53
|
-
|
56
|
+
comment 1
|
57
|
+
</p>
|
58
|
+
<p class='grey'>
|
59
|
+
comment 2
|
60
|
+
</p>
|
61
|
+
<p class='grey'>
|
62
|
+
comment 3
|
63
|
+
</p>
|
64
|
+
<p class='grey'>
|
65
|
+
comment 4
|
66
|
+
</p>
|
67
|
+
<p class='grey'>
|
68
|
+
comment 5
|
54
69
|
</p>
|
55
70
|
</div>
|
56
71
|
</div>
|
data/lib/rhtml.rb
CHANGED
@@ -1,70 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
VOID_TAGS = %w{area base br col command embed hr img input keygen link meta param source track wbr}
|
6
|
-
|
7
|
-
def initialize(content='', indent=0, &b)
|
8
|
-
@indent = 0
|
9
|
-
@content = content
|
10
|
-
@content << instance_eval(&b) if block_given?
|
11
|
-
end
|
12
|
-
|
13
|
-
def method_missing(tag_name, ps={}, str=nil, &b)
|
14
|
-
|
15
|
-
if ps.is_a? String
|
16
|
-
str, ps = ps, {}
|
17
|
-
end
|
18
|
-
|
19
|
-
tag_name = tag_name.to_s
|
20
|
-
if VOID_TAGS.include? tag_name
|
21
|
-
content << void_tag(tag_name, ps)
|
22
|
-
else
|
23
|
-
content << tag_open(tag_name, ps)
|
24
|
-
@indent += 1
|
25
|
-
if str
|
26
|
-
content << str << "\n"
|
27
|
-
elsif block_given?
|
28
|
-
ret = instance_eval &b
|
29
|
-
content << ret.to_s << "\n" unless ret.is_a?(self.class)
|
30
|
-
end
|
31
|
-
@indent -= 1
|
32
|
-
self.content << tag_close(tag_name)
|
33
|
-
end
|
34
|
-
|
35
|
-
self
|
36
|
-
end
|
37
|
-
|
38
|
-
# conflict with global p method
|
39
|
-
def p(ps={}, &b)
|
40
|
-
method_missing("p", ps, &b)
|
41
|
-
end
|
42
|
-
|
43
|
-
def properties ps
|
44
|
-
ps.map { |p| "#{p[0].to_s.gsub("_", "-")}='#{p[1].to_s}'" }.join(' ')
|
45
|
-
end
|
46
|
-
|
47
|
-
def tag_open tag_name, ps={}
|
48
|
-
if ps.empty?
|
49
|
-
"#{INDENT * indent}<#{tag_name}>\n"
|
50
|
-
else
|
51
|
-
"#{INDENT * indent}<#{tag_name} #{properties ps}>\n"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def tag_close tag_name
|
56
|
-
"#{INDENT * indent}</#{tag_name}>\n"
|
57
|
-
end
|
58
|
-
|
59
|
-
def void_tag tag_name, ps={}
|
60
|
-
"#{INDENT * indent}<#{tag_name} #{properties ps}/>\n"
|
61
|
-
end
|
62
|
-
|
63
|
-
def to_s
|
64
|
-
content
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def html!(&b)
|
69
|
-
Html.new.html(&b)
|
70
|
-
end
|
1
|
+
require 'rhtml/version'
|
2
|
+
require 'rhtml/tag'
|
3
|
+
require 'rhtml/html'
|
4
|
+
require 'rhtml/shortcut'
|
data/lib/rhtml/html.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Rhtml
|
2
|
+
class Html
|
3
|
+
attr_accessor :content, :indent
|
4
|
+
|
5
|
+
def initialize(content='', indent=0, &b)
|
6
|
+
@indent = 0
|
7
|
+
@content = content
|
8
|
+
@content << instance_eval(&b) if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
def tag!(tag_name, ps={}, str=nil, &b)
|
12
|
+
str, ps = ps, {} if ps.is_a? String
|
13
|
+
content << Rhtml.tag_open(tag_name, ps, indent)
|
14
|
+
@indent += 1
|
15
|
+
if str
|
16
|
+
content << INDENT * indent << str << "\n"
|
17
|
+
elsif block_given?
|
18
|
+
ret = instance_eval &b
|
19
|
+
content << INDENT * indent << ret.to_s << "\n" if ret.is_a?(String)
|
20
|
+
end
|
21
|
+
@indent -= 1
|
22
|
+
self.content << Rhtml.tag_close(tag_name, indent)
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def void_tag!(tag_name, ps={})
|
27
|
+
content << Rhtml.void_tag(tag_name, ps, indent)
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
TAGS.each do |m|
|
32
|
+
if VOID_TAGS.include? m
|
33
|
+
define_method(m.to_sym) do |ps={}|
|
34
|
+
void_tag!(m, ps)
|
35
|
+
end
|
36
|
+
else
|
37
|
+
define_method(m.to_sym) do |ps={}, str=nil, &b|
|
38
|
+
tag!(m, ps, str, &b)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def raw! string=''
|
44
|
+
@content << string.to_s << "\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_s
|
48
|
+
content
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/rhtml/tag.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Rhtml
|
2
|
+
|
3
|
+
INDENT = ' '
|
4
|
+
|
5
|
+
VOID_TAGS = %w{area base br col command embed hr img input keygen link meta param source track wbr}
|
6
|
+
|
7
|
+
TAGS = %w{a abbr acronym address applet area article aside audio b base basefont bdi
|
8
|
+
bdo big blockquote body br canvas caption center cite code col colgroup command
|
9
|
+
datalist dd del details dfn dialog dir div dl dt em embed fieldset figcaption
|
10
|
+
figure font footer form frame frameset h1 head header hgroup hr html i iframe
|
11
|
+
img input ins kbd keygen label legend li link map mark menu meta meter nav noframes
|
12
|
+
noscript object ol optgroup option output p param pre progress q rp rt ruby s samp
|
13
|
+
script section select small source span strike strong style sub summary sup table tbody
|
14
|
+
td textarea tfoot th thead time title tr track tt u ul var video wbr}
|
15
|
+
|
16
|
+
def Rhtml.properties ps
|
17
|
+
ps.map { |p| "#{p[0].to_s.gsub("_", "-")}='#{p[1].to_s}'" }.join(' ')
|
18
|
+
end
|
19
|
+
|
20
|
+
def Rhtml.void_tag tag_name, ps={}, indent
|
21
|
+
"#{INDENT * indent}<#{tag_name}#{' ' << properties(ps) unless ps.empty?}/>\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def Rhtml.tag_open tag_name, ps={}, indent
|
25
|
+
"#{INDENT * indent}<#{tag_name}#{' ' << properties(ps) unless ps.empty?}>\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
def Rhtml.tag_close tag_name, indent
|
29
|
+
"#{INDENT * indent}</#{tag_name}>\n"
|
30
|
+
end
|
31
|
+
end
|
data/lib/rhtml/version.rb
CHANGED
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhtml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- wenjun.yan
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-29 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -51,30 +56,35 @@ files:
|
|
51
56
|
- README.md
|
52
57
|
- Rakefile
|
53
58
|
- lib/rhtml.rb
|
59
|
+
- lib/rhtml/html.rb
|
60
|
+
- lib/rhtml/shortcut.rb
|
61
|
+
- lib/rhtml/tag.rb
|
54
62
|
- lib/rhtml/version.rb
|
55
63
|
- rhtml.gemspec
|
56
64
|
homepage: https://github.com/v2e4lisp/rhtml
|
57
65
|
licenses:
|
58
66
|
- MIT
|
59
|
-
metadata: {}
|
60
67
|
post_install_message:
|
61
68
|
rdoc_options: []
|
62
69
|
require_paths:
|
63
70
|
- lib
|
64
71
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
65
73
|
requirements:
|
66
74
|
- - ! '>='
|
67
75
|
- !ruby/object:Gem::Version
|
68
76
|
version: '0'
|
69
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
70
79
|
requirements:
|
71
80
|
- - ! '>='
|
72
81
|
- !ruby/object:Gem::Version
|
73
82
|
version: '0'
|
74
83
|
requirements: []
|
75
84
|
rubyforge_project:
|
76
|
-
rubygems_version:
|
85
|
+
rubygems_version: 1.8.25
|
77
86
|
signing_key:
|
78
|
-
specification_version:
|
87
|
+
specification_version: 3
|
79
88
|
summary: writing html in ruby not inserting them in a template...
|
80
89
|
test_files: []
|
90
|
+
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
NGVhMzMzZDg1M2ZiYTQyMjE5NWY5OWVkZWU5YTE0NDcxMTkyY2I3Zg==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NmYzMmI1ZGJiMWI3YzVhZWU0ZWEwZWRiMTVhNGNmMTBhYjc0ZjRiMw==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
MDQ4MmM4NmFlZDY0MGQzNjEyZjQ1ZTNjMDViMGI1NTI4NzdhOWIyNjUxNWE4
|
10
|
-
MTYzMGMzYzFiZThmZjM4MjE5M2E1Y2NlZDIxNzQxMWZkMGY1MmI5ZmQxMjE3
|
11
|
-
M2U0YzFkNGYzYWMzZGYwMThiY2VmYjg4Y2NiNzgzNTFjZWVmZGI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NjdjYWYyNDVmNDQ3ZjhmNmJmNTBlNWI3NWU4MWJkNTkzNjM3Zjk2NjZmMTk3
|
14
|
-
YmY4ZWE4NGM5MjdiMjgzZjA5ZDhhZTNmM2Q2NzAwZjEyMDlhYzc5Zjk5ZWFm
|
15
|
-
MjJhZDlmZDUwMDUyYWQwOTRhNDVmMzc3YjhmMGViNmJjYjdiMzk=
|