zena 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. data/History.txt +23 -0
  2. data/README.rdoc +1 -1
  3. data/app/controllers/columns_controller.rb +3 -31
  4. data/app/controllers/comments_controller.rb +8 -3
  5. data/app/controllers/data_entries_controller.rb +1 -1
  6. data/app/controllers/documents_controller.rb +2 -2
  7. data/app/controllers/nodes_controller.rb +29 -12
  8. data/app/controllers/relations_controller.rb +2 -2
  9. data/app/controllers/sites_controller.rb +1 -1
  10. data/app/controllers/user_sessions_controller.rb +6 -3
  11. data/app/controllers/users_controller.rb +18 -16
  12. data/app/controllers/versions_controller.rb +20 -18
  13. data/app/controllers/virtual_classes_controller.rb +103 -17
  14. data/app/helpers/users_helper.rb +1 -1
  15. data/app/models/column.rb +19 -50
  16. data/app/models/comment.rb +2 -1
  17. data/app/models/node.rb +45 -22
  18. data/app/models/relation.rb +13 -0
  19. data/app/models/relation_proxy.rb +3 -2
  20. data/app/models/role.rb +213 -4
  21. data/app/models/site.rb +18 -11
  22. data/app/models/template.rb +37 -35
  23. data/app/models/version.rb +1 -1
  24. data/app/models/virtual_class.rb +154 -86
  25. data/app/views/columns/_li.html.erb +1 -1
  26. data/app/views/columns/index.html.erb +1 -9
  27. data/app/views/comments/index.rhtml +10 -8
  28. data/app/views/documents/_crop.rhtml +5 -6
  29. data/app/views/documents/crop_form.rjs +3 -2
  30. data/app/views/groups/index.rhtml +1 -1
  31. data/app/views/iformats/index.rhtml +1 -1
  32. data/app/views/nodes/_import_results.rhtml +1 -1
  33. data/app/views/nodes/_parent.rhtml +1 -2
  34. data/app/views/nodes/update.rjs +3 -4
  35. data/app/views/relations/index.erb +1 -1
  36. data/app/views/sites/index.erb +1 -1
  37. data/app/views/templates/drive_tabs/_drive.rhtml +0 -2
  38. data/app/views/templates/edit_tabs/_image.rhtml +1 -1
  39. data/app/views/templates/edit_tabs/_title.rhtml +0 -6
  40. data/app/views/users/index.rhtml +1 -1
  41. data/app/views/users/preferences.html.erb +2 -2
  42. data/app/views/versions/backup.rjs +1 -1
  43. data/app/views/versions/custom_tab.rhtml +9 -4
  44. data/app/views/versions/destroy.rjs +2 -2
  45. data/app/views/versions/update.rjs +2 -9
  46. data/app/views/virtual_classes/_form.erb +3 -2
  47. data/app/views/virtual_classes/import_prepare.html.erb +13 -0
  48. data/app/views/virtual_classes/index.erb +28 -8
  49. data/app/views/zafu/default/Node-+adminLayout.zafu +1 -13
  50. data/app/views/zafu/default/Node-+login.zafu +1 -0
  51. data/app/views/zafu/default/Node-+notFound.zafu +1 -1
  52. data/app/views/zafu/default/Node-+popupLayout.zafu +1 -2
  53. data/app/views/zafu/default/Node-+search.zafu +1 -1
  54. data/app/views/zafu/default/Node-admin.zafu +205 -0
  55. data/app/views/zafu/default/Node.zafu +11 -11
  56. data/bricks/captcha/lib/bricks/captcha.rb +3 -2
  57. data/bricks/mongrel/zena/init.rb +2 -1
  58. data/bricks/pdf/README +5 -5
  59. data/bricks/pdf/lib/bricks/pdf/engine/prince.rb +2 -2
  60. data/bricks/pdf/lib/bricks/pdf/engine/xhtml2pdf.rb +2 -2
  61. data/bricks/pdf/lib/bricks/pdf/install.rb +5 -5
  62. data/bricks/pdf/lib/bricks/pdf.rb +11 -11
  63. data/bricks/pdf/test/engines/test_prince.rb +4 -4
  64. data/bricks/pdf/test/engines/test_xhtml2pdf.rb +4 -4
  65. data/bricks/pdf/test/shoulda_macros/shoulda_pdf.rb +2 -2
  66. data/bricks/pdf/zena/init.rb +2 -2
  67. data/bricks/pdf/zena/tasks.rb +2 -2
  68. data/bricks/sphinx/lib/bricks/sphinx.rb +6 -2
  69. data/bricks/sphinx/zena/{sphinx.yml → sphinx.yml.erb} +2 -2
  70. data/bricks/sphinx/zena/tasks.rb +28 -2
  71. data/bricks/tags/lib/bricks/tags.rb +16 -1
  72. data/bricks/tags/zena/test/unit/tags_test.rb +15 -0
  73. data/bricks/tags/zena/test/zafu/tags.yml +5 -1
  74. data/bricks/worker/lib/bricks/worker.rb +39 -0
  75. data/bricks/worker/zena/deploy.rb +0 -2
  76. data/bricks/worker/zena/init.rb +1 -0
  77. data/bricks/worker/zena/test/sites/zena/delayed_jobs.yml +16 -0
  78. data/bricks/worker/zena/test/zafu/worker.yml +8 -0
  79. data/bricks/zena/zena/migrate/01_base.rb +36 -60
  80. data/bricks/zena/zena/migrate/02_zerox1_schema.rb +388 -0
  81. data/bricks/zena/zena/migrate/03_zerox1_data.rb +380 -0
  82. data/bricks/zena/zena/migrate/20110315161158_add_reverse_scope_to_roles.rb +9 -0
  83. data/config/database_example.yml +1 -1
  84. data/config/environment.rb +1 -1
  85. data/config/gems.yml +17 -14
  86. data/db/init/base/skins/default/Node-+index.zafu +8 -1
  87. data/db/init/base/skins/default/Node-+login.zafu +1 -0
  88. data/db/init/base/skins/default/Node-+popupLayout.zafu +1 -2
  89. data/db/init/base/skins/default/Node-+search.zafu +2 -2
  90. data/db/init/base/skins/default/Node.zafu +9 -9
  91. data/db/init/base/skins/default/{favicon.png → img/favicon.png} +0 -0
  92. data/db/init/base/skins/default/{style.css → img/style.css} +0 -0
  93. data/db/init/base/skins/default/img/translations.yml +11 -0
  94. data/db/init/base/skins/default/notes.zafu +7 -9
  95. data/doc/zafu_changes.yml +12 -0
  96. data/lib/bricks/loader.rb +38 -15
  97. data/lib/tasks/zena.rake +74 -24
  98. data/lib/zena/acts/enrollable.rb +4 -1
  99. data/lib/zena/acts/secure.rb +2 -48
  100. data/lib/zena/acts/serializable.rb +13 -1
  101. data/lib/zena/app.rb +9 -0
  102. data/lib/zena/code_syntax.rb +154 -151
  103. data/lib/zena/console.rb +141 -0
  104. data/lib/zena/controller/test_case.rb +1 -1
  105. data/lib/zena/db_helper/abstract_db.rb +17 -5
  106. data/lib/zena/db_helper/mysql.rb +14 -12
  107. data/lib/zena/db_helper/postgresql.rb +1 -2
  108. data/lib/zena/db_helper/sqlite3.rb +6 -6
  109. data/lib/zena/deploy/awstats.conf.rhtml +1 -1
  110. data/lib/zena/deploy/httpd.rhtml +6 -1
  111. data/lib/zena/deploy/vhost.rhtml +9 -1
  112. data/lib/zena/deploy.rb +12 -7
  113. data/lib/zena/foxy_parser.rb +3 -1
  114. data/lib/zena/info.rb +1 -1
  115. data/lib/zena/parser/zafu_tags.rb +1 -0
  116. data/lib/zena/parser/zazen_rules.rb +1 -1
  117. data/lib/zena/remote/node.rb +15 -3
  118. data/lib/zena/remote/serializable_array.rb +19 -0
  119. data/lib/zena/remote.rb +1 -0
  120. data/lib/zena/routes.rb +7 -2
  121. data/lib/zena/site_worker.rb +11 -1
  122. data/lib/zena/unit/test_case.rb +68 -0
  123. data/lib/zena/use/action.rb +6 -2
  124. data/lib/zena/use/ajax.rb +127 -53
  125. data/lib/zena/use/ancestry.rb +11 -8
  126. data/lib/zena/use/calendar.rb +265 -129
  127. data/lib/zena/use/conditional.rb +1 -1
  128. data/lib/zena/use/context.rb +5 -5
  129. data/lib/zena/use/dates.rb +172 -60
  130. data/lib/zena/use/display.rb +70 -39
  131. data/lib/zena/use/error_rendering.rb +1 -3
  132. data/lib/zena/use/field_index.rb +4 -1
  133. data/lib/zena/use/forms.rb +94 -72
  134. data/lib/zena/use/fulltext.rb +16 -24
  135. data/lib/zena/use/html_tags.rb +20 -12
  136. data/lib/zena/use/i18n.rb +37 -37
  137. data/lib/zena/use/image_builder.rb +8 -1
  138. data/lib/zena/use/ml_index.rb +16 -16
  139. data/lib/zena/use/prop_eval.rb +10 -5
  140. data/lib/zena/use/query_builder.rb +55 -23
  141. data/lib/zena/use/query_node.rb +51 -25
  142. data/lib/zena/use/refactor.rb +2 -28
  143. data/lib/zena/use/relations.rb +1 -1
  144. data/lib/zena/use/rendering.rb +29 -0
  145. data/lib/zena/use/scope_index.rb +75 -14
  146. data/lib/zena/use/search.rb +5 -10
  147. data/lib/zena/use/test_helper.rb +2 -2
  148. data/lib/zena/use/urls.rb +125 -104
  149. data/lib/zena/use/workflow.rb +2 -1
  150. data/lib/zena/use/zafu_attributes.rb +2 -2
  151. data/lib/zena/use/zafu_safe_definitions.rb +20 -0
  152. data/lib/zena/use/zafu_templates.rb +20 -6
  153. data/lib/zena/use/zazen.rb +31 -20
  154. data/lib/zena/view/test_case.rb +5 -0
  155. data/lib/zena/zafu_compiler.rb +24 -2
  156. data/lib/zena.rb +12 -6
  157. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  158. data/locale/de/zena.po +1345 -1164
  159. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  160. data/locale/en/zena.po +1275 -1129
  161. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  162. data/locale/fr/zena.mo +0 -0
  163. data/locale/fr/zena.po +1617 -1441
  164. data/locale/log.txt +9 -0
  165. data/locale/zena.pot +957 -748
  166. data/public/javascripts/prototype.js +1 -1
  167. data/public/javascripts/zena.js +99 -44
  168. data/public/stylesheets/admin.css +6 -4
  169. data/public/stylesheets/backend.css +71 -0
  170. data/public/stylesheets/calendar.css +24 -25
  171. data/public/stylesheets/code.css +11 -6
  172. data/public/stylesheets/comment.css +2 -1
  173. data/public/stylesheets/popup.css +7 -8
  174. data/test/custom_queries/complex.host.yml +15 -1
  175. data/test/fixtures/files/Node-test.zafu +29 -28
  176. data/test/fixtures/files/translations_de.yml +12 -1
  177. data/test/fixtures/files/translations_fr.yml +12 -1
  178. data/test/functional/comments_controller_test.rb +9 -0
  179. data/test/functional/iformats_controller_test.rb +1 -1
  180. data/test/functional/nodes_controller_test.rb +124 -35
  181. data/test/functional/users_controller_test.rb +132 -3
  182. data/test/functional/virtual_classes_controller_test.rb +75 -4
  183. data/test/integration/navigation_test.rb +51 -9
  184. data/test/integration/query_node/basic.yml +19 -7
  185. data/test/integration/query_node/complex.yml +1 -1
  186. data/test/integration/query_node/dates.yml +27 -1
  187. data/test/integration/query_node/filters.yml +1 -1
  188. data/test/integration/query_node/relations.yml +13 -4
  189. data/test/integration/query_node_test.rb +4 -0
  190. data/test/integration/xml_api_test.rb +6 -1
  191. data/test/integration/zafu_compiler/action.yml +3 -3
  192. data/test/integration/zafu_compiler/ajax.yml +103 -22
  193. data/test/integration/zafu_compiler/basic.yml +0 -52
  194. data/test/integration/zafu_compiler/calendar.yml +44 -20
  195. data/test/integration/zafu_compiler/comments.yml +53 -0
  196. data/test/integration/zafu_compiler/complex.yml +11 -11
  197. data/test/integration/zafu_compiler/complex_ok.yml +16 -3
  198. data/test/integration/zafu_compiler/conditional.yml +15 -5
  199. data/test/integration/zafu_compiler/context.yml +9 -0
  200. data/test/integration/zafu_compiler/dates.yml +43 -15
  201. data/test/integration/zafu_compiler/display.yml +60 -6
  202. data/test/integration/zafu_compiler/errors.yml +6 -2
  203. data/test/integration/zafu_compiler/forms.yml +45 -6
  204. data/test/integration/zafu_compiler/i18n.yml +8 -1
  205. data/test/integration/zafu_compiler/meta.yml +38 -0
  206. data/test/integration/zafu_compiler/query.yml +43 -4
  207. data/test/integration/zafu_compiler/relations.yml +26 -33
  208. data/test/integration/zafu_compiler/rubyless.yml +10 -0
  209. data/test/integration/zafu_compiler/safe_definitions.yml +21 -1
  210. data/test/integration/zafu_compiler/urls.yml +75 -5
  211. data/test/integration/zafu_compiler/version.yml +2 -2
  212. data/test/integration/zafu_compiler/zafu_attributes.yml +5 -1
  213. data/test/integration/zafu_compiler/zazen.yml +14 -6
  214. data/test/integration/zafu_compiler_test.rb +5 -1
  215. data/test/sites/complex/columns.yml +5 -0
  216. data/test/sites/complex/roles.yml +4 -0
  217. data/test/sites/zena/nodes.yml +13 -2
  218. data/test/sites/zena/roles.yml +13 -5
  219. data/test/sites/zena/versions.yml +27 -9
  220. data/test/unit/column_test.rb +51 -5
  221. data/test/unit/iformat_test.rb +2 -2
  222. data/test/unit/node_test.rb +29 -17
  223. data/test/unit/note_test.rb +1 -1
  224. data/test/unit/relation_proxy_test.rb +4 -5
  225. data/test/unit/relation_test.rb +16 -0
  226. data/test/unit/remote_test.rb +2 -2
  227. data/test/unit/role_test.rb +292 -4
  228. data/test/unit/site_test.rb +12 -0
  229. data/test/unit/template_test.rb +1 -1
  230. data/test/unit/text_document_test.rb +1 -1
  231. data/test/unit/virtual_class_test.rb +200 -83
  232. data/test/unit/zena/acts/enrollable_test.rb +26 -31
  233. data/test/unit/zena/use/calendar_test.rb +90 -37
  234. data/test/unit/zena/use/field_index_test.rb +28 -0
  235. data/test/unit/zena/use/html_tags_test.rb +7 -3
  236. data/test/unit/zena/use/ml_index_test.rb +2 -16
  237. data/test/unit/zena/use/nested_attributes_alias_view_test.rb +2 -2
  238. data/test/unit/zena/use/prop_eval_test.rb +50 -8
  239. data/test/unit/zena/use/query_node_test.rb +11 -0
  240. data/test/unit/zena/use/rendering_test.rb +72 -0
  241. data/test/unit/zena/use/scope_index_test.rb +37 -2
  242. data/test/unit/zena/use/urls_test.rb +10 -0
  243. data/test/unit/zena/use/zazen_test.rb +3 -3
  244. data/vendor/plugins/gettext_i18n_rails/Gemfile +11 -0
  245. data/vendor/plugins/gettext_i18n_rails/Gemfile.lock +92 -0
  246. data/vendor/plugins/gettext_i18n_rails/Rakefile +12 -17
  247. data/vendor/plugins/gettext_i18n_rails/Readme.md +215 -0
  248. data/vendor/plugins/gettext_i18n_rails/VERSION +1 -1
  249. data/vendor/plugins/gettext_i18n_rails/gettext_i18n_rails.gemspec +38 -34
  250. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/active_record.rb +1 -1
  251. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/backend.rb +30 -14
  252. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/haml_parser.rb +1 -1
  253. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/html_safe_translations.rb +29 -0
  254. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/i18n_hacks.rb +29 -1
  255. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/model_attributes_finder.rb +7 -1
  256. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/railtie.rb +10 -0
  257. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/ruby_gettext_extractor.rb +6 -2
  258. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/string_interpolate_fix.rb +20 -0
  259. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/tasks.rb +120 -0
  260. data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails.rb +10 -3
  261. data/vendor/plugins/gettext_i18n_rails/lib/tasks/gettext_rails_i18n.rake +1 -74
  262. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/active_record_spec.rb +51 -20
  263. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/backend_spec.rb +12 -7
  264. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/string_interpolate_fix_spec.rb +32 -0
  265. data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails_spec.rb +38 -1
  266. data/vendor/plugins/gettext_i18n_rails/spec/rails2/Gemfile +11 -0
  267. data/vendor/plugins/gettext_i18n_rails/spec/spec_helper.rb +1 -8
  268. data/zena.gemspec +2241 -2217
  269. metadata +123 -83
  270. data/.gitignore +0 -36
  271. data/app/views/nodes/_dates.rhtml +0 -13
  272. data/db/init/base/skins/default/Node-+adminLayout.zafu +0 -46
  273. data/db/init/base/skins/default/Node-tree.zafu +0 -19
  274. data/vendor/plugins/gettext_i18n_rails/README.markdown +0 -143
