ramaze 0.0.9 → 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.
Files changed (193) hide show
  1. data/Rakefile +14 -259
  2. data/bin/ramaze +52 -25
  3. data/doc/AUTHORS +6 -0
  4. data/doc/CHANGELOG +1363 -42
  5. data/doc/INSTALL +1 -1
  6. data/doc/README +48 -35
  7. data/doc/README.html +637 -0
  8. data/doc/TODO +7 -16
  9. data/doc/allison/allison.css +6 -7
  10. data/doc/allison/allison.gif +0 -0
  11. data/doc/allison/cache/STYLE +1 -2
  12. data/doc/changes.txt +3375 -0
  13. data/doc/changes.xml +3378 -0
  14. data/doc/meta/announcement.txt +47 -0
  15. data/doc/meta/configuration.txt +179 -0
  16. data/doc/meta/internals.txt +111 -0
  17. data/doc/readme_chunks/features.txt +8 -16
  18. data/doc/readme_chunks/installing.txt +7 -1
  19. data/doc/tutorial/todolist.txt +2 -3
  20. data/examples/blog/main.rb +9 -8
  21. data/examples/blog/public/styles/blog.css +132 -0
  22. data/examples/blog/src/controller.rb +14 -41
  23. data/examples/blog/src/model.rb +12 -13
  24. data/examples/blog/src/view.rb +16 -0
  25. data/examples/blog/template/edit.xhtml +19 -8
  26. data/examples/blog/template/index.xhtml +14 -22
  27. data/examples/blog/template/new.xhtml +18 -5
  28. data/examples/caching.rb +5 -8
  29. data/examples/element.rb +3 -3
  30. data/examples/hello.rb +3 -5
  31. data/examples/simple.rb +4 -7
  32. data/examples/templates/template/external.haml +8 -7
  33. data/examples/templates/template/external.mab +11 -8
  34. data/examples/templates/template_amrita2.rb +4 -4
  35. data/examples/templates/template_erubis.rb +3 -3
  36. data/examples/templates/template_ezamar.rb +1 -2
  37. data/examples/templates/template_haml.rb +24 -23
  38. data/examples/templates/template_liquid.rb +3 -1
  39. data/examples/templates/template_markaby.rb +15 -9
  40. data/examples/todolist/src/element/page.rb +1 -1
  41. data/lib/proto/conf/benchmark.yaml +6 -20
  42. data/lib/proto/conf/debug.yaml +6 -19
  43. data/lib/proto/conf/live.yaml +7 -19
  44. data/lib/proto/conf/silent.yaml +6 -16
  45. data/lib/proto/conf/stage.yaml +6 -18
  46. data/lib/proto/public/error.zmr +2 -2
  47. data/lib/ramaze.rb +34 -72
  48. data/lib/ramaze/adapter.rb +21 -18
  49. data/lib/ramaze/adapter/mongrel.rb +0 -3
  50. data/lib/ramaze/adapter/webrick.rb +6 -6
  51. data/lib/ramaze/cache/memcached.rb +3 -0
  52. data/lib/ramaze/controller.rb +227 -183
  53. data/lib/ramaze/dispatcher.rb +34 -129
  54. data/lib/ramaze/dispatcher/action.rb +28 -0
  55. data/lib/ramaze/dispatcher/error.rb +43 -0
  56. data/lib/ramaze/dispatcher/file.rb +34 -0
  57. data/lib/ramaze/global.rb +89 -48
  58. data/lib/ramaze/helper/aspect.rb +8 -6
  59. data/lib/ramaze/helper/auth.rb +3 -3
  60. data/lib/ramaze/helper/cache.rb +2 -2
  61. data/lib/ramaze/helper/file.rb +14 -0
  62. data/lib/ramaze/helper/inform.rb +36 -0
  63. data/lib/ramaze/helper/link.rb +7 -3
  64. data/lib/ramaze/helper/markaby.rb +30 -0
  65. data/lib/ramaze/helper/redirect.rb +2 -0
  66. data/lib/ramaze/inform.rb +8 -182
  67. data/lib/ramaze/inform/analogger.rb +19 -0
  68. data/lib/ramaze/inform/growl.rb +28 -0
  69. data/lib/ramaze/inform/hub.rb +26 -0
  70. data/lib/ramaze/inform/informer.rb +92 -0
  71. data/lib/ramaze/inform/informing.rb +44 -0
  72. data/lib/ramaze/inform/syslog.rb +27 -0
  73. data/lib/ramaze/inform/xosd.rb +42 -0
  74. data/lib/ramaze/snippets.rb +6 -2
  75. data/lib/ramaze/snippets/object/traits.rb +13 -1
  76. data/lib/ramaze/snippets/ramaze/autoreload.rb +58 -2
  77. data/lib/ramaze/snippets/string/color.rb +27 -0
  78. data/lib/ramaze/snippets/string/each.rb +6 -0
  79. data/lib/ramaze/snippets/struct/fill.rb +15 -0
  80. data/lib/ramaze/template/ezamar.rb +13 -22
  81. data/lib/ramaze/template/ezamar/element.rb +12 -12
  82. data/lib/ramaze/template/liquid.rb +19 -18
  83. data/lib/ramaze/template/markaby.rb +37 -58
  84. data/lib/ramaze/tool/localize.rb +128 -0
  85. data/lib/ramaze/tool/tidy.rb +51 -21
  86. data/lib/ramaze/trinity.rb +3 -3
  87. data/lib/ramaze/trinity/request.rb +41 -23
  88. data/lib/ramaze/trinity/response.rb +10 -5
  89. data/lib/ramaze/trinity/session.rb +17 -3
  90. data/lib/ramaze/version.rb +2 -2
  91. data/rake_tasks/conf.rake +56 -0
  92. data/rake_tasks/gem.rake +44 -0
  93. data/rake_tasks/maintaince.rake +187 -0
  94. data/spec/all.rb +32 -0
  95. data/spec/examples/caching.rb +19 -0
  96. data/spec/examples/element.rb +15 -0
  97. data/spec/examples/hello.rb +11 -0
  98. data/spec/examples/simple.rb +51 -0
  99. data/spec/examples/templates/template_amrita2.rb +14 -0
  100. data/spec/examples/templates/template_erubis.rb +21 -0
  101. data/spec/examples/templates/template_ezamar.rb +22 -0
  102. data/spec/examples/templates/template_haml.rb +23 -0
  103. data/spec/examples/templates/template_liquid.rb +24 -0
  104. data/spec/examples/templates/template_markaby.rb +21 -0
  105. data/spec/helper.rb +81 -0
  106. data/spec/{spec_helper_context.rb → helper/context.rb} +1 -1
  107. data/spec/helper/layout.rb +55 -0
  108. data/spec/helper/mock_http.rb +66 -0
  109. data/spec/{spec_helper_requester.rb → helper/requester.rb} +0 -6
  110. data/spec/{spec_helper_simple_http.rb → helper/simple_http.rb} +57 -57
  111. data/spec/helper/wrap.rb +193 -0
  112. data/spec/{adapter_spec.rb → ramaze/adapter.rb} +7 -5
  113. data/spec/{tc_adapter_mongrel.rb → ramaze/adapter/mongrel.rb} +2 -2
  114. data/spec/{tc_adapter_webrick.rb → ramaze/adapter/webrick.rb} +2 -2
  115. data/spec/{tc_cache.rb → ramaze/cache.rb} +16 -16
  116. data/spec/ramaze/conf/locale_de.yaml +6 -0
  117. data/spec/ramaze/conf/locale_en.yaml +6 -0
  118. data/spec/ramaze/controller.rb +184 -0
  119. data/spec/ramaze/controller/template/greet.xhtml +1 -0
  120. data/spec/ramaze/controller/template_resolving.rb +54 -0
  121. data/spec/ramaze/dependencies.rb +16 -0
  122. data/spec/{tc_element.rb → ramaze/element.rb} +21 -19
  123. data/spec/ramaze/error.rb +64 -0
  124. data/spec/{tc_gestalt.rb → ramaze/gestalt.rb} +10 -10
  125. data/spec/{tc_global.rb → ramaze/global.rb} +7 -7
  126. data/spec/{tc_helper_aspect.rb → ramaze/helper/aspect.rb} +22 -14
  127. data/spec/{tc_helper_auth.rb → ramaze/helper/auth.rb} +9 -7
  128. data/spec/{tc_helper_cache.rb → ramaze/helper/cache.rb} +14 -24
  129. data/spec/{tc_helper_feed.rb → ramaze/helper/feed.rb} +12 -12
  130. data/spec/ramaze/helper/file.rb +17 -0
  131. data/spec/{tc_helper_flash.rb → ramaze/helper/flash.rb} +16 -17
  132. data/spec/{tc_helper_form.rb → ramaze/helper/form.rb} +25 -26
  133. data/spec/{tc_helper_link.rb → ramaze/helper/link.rb} +9 -9
  134. data/spec/{tc_helper_redirect.rb → ramaze/helper/redirect.rb} +11 -10
  135. data/spec/{tc_helper_stack.rb → ramaze/helper/stack.rb} +10 -11
  136. data/spec/ramaze/inform/informer.rb +40 -0
  137. data/spec/ramaze/inform/syslog.rb +10 -0
  138. data/spec/ramaze/localize.rb +40 -0
  139. data/spec/ramaze/morpher.rb +82 -0
  140. data/spec/ramaze/params.rb +124 -0
  141. data/spec/{public → ramaze/public}/error404.xhtml +0 -0
  142. data/spec/{public → ramaze/public}/favicon.ico +0 -0
  143. data/spec/{public → ramaze/public}/ramaze.png +0 -0
  144. data/spec/{public → ramaze/public}/test_download.css +0 -0
  145. data/spec/ramaze/request.rb +129 -0
  146. data/spec/{tc_request_mongrel.rb → ramaze/request/mongrel.rb} +2 -2
  147. data/spec/{tc_request_webrick.rb → ramaze/request/webrick.rb} +1 -1
  148. data/spec/{tc_session.rb → ramaze/session.rb} +18 -18
  149. data/spec/{tc_store.rb → ramaze/store/default.rb} +10 -10
  150. data/spec/{tc_store_yaml.rb → ramaze/store/yaml.rb} +9 -9
  151. data/spec/ramaze/template.rb +86 -0
  152. data/spec/{tc_template_amrita2.rb → ramaze/template/amrita2.rb} +5 -5
  153. data/spec/{template → ramaze/template}/amrita2/data.amrita +0 -0
  154. data/spec/{template → ramaze/template}/amrita2/index.amrita +0 -0
  155. data/spec/{template → ramaze/template}/amrita2/sum.amrita +0 -0
  156. data/spec/{tc_template_erubis.rb → ramaze/template/erubis.rb} +9 -9
  157. data/spec/{template → ramaze/template}/erubis/sum.rhtml +0 -0
  158. data/spec/ramaze/template/ezamar.rb +62 -0
  159. data/spec/{template → ramaze/template}/ezamar/another/long/action.zmr +0 -0
  160. data/spec/{template → ramaze/template}/ezamar/combined.zmr +0 -0
  161. data/spec/{template → ramaze/template}/ezamar/file_only.zmr +0 -0
  162. data/spec/{template → ramaze/template}/ezamar/index.zmr +0 -0
  163. data/spec/ramaze/template/ezamar/nested.zmr +1 -0
  164. data/spec/{template → ramaze/template}/ezamar/some__long__action.zmr +0 -0
  165. data/spec/{template → ramaze/template}/ezamar/sum.zmr +0 -0
  166. data/spec/{tc_template_haml.rb → ramaze/template/haml.rb} +7 -7
  167. data/spec/{template → ramaze/template}/haml/index.haml +0 -0
  168. data/spec/{template → ramaze/template}/haml/with_vars.haml +0 -0
  169. data/spec/{tc_template_liquid.rb → ramaze/template/liquid.rb} +7 -7
  170. data/spec/{template → ramaze/template}/liquid/index.liquid +0 -0
  171. data/spec/{template → ramaze/template}/liquid/products.liquid +0 -0
  172. data/spec/ramaze/template/markaby.rb +59 -0
  173. data/spec/{template → ramaze/template}/markaby/external.mab +0 -0
  174. data/spec/{template → ramaze/template}/markaby/sum.mab +0 -0
  175. data/spec/ramaze/template/ramaze/external.test +1 -0
  176. data/spec/{tc_tidy.rb → ramaze/tidy.rb} +3 -3
  177. metadata +145 -81
  178. data/examples/blog/public/screen.css +0 -106
  179. data/examples/blog/src/element.rb +0 -58
  180. data/examples/blog/template/view.xhtml +0 -15
  181. data/examples/blog/test/tc_entry.rb +0 -18
  182. data/lib/proto/public/404.jpg +0 -0
  183. data/spec/request_tc_helper.rb +0 -135
  184. data/spec/spec_all.rb +0 -118
  185. data/spec/spec_helper.rb +0 -66
  186. data/spec/tc_controller.rb +0 -49
  187. data/spec/tc_dependencies.rb +0 -13
  188. data/spec/tc_error.rb +0 -43
  189. data/spec/tc_morpher.rb +0 -88
  190. data/spec/tc_params.rb +0 -125
  191. data/spec/tc_template_ezamar.rb +0 -64
  192. data/spec/tc_template_markaby.rb +0 -72
  193. data/spec/template/ezamar/nested.zmr +0 -1
