html_rb 1.0.0 → 2.0.0
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 +5 -5
- data/lib/html_rb.rb +9 -75
- data/lib/html_rb/constants.rb +3 -1
- data/lib/html_rb/tag.rb +76 -0
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ae6b4e2173e7362e79f1bf874e6a7090b70e015a4e2fd26c5fe423004b578c7c
|
4
|
+
data.tar.gz: 802669903c2e3b34fd87f7f32dc64b7dd66b4f3ced64f975afaad3791bdfd073
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4e2292acfa4c0a264e2835bc886a7cd03201ddfe33ed3d6b2cd3a65981af6d470ebd459aaba90390d39815de807ed92640d9f0d5d8b8ca382c45897168f8fca
|
7
|
+
data.tar.gz: df9a847a624f75eed9f7efa4d61a24b750b141e59f804552d9c50264d617e2d40895fd913199886751d474267ef59c497a2202747f942ef7b844c4eb4a5c56cf
|
data/lib/html_rb.rb
CHANGED
@@ -1,83 +1,17 @@
|
|
1
|
-
require 'html_rb/constants'
|
2
|
-
|
3
1
|
module HtmlRB
|
4
|
-
VERSION = "
|
5
|
-
|
2
|
+
VERSION = "2.0.0".freeze
|
6
3
|
Error = Class.new(StandardError)
|
4
|
+
end
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
@strings = []
|
11
|
-
build name, content, **attrs, &block
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
@strings.join
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
def build(name=nil,content=nil,**attrs,&block)
|
20
|
-
void = HtmlRB::VOID_ELEMENTS.include?(name)
|
21
|
-
raise HtmlRB::Error, "May not provide both content and block" if content && block_given?
|
22
|
-
raise HtmlRB::Error, "Void elements cannot enclose content" if void && (content || block_given?)
|
23
|
-
|
24
|
-
@strings << "<#{[name,attribute_string(attrs)].join(" ").strip}>" if name
|
25
|
-
unless void
|
26
|
-
@strings << content if content
|
27
|
-
instance_eval(&block) if block_given?
|
28
|
-
@strings << "</#{name}>" if name
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# Define all the tag methods
|
33
|
-
(HtmlRB::STD_ELEMENTS + HtmlRB::VOID_ELEMENTS).each do |el|
|
34
|
-
define_method(el) do |content=nil,**attrs,&block|
|
35
|
-
build el, content, **attrs, &block
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# Used for Text Nodes
|
40
|
-
def text(content)
|
41
|
-
build nil, content
|
42
|
-
end
|
43
|
-
|
44
|
-
# ATTRIBUTE HANDLING
|
45
|
-
def attribute_string(hash={})
|
46
|
-
hash.delete_if{|k,v| v.nil? || v == "" }
|
47
|
-
.map{|k,v| attribute_pair(k,v) }
|
48
|
-
.compact
|
49
|
-
.join(" ")
|
50
|
-
end
|
51
|
-
|
52
|
-
def attribute_pair(k,v)
|
53
|
-
if HtmlRB::BOOL_ATTRS.include?(k)
|
54
|
-
attribute_key(k) if v
|
55
|
-
else
|
56
|
-
%Q|#{attribute_key(k)}="#{v}"|
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def attribute_key(k)
|
61
|
-
str = k.to_s
|
62
|
-
if str.start_with? "!"
|
63
|
-
str.slice!(0)
|
64
|
-
else
|
65
|
-
str.gsub!("_","-")
|
66
|
-
end
|
67
|
-
str
|
68
|
-
end
|
69
|
-
end
|
6
|
+
require 'html_rb/constants'
|
7
|
+
require 'html_rb/tag'
|
70
8
|
|
71
|
-
|
72
|
-
|
73
|
-
dt = ""
|
9
|
+
module HtmlRB
|
10
|
+
module_function def html(content=nil, document: false, **attrs, &block)
|
74
11
|
if document
|
75
|
-
|
76
|
-
|
12
|
+
"<!DOCTYPE html>" + Tag.new('html', content, **attrs, &block).to_s
|
13
|
+
else
|
14
|
+
Tag.new(nil, content, **attrs, &block).to_s
|
77
15
|
end
|
78
|
-
dt + Tag.new(name, content, **attrs, &block).to_s
|
79
16
|
end
|
80
|
-
|
81
|
-
alias_method :markup, :html
|
82
|
-
module_function :markup
|
83
17
|
end
|
data/lib/html_rb/constants.rb
CHANGED
data/lib/html_rb/tag.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module HtmlRB
|
2
|
+
class Tag
|
3
|
+
def initialize(name=nil,content=nil,**attrs,&block)
|
4
|
+
@strings = []
|
5
|
+
tag name, content, **attrs, &block
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_s
|
9
|
+
@strings.join
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.register(tag_name, void: false)
|
13
|
+
method_name = tag_name.to_s.downcase.gsub('-','_') # Rubify the tag name.
|
14
|
+
define_method(method_name) do |content=nil,**attrs,&block|
|
15
|
+
tag tag_name, content, _void: void, **attrs, &block
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.unregister(tag_name)
|
20
|
+
method_name = tag_name.to_s.downcase.gsub('-','_') # Rubify the tag name.
|
21
|
+
remove_method method_name
|
22
|
+
end
|
23
|
+
|
24
|
+
# Define all the tag methods
|
25
|
+
HtmlRB::STD_ELEMENTS.each {|tag_name| register tag_name }
|
26
|
+
HtmlRB::VOID_ELEMENTS.each {|tag_name| register tag_name, void: true }
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def tag(name=nil, content=nil, _void: false, **attrs, &block)
|
31
|
+
void = _void
|
32
|
+
raise HtmlRB::Error, "May not provide both content and block" if content && block_given?
|
33
|
+
raise HtmlRB::Error, "Void elements cannot enclose content" if void && (content || block_given?)
|
34
|
+
|
35
|
+
@strings << "<#{[name,attribute_string(attrs)].join(" ").strip}>" if name
|
36
|
+
|
37
|
+
return if void
|
38
|
+
|
39
|
+
@strings << content if content
|
40
|
+
instance_eval(&block) if block_given?
|
41
|
+
@strings << "</#{name}>" if name
|
42
|
+
end
|
43
|
+
|
44
|
+
# Used for Text Nodes
|
45
|
+
def text(content)
|
46
|
+
tag nil, content
|
47
|
+
end
|
48
|
+
|
49
|
+
# Really, text is just appending a string, so we can append anything.
|
50
|
+
# But saying `text` before some block of HTML stored in a variable feels
|
51
|
+
# wrong, so we'll add an alias `render` which feels less strange.
|
52
|
+
alias render text
|
53
|
+
|
54
|
+
# ATTRIBUTE HANDLING
|
55
|
+
def attribute_string(hash={})
|
56
|
+
hash.delete_if{|k,v| v.nil? || v == "" }
|
57
|
+
.map{|k,v| attribute_pair(k,v) }
|
58
|
+
.compact
|
59
|
+
.join(" ")
|
60
|
+
end
|
61
|
+
|
62
|
+
def attribute_pair(k,v)
|
63
|
+
if HtmlRB::BOOL_ATTRS.include?(k)
|
64
|
+
attribute_key(k) if v
|
65
|
+
else
|
66
|
+
%Q|#{attribute_key(k)}="#{v}"|
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def attribute_key(k)
|
71
|
+
return k if k.is_a?(String)
|
72
|
+
|
73
|
+
k.to_s.gsub("_","-")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Burleson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A beautifully simple DSL for writing HTML in ruby. Check out the readme
|
14
14
|
at github.com/burlesona/html_rb for detailed examples, or see the tests.
|
@@ -19,11 +19,12 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- lib/html_rb.rb
|
21
21
|
- lib/html_rb/constants.rb
|
22
|
+
- lib/html_rb/tag.rb
|
22
23
|
homepage: http://github.com/burlesona/html
|
23
24
|
licenses:
|
24
25
|
- MIT
|
25
26
|
metadata: {}
|
26
|
-
post_install_message:
|
27
|
+
post_install_message:
|
27
28
|
rdoc_options: []
|
28
29
|
require_paths:
|
29
30
|
- lib
|
@@ -31,17 +32,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
31
32
|
requirements:
|
32
33
|
- - ">="
|
33
34
|
- !ruby/object:Gem::Version
|
34
|
-
version: '2.
|
35
|
+
version: '2.7'
|
35
36
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
37
|
requirements:
|
37
38
|
- - ">="
|
38
39
|
- !ruby/object:Gem::Version
|
39
40
|
version: '0'
|
40
41
|
requirements: []
|
41
|
-
|
42
|
-
|
43
|
-
signing_key:
|
42
|
+
rubygems_version: 3.2.15
|
43
|
+
signing_key:
|
44
44
|
specification_version: 4
|
45
45
|
summary: A beautifully simple DSL for writing HTML in ruby
|
46
46
|
test_files: []
|
47
|
-
has_rdoc:
|