@@ -1,9 +1,9 @@
1
1
  module Bricks
2
- module PDF
2
+ module Pdf
3
3
  module Engine
4
4
  module Xhtml2pdf
5
5
  # Not supported until they have http auth and base url settings.
6
6
  end # Xhtml2pdf
7
7
  end # Engine
8
- end # PDF
8
+ end # Pdf
9
9
  end # Bricks
@@ -13,19 +13,19 @@ require 'tempfile'
13
13
  # end
14
14
 
15
15
  module Bricks
16
- module PDF
16
+ module Pdf
17
17
  class Install
18
18
 
19
- # Utility to install library necessary to PDF on unix like machine.
19
+ # Utility to install library necessary to Pdf on unix like machine.
20
20
  #
21
- # To install xhtml2pdf and his dependencies, see PDF::xhtml2pdf in zena/tasks.rb
21
+ # To install xhtml2pdf and his dependencies, see Pdf::xhtml2pdf in zena/tasks.rb
22
22
 
23
23
  include FileUtils::Verbose
24
24
 
25
25
  attr_reader :url, :file, :md5, :sha1, :force
26
26
 
27
27
  def self.from_url url, opts={}
28
- tmpf = Tempfile.new('PDF').path
28
+ tmpf = Tempfile.new('Pdf').path
29
29
  install_dir = "#{tmpf}_d"
