rbml 0.0.2 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,13 @@
1
+ == 0.0.5 / 2007-01-30
2
+ * base classes are more generic
3
+ * routing for different types of dsls
4
+ * cli framework implemented
5
+
6
+ == 0.0.2 / 2007-01-28
7
+
8
+ * load & require fixes
9
+ * added charset method to Xhtml
10
+
1
11
  == 0.0.1 / 2007-01-28
2
12
 
3
13
  * Rbml is born
@@ -3,19 +3,25 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  bin/rbml
6
- languages/base.rb
7
- languages/xhtml.rb
8
- languages/xml.rb
6
+ languages/cli/cli.rb
7
+ languages/doc/base.rb
8
+ languages/doc/xhtml.rb
9
+ languages/doc/xml.rb
10
+ examples/cli/happycli.rbml
11
+ examples/doc/_partial.rbml
12
+ examples/doc/sublist/_sublist.rbml
13
+ examples/doc/synopsis.rbml
14
+ examples/doc/test.rbml
15
+ examples/shell/centos_apache_2_2_3.rbml
16
+ lib/base.rb
17
+ lib/cli.rb
9
18
  lib/doc.rb
10
19
  lib/extensions/kernel.rb
11
20
  lib/extensions/string.rb
12
21
  lib/processor.rb
13
22
  lib/rbml.rb
23
+ lib/shell.rb
14
24
  spec/doc_spec.rb
15
- spec/fixtures/_partial.rbml
16
- spec/fixtures/sublist/_sublist.rbml
17
- spec/fixtures/synopsis.rbml
18
- spec/fixtures/test.rbml
19
25
  spec/object_spec.rb
20
26
  spec/rbml_spec.rb
21
27
  spec/spec_helper.rb
data/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- rbmlhoe
1
+ Rbml
2
2
  by Jake Howerton, Evan Short
3
3
  http://rbml.rubyforge.org
4
4
 
@@ -7,19 +7,25 @@ rbmlhoe
7
7
  Rbml is a dsl framework for outputting other languages (currently supports Xhtml, XML)
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
-
10
+
11
+ * can load rbml partials using +include+ method
11
12
  * XML support is totally untested since we don't need it
12
13
 
13
14
  == SYNOPSIS:
15
+
16
+ <tt>rbml path/to/file.rbml</tt>
17
+
18
+ file.rbml:
19
+
14
20
  xhtml :doctype => {:type=>:xhtml, :version=>"1.0", :strict=>false} do
15
- head do
16
- title "Sample Site"
17
- stylesheets :base, :links
18
- #COMMENTS DONT GET EVAL'd
19
- end
20
-
21
- body do
22
- textilize "*Header*"
21
+ head do
22
+ title "Sample Site"
23
+ stylesheets :base, :links
24
+ #COMMENTS DONT GET EVAL'd
25
+ end
26
+
27
+ body do
28
+ textilize "*Header*"
23
29
  div "this is our first html doc!"
24
30
  p "its really awesome"
25
31
  myvar = "withconcat"
