nitro 0.20.0 → 0.21.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/CHANGELOG +752 -543
- data/INSTALL +38 -38
- data/README +264 -225
- data/Rakefile +48 -49
- data/bin/nitro +3 -3
- data/bin/nitrogen +6 -6
- data/doc/AUTHORS +10 -10
- data/doc/CHANGELOG.1 +1939 -1939
- data/doc/CHANGELOG.2 +954 -954
- data/doc/LICENSE +3 -3
- data/doc/MIGRATION +28 -0
- data/doc/RELEASES +814 -643
- data/doc/config.txt +5 -5
- data/install.rb +7 -17
- data/lib/nitro.rb +38 -9
- data/lib/nitro/adapter/cgi.rb +311 -312
- data/lib/nitro/adapter/fastcgi.rb +18 -25
- data/lib/nitro/adapter/webrick.rb +128 -137
- data/lib/nitro/adapter/wee.rb +51 -0
- data/lib/nitro/caching.rb +20 -20
- data/lib/nitro/caching/actions.rb +43 -43
- data/lib/nitro/caching/fragments.rb +46 -46
- data/lib/nitro/caching/invalidation.rb +11 -11
- data/lib/nitro/caching/output.rb +65 -65
- data/lib/nitro/caching/stores.rb +67 -67
- data/lib/nitro/compiler.rb +262 -0
- data/lib/nitro/compiler/elements.rb +0 -0
- data/lib/nitro/compiler/errors.rb +65 -0
- data/lib/nitro/compiler/localization.rb +25 -0
- data/lib/nitro/compiler/markup.rb +19 -0
- data/lib/nitro/compiler/shaders.rb +206 -0
- data/lib/nitro/compiler/squeeze.rb +20 -0
- data/lib/nitro/compiler/xslt.rb +61 -0
- data/lib/nitro/context.rb +87 -88
- data/lib/nitro/controller.rb +151 -158
- data/lib/nitro/cookie.rb +34 -34
- data/lib/nitro/dispatcher.rb +195 -186
- data/lib/nitro/element.rb +132 -126
- data/lib/nitro/element/java_script.rb +6 -6
- data/lib/nitro/flash.rb +66 -66
- data/lib/nitro/mail.rb +192 -192
- data/lib/nitro/mixin/buffer.rb +66 -0
- data/lib/nitro/mixin/debug.rb +16 -16
- data/lib/nitro/mixin/form.rb +88 -0
- data/lib/nitro/mixin/helper.rb +2 -2
- data/lib/nitro/mixin/javascript.rb +108 -108
- data/lib/nitro/mixin/markup.rb +144 -0
- data/lib/nitro/mixin/pager.rb +202 -202
- data/lib/nitro/mixin/rss.rb +67 -0
- data/lib/nitro/mixin/table.rb +63 -0
- data/lib/nitro/mixin/xhtml.rb +75 -0
- data/lib/nitro/mixin/xml.rb +124 -0
- data/lib/nitro/render.rb +183 -359
- data/lib/nitro/request.rb +140 -140
- data/lib/nitro/response.rb +27 -27
- data/lib/nitro/routing.rb +21 -21
- data/lib/nitro/scaffold.rb +124 -118
- data/lib/nitro/server.rb +117 -80
- data/lib/nitro/server/runner.rb +341 -0
- data/lib/nitro/service.rb +12 -12
- data/lib/nitro/service/xmlrpc.rb +22 -22
- data/lib/nitro/session.rb +122 -120
- data/lib/nitro/session/drb.rb +9 -9
- data/lib/nitro/session/drbserver.rb +34 -34
- data/lib/nitro/template.rb +171 -155
- data/lib/nitro/testing/assertions.rb +90 -90
- data/lib/nitro/testing/context.rb +16 -16
- data/lib/nitro/testing/testcase.rb +34 -34
- data/proto/conf/lhttpd.conf +9 -9
- data/proto/public/error.xhtml +75 -75
- data/proto/public/index.xhtml +18 -18
- data/proto/public/js/behaviour.js +65 -65
- data/proto/public/js/controls.js +1 -1
- data/proto/public/js/prototype.js +3 -3
- data/proto/public/settings.xhtml +61 -61
- data/proto/run.rb +1 -5
- data/test/nitro/adapter/raw_post1.bin +0 -0
- data/test/nitro/adapter/tc_cgi.rb +57 -57
- data/test/nitro/adapter/tc_webrick.rb +4 -4
- data/test/nitro/mixin/tc_pager.rb +25 -25
- data/test/nitro/mixin/tc_rss.rb +24 -0
- data/test/nitro/mixin/tc_table.rb +31 -0
- data/test/nitro/mixin/tc_xhtml.rb +13 -0
- data/test/nitro/tc_caching.rb +10 -10
- data/test/nitro/tc_context.rb +8 -8
- data/test/nitro/tc_controller.rb +48 -48
- data/test/nitro/tc_cookie.rb +6 -6
- data/test/nitro/tc_dispatcher.rb +64 -64
- data/test/nitro/tc_element.rb +27 -27
- data/test/nitro/tc_flash.rb +31 -31
- data/test/nitro/tc_mail.rb +63 -63
- data/test/nitro/tc_server.rb +26 -26
- data/test/nitro/tc_session.rb +9 -9
- data/test/nitro/tc_template.rb +19 -19
- data/test/public/blog/list.xhtml +1 -1
- metadata +31 -37
- data/lib/nitro/buffering.rb +0 -45
- data/lib/nitro/builder/form.rb +0 -104
- data/lib/nitro/builder/rss.rb +0 -104
- data/lib/nitro/builder/table.rb +0 -80
- data/lib/nitro/builder/xhtml.rb +0 -132
- data/lib/nitro/builder/xml.rb +0 -131
- data/lib/nitro/conf.rb +0 -36
- data/lib/nitro/environment.rb +0 -21
- data/lib/nitro/errors.rb +0 -69
- data/lib/nitro/localization.rb +0 -153
- data/lib/nitro/markup.rb +0 -147
- data/lib/nitro/output.rb +0 -24
- data/lib/nitro/runner.rb +0 -348
- data/lib/nitro/shaders.rb +0 -206
- data/test/nitro/builder/tc_rss.rb +0 -23
- data/test/nitro/builder/tc_table.rb +0 -30
- data/test/nitro/builder/tc_xhtml.rb +0 -39
- data/test/nitro/builder/tc_xml.rb +0 -56
- data/test/nitro/tc_localization.rb +0 -49
data/lib/nitro/conf.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'glue/flexob'
|
|
2
|
-
|
|
3
|
-
require 'nitro/dispatcher'
|
|
4
|
-
|
|
5
|
-
module Nitro
|
|
6
|
-
|
|
7
|
-
# Configuration.
|
|
8
|
-
|
|
9
|
-
class Conf < Flexob
|
|
10
|
-
|
|
11
|
-
def initialize(options)
|
|
12
|
-
unless options.is_a?(Hash)
|
|
13
|
-
raise ArgumentError.new('An options hash is required!')
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Default configuration parameters.
|
|
17
|
-
|
|
18
|
-
hash = {
|
|
19
|
-
:name => 'Nitro',
|
|
20
|
-
:host => '0.0.0.0', # this is accessible as localhost on windows.
|
|
21
|
-
:port => 9999,
|
|
22
|
-
:dispatcher => Dispatcher.new,
|
|
23
|
-
:template_root => 'templates',
|
|
24
|
-
:public_root => 'public'
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
hash.update(options)
|
|
28
|
-
|
|
29
|
-
super(hash)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/environment.rb
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Setup up the proposed environment. You are free
|
|
2
|
-
# to skip this if you dont like it. Just set
|
|
3
|
-
#
|
|
4
|
-
# $NITRO_NO_ENVIRONMENT = true
|
|
5
|
-
#
|
|
6
|
-
# before requiring nitro.
|
|
7
|
-
#--
|
|
8
|
-
# gmosx: this is temporary code.
|
|
9
|
-
#++
|
|
10
|
-
|
|
11
|
-
Dir.chdir(File.dirname($0))
|
|
12
|
-
|
|
13
|
-
# Application code come here.
|
|
14
|
-
|
|
15
|
-
$LOAD_PATH.unshift 'src'
|
|
16
|
-
|
|
17
|
-
# Library code come here.
|
|
18
|
-
|
|
19
|
-
$LOAD_PATH.unshift 'lib'
|
|
20
|
-
|
|
21
|
-
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/errors.rb
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
require 'facet/string/demodulize'
|
|
2
|
-
|
|
3
|
-
module Nitro
|
|
4
|
-
|
|
5
|
-
class ActionCompileError < SyntaxError
|
|
6
|
-
SOURCE_CODE_RADIUS = 5
|
|
7
|
-
|
|
8
|
-
attr_accessor :original_excpetion
|
|
9
|
-
|
|
10
|
-
def initialize(source_code, filename, original_exception)
|
|
11
|
-
@source_code = source_code.split("\n")
|
|
12
|
-
@filename = filename
|
|
13
|
-
@original_exception = original_exception
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def line_number
|
|
17
|
-
trace = @original_exception.backtrace.join
|
|
18
|
-
|
|
19
|
-
if trace.include?(":in `class_eval'")
|
|
20
|
-
trace.scan(/:([0-9]*):in `class_eval'/).first.first.to_i
|
|
21
|
-
else
|
|
22
|
-
1
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def source_extract(indent = 0)
|
|
27
|
-
ln = line_number
|
|
28
|
-
start_line = [ln - SOURCE_CODE_RADIUS, 0].max
|
|
29
|
-
end_line = [ln + SOURCE_CODE_RADIUS - 1, @source_code.length].min
|
|
30
|
-
|
|
31
|
-
number = start_line
|
|
32
|
-
extract = @source_code[start_line..end_line].collect do |line|
|
|
33
|
-
number += 1
|
|
34
|
-
line = line.gsub(/; @out << %\^/, ' ?>').gsub(/\^;/, '<?r ')
|
|
35
|
-
if number == line_number
|
|
36
|
-
"#{' ' * indent}#{number}: #{line}"
|
|
37
|
-
else
|
|
38
|
-
"#{' ' * indent}#{number}: #{line}"
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
return extract.join("\n")
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def backtrace
|
|
46
|
-
@original_exception.backtrace.collect do |line|
|
|
47
|
-
# unless line =~ /\/usr/
|
|
48
|
-
line.gsub("#{Nitro::LibPath}/", '')
|
|
49
|
-
# else
|
|
50
|
-
# nil
|
|
51
|
-
# end
|
|
52
|
-
end.compact
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def to_s
|
|
56
|
-
"#{self.class.to_s.demodulize} (#{@original_exception.class}): '#@filename' at line ##{line_number}"
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def message
|
|
60
|
-
"#{to_s}\n#{source_extract}"
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
class TemplateCompileError < ActionCompileError
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/localization.rb
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
require 'yaml'
|
|
2
|
-
|
|
3
|
-
require 'glue/aspects'
|
|
4
|
-
require 'nitro/shaders'
|
|
5
|
-
|
|
6
|
-
module Nitro
|
|
7
|
-
|
|
8
|
-
# Represents a locale.
|
|
9
|
-
#--
|
|
10
|
-
# TODO: initialize translation map from a yaml file.
|
|
11
|
-
#++
|
|
12
|
-
|
|
13
|
-
class Locale
|
|
14
|
-
|
|
15
|
-
# The localization map.
|
|
16
|
-
|
|
17
|
-
attr_accessor :map
|
|
18
|
-
|
|
19
|
-
def initialize(map)
|
|
20
|
-
parse_hash(map)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Transalte the given key.
|
|
24
|
-
#
|
|
25
|
-
# [+args+]
|
|
26
|
-
# An array of arguments. The first argument
|
|
27
|
-
# is the translation key. If additional arguments
|
|
28
|
-
# are provided they are used for sprintf
|
|
29
|
-
# interpolation.
|
|
30
|
-
#--
|
|
31
|
-
# THINK: Possibly avoid the creation of the
|
|
32
|
-
# array by making the api less elegant.
|
|
33
|
-
#++
|
|
34
|
-
|
|
35
|
-
def translate(*args)
|
|
36
|
-
if xlated = @map[args.shift]
|
|
37
|
-
if xlated.is_a?(String)
|
|
38
|
-
args.empty? ? xlated : sprintf(xlated, *args)
|
|
39
|
-
else
|
|
40
|
-
xlated.call(*args)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
alias_method :[], :translate
|
|
45
|
-
|
|
46
|
-
private
|
|
47
|
-
|
|
48
|
-
def parse_hash(map)
|
|
49
|
-
@map = map
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def parse_yaml(yaml)
|
|
53
|
-
raise 'Not implemented'
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Localization support.
|
|
59
|
-
#
|
|
60
|
-
# === Example
|
|
61
|
-
#
|
|
62
|
-
# locale_en = {
|
|
63
|
-
# 'See you' => 'See you',
|
|
64
|
-
# :long_paragraph => 'The best new books, up to 30% reduced price',
|
|
65
|
-
# :price => 'Price: %d %s',
|
|
66
|
-
# :proc_price => proc { |value, cur| "Price: #{value} #{cur}" }
|
|
67
|
-
# }
|
|
68
|
-
#
|
|
69
|
-
# locale_de = {
|
|
70
|
-
# 'See you' => 'Auf wieder sehen',
|
|
71
|
-
# :long_paragraph => 'Die besten neuer buecher, bis zu 30% reduziert',
|
|
72
|
-
# ...
|
|
73
|
-
# }
|
|
74
|
-
#
|
|
75
|
-
# Localization.add(:en => locale_en, :de => locale_de)
|
|
76
|
-
#
|
|
77
|
-
# lc = Localization.get
|
|
78
|
-
# lc['See you'] -> See you
|
|
79
|
-
# lc[:price, 100, 'euro'] -> Price: 100 euro
|
|
80
|
-
# lc = Localization.get[:de]
|
|
81
|
-
# lc['See you'] -> Auf wiedersehen
|
|
82
|
-
#
|
|
83
|
-
# To make localization even more easier, a LocalizationFilter
|
|
84
|
-
# and a LocalizationShader are provided.
|
|
85
|
-
|
|
86
|
-
class Localization
|
|
87
|
-
|
|
88
|
-
class << self
|
|
89
|
-
|
|
90
|
-
# A hash of the available locales.
|
|
91
|
-
|
|
92
|
-
attr_accessor :locales
|
|
93
|
-
|
|
94
|
-
def add(map = {})
|
|
95
|
-
for key, locale in map
|
|
96
|
-
if locale.is_a?(String)
|
|
97
|
-
# this is the name of the localization file.
|
|
98
|
-
locale = YAML.load(File.read(locale))
|
|
99
|
-
end
|
|
100
|
-
@locales[key.to_s] = Locale.new(locale)
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Return the localization hash for the given
|
|
105
|
-
# locale.
|
|
106
|
-
|
|
107
|
-
def get(locale = :en)
|
|
108
|
-
locale ||= 'en'
|
|
109
|
-
@locales[locale.to_s]
|
|
110
|
-
end
|
|
111
|
-
alias_method :locale, :get
|
|
112
|
-
alias_method :[], :get
|
|
113
|
-
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
@locales = {}
|
|
117
|
-
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# Localization Aspect.
|
|
121
|
-
|
|
122
|
-
module LocalizationAspect
|
|
123
|
-
def localize
|
|
124
|
-
# @lc = @context.conf.localization[@session[:LOCALE]]
|
|
125
|
-
@lc = Localization[@context.session[:LOCALE]]
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# Localization shader.
|
|
130
|
-
#
|
|
131
|
-
# === Examples
|
|
132
|
-
#
|
|
133
|
-
# <h1>[[Welcome]]</h1>
|
|
134
|
-
# <h1>[[:welcome]]</h1>
|
|
135
|
-
|
|
136
|
-
class LocalizationShader < Shader
|
|
137
|
-
|
|
138
|
-
def process(hash, text)
|
|
139
|
-
# handle symbols
|
|
140
|
-
text.gsub!(/\[\[\:(.*?)\]\]/, '#{@lc[\1]}')
|
|
141
|
-
|
|
142
|
-
# handle strings
|
|
143
|
-
text.gsub!(/\[\[(.*?)\]\]/, '#{@lc["\1"]}')
|
|
144
|
-
|
|
145
|
-
process_next(hash, text)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
# * George Moschovitis <gm@navel.gr>
|
|
153
|
-
|
data/lib/nitro/markup.rb
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
require 'redcloth'
|
|
2
|
-
|
|
3
|
-
require 'glue/property'
|
|
4
|
-
|
|
5
|
-
module Nitro
|
|
6
|
-
|
|
7
|
-
#--
|
|
8
|
-
# Override the default PropertyUtils implementation to
|
|
9
|
-
# add markup support.
|
|
10
|
-
#++
|
|
11
|
-
|
|
12
|
-
module PropertyUtils
|
|
13
|
-
# Override to add markup code.
|
|
14
|
-
#
|
|
15
|
-
def self.prop_setter(prop)
|
|
16
|
-
s = prop.symbol
|
|
17
|
-
if markup = prop.meta[:markup]
|
|
18
|
-
# if true, set to default Markup
|
|
19
|
-
markup = Nitro::Markup if true == markup
|
|
20
|
-
|
|
21
|
-
code = %{
|
|
22
|
-
def #{s}=(val)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if Property.type_checking
|
|
26
|
-
code << %{
|
|
27
|
-
unless String == val.class
|
|
28
|
-
raise "Invalid type, expected '#{prop.klass}', is '\#\{val.class\}'."
|
|
29
|
-
end
|
|
30
|
-
}
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
code << %{
|
|
34
|
-
@#{s} = #{markup}.expand(val)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def compact_#{s}
|
|
38
|
-
#{markup}.compact(@#{s})
|
|
39
|
-
end
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return code
|
|
43
|
-
else
|
|
44
|
-
return %{
|
|
45
|
-
def #{s}=(val)
|
|
46
|
-
@#{s} = val
|
|
47
|
-
end
|
|
48
|
-
}
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Generalised Markup transformations.
|
|
54
|
-
#
|
|
55
|
-
# The expand methods evaluate (expand) the markup
|
|
56
|
-
# code to produce the final content. The compact
|
|
57
|
-
# methods reverse this process to create the original
|
|
58
|
-
# markup code. Not all markup transformations are
|
|
59
|
-
# reversible.
|
|
60
|
-
#
|
|
61
|
-
# When this library is included, the default PropertyUtils
|
|
62
|
-
# implementation is overriden to add markup support.
|
|
63
|
-
#
|
|
64
|
-
# === Examples
|
|
65
|
-
#
|
|
66
|
-
# here comes the #{obj.body} # => prints the expanded version.
|
|
67
|
-
#
|
|
68
|
-
# obj.body = Nitro::Markup.expand(@params['body'])
|
|
69
|
-
|
|
70
|
-
module Markup
|
|
71
|
-
def self.expand_html!(str)
|
|
72
|
-
return unless str
|
|
73
|
-
# str.gsub!(/"/, '"')
|
|
74
|
-
# str.gsub!(/'/, ''')
|
|
75
|
-
str.gsub!(/</, '<')
|
|
76
|
-
str.gsub!(/>/, '>')
|
|
77
|
-
# str.gsub!(/\r\n/, ' <br />')
|
|
78
|
-
return str
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def self.compact_html!(str)
|
|
82
|
-
return unless str
|
|
83
|
-
str.gsub!(/"/, '"')
|
|
84
|
-
str.gsub!(/'/, "'")
|
|
85
|
-
str.gsub!(/</, '<')
|
|
86
|
-
str.gsub!(/>/, '>')
|
|
87
|
-
# gmosx: SOS! double quotes ARE needed for \r\n!!
|
|
88
|
-
str.gsub!(/\s<br \/>/, "\r\n")
|
|
89
|
-
return str
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Expand the markup code to produce the
|
|
93
|
-
# actual content. You should override this method
|
|
94
|
-
# in your application to call your custom markup
|
|
95
|
-
# methods.
|
|
96
|
-
|
|
97
|
-
def self.expand(str)
|
|
98
|
-
if str
|
|
99
|
-
xstr = str.dup
|
|
100
|
-
expand_html!(xstr)
|
|
101
|
-
return xstr
|
|
102
|
-
end
|
|
103
|
-
return nil
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Compact (reverse) the content to the origial markup
|
|
107
|
-
# code. Not all markup transformations are reversible.
|
|
108
|
-
# You should override this method in your application
|
|
109
|
-
# to call your custom markup methods.
|
|
110
|
-
|
|
111
|
-
def self.compact(str)
|
|
112
|
-
if str
|
|
113
|
-
xstr = str.dup
|
|
114
|
-
compact_html!(xstr)
|
|
115
|
-
return xstr
|
|
116
|
-
end
|
|
117
|
-
return nil
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# Remove markup code from the input string.
|
|
121
|
-
# NOT IMPLEMENTED.
|
|
122
|
-
|
|
123
|
-
def self.clear(str)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# Markup shader.
|
|
129
|
-
#
|
|
130
|
-
# === Examples
|
|
131
|
-
#
|
|
132
|
-
# <h1>#{{Welcome}}</h1>
|
|
133
|
-
|
|
134
|
-
class MarkupShader < Shader
|
|
135
|
-
|
|
136
|
-
def process(hash, text)
|
|
137
|
-
# handle strings
|
|
138
|
-
text.gsub!(/\#\{\{(.*?)\}\}/, '#{RedCloth.new(Markup.expand(\1)).to_html}')
|
|
139
|
-
|
|
140
|
-
process_next(hash, text)
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# * George Moschovitis <gm@navel.gr>
|
data/lib/nitro/output.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require 'nitro/builder/xml'
|
|
2
|
-
require 'nitro/builder/xhtml'
|
|
3
|
-
require 'nitro/builder/rss'
|
|
4
|
-
require 'nitro/builder/form'
|
|
5
|
-
require 'nitro/builder/table'
|
|
6
|
-
|
|
7
|
-
module Nitro
|
|
8
|
-
|
|
9
|
-
# The output buffer string. This buffer integrates
|
|
10
|
-
# the programmatic rendering support (XhtmlBuilder)
|
|
11
|
-
# and the various builders required by the application.
|
|
12
|
-
#--
|
|
13
|
-
# TODO: Implement a FAST string (maybe in C)
|
|
14
|
-
#++
|
|
15
|
-
|
|
16
|
-
class OutputBuffer < String
|
|
17
|
-
include XmlBuilderMixin
|
|
18
|
-
include XhtmlBuilderMixin
|
|
19
|
-
include RssBuilderMixin
|
|
20
|
-
include FormBuilderMixin
|
|
21
|
-
include TableBuilderMixin
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
end
|