rubified 0.1.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.
- data/lib/ext/object.rb +5 -0
- data/lib/rubified/canvas.rb +43 -0
- data/lib/rubified/tag.rb +38 -0
- data/lib/rubified/tags.rb +19 -0
- data/lib/rubified.rb +6 -0
- metadata +61 -0
data/lib/ext/object.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Rubified
|
2
|
+
# Used to shorten the creation of tags; just include or extend this module to use it.
|
3
|
+
# A small HTML page without Canvas:
|
4
|
+
# Rubified::Tag::Html.new.to_html {
|
5
|
+
# Rubified::Tag::Head.new.to_html {
|
6
|
+
# Rubified::Tag::Title.new.to_html {"Generated with Rubified"}
|
7
|
+
# }
|
8
|
+
# Rubified::Tag::Body.new.to_html {
|
9
|
+
# Rubified::Tag::Div.new({:id=>"foo", :class=>"bar"}) {"Hello world!"}
|
10
|
+
# }
|
11
|
+
# }
|
12
|
+
#
|
13
|
+
# Instead you can use:
|
14
|
+
# include Rubifed::Canvas
|
15
|
+
# html {
|
16
|
+
# head {
|
17
|
+
# title {"Generated with Rubified"}
|
18
|
+
# }
|
19
|
+
# body {
|
20
|
+
# div({id=>"foo", :class=>"bar"})
|
21
|
+
# }
|
22
|
+
# }
|
23
|
+
# True, one more line (the include), but a LOT less repetitious and more readable.
|
24
|
+
# Both of these will produce:
|
25
|
+
# <html>
|
26
|
+
# <head>
|
27
|
+
# <title>Generated with Rubified</title>
|
28
|
+
# </head>
|
29
|
+
# <body>
|
30
|
+
# <div id=>"foo" class=>"bar">Hello world!</div>
|
31
|
+
# </body>
|
32
|
+
# </html
|
33
|
+
module Canvas
|
34
|
+
def self.add_tag_method(tclass)
|
35
|
+
define_method(tclass.to_s.split("::").last.downcase) do |params={}, &block|
|
36
|
+
# Figure out what class to use by the method name.
|
37
|
+
tagclass = Rubified::Tag.const_get((__method__).capitalize)
|
38
|
+
# Create a new tag then run it
|
39
|
+
tagclass.new(params).to_html(&block)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/rubified/tag.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
class Rubified::Tag
|
2
|
+
# Create and returns a new tag class with the name +name+. To create a tag that
|
3
|
+
# does NOT use a matched pair, set paired to false. Tags like <img> need this.
|
4
|
+
def self.new_tag(name, paired=true)
|
5
|
+
# Store the new tag's name in a constant; the block to create the new class
|
6
|
+
# won't keep local variables. A bit of a cheat
|
7
|
+
const_set(:Name, name)
|
8
|
+
newbie = Class.new(self)
|
9
|
+
remove_const(:Name)
|
10
|
+
const_set(name.capitalize, newbie)
|
11
|
+
newbie.const_set(:Paired, paired)
|
12
|
+
newbie
|
13
|
+
end
|
14
|
+
|
15
|
+
# The arguments to this method is a hash key of the parameters to the HTML tag.
|
16
|
+
def initialize(params={})
|
17
|
+
# The name of the tag, e.g. font
|
18
|
+
@tname = self.class.to_s.split("::").last.downcase
|
19
|
+
# Any parameters of this tag, e.g. if you have the HTML tag:
|
20
|
+
# <div id="foo" class="bar">
|
21
|
+
# then the parameters would be +id+ and +class+.
|
22
|
+
@params = params
|
23
|
+
end
|
24
|
+
|
25
|
+
# Dumps this tag to an HTML string.
|
26
|
+
def to_html
|
27
|
+
pstring = ""
|
28
|
+
@params.each {|key, val| pstring << " #{key}=\"#{val}\""}
|
29
|
+
result = "<#{@tname}#{pstring}>"
|
30
|
+
if block_given?
|
31
|
+
result << yield.to_html
|
32
|
+
end
|
33
|
+
if self.class::Paired
|
34
|
+
result << "</#{@tname}>"
|
35
|
+
end
|
36
|
+
result
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Pre-load a small list of HTML tags.
|
2
|
+
tags = {
|
3
|
+
:html=>true,
|
4
|
+
:head=>true,
|
5
|
+
:body=>true,
|
6
|
+
:p=>true,
|
7
|
+
:div=>true,
|
8
|
+
:span=>true,
|
9
|
+
:font=>true,
|
10
|
+
:b=>true,
|
11
|
+
:i=>true,
|
12
|
+
:tt=>true,
|
13
|
+
|
14
|
+
:img=>false
|
15
|
+
}
|
16
|
+
|
17
|
+
tags.each {|tag, paired|
|
18
|
+
Rubified::Tag.new_tag(tag, paired)
|
19
|
+
}
|
data/lib/rubified.rb
ADDED
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubified
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- J. Wostenberg
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2012-02-09 00:00:00 -07:00
|
14
|
+
default_executable:
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: Generate XML or HTML documents using only Ruby without having to worry about syntax.
|
18
|
+
email:
|
19
|
+
executables: []
|
20
|
+
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files: []
|
24
|
+
|
25
|
+
files:
|
26
|
+
- lib/rubified/tag.rb
|
27
|
+
- lib/rubified/tags.rb
|
28
|
+
- lib/rubified/canvas.rb
|
29
|
+
- lib/rubified.rb
|
30
|
+
- lib/ext/object.rb
|
31
|
+
has_rdoc: true
|
32
|
+
homepage: http://github.com/awostenberg/Rubified
|
33
|
+
licenses: []
|
34
|
+
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
requirements: []
|
54
|
+
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 1.6.2
|
57
|
+
signing_key:
|
58
|
+
specification_version: 3
|
59
|
+
summary: Create XML or HTML pages using only Ruby.
|
60
|
+
test_files: []
|
61
|
+
|