@@ -15,7 +15,7 @@
15
15
  # %{
16
16
  # <html>
17
17
  # <h1>
18
- # #{@hash['title']}
18
+ # #@title
19
19
  # </h1>
20
20
  # #{content}
21
21
  # </html>
@@ -82,10 +82,6 @@ class Ezamar::Element
82
82
  # transforms all <Element> tags within the string, takes also
83
83
  # a binding to be compatible to the transform-pipeline, won't have
84
84
  # any use for it though.
85
- #
86
- # It also sets a instance-variable for you called @hash, which
87
- # contains the parameters you gave the <Element> tag.
88
- # See above for an example of writing and using them.
89
85
 
90
86
  def transform string = '', options = {}
91
87
  binding, path = options.values_at(:binding, :path)
@@ -120,8 +116,9 @@ class Ezamar::Element
120
116
  end
121
117
 
122
118
  # find the element, create an instance, pass it the content
123
- # check if it responds to :render and set an instance-variable
124
- # called @hash to hold the parameters passed to the element.
119
+ # check if it responds to :render and sets instance-variables
120
+ # that are named after the keys and hold the values of the parameters
121
+ # you passed to the Element
125
122
  #
126
123
  # Parameters look like:
127
124
  # <Page foo="true"> bar </Page>
@@ -130,12 +127,13 @@ class Ezamar::Element
130
127
  def finish_transform(klass, params, content)
