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.
Files changed (115) hide show
  1. data/CHANGELOG +752 -543
  2. data/INSTALL +38 -38
  3. data/README +264 -225
  4. data/Rakefile +48 -49
  5. data/bin/nitro +3 -3
  6. data/bin/nitrogen +6 -6
  7. data/doc/AUTHORS +10 -10
  8. data/doc/CHANGELOG.1 +1939 -1939
  9. data/doc/CHANGELOG.2 +954 -954
  10. data/doc/LICENSE +3 -3
  11. data/doc/MIGRATION +28 -0
  12. data/doc/RELEASES +814 -643
  13. data/doc/config.txt +5 -5
  14. data/install.rb +7 -17
  15. data/lib/nitro.rb +38 -9
  16. data/lib/nitro/adapter/cgi.rb +311 -312
  17. data/lib/nitro/adapter/fastcgi.rb +18 -25
  18. data/lib/nitro/adapter/webrick.rb +128 -137
  19. data/lib/nitro/adapter/wee.rb +51 -0
  20. data/lib/nitro/caching.rb +20 -20
  21. data/lib/nitro/caching/actions.rb +43 -43
  22. data/lib/nitro/caching/fragments.rb +46 -46
  23. data/lib/nitro/caching/invalidation.rb +11 -11
  24. data/lib/nitro/caching/output.rb +65 -65
  25. data/lib/nitro/caching/stores.rb +67 -67
  26. data/lib/nitro/compiler.rb +262 -0
  27. data/lib/nitro/compiler/elements.rb +0 -0
  28. data/lib/nitro/compiler/errors.rb +65 -0
  29. data/lib/nitro/compiler/localization.rb +25 -0
  30. data/lib/nitro/compiler/markup.rb +19 -0
  31. data/lib/nitro/compiler/shaders.rb +206 -0
  32. data/lib/nitro/compiler/squeeze.rb +20 -0
  33. data/lib/nitro/compiler/xslt.rb +61 -0
  34. data/lib/nitro/context.rb +87 -88
  35. data/lib/nitro/controller.rb +151 -158
  36. data/lib/nitro/cookie.rb +34 -34
  37. data/lib/nitro/dispatcher.rb +195 -186
  38. data/lib/nitro/element.rb +132 -126
  39. data/lib/nitro/element/java_script.rb +6 -6
  40. data/lib/nitro/flash.rb +66 -66
  41. data/lib/nitro/mail.rb +192 -192
  42. data/lib/nitro/mixin/buffer.rb +66 -0
  43. data/lib/nitro/mixin/debug.rb +16 -16
  44. data/lib/nitro/mixin/form.rb +88 -0
  45. data/lib/nitro/mixin/helper.rb +2 -2
  46. data/lib/nitro/mixin/javascript.rb +108 -108
  47. data/lib/nitro/mixin/markup.rb +144 -0
  48. data/lib/nitro/mixin/pager.rb +202 -202
  49. data/lib/nitro/mixin/rss.rb +67 -0
  50. data/lib/nitro/mixin/table.rb +63 -0
  51. data/lib/nitro/mixin/xhtml.rb +75 -0
  52. data/lib/nitro/mixin/xml.rb +124 -0
  53. data/lib/nitro/render.rb +183 -359
  54. data/lib/nitro/request.rb +140 -140
  55. data/lib/nitro/response.rb +27 -27
  56. data/lib/nitro/routing.rb +21 -21
  57. data/lib/nitro/scaffold.rb +124 -118
  58. data/lib/nitro/server.rb +117 -80
  59. data/lib/nitro/server/runner.rb +341 -0
  60. data/lib/nitro/service.rb +12 -12
  61. data/lib/nitro/service/xmlrpc.rb +22 -22
  62. data/lib/nitro/session.rb +122 -120
  63. data/lib/nitro/session/drb.rb +9 -9
  64. data/lib/nitro/session/drbserver.rb +34 -34
  65. data/lib/nitro/template.rb +171 -155
  66. data/lib/nitro/testing/assertions.rb +90 -90
  67. data/lib/nitro/testing/context.rb +16 -16
  68. data/lib/nitro/testing/testcase.rb +34 -34
  69. data/proto/conf/lhttpd.conf +9 -9
  70. data/proto/public/error.xhtml +75 -75
  71. data/proto/public/index.xhtml +18 -18
  72. data/proto/public/js/behaviour.js +65 -65
  73. data/proto/public/js/controls.js +1 -1
  74. data/proto/public/js/prototype.js +3 -3
  75. data/proto/public/settings.xhtml +61 -61
  76. data/proto/run.rb +1 -5
  77. data/test/nitro/adapter/raw_post1.bin +0 -0
  78. data/test/nitro/adapter/tc_cgi.rb +57 -57
  79. data/test/nitro/adapter/tc_webrick.rb +4 -4
  80. data/test/nitro/mixin/tc_pager.rb +25 -25
  81. data/test/nitro/mixin/tc_rss.rb +24 -0
  82. data/test/nitro/mixin/tc_table.rb +31 -0
  83. data/test/nitro/mixin/tc_xhtml.rb +13 -0
  84. data/test/nitro/tc_caching.rb +10 -10
  85. data/test/nitro/tc_context.rb +8 -8
  86. data/test/nitro/tc_controller.rb +48 -48
  87. data/test/nitro/tc_cookie.rb +6 -6
  88. data/test/nitro/tc_dispatcher.rb +64 -64
  89. data/test/nitro/tc_element.rb +27 -27
  90. data/test/nitro/tc_flash.rb +31 -31
  91. data/test/nitro/tc_mail.rb +63 -63
  92. data/test/nitro/tc_server.rb +26 -26
  93. data/test/nitro/tc_session.rb +9 -9
  94. data/test/nitro/tc_template.rb +19 -19
  95. data/test/public/blog/list.xhtml +1 -1
  96. metadata +31 -37
  97. data/lib/nitro/buffering.rb +0 -45
  98. data/lib/nitro/builder/form.rb +0 -104
  99. data/lib/nitro/builder/rss.rb +0 -104
  100. data/lib/nitro/builder/table.rb +0 -80
  101. data/lib/nitro/builder/xhtml.rb +0 -132
  102. data/lib/nitro/builder/xml.rb +0 -131
  103. data/lib/nitro/conf.rb +0 -36
  104. data/lib/nitro/environment.rb +0 -21
  105. data/lib/nitro/errors.rb +0 -69
  106. data/lib/nitro/localization.rb +0 -153
  107. data/lib/nitro/markup.rb +0 -147
  108. data/lib/nitro/output.rb +0 -24
  109. data/lib/nitro/runner.rb +0 -348
  110. data/lib/nitro/shaders.rb +0 -206
  111. data/test/nitro/builder/tc_rss.rb +0 -23
  112. data/test/nitro/builder/tc_table.rb +0 -30
  113. data/test/nitro/builder/tc_xhtml.rb +0 -39
  114. data/test/nitro/builder/tc_xml.rb +0 -56
  115. 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>
@@ -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>
@@ -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!(/"/, '&quot;')
74
- # str.gsub!(/'/, '&#39;')
75
- str.gsub!(/</, '&lt;')
76
- str.gsub!(/>/, '&gt;')
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!(/&quot;/, '"')
84
- str.gsub!(/&#39;/, "'")
85
- str.gsub!(/&lt;/, '<')
86
- str.gsub!(/&gt;/, '>')
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