hir 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.
- data/lib/hir.rb +75 -0
- metadata +62 -0
data/lib/hir.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
class Hash
|
2
|
+
def to_html_attrs
|
3
|
+
map { |k, v| " #{k}='#{v}'" }.join
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class HIR
|
8
|
+
VERSION = "0.1.0"
|
9
|
+
|
10
|
+
module HTMLTags
|
11
|
+
|
12
|
+
def self.declare_tag(tagname)
|
13
|
+
define_method(tagname, ->(*args, &block) { tag(tagname, *args, &block) })
|
14
|
+
define_method("#{tagname}!", ->(*args, &block) { tag_sc(tagname, *args) })
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.declare_tags(*tagnames)
|
18
|
+
tagnames.each { |tagname| declare_tag(tagname) }
|
19
|
+
end
|
20
|
+
|
21
|
+
declare_tags *%w[
|
22
|
+
a abbr acronym address applet area article aside audio b base basefont
|
23
|
+
bdi bdo big blockquote body br button canvas caption center cite code
|
24
|
+
col colgroup command datalist dd del details dfn dir div dl dt em embed
|
25
|
+
fieldset figcaption figure font footer form frame frameset h1 head
|
26
|
+
header hgroup hr html i iframe img input ins keygen kbd label legend li
|
27
|
+
link map mark menu meta meter nav noframes noscript object ol optgroup
|
28
|
+
option output p param pre progress q rp rt ruby s samp script section
|
29
|
+
select small source span strike strong style sub summary sup table tbody
|
30
|
+
td textarea tfoot th thead time title tr track tt u ul var video wbr ]
|
31
|
+
|
32
|
+
def doctype!
|
33
|
+
handle_output "<!DOCTYPE html>\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
def comment(content)
|
37
|
+
handle_output "<!-- #{content} -->"
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def tag(tagname, content = "", options = {}, &children)
|
43
|
+
handle_output "<#{tagname}#{options.to_html_attrs}>#{content}" \
|
44
|
+
"#{HIR.to_html(&children) if block_given?}</#{tagname}>"
|
45
|
+
end
|
46
|
+
|
47
|
+
# self-closing tag
|
48
|
+
def tag_sc(tagname, options = {})
|
49
|
+
handle_output "<#{tagname}#{options.to_html_attrs}/>"
|
50
|
+
end
|
51
|
+
|
52
|
+
def handle_output(output)
|
53
|
+
self.class.eql?(HIR) ? (@tags << output).join : output
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.to_html(&content)
|
59
|
+
HIR.new.instance_eval(&content).to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
include HTMLTags
|
63
|
+
|
64
|
+
def initialize
|
65
|
+
@tags = []
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_s
|
69
|
+
@tags.join
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def hir(&content)
|
74
|
+
HIR.to_html(&content)
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hir
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jack Willis
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.9'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.9'
|
30
|
+
description: ! 'hir: HTML in Ruby'
|
31
|
+
email:
|
32
|
+
- jcwillis.school@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- lib/hir.rb
|
38
|
+
homepage: http://github.com/jacksonwillis/hir
|
39
|
+
licenses: []
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 1.8.23
|
59
|
+
signing_key:
|
60
|
+
specification_version: 3
|
61
|
+
summary: Write HTML as Ruby blocks
|
62
|
+
test_files: []
|