131
128
  instance = constant(klass).new(content)
132
129
 
133
- hash = demunge_passed_variables(params)
134
- instance.instance_variable_set("@hash", hash)
130
+ demunge_passed_variables(params).each do |key, value|
131
+ instance.instance_variable_set("@#{key}", value)
132
+ end
135
133
 
136
134
  instance.render
137
135
  rescue => ex
138
- Ramaze::Informer.debug(ex.message)
136
+ Ramaze::Inform.debug(ex.message)
139
137
  ''
140
138
  end
141
139
 
@@ -154,8 +152,10 @@ class Ezamar::Element
154
152
  string.scan(/\s?(.*?)="(.*?)"/).inject({}) do |hash, (key, value)|
155
153
  value =
156
154
  case value
157
- when 'true' : true
158
- when 'false' : false
155
+ when 'true'
156
+ true
157
+ when 'false'
158
+ false
159
159
  else
160
160
  Integer(value) rescue Float(value) rescue value
161
161
  end
@@ -3,31 +3,32 @@
3
3
 
4
4
  require 'liquid'
5
5
 
6
- module Ramaze::Template
7
- class Liquid < Template
6
+ module Ramaze
7
+ module Template
8
+ class Liquid < Template
9
+ Controller.register_engine self, %w[ liquid ]
8
10
 