30
30
  FileUtils.mkpath(install_dir)
31
31
  in_dir(install_dir) do
@@ -111,7 +111,7 @@ module Bricks
111
111
  end
112
112
 
113
113
  end # Install
114
- end # PDF
114
+ end # Pdf
115
115
  end # Bricks
116
116
 
117
117
 
@@ -1,19 +1,19 @@
1
1
  =begin rdoc
2
- PDF is module to render file or IO streams (strings obviously) into pdf.
2
+ Pdf is module to render file or IO streams (strings obviously) into pdf.
3
3
 
4
4
  Examples:
5
5
 
6
- Bricks::PDF.engine = 'Xhtml2pdf'
6
+ Bricks::Pdf.engine = 'Xhtml2pdf'
7
7
 
8
- Bricks::PDF.render_file "myfile.html" => STDOUT (strings)
9
- Bricks::PDF.render_file "myfile.html", "out.pdf" => out.pdf (file)
8
+ Bricks::Pdf.render_file "myfile.html" => STDOUT (strings)
9
+ Bricks::Pdf.render_file "myfile.html", "out.pdf" => out.pdf (file)
10
10
 
11
- Bricks::PDF.render_string "This is text to render." => STDOUT (strings)
12
- Bricks::PDF.render_string "This is text to render.", "out.pdf" => out.pdf (file)
11
+ Bricks::Pdf.render_string "This is text to render." => STDOUT (strings)
12
+ Bricks::Pdf.render_string "This is text to render.", "out.pdf" => out.pdf (file)
13
13
  =end
