Sha256: 3f1cee43a5f16596569fbf93df24e18b8078cab6328f21be699d0555b2044c7f
Contents?: true
Size: 1.51 KB
Versions: 1
Compression:
Stored size: 1.51 KB
Contents
require 'fragment/version' class Fragment attr_accessor :to_s def self.create(&block); self.new(&block).to_s; end # create_here is kept for backward compatibility def self.create_here(&block); self.new(&block).to_s; end def initialize outer_scope=false, &block # outer_scope argument is kept for backward compatibility # but it is not used # checking is simpler with arity instead @to_s = "" return self unless block_given? if block.arity==0 instance_eval(&block) else block.call(self) end self end def method_missing(meth, args={}, &block); tag(meth, args, &block); end def tag name, attributes={} @to_s << "<#{name}" if attributes.kind_of?(String) @to_s << ' ' << attributes else @to_s << attributes.delete_if{|k,v| v.nil? or v==false }.map{|(k,v)| " #{k}='#{_fragment_escape_html(v)}'" }.join end if block_given? @to_s << ">" text = yield @to_s << text.to_str if text != @to_s and text.respond_to?(:to_str) @to_s << "</#{name}>" else @to_s << ' />' end end # Override Kernel methods def p(args={}, &block); tag(:p, args, &block); end def select(args={}, &block); tag(:select, args, &block); end # Helpers def write(s=''); @to_s << s; end def doctype; write "<!DOCTYPE html>\n"; end def comment(s=''); write "\n<!-- #{s} -->\n"; end def _fragment_escape_html(s) s.to_s.gsub(/&/, '&').gsub(/"/, '"').gsub(/'/, ''').gsub(/</, '<').gsub(/>/, '>') end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
fragment-1.1.0 | lib/fragment.rb |