9
- Ramaze::Controller.register_engine self, %w[ liquid ]
11
+ class << self
10
12
 
11
- class << self
13
+ # initializes the handling of a request on the controller.
14
+ # Creates a new instances of itself and sends the action and params.
15
+ # Also tries to render the template.
16
+ # In Theory you can use this standalone, this has not been tested though.
12
17
 
13
- # initializes the handling of a request on the controller.
14
- # Creates a new instances of itself and sends the action and params.
15
- # Also tries to render the template.
16
- # In Theory you can use this standalone, this has not been tested though.
18
+ def transform controller, options = {}
19
+ action, parameter, file, bound = *super
17
20
 
18
- def transform controller, options = {}
19
- action, parameter, file, bound = *super
21
+ reaction = controller.send(action, *parameter)
22
+ template = reaction_or_file(reaction, file)
20
23
 
21
- reaction = controller.send(action, *parameter)
22
- template = reaction_or_file(reaction, file)
24
+ return '' unless template
23
25
 
24
- return '' unless template
26
+ hash = controller.instance_variable_get("@hash") || {}
27
+ template = ::Liquid::Template.parse(template)
28
+ options = controller.ancestral_trait[:liquid_options]
25
29
 
26
- hash = controller.instance_variable_get("@hash") || {}
27
- template = ::Liquid::Template.parse(template)
28
- options = controller.ancestral_trait[:liquid_options]
29
-
30
- template.render(hash, options)
30
+ template.render(hash, options)
31
+ end
31
32
  end