@@ -27,28 +33,28 @@ Rbml is a dsl framework for outputting other languages (currently supports Xhtml
27
33
  inline "dot operator #{myvar}"
28
34
  span "nested span"
29
35
  end
30
- end
36
+ end
31
37
  end
32
38
 
33
39
  Outputs
34
40
 
35
41
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
36
- <html>
37
- <head>
38
- <title>Sample Site</title>
39
- <link href='/stylesheets/base.css' rel='stylesheet' type='text/css'/>
40
- <link href='/stylesheets/links.css' rel='stylesheet' type='text/css'/>
41
- </head>
42
- <body>
43
- <p>
44
- <strong>Header</strong>
45
- </p>
46
- <div>this is our first html doc!</div>
47
- <p>its really awesome</p>
48
- <p>dot operator withconcat<span>nested span</span>
49
- </p>
50
- </body>
51
- </html>
42
+ <html>
43
+ <head>
44
+ <title>Sample Site</title>
45
+ <link href='/stylesheets/base.css' rel='stylesheet' type='text/css'/>
46
+ <link href='/stylesheets/links.css' rel='stylesheet' type='text/css'/>
47
+ </head>
48
+ <body>
49
+ <p>
50
+ <strong>Header</strong>
51
+ </p>
52
+ <div>this is our first html doc!</div>
53
+ <p>its really awesome</p>
54
+ <p>dot operator withconcat<span>nested span</span>
55
+ </p>
56
+ </body>
57
+ </html>
52
58
 
53
59
  == REQUIREMENTS:
54
60
 
data/Rakefile CHANGED
@@ -4,12 +4,21 @@ require 'rubygems'
4
4
  require 'hoe'
5
5
  require './lib/rbml.rb'
6
6
 
7
+ RDOC_OPTS = ['--quiet', '--title', "Rbml documentation",
8
+ "--opname", "index.html",
9
+ "--line-numbers",
10
+ "--main", "README",
11
+ "--inline-source"]
12
+
7
13
  Hoe.new('rbml', Rbml::VERSION) do |p|
8
14
  p.rubyforge_name = 'rbml'
9
15
  p.summary = 'Rbml is a dsl framework for writing other languages in ruby'
10
16
  p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
11
17
  p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
12
18
  p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
19
+ p.rdoc_pattern = /^(lib|bin|languages)|txt$/
20
+ p.spec_extras = {:rdoc_options => '--inline-source'}
13
21
  end
14
22
 
23
+
15
24
  # vim: syntax=Ruby
@@ -0,0 +1,13 @@
1
+ cli :name=>"happycli", :prompt=>"happy> " do
2
+ set :unknown_command do
3
+ cliprint "my freakin command"
4
+ end
5
+
6
+ set :help do
7
+ cliprint "helpdocs"
8
+ end
9
+
10
+ set :quit do
11
+ exit
12
+ end
13
+ end
@@ -2,7 +2,7 @@ xhtml :doctype => {:type=>:xhtml, :version=>"1.0", :strict=>false} do
2
2
  head do
3
3
  title "Bridgewater Golf Club"
4
4
  stylesheets :base, :links, :membership, :contact
5
- # meta_tag "content-type", :content=>"text/html; charset=utf-8"
5
+ charset 'utf-8'
6
6
  end
7
7
 
8
8
  body do
@@ -11,7 +11,11 @@ xhtml :doctype => {:type=>:xhtml, :version=>"1.0", :strict=>false} do
11
11
  p "its really awesome"
12
12
  myvar = "withconcat"
13
13
  p do
14
- inline "dot operator #{myvar}"
14
+ if myvar != 'withconcat'
15
+ inline "dot operator #{myvar}"
16
+ else
17
+ inline 'this is in an if statement'
18
+ end
15
19
  span "nested span"
16
20
  end
17
21
  include "partial"
@@ -0,0 +1,30 @@
1
+ shell "building apache" do
2
+ download "http://apache.roweboat.net/httpd/httpd-2.2.3.tar.gz", :to => '~/src'
3
+ unpack 'httpd-2.2.3.tar.gz', :verbose=>true, :from => '~/src' do
4
+ configure :prefix => '/usr/local/apache2' ,
5
+ "enable-mods-shared" => "all",
6
+ "with-suexec-caller" => "apache",
7
+ "with-suexec-docroot"=>"/var/www",
8
+ "with-suexec-userdir"=>"httpdocs",
9
+ "with-suexec-bin"=>"/usr/local/apache2/bin/suexec",
10
+ :sbindir =>"/usr/local/apache2/sbin",
11
+ :options => ["enable-deflate", "enable-proxy", "enable-proxy-balancer",
12
+ "enable-fastcgi", "with-gettext", "enable-xml", "with-libxml", "enable-suexec"]
13
+
14
+ make
15
+ make :install
16
+ end
17
+ end
18
+
19
+ __END__
20
+ *Install apache*
21
+ curl -O http://apache.roweboat.net/httpd/httpd-2.2.3.tar.gz
22
+ tar xvzf httpd-2.2.3.tar.gz
23
+ cd httpd-2.2.3
24
+ ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-proxy \
25
+ --enable-proxy-balancer --enable-fastcgi --with-gettext --enable-xml --with-libxml --enable-suexec \
26
+ --with-suexec-caller=apache --with-suexec-docroot=/var/www --with-suexec-userdir=httpdocs \
27
+ --sbindir=/usr/local/apache2/sbin --with-suexec-bin=/usr/local/apache2/bin/suexec
28
+ make
29
+ make install
30
+ cd ..
@@ -0,0 +1,26 @@
1
+ module Rbml
2
+ module Language
3
+ module Cli
4
+ module Cli
5
+ DEFINITION = {"unknown_command" => lambda {puts "unkown command type 'help' for instructions"}}
6
+
7
+ def set(method, &proc)
8
+ DEFINITION.update({method.to_s => proc})
9
+ nil
10
+ end
11
+
12
+ def call(method)
13
+ begin
14
+ DEFINITION.fetch(method).call
15
+ rescue
16
+ DEFINITION.fetch("unknown_command").call
17
+ end
18
+ end
19
+
20
+ def cliprint(string)
21
+ string
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ module Rbml
2
+ module Language
3
+ module Doc
4
+ module Base
5
+ def find_partial(str)
6
+ arr = str.split("/")
7
+ arr.last[0,0] = "_"
8
+ filename = ($template_dir + '/' + arr.join("/") + '.rbml')
9
+ __instance_eval__ File.read(filename)
10
+ end
11
+
12
+ def format(doc)
13
+ "Please define a method for format in your library"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,63 @@
1
+ require 'languages/doc/xml'
2
+ require 'rubygems'
3
+ require 'redcloth'
4
+ require 'rexml/document'
5
+
6
+ module Rbml
7
+ module Language
8
+ module Doc
9
+ module Xhtml
10
+ include Xml
11
+ ::Kernel.send(:undef_method, :p)
12
+
13
+ def tags; %w(body title head p div ul li html a br span)end
14
+
15
+ def stylesheets *sheets
16
+ all_sheets = ''
17
+ sheets.each {|sheet| all_sheets << stylesheet(sheet)}
18
+ all_sheets
19
+ end
20
+
21
+ def stylesheet what
22
+ "<link rel='stylesheet' href='/stylesheets/#{what}.css' type='text/css' />"
23
+ end
24
+
25
+ def doctype(options)
26
+ strictness = options[:strict] ? "Strict" : "Transitional"
27
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 #{strictness}//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-#{strictness.downcase}.dtd\">"
28
+ end
29
+
30
+ def charset(encoding)
31
+ "<meta http-equiv='Content-Type' content='text/html; charset=#{encoding}' />"
32
+ end
33
+
34
+ def start_tag(*options)
35
+ "#{doctype options.first}<html>"
36
+ end
37
+
38
+ def end_tag *options
39
+ "</html>"
40
+ end
41
+
42
+ def include(str)
43
+ find_partial(str)
44
+ end
45
+
46
+ def format(doc)
47
+ fdoc = REXML::Document.new doc.assemble_doc
48
+ fdoc.write doc.formatted_doc, 1
49
+ end
50
+
51
+ def textilize(str)
52
+ RedCloth.new(str).to_html
53
+ end
54
+
55
+ def method_missing(method, *args, &blk)
56
+ if tags.include? method.to_s
57
+ print_tag(method.to_s, args, &blk)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,39 @@
1
+ require 'languages/doc/base'
2
+
3
+ module Rbml
4
+ module Language
5
+ module Doc
6
+ module Xml
7
+ include Base
8
+ def tags;[]end
9
+ def inline what; what end
10
+
11
+ alias :i :inline
12
+
13
+ def method_missing(method, *args, &blk)
14
+ print_tag(method.to_s, args, &blk)
15
+ end
16
+
17
+ def print_tag(tag, *args, &blk)
18
+ options = {}
19
+ content = ''
20
+ args.flatten.each do |a|
21
+ content = a if a.kind_of? String
22
+ options.merge! a if a.kind_of? Hash
23
+ end
24
+
25
+ attributes = ' '
26
+ options.each{|k, v| attributes << "#{k}='#{v}' "} if options.kind_of? Hash
27
+
28
+ if block_given?
29
+ ["<#{tag}#{attributes unless attributes.blank?}>", blk, "</#{tag}>"]
30
+ elsif !content.blank?
31
+ "<#{tag}#{attributes unless attributes.blank?}>#{content}</#{tag}>"
32
+ else
33
+ "<#{tag}#{attributes unless attributes.blank?} />"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ module Rbml
2
+ class Base
3
+ attr_accessor :dsl
4
+
5
+ def initialize(language=nil)
6
+ @dsl = BlankSlate.new(language)
7
+ end
8
+
9
+ def instance_eval_each(code, &blk)
10
+ $whiner = ::Kernel::BlockBreaker.new do |name, args, block|
11
+ yield @dsl.__send__(name, *args, &block)
12
+ end
13
+ $whiner.__instance_eval__ &code
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ module Rbml
2
+ class Cli < Base
3
+ def self.render(language, options, &block)
4
+ d = Cli.new(language)
5
+ display = lambda do |result|
6
+ puts "#{result}\n" unless result.nil?
7
+ end
8
+ loop do
9
+ begin
10
+ printf options[:prompt]
11
+ d.instance_eval_each(block, &display)
12
+ obj = IO.new(0, "w+")
13
+ d.dsl.__send__("call", obj.gets.chomp)
14
+ rescue Interrupt
15
+ puts " Exiting #{options[:name]}..."
16
+ break
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
data/lib/doc.rb CHANGED
@@ -1,20 +1,10 @@
1
+ require "base"
2
+
1
3
  module Rbml
2
- class Doc
3
- attr_accessor :dsl
4
+ class Doc < Base
4
5
  attr_accessor :assemble_doc
5
6
  attr_accessor :formatted_doc
6
7
 
7
- def initialize(language=nil)
8
- @dsl = BlankSlate.new(language)
9
- end
10
-
11
- def instance_eval_each(code, &blk)
12
- $whiner = ::Kernel::BlockBreaker.new do |name, args, block|
13
- yield @dsl.__send__(name, *args, &block)
14
- end
15
- $whiner.__instance_eval__ &code
16
- end
17
-
18
8
  def self.render(language, options, &block)
19
9
  d = Doc.new(language)
20
10
  d.assemble_doc = ""
@@ -28,8 +18,6 @@ module Rbml
28
18
  d.assemble_doc << d.dsl.start_tag(options)
29
19
  d.instance_eval_each(block, &display)
30
20
  d.assemble_doc << d.dsl.end_tag
31
-
32
-
33
21
  d.formatted_doc = ''
34
22
  begin
35
23
  d.format
@@ -39,9 +27,7 @@ module Rbml
39
27
  end
40
28
 
41
29
  def format
42
- require 'rexml/document'
43
- doc = REXML::Document.new assemble_doc
44
- doc.write formatted_doc, 1
30
+ dsl.format(self)
45
31
  end
46
32
 
47
33
  def print
@@ -1,17 +1,32 @@
1
1
  module Kernel
2
- def render_doc(options, &block)
3
- require "languages/#{method_name}"
4
- language = method_name.to_m
5
- Rbml::Doc.render(language, options, &block)
2
+
3
+ ROUTES = {:xhtml => "Doc",
4
+ :cli => "Cli",
5
+ :shell => "Shell"}
6
+
7
+ def route_for(name)
8
+ ROUTES.fetch(name)
9
+ end
10
+
11
+ def spawn(options, &block)
12
+ require "languages/#{route_for(method_name.to_sym).downcase}/#{method_name}"
13
+ language = "Language::#{route_for(method_name.to_sym)}::#{method_name.camelize}".to_m
14
+ Rbml.const_get(route_for(method_name.to_sym)).render(language, options, &block)
6
15
  end
7
- undef p
8
- alias :xhtml :render_doc
16
+
17
+ ROUTES.each_key do |k|
18
+ alias_method k, :spawn
19
+ end
20
+
9
21
  def method_name; caller[0][/`([^']*)'/, 1]; end
10
22
 
11
- class BlankSlate
23
+ class BlankSlate #:nodoc:
12
24
  alias :__instance_eval__ :instance_eval
13
25
  alias :__extend__ :extend
14
26
  alias :__respond_to? :respond_to?
27
+ alias :__send__ :send
28
+ alias :__instance_variable_get :instance_variable_get
29
+ alias :__instance_variable_set :instance_variable_set
15
30
 
16
31
  instance_methods.each {|m| undef_method m unless m =~ /^__/ }
17
32
 
@@ -20,8 +35,7 @@ module Kernel
20
35
  end
21
36
  end
22
37
 
23
- class BlockBreaker < BlankSlate
24
-
38
+ class BlockBreaker < BlankSlate #:nodoc:
25
39
  def initialize(&block)
26
40
  if block_given?
27
41
  @handler = block
@@ -35,6 +49,7 @@ module Kernel
35
49
  end
36
50
  end
37
51
 
38
- class NoBlockGiven < StandardError; end
52
+ class NoBlockGiven < StandardError #:nodoc:
53
+ end
39
54
  end
40
55
 
@@ -4,7 +4,11 @@ class String
4
4
  end
5
5
 
6
6
  def to_m
7
- module_name = self[0,1].upcase + self[1, self.length]
8
- Rbml.const_get(module_name)
7
+ self.split("::").inject(Rbml) { |injection, element| injection.const_get(element) }
8
+ end
9
+
10
+ #TODO: not really camelize
11
+ def camelize
12
+ self[0,1].upcase + self[1, self.length]
9
13
  end
10
14
  end
@@ -1,8 +1,11 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
2
+
2
3
  module Rbml
3
- VERSION = '0.0.2'
4
+ VERSION = '0.0.5'
4
5
  end
5
6
  require 'extensions/kernel'
6
7
  require 'extensions/string'
8
+ require 'base'
7
9
  require 'doc'
8
- require 'processor'
10
+ require 'cli'
11
+ require 'processor'
@@ -0,0 +1,4 @@
1
+ module Rbml
2
+ class Shell < Base
3
+ end
4
+ end
metadata CHANGED
@@ -3,15 +3,15 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: rbml
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.2
7
- date: 2007-01-29 00:00:00 -05:00
6
+ version: 0.0.5
7
+ date: 2007-01-30 00:00:00 -05:00
8
8
  summary: Rbml is a dsl framework for writing other languages in ruby
9
9
  require_paths:
10
10
  - lib
11
11
  email: ryand-ruby@zenspider.com
12
12
  homepage: " by Jake Howerton, Evan Short"
13
13
  rubyforge_project: rbml
14
- description: "== FEATURES/PROBLEMS: * XML support is totally untested since we don't need it == SYNOPSIS: xhtml :doctype => {:type=>:xhtml, :version=>\"1.0\", :strict=>false} do head do title \"Sample Site\" stylesheets :base, :links #COMMENTS DONT GET EVAL'd end body do textilize \"*Header*\" div \"this is our first html doc!\" p \"its really awesome\" myvar = \"withconcat\" p do inline \"dot operator #{myvar}\" span \"nested span\" end end end Outputs"
14
+ description: "== FEATURES/PROBLEMS: * can load rbml partials using +include+ method * XML support is totally untested since we don't need it == SYNOPSIS: <tt>rbml path/to/file.rbml</tt>"
15
15
  autorequire:
16
16
  default_executable:
17
17
  bindir: bin
@@ -33,26 +33,32 @@ files:
33
33
  - README.txt
34
34
  - Rakefile
35
35
  - bin/rbml
36
- - languages/base.rb
37
- - languages/xhtml.rb
38
- - languages/xml.rb
36
+ - languages/cli/cli.rb
37
+ - languages/doc/base.rb
38
+ - languages/doc/xhtml.rb
39
+ - languages/doc/xml.rb
40
+ - examples/cli/happycli.rbml
41
+ - examples/doc/_partial.rbml
42
+ - examples/doc/sublist/_sublist.rbml
43
+ - examples/doc/synopsis.rbml
44
+ - examples/doc/test.rbml
45
+ - examples/shell/centos_apache_2_2_3.rbml
46
+ - lib/base.rb
47
+ - lib/cli.rb
39
48
  - lib/doc.rb
40
49
  - lib/extensions/kernel.rb
41
50
  - lib/extensions/string.rb
42
51
  - lib/processor.rb
43
52
  - lib/rbml.rb
53
+ - lib/shell.rb
44
54
  - spec/doc_spec.rb
45
- - spec/fixtures/_partial.rbml
46
- - spec/fixtures/sublist/_sublist.rbml
47
- - spec/fixtures/synopsis.rbml
48
- - spec/fixtures/test.rbml
49
55
  - spec/object_spec.rb
50
56
  - spec/rbml_spec.rb
51
57
  - spec/spec_helper.rb
52
58
  test_files: []
53
59
 
54
- rdoc_options: []
55
-
60
+ rdoc_options:
61
+ - --inline-source
56
62
  extra_rdoc_files: []
57
63
 
58
64
  executables:
@@ -1,10 +0,0 @@
1
- module Rbml
2
- module Base
3
- def find_partial(str)
4
- arr = str.split("/")
5
- arr.last[0,0] = "_"
6
- filename = ($template_dir + '/' + arr.join("/") + '.rbml')
7
- __instance_eval__ File.read(filename)
8
- end
9
- end
10
- end
@@ -1,47 +0,0 @@
1
- require 'languages/xml'
2
- require 'redcloth'
3
-
4
- module Rbml
5
- module Xhtml
6
- include Xml
7
-
8
- def tags; ['body', 'title', 'head', 'p', 'div', 'ul', 'li', 'html', 'a', 'br', 'span']end
9
-
10
- def stylesheets *sheets
11
- all_sheets = ''
12
- sheets.each {|sheet| all_sheets << stylesheet(sheet)}
13
- all_sheets
14
- end
15
-
16
- def stylesheet what
17
- "<link rel='stylesheet' href='/stylesheets/#{what}.css' type='text/css' />"
18
- end
19
-
20
- def doctype(options)
21
- strictness = options[:strict] ? "Strict" : "Transitional"
22
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 #{strictness}//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-#{strictness.downcase}.dtd\">"
23
- end
24
-
25
- def start_tag(*options)
26
- "#{doctype options.first}<html>"
27
- end
28
-
29
- def end_tag *options
30
- "</html>"
31
- end
32
-
33
- def include(str)
34
- find_partial(str)
35
- end
36
-
37
- def textilize(str)
38
- RedCloth.new(str).to_html
39
- end
40
-
41
- def method_missing(method, *args, &blk)
42
- if tags.include? method.to_s
43
- print_tag(method.to_s, args, &blk)
44
- end
45
- end
46
- end
47
- end
@@ -1,35 +0,0 @@
1
- require 'languages/base'
2
-
3
- module Rbml
4
- module Xml
5
- include Base
6
- def tags;[]end
7
- def inline what; what end
8
-
9
- alias :i :inline
10
-
11
- def method_missing(method, *args, &blk)
12
- print_tag(method.to_s, args, &blk)
13
- end
14
-
15
- def print_tag(tag, *args, &blk)
16
- options = {}
17
- content = ''
18
- args.flatten.each do |a|
19
- content = a if a.kind_of? String
20
- options.merge! a if a.kind_of? Hash
21
- end
22
-
23
- attributes = ' '
24
- options.each{|k, v| attributes << "#{k}='#{v}' "} if options.kind_of? Hash
25
-
26
- if block_given?
27
- ["<#{tag}#{attributes unless attributes.blank?}>", blk, "</#{tag}>"]
28
- elsif !content.blank?
29
- "<#{tag}#{attributes unless attributes.blank?}>#{content}</#{tag}>"
30
- else
31
- "<#{tag}#{attributes unless attributes.blank?} />"
32
- end
33
- end
34
- end
35
- end