14
14
 
15
15
  module Bricks
16
- module PDF
16
+ module Pdf
17
17
  extend self
18
18
  # Wrapper around pdf engines
19
19
  module Engine
@@ -31,10 +31,10 @@ module Bricks
31
31
  end
32
32
 
33
33
  def engine=(engine_name)
34
- engine_module = Zena.resolve_const("Bricks::PDF::Engine::#{engine_name.to_s.capitalize}")
34
+ engine_module = Zena.resolve_const("Bricks::Pdf::Engine::#{engine_name.to_s.capitalize}")
35
35
  extend engine_module
36
36
  rescue NameError
37
- raise PDF::InvalidEngine, "Could not load pdf engine '#{engine_name}'."
37
+ raise Pdf::InvalidEngine, "Could not load pdf engine '#{engine_name}'."
38
38
  end
39
39
 
40
40
  def render(options)
@@ -66,7 +66,7 @@ module Bricks
66
66
 
67
67
  target_file = Tempfile.new('trg').path + '.pdf'
68
68
 
69
- data = Bricks::PDF.render(get_render_auth_params.merge(
69
+ data = Bricks::Pdf.render(get_render_auth_params.merge(
70
70
  :data => data,
71
71
  :output => target_file
72
72
  ))
@@ -106,5 +106,5 @@ module Bricks
106
106
 
107
107
  module ZafuMethods
108
108
  end # ZafuMethods
109
- end # PDF
109
+ end # Pdf
110
110
  end # Bricks
@@ -2,14 +2,14 @@ require 'helper'
2
2
  require 'bricks/pdf/engine/prince'
3
3
 
4
4
  class TestPrince < Test::Unit::TestCase
5
- context 'With a Prince based PDF engine' do
5
+ context 'With a Prince based Pdf engine' do
6
6
  subject do
7
7
  Module.new do
8
- extend Bricks::PDF
9
- extend Bricks::PDF::Engine::Prince
8
+ extend Bricks::Pdf
9
+ extend Bricks::Pdf::Engine::Prince
10
10
  end
11
11
  end
12
12
 
13
13
  should_behave_as_pdf_engine
14
- end # With a Prince based PDF engine
14
+ end # With a Prince based Pdf engine
15
15
  end
@@ -2,14 +2,14 @@ require 'helper'
2
2
  require 'bricks/pdf/engine/xhtml2pdf'
3
3
 
4
4
  class TestXhtml2pdf < Test::Unit::TestCase
5
- context 'With a Prince based PDF engine' do
5
+ context 'With a Prince based Pdf engine' do
6
6
  subject do
7
7
  Module.new do
8
- extend Bricks::PDF
9
- extend Bricks::PDF::Engine::Xhtml2pdf
8
+ extend Bricks::Pdf
9
+ extend Bricks::Pdf::Engine::Xhtml2pdf
10
10
  end
11
11
  end
12
12
 
13
13
  should_behave_as_pdf_engine
14
- end # With a Xhtml2pdf based PDF engine
14
+ end # With a Xhtml2pdf based Pdf engine
15
15
  end
@@ -27,7 +27,7 @@ class Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  should 'fill STDOUT if no destination is specified' do
30
- assert_match %r{^%PDF}, subject.render(:input => contact_html)
30
+ assert_match %r{^%Pdf}, subject.render(:input => contact_html)
31
31
  end
32
32
  end
33
33
 
@@ -40,7 +40,7 @@ class Test::Unit::TestCase
40
40
  end
41
41
 
42
42
  should 'fill STDOUT if no destination is specified' do
43
- assert_match %r{^%PDF}, subject.render(:data => '<html>Hello World</html>')
43
+ assert_match %r{^%Pdf}, subject.render(:data => '<html>Hello World</html>')
44
44
  end
45
45
  end
46
46
 
@@ -1,5 +1,5 @@
1
1
  require 'bricks/pdf'
2
2
 
3
- Bricks::PDF.engine = Bricks::CONFIG['pdf']['engine']
3
+ Bricks::Pdf.engine = Bricks::CONFIG['pdf']['engine']
4
4
 
5
- Zena::Use.module Bricks::PDF
5
+ Zena::Use.module Bricks::Pdf
@@ -1,7 +1,7 @@
1
1
  namespace :pdf do
2
2
  desc "Install binary for xhtml2pdf library"
3
3
  task :xhtml2pdf => :environment do
4
- install = Bricks::PDF::Install
4
+ install = Bricks::Pdf::Install
5
5
  install.from_url "http://pypi.python.org/packages/source/p/pisa/pisa-3.0.33.tar.gz", :md5 => 'e2040b12211303d065bc4ae2470d2700'
6
6
 
7
7
  install.from_url "http://www.reportlab.com/ftp/reportlab-2.5.tar.gz"
@@ -12,6 +12,6 @@ namespace :pdf do
12
12
 
13
13
  install.from_url 'http://pybrary.net/pyPdf/pyPdf-1.12.tar.gz'
14
14
 
15
- puts "\n==========================================\nBricks::PDF dependencies installation done"
15
+ puts "\n==========================================\nBricks::Pdf dependencies installation done"
16
16
  end
17
17
  end
@@ -7,7 +7,7 @@ module Bricks
7
7
  def search_text(query, opts = {})
8
8
  if offset = opts[:offset]
9
9
  limit = opts[:limit] || 20
10
- ids = search_for_ids(query, :with => with, :limit => (offset + limit) * [limit,20].max)
10
+ ids = search_for_ids(query, :with => opts[:with], :limit => (offset + limit) * [limit,20].max)
11
11
  return [] if ids.empty?
12
12
  # 1. filter with secure
13
13
  secure_ids = Zena::Db.fetch_ids("SELECT id FROM nodes WHERE #{secure_scope('nodes')} AND id IN (#{ids.join(',')})")
@@ -56,7 +56,11 @@ module Bricks
56
56
 
57
57
  where "versions.status >= #{Zena::Status[:pub]}"
58
58
 
59
- set_property :field_weights => { :idx_text_high => 5, :idx_text_medium => 3, :idx_text_low => 2 }
59
+ set_property :field_weights => {
60
+ :idx_text_high => 5,
61
+ :idx_text_medium => 3,
62
+ :idx_text_lowv => 2
63
+ }
60
64
  set_property :group_concat_max_len => 30000 # FIXME: articles can easily have a length of 17000 chars...
61
65
  set_property :delta => (has_dd ? :delayed : true)
62
66
  end
@@ -4,8 +4,8 @@ test:
4
4
  production:
5
5
  enable_star: 1
6
6
  min_infix_len: 2
7
- pid_file: /var/zena/shared/log/searchd.pid
8
- searchd_files: /var/zena/shared/db/sphinx
7
+ pid_file: <%= shared_path %>/log/searchd.production.pid
8
+ searchd_files: <%= shared_path %>/db/sphinx
9
9
  run_indexer_at: "10,40"
10
10
 
11
11
  development:
@@ -2,6 +2,28 @@
2
2
  # environment since it needs to get configuration settings from the classes in zena.
3
3
  require 'tempfile'
4
4
  require 'yaml'
5
+ require 'thinking_sphinx'
6
+
7
+
8
+ class RenderClass
9
+ def initialize(path)
10
+ @text = File.read(path)
11
+ end
12
+
13
+ def render(hash)
14
+ @values = hash
15
+ ERB.new(@text).result(binding)
16
+ end
17
+
18
+ def method_missing(sym)
19
+ return @values[sym] if @values.has_key?(sym)
20
+ super
21
+ end
22
+ end
23
+
24
+ def render(file, hash)
25
+ RenderClass.new(file).render(hash)
26
+ end
5
27
 
6
28
  namespace :sphinx do
7
29
  setup_done = File.exist?("#{RAILS_ROOT}/config/#{RAILS_ENV}.sphinx.conf")
@@ -14,7 +36,10 @@ namespace :sphinx do
14
36
  if File.exist?("#{RAILS_ROOT}/config/sphinx.yml")
15
37
  puts "Sphinx searchd: config/sphinx.yml exists, not copying"
16
38
  else
17
- FileUtils.cp(File.join(File.dirname(__FILE__), 'sphinx.yml'), "#{RAILS_ROOT}/config/sphinx.yml")
39
+ conf = render(File.join(File.dirname(__FILE__), 'sphinx.yml.erb'), :shared_path => File.expand_path(File.join(RAILS_ROOT,'..', '..', 'shared')))
40
+ File.open("#{RAILS_ROOT}/config/sphinx.yml", 'wb') do |f|
41
+ f.puts conf
42
+ end
18
43
  puts "Sphinx searchd: created initial config/sphinx.yml"
19
44
  end
20
45
 
@@ -48,7 +73,8 @@ namespace :sphinx do
48
73
  else
49
74
  crontab = res.chomp.split("\n")
50
75
  res = []
51
- job = "#{every} * * * * /usr/bin/rake RAILS_ENV=production sphinx:index >> /root/cron.log 2>&1"
76
+ root = File.expand_path(File.join(RAILS_ROOT, '..', '..', 'current'))
77
+ job = "#{every} * * * * cd #{root} && /usr/bin/env rake RAILS_ENV=production sphinx:index >> /root/cron.log 2>&1"
52
78
  job_inserted = false
53
79
  job_action = 'install'
54
80
  crontab.each do |line|
@@ -24,6 +24,18 @@ module Bricks
24
24
  end
25
25
 
26
26
  module InstanceMethods
27
+ def self.included(base)
28
+ # TODO: when we use to_xml instead of XmlSerializer, we can
29
+ # use 'tag_names' => SerializableArray.new('tag_names', 'tag', tag_names)
30
+ base.export_xml(Proc.new do |opts|
31
+ builder, rec = opts[:builder], opts[:record]
32
+ builder.tag!('tag_names', :type => :array) do
33
+ rec.tag_names.each do |tag|
34
+ builder.tag!('tag', tag, :type => :string)
35
+ end
36
+ end
37
+ end)
38
+ end
27
39
 
28
40
  def l_tag
29
41
  l_comment
@@ -77,6 +89,10 @@ module Bricks
77
89
  @tag_names ||= (tags || []).map {|t| t[:comment]}
78
90
  end
79
91
 
92
+ def tag_names=(tag_array)
93
+ @tag_names = tag_array
94
+ end
95
+
80
96
  # List of Links that are tags for the current node.
81
97
  def tags
82
98
  return @tags if defined?(@tags)
@@ -118,7 +134,6 @@ module Bricks
118
134
  end
119
135
  end
120
136
 
121
-
122
137
  private
123
138
 
124
139
  def tags_as_list(str)
@@ -100,4 +100,19 @@ class TagsTest < Zena::Unit::TestCase
100
100
  assert_equal 'big, brown, socks', node.tag_list
101
101
  end
102
102
 
103
+ context 'A node with tags' do
104
+ setup do
105
+ login(:tiger)
106
+ end
107
+
108
+ subject do
109
+ secure(Node) { nodes(:status) }
110
+ end
111
+
112
+ should 'serialize tag values in xml' do
113
+ assert_equal %w{blue sky}, Hash.from_xml(subject.to_xml)['node']['tag_names']
114
+ end
115
+ end # A node with tags
116
+
117
+
103
118
  end
@@ -1,4 +1,4 @@
1
- # test_file: ../../../../test/helpers/zena_parser_test.rb
1
+ # test_file: ../../../../../test/integration/zafu_compiler_test.rb
2
2
  default:
3
3
  context:
4
4
  node: 'status'
@@ -39,3 +39,7 @@ tag_names:
39
39
  node: 'status'
40
40
  src: "<r:tag_names><r:each join=', ' do='show'/></r:tag_names>"
41
41
  res: "blue, sky"
42
+
43
+ checkbox_tagged:
44
+ src: "<r:input type='checkbox' name='tagged[blue]'/>"
45
+ res: "<input type='checkbox' name='node[tagged][blue]' value='blue' checked='checked'/>"
@@ -0,0 +1,39 @@
1
+ module Bricks
2
+ module Worker
3
+ class Job < ActiveRecord::Base
4
+ include RubyLess
5
+ set_table_name :delayed_jobs
6
+
7
+ safe_method :run_at => Time, :created_at => Time, :info => String
8
+ # can be nil
9
+ safe_context :locked_at => Time, :locked_by => String
10
+
11
+ def info
12
+ obj = YAML.load(self[:handler])
13
+ if obj.respond_to?(:info)
14
+ obj.info
15
+ else
16
+ obj.inspect
17
+ end
18
+ end
19
+ end # Job
20
+
21
+ module ViewMethods
22
+ include RubyLess
23
+
24
+ safe_context :delayed_jobs => [Job]
25
+
26
+ def delayed_jobs
27
+ jobs = Bricks::Worker::Job.find(:all,
28
+ # FIXME: find a way to add site_id to delayed_jobs...
29
+ #:conditions => ['site_id = ?', current_site.id],
30
+ :order => 'run_at ASC'
31
+ )
32
+ jobs.empty? ? nil : jobs
33
+ end
34
+ end # ViewMethods
35
+ end # Worker
36
+ end
37
+
38
+ # Make sure the class is loaded before first YAML.load
39
+ Zena::SiteWorker
@@ -1,5 +1,3 @@
1
- require 'thinking_sphinx/deploy/capistrano'
2
-
3
1
  Capistrano::Configuration.instance(:must_exist).load do
4
2
 
5
3
  task :worker_stop, :roles => [:app] do
@@ -7,3 +7,4 @@ silence_warnings do
7
7
  Delayed::Job.const_set("MAX_RUN_TIME", 5.minutes)
8
8
  end
9
9
 
10
+ Zena::Use.module Bricks::Worker
@@ -0,0 +1,16 @@
1
+ zena_index:
2
+ run_at: 2011-03-21 10:41
3
+ handler: |
4
+ --- !ruby/struct:Zena::SiteWorker
5
+ site_id: 705790410
6
+ action: :rebuild_index
7
+ page: 1
8
+
9
+ ocean_vhash:
10
+ run_at: 2011-03-21 10:05
11
+ handler: |
12
+ --- !ruby/struct:Zena::SiteWorker
13
+ site_id: 740511775
14
+ action: :rebuild_vhash
15
+ page: 1
16
+
@@ -0,0 +1,8 @@
1
+ # test_file: ../../../../test/integration/zafu_compiler_test.rb
2
+ default:
3
+ context:
4
+ node: 'status'
5
+ visitor: 'anon'
6
+ src: "<r:delayed_jobs do='each' join=', '>[<r:run_at format='%Y-%m-%d %H:%M'/> <r:info/>]</r:delayed_jobs>"
7
+ tem: "/delayed_jobs/"
8
+ res: "[2011-03-21 10:05 -], [2011-03-21 10:41 rebuild_index, page 1/1]"