32
33
  end
33
34
  end
@@ -3,68 +3,47 @@
3
3
 
4
4
  require 'markaby'
5
5
 
6
- module Ramaze::Template
7
- class Markaby < Template
8
-
9
- Ramaze::Controller.register_engine self, %w[ mab ]
10
-
11
- class << self
12
- # initializes the handling of a request on the controller.
13
- # Creates a new instances of itself and sends the action and params.
14
- # Also tries to render the template.
15
- # In Theory you can use this standalone, this has not been tested though.
16
-
17
- def transform controller, options = {}
18
- action, parameter, file, bound = *super
19
-
20
- unless controller.private_methods.include?(action)
21
- mixed_in = controller.class.ancestors === MarkabyMixin
22
- controller.class.send(:include, MarkabyMixin) unless mixed_in
23
-
24
- reaction = controller.send(action, *parameter)
25
-
26
- mab = ::Markaby::Builder.new
27
- template =
28
- if file
29
- transform_file(controller, file)
30
- elsif reaction.respond_to? :to_str
31
- reaction
32
- end
6
+ module Ramaze
7
+ module Template
8
+ class Markaby < Template
9
+ Controller.register_engine self, %w[ mab ]
10
+
11
+ class << self
12
+
13
+ # initializes the handling of a request on the controller.
14
+ # Creates a new instances of itself and sends the action and params.
15
+ # Also tries to render the template.
16
+ # In Theory you can use this standalone, this has not been tested though.
17
+
18
+ def transform controller, options = {}
19
+ action, parameter, file, bound = *super
20
+
21
+ unless controller.private_methods.include?(action)
22
+ reaction = controller.__send__(action, *parameter)
23
+ template =
24
+ if file
25
+ transform_file(controller, file)
26
+ elsif reaction.respond_to?(:to_str)
27
+ reaction
28
+ end
29
+ return template if template
30
+ end
31
+
32
+ raise Error::NoAction, "No Action found for `#{action}' on #{controller.class}"
33
33
  end
34
34
 
35
- return template if template
36
- raise Ramaze::Error::NoAction, "No Action found for `#{action}' on #{controller.class}"
37
- end
38
-
39
- def transform_file controller, file
40
- ivs = {}
41
- controller.instance_variables.each do |iv|
42
- ivs[iv.gsub('@', '').to_sym] = controller.instance_variable_get(iv)
43
- end
44
- controller.send(:mab, ivs) do
45
- instance_eval(File.read(file))
35
+ def transform_file controller, file
36
+ ivs = {}
37
+ controller.instance_variables.each do |iv|
38
+ ivs[iv.gsub('@', '').to_sym] = controller.instance_variable_get(iv)
39
+ end
40
+ controller.send(:mab, ivs) do
41
+ instance_eval(File.read(file))
42
+ end
43
+ rescue Object => ex
44
+ raise Error::Template, ex.message, ex.backtrace
46
45
  end
47
- rescue Object => ex
48
- puts ex
49
- raise Ramaze::Error::Template, ex.message, ex.backtrace
50
46
  end
51
47
  end
52
48
  end
53
-
54
- module MarkabyMixin
55
- private
56
-
57
- # use this inside your controller to directly build Markaby
58
- # Refer to the Markaby-documentation and testsuite for more examples.
59
- # Usage:
60
- # mab { h1 "Apples & Oranges"} #=> "<h1>Apples &amp; Oranges</h1>"
61
- # mab { h1 'Apples', :class => 'fruits&floots' } #=> "<h1 class=\"fruits&amp;floots\">Apples</h1>"
62
-
63
- def mab(*args, &block)
64
- builder = ::Markaby::Builder
65
- builder.extend(Ramaze::Helper)
66
- builder.send(:helper, :link)
67
- builder.new(*args, &block).to_s
68
- end
69
- end
70
49
  end
@@ -0,0 +1,128 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ $KCODE = 'UTF-8'
5
+ require 'ya2yaml'
6
+
7
+ class Ramaze::Tool::Localize
8
+
9
+ # Enable Localization
10
+ trait :enable => true
11
+
12
+ # Default language that is used if the browser don't suggests otherwise or
13
+ # the language requested is not available.
14
+ trait :default_language => 'en'
15
+
16
+ # languages supported
17
+ trait :languages => %w[ en ]
18
+
19
+ # YAML files the localizations are saved to and loaded from, %s is substituded
20
+ # by the values from trait[:languages]
21
+ trait :file => 'conf/locale_%s.yaml'.freeze
22
+
23
+ # The pattern that is substituted with the translation of the current locale.
24
+ trait :regex => /\[\[(.*?)\]\]/
25
+
26
+ # Browsers may send different keys for the same language, this allows you to
27
+ # do some coercion between what you use as keys and what the browser sends.
28
+ trait :mapping => { 'en-us' => 'en', 'ja' => 'jp'}
29
+
30
+ class << self
31
+
32
+ include Ramaze::Trinity
33
+
34
+ def call(response, options = {})
35
+ return response unless trait[:enable]
36
+ return response if response.body.nil?
37
+ return response if response.body.respond_to?(:read)
38
+ response.body = localize_body(response.body, options)
39
+ response
40
+ end
41
+
42
+ def localize_body(body, options)
43
+ locale = session[:LOCALE] || set_session_locale
44
+
45
+ body.gsub!(trait[:regex]) do
46
+ localize($1, locale)
47
+ end
48
+
49
+ store(locale, trait[:default_language])
50
+
51
+ body
52
+ end
53
+
54
+ def localize(str, locale)
55
+ Ramaze::Inform.debug "localizing: #{locale} => '#{str}'"
56
+
57
+ trans = nil
58
+ default_language = trait[:default_language]
59
+ dict = dictionary
60
+
61
+ if dict[locale] && trans = dict[locale][str]
62
+ #
63
+ elsif trans = dict[default_language][str]
64
+ dict[locale][str] = str
65
+ else
66
+ dict[locale][str] = str
67
+ dict[default_language][str] = str
68
+ end
69
+
70
+ trans || str
71
+ rescue Object => ex
72
+ Ramaze::Inform.error(ex)
73
+ str
74
+ end
75
+
76
+ def set_session_locale
77
+ session[:LOCALE] = trait[:default_language]
78
+ accepted_langs = request.http_accept_language rescue 'en'
79
+
80
+ mapping = trait[:mapping]
81
+ dict = dictionary
82
+ accepted_langs = accepted_langs.scan(/([^,;]+)(?:;q=[^,]+)?/m)[0]
83
+
84
+ accepted_langs.each do |language|
85
+ language = mapping[language] || language
86
+ if dict.key?(language)
87
+ session[:LOCALE] = language
88
+ break
89
+ end
90
+ end
91
+
92
+ session[:LOCALE]
93
+ end # end set_session_locale
94
+
95
+ def dictionary
96
+ trait[:dictionary] || load(*trait[:languages])
97
+ end
98
+
99
+ def load(*locales)
100
+ Ramaze::Inform.debug "loading locales: #{locales.inspect}"
101
+
102
+ dict = trait[:dictionary] || {}
103
+
104
+ locales.each do |locale|
105
+ begin
106
+ dict[locale] = YAML.load_file(trait[:file] % locale)
107
+ rescue Errno::ENOENT
108
+ dict[locale] = {}
109
+ end
110
+ end
111
+
112
+ trait[:dictionary] = dict
113
+ end
114
+
115
+ def store(*locales)
116
+ locales.uniq.compact.each do |locale|
117
+ Ramaze::Inform.debug "saving localized to: #{trait[:file] % locale}"
118
+ data = dictionary[locale].ya2yaml
119
+ file = trait[:file] % locale
120
+ File.open(file, File::CREAT|File::TRUNC|File::WRONLY) do |fd|
121
+ fd.write data
122
+ end
123
+ end
124
+ rescue Errno::ENOENT
125
+ # bleargh
126
+ end
127
+ end
128
+ end
@@ -9,8 +9,25 @@ module Ramaze
9
9
 
10
10
  module Tidy
11
11
 
12
+ trait[:enable] ||= false
13
+
12
14
  # set this to define a custom path to your tidy.so
13
- trait[:path] ||= `locate libtidy.so`.strip
15
+ trait[:paths] ||= %w[
16
+ /usr/lib/libtidy.so
17
+ /usr/local/lib/libtidy.so
18
+ ]
19
+
20
+ trait[:path] ||= nil
21
+
22
+ trait[:options] ||= {
23
+ :output_xml => true,
24
+ :input_encoding => :utf8,
25
+ :output_encoding => :utf8,
26
+ :indent_spaces => 2,
27
+ :indent => :auto,
28
+ :markup => :yes,
29
+ :wrap => 500
30
+ }
14
31
 
15
32
  # dirty html in, tidy html out
16
33
  # To activate Tidy for everything outgoing (given that it is of
@@ -34,31 +51,44 @@ module Ramaze
34
51
  # <body></body>
35
52
  # </html>
36
53
 
37
- def self.tidy html, options = {}
38
- require 'tidy'
54
+ class << self
55
+ def tidy html, options = {}
56
+ require 'tidy'
39
57
 
40
- ::Tidy.path = trait[:path]
58
+ unless found = trait[:path]
59
+ found = trait[:paths].find do |path|
60
+ File.exists?(path)
61
+ end
62
+ trait[:path] = found
63
+ end
41
64
 
42
- defaults = {
43
- :output_xml => true,
44
- :input_encoding => :utf8,
45
- :output_encoding => :utf8,
46
- :indent_spaces => 2,
47
- :indent => :auto,
48
- :markup => :yes,
49
- :wrap => 500
50
- }
65
+ path = trait[:path]
51
66
 
52
- ::Tidy.open(:show_warnings => true) do |tidy|
53
- defaults.merge(options).each do |key, value|
54
- tidy.options.send("#{key}=", value.to_s)
67
+ unless path
68
+ Inform.error("Could not find `libtidy.so' in #{trait[:paths].inspect}")
69
+ return html
55
70
  end
56
- tidy.clean(html)
71
+
72
+ ::Tidy.path = path
73
+
74
+ ::Tidy.open(:show_warnings => true) do |tidy|
75
+ opts = trait[:options].merge(options)
76
+ opts.each do |key, value|
77
+ tidy.options.send("#{key}=", value.to_s)
78
+ end
79
+ tidy.clean(html)
80
+ end
81
+ rescue LoadError => ex
82
+ puts ex
83
+ puts "cannot load 'tidy', please `gem install tidy`"
84
+ puts "you can find it at http://tidy.rubyforge.org/"
85
+ end
86
+
87
+ def call(response, options = {})
88
+ return response unless trait[:enable]
89
+ response.body = tidy(response.body, options)
90
+ response
57
91
  end
58
- rescue LoadError => ex
59
- puts ex
60
- puts "cannot load 'tidy', please `gem install tidy`"
61
- puts "you can find it at http://tidy.rubyforge.org/"
62
92
  end
63
93
 
64
94
  # calls self#tidy
@@ -18,21 +18,21 @@ module Ramaze
18
18
  # Thread.current[:request]
19
19
 
20
20
  def request
21
- Thread.current[:request]
21
+ Request.current
22
22
  end
23
23
 
24
24
  # same as
25
25
  # Thread.current[:response]
26
26
 
27
27
  def response
28
- Thread.current[:response]
28
+ Response.current
29
29
  end
30
30
 
31
31
  # same as
32
32
  # Thread.current[:session]
33
33
 
34
34
  def session
35
- Thread.current[:session]
35
+ Session.current
36
36
  end
37
37
  end
38
38
  end