motiro 0.6.3

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 (309) hide show
  1. data/LICENSE +280 -0
  2. data/README +28 -0
  3. data/README.en +175 -0
  4. data/README.pt-br +175 -0
  5. data/Rakefile +10 -0
  6. data/app/controllers/account_controller.rb +62 -0
  7. data/app/controllers/application.rb +72 -0
  8. data/app/controllers/edition_controller.rb +13 -0
  9. data/app/controllers/javascript_controller.rb +21 -0
  10. data/app/controllers/report_controller.rb +79 -0
  11. data/app/controllers/root_controller.rb +7 -0
  12. data/app/controllers/wiki_controller.rb +102 -0
  13. data/app/core/cache_reporter.rb +53 -0
  14. data/app/core/cache_reporter_fetcher.rb +33 -0
  15. data/app/core/chief_editor.rb +69 -0
  16. data/app/core/reporter.rb +105 -0
  17. data/app/core/reporter_driver.rb +36 -0
  18. data/app/core/reporter_fetcher.rb +39 -0
  19. data/app/core/settings.rb +43 -0
  20. data/app/core/version.rb +1 -0
  21. data/app/core/wiki_page_not_found.rb +33 -0
  22. data/app/core/wiki_reporter.rb +83 -0
  23. data/app/helpers/account_helper.rb +2 -0
  24. data/app/helpers/application_helper.rb +68 -0
  25. data/app/helpers/default_page_provider.rb +28 -0
  26. data/app/helpers/report_helper.rb +2 -0
  27. data/app/helpers/root_helper.rb +2 -0
  28. data/app/helpers/wiki_helper.rb +3 -0
  29. data/app/models/change.rb +96 -0
  30. data/app/models/diff_table_builder.rb +285 -0
  31. data/app/models/event.rb +18 -0
  32. data/app/models/headline.rb +109 -0
  33. data/app/models/page.rb +114 -0
  34. data/app/models/page_sweeper.rb +26 -0
  35. data/app/models/user.rb +85 -0
  36. data/app/ports/chdir_runner.rb +36 -0
  37. data/app/ports/reporter_loader.rb +9 -0
  38. data/app/ports/runner.rb +64 -0
  39. data/app/reporters/darcs_connection.rb +54 -0
  40. data/app/reporters/darcs_reporter.rb +104 -0
  41. data/app/reporters/darcs_settings.rb +9 -0
  42. data/app/reporters/darcs_temp_repo.rb +40 -0
  43. data/app/reporters/events_reporter.rb +28 -0
  44. data/app/reporters/features_reporter.rb +24 -0
  45. data/app/reporters/subversion_reporter.rb +203 -0
  46. data/app/reporters/svn_connection.rb +62 -0
  47. data/app/reporters/svn_settings.rb +40 -0
  48. data/app/views/account/_authorization.rhtml +54 -0
  49. data/app/views/account/_availability.rhtml +5 -0
  50. data/app/views/account/availability.rhtml +1 -0
  51. data/app/views/account/login.rhtml +22 -0
  52. data/app/views/account/logout.rhtml +10 -0
  53. data/app/views/javascript/motiro.rjs +132 -0
  54. data/app/views/javascript/niftycube.rjs +300 -0
  55. data/app/views/layouts/_bottom.rhtml +5 -0
  56. data/app/views/layouts/_header.rhtml +7 -0
  57. data/app/views/layouts/_top.rhtml +25 -0
  58. data/app/views/layouts/application.rhtml +3 -0
  59. data/app/views/layouts/scaffold.rhtml +13 -0
  60. data/app/views/layouts/wiki_edit.rhtml +26 -0
  61. data/app/views/report/list.rhtml +32 -0
  62. data/app/views/report/older.rhtml +26 -0
  63. data/app/views/report/rss.rxml +29 -0
  64. data/app/views/report/show.rhtml +20 -0
  65. data/app/views/root/index.rhtml +33 -0
  66. data/app/views/wiki/_editbar.rhtml +26 -0
  67. data/app/views/wiki/_properties_edit.rhtml +5 -0
  68. data/app/views/wiki/_properties_show.rhtml +5 -0
  69. data/app/views/wiki/edit.rhtml +56 -0
  70. data/app/views/wiki/properties_edit.rhtml +1 -0
  71. data/app/views/wiki/show.rhtml +9 -0
  72. data/bin/motiro +44 -0
  73. data/config/boot.rb +19 -0
  74. data/config/database.yml +14 -0
  75. data/config/environment.rb +64 -0
  76. data/config/environments/development.rb +20 -0
  77. data/config/environments/production.rb +19 -0
  78. data/config/environments/test.rb +19 -0
  79. data/config/motiro.yml +43 -0
  80. data/config/routes.rb +79 -0
  81. data/db/migrate/005_globalize_migration.rb +11363 -0
  82. data/db/migrate/006_remove_headline_title.rb +14 -0
  83. data/db/migrate/007_stretch_rid.rb +11 -0
  84. data/db/migrate/008_add_page_editors.rb +12 -0
  85. data/db/migrate/009_add_page_original_author.rb +12 -0
  86. data/db/migrate/010_remove_empty_string_defaults_from_pages.rb +17 -0
  87. data/db/migrate/011_add_title_and_kind_to_pages.rb +13 -0
  88. data/db/migrate/012_page_modification_info.rb +13 -0
  89. data/db/migrate/013_nullify_initial_page_attributes.rb +21 -0
  90. data/db/migrate/014_events_are_wiki_pages.rb +13 -0
  91. data/db/migrate/015_migrate_previous_event_data.rb +23 -0
  92. data/db/migrate/1_initial_structure.rb +36 -0
  93. data/db/migrate/2_add_authentication.rb +12 -0
  94. data/db/migrate/3_drop_articles.rb +26 -0
  95. data/db/migrate/4_add_page_editing.rb +14 -0
  96. data/db/motirodb.sqlite.initial +0 -0
  97. data/db/schema_version +1 -0
  98. data/db/translation/pt-BR.rb +76 -0
  99. data/doc/README_FOR_APP +2 -0
  100. data/installer/rails_installer_defaults.yml +5 -0
  101. data/lib/import_translations.rb +154 -0
  102. data/lib/login_system.rb +89 -0
  103. data/lib/relative_time.rb +48 -0
  104. data/lib/string_extensions.rb +10 -0
  105. data/lib/stub_hash.rb +22 -0
  106. data/lib/tasks/packaging.rake +93 -0
  107. data/lib/tasks/testing.rake +32 -0
  108. data/lib/tick_daemon.rb +41 -0
  109. data/lib/translator.rb +67 -0
  110. data/lib/wiki_renderer.rb +42 -0
  111. data/lib/wiki_url_generator.rb +29 -0
  112. data/log/.keepdir +0 -0
  113. data/public/404.html +8 -0
  114. data/public/500.html +8 -0
  115. data/public/dispatch.cgi +10 -0
  116. data/public/dispatch.fcgi +24 -0
  117. data/public/dispatch.rb +10 -0
  118. data/public/favicon.ico +0 -0
  119. data/public/images/calendar.png +0 -0
  120. data/public/images/rss.png +0 -0
  121. data/public/javascripts/controls.js +750 -0
  122. data/public/javascripts/dragdrop.js +584 -0
  123. data/public/javascripts/effects.js +854 -0
  124. data/public/javascripts/prototype.js +1785 -0
  125. data/public/robots.txt +1 -0
  126. data/public/stylesheets/motiro.css +269 -0
  127. data/public/stylesheets/niftyCorners.css +35 -0
  128. data/public/stylesheets/scaffold.css +74 -0
  129. data/script/about +3 -0
  130. data/script/breakpointer +3 -0
  131. data/script/console +3 -0
  132. data/script/destroy +3 -0
  133. data/script/generate +3 -0
  134. data/script/performance/benchmarker +3 -0
  135. data/script/performance/profiler +3 -0
  136. data/script/plugin +3 -0
  137. data/script/process/reaper +3 -0
  138. data/script/process/spawner +3 -0
  139. data/script/process/spinner +3 -0
  140. data/script/runner +3 -0
  141. data/script/server +3 -0
  142. data/script/ticker +29 -0
  143. data/test/acceptance/account_test.rb +186 -0
  144. data/test/acceptance/darcs_test.rb +62 -0
  145. data/test/acceptance/events_test.rb +47 -0
  146. data/test/acceptance/main_page_test.rb +92 -0
  147. data/test/acceptance/subversion_test.rb +319 -0
  148. data/test/acceptance/ts_all_suites.rb +27 -0
  149. data/test/acceptance/wiki_test.rb +202 -0
  150. data/test/contract/darcs_test.rb +51 -0
  151. data/test/contract/remote_darcs_test.rb +61 -0
  152. data/test/contract/svn_test.rb +53 -0
  153. data/test/fixtures/changes.yml +25 -0
  154. data/test/fixtures/headlines.yml +45 -0
  155. data/test/fixtures/pages.yml +98 -0
  156. data/test/fixtures/users.yml +31 -0
  157. data/test/functional/account_controller_test.rb +96 -0
  158. data/test/functional/report_controller_test.rb +113 -0
  159. data/test/functional/report_features_test.rb +38 -0
  160. data/test/functional/report_subversion_test.rb +79 -0
  161. data/test/functional/root_controller_test.rb +127 -0
  162. data/test/functional/wiki_controller_test.rb +280 -0
  163. data/test/lib/acceptance_test_case.rb +43 -0
  164. data/test/lib/configuration.rb +53 -0
  165. data/test/lib/darcs_excerpts.rb +181 -0
  166. data/test/lib/darcs_repo.rb +77 -0
  167. data/test/lib/live_mode_test.rb +51 -0
  168. data/test/lib/local_svn.rb +157 -0
  169. data/test/lib/netutils.rb +42 -0
  170. data/test/lib/platform_thread.rb +62 -0
  171. data/test/lib/repoutils.rb +23 -0
  172. data/test/lib/selenium_extensions.rb +32 -0
  173. data/test/lib/stubio.rb +37 -0
  174. data/test/lib/svn_excerpts.rb +288 -0
  175. data/test/lib/test_configuration.rb +14 -0
  176. data/test/lib/webserver.rb +71 -0
  177. data/test/meta/configuration_test.rb +72 -0
  178. data/test/meta/darcs_repo_test.rb +118 -0
  179. data/test/meta/local_svn_test.rb +125 -0
  180. data/test/meta/platform_thread_test.rb +46 -0
  181. data/test/meta/stubio_test.rb +44 -0
  182. data/test/mocks/headline.rb +34 -0
  183. data/test/mocks/svn_reporter.rb +29 -0
  184. data/test/stubs/svn_settings.rb +19 -0
  185. data/test/stubs/url_generator.rb +24 -0
  186. data/test/test_helper.rb +36 -0
  187. data/test/unit/cache_reporter_fetcher_test.rb +46 -0
  188. data/test/unit/cache_reporter_test.rb +97 -0
  189. data/test/unit/caching_test.rb +78 -0
  190. data/test/unit/change_test.rb +152 -0
  191. data/test/unit/chdir_runner_test.rb +77 -0
  192. data/test/unit/chief_editor_test.rb +234 -0
  193. data/test/unit/darcs_connection_test.rb +109 -0
  194. data/test/unit/darcs_reporter_test.rb +146 -0
  195. data/test/unit/darcs_settings_test.rb +37 -0
  196. data/test/unit/darcs_temp_repo_test.rb +51 -0
  197. data/test/unit/default_page_provider_test.rb +46 -0
  198. data/test/unit/diff_table_builder_test.rb +602 -0
  199. data/test/unit/headline_test.rb +259 -0
  200. data/test/unit/page_test.rb +145 -0
  201. data/test/unit/relative_time_test.rb +56 -0
  202. data/test/unit/reporter_driver_test.rb +85 -0
  203. data/test/unit/reporter_fetcher_test.rb +31 -0
  204. data/test/unit/reporter_test.rb +81 -0
  205. data/test/unit/runner_test.rb +93 -0
  206. data/test/unit/settings_test.rb +55 -0
  207. data/test/unit/string_extensions_test.rb +10 -0
  208. data/test/unit/svn_connection_test.rb +183 -0
  209. data/test/unit/svn_reporter_interaction_test.rb +38 -0
  210. data/test/unit/svn_reporter_test.rb +286 -0
  211. data/test/unit/svn_settings_test.rb +86 -0
  212. data/test/unit/translator_test.rb +96 -0
  213. data/test/unit/user_test.rb +125 -0
  214. data/test/unit/wiki_renderer_test.rb +87 -0
  215. data/test/unit/wiki_reporter_test.rb +94 -0
  216. data/test/unit/wiki_url_generator_test.rb +31 -0
  217. data/vendor/motiro-installer.rb +159 -0
  218. data/vendor/plugins/globalize/LICENSE +9 -0
  219. data/vendor/plugins/globalize/README +49 -0
  220. data/vendor/plugins/globalize/data/country_data.csv +240 -0
  221. data/vendor/plugins/globalize/data/language_data.csv +188 -0
  222. data/vendor/plugins/globalize/data/translation_data.csv +3421 -0
  223. data/vendor/plugins/globalize/generators/globalize/USAGE +10 -0
  224. data/vendor/plugins/globalize/generators/globalize/globalize_generator.rb +42 -0
  225. data/vendor/plugins/globalize/generators/globalize/templates/migration.rb.gz +0 -0
  226. data/vendor/plugins/globalize/generators/globalize/templates/tiny_migration.rb.gz +0 -0
  227. data/vendor/plugins/globalize/init.rb +30 -0
  228. data/vendor/plugins/globalize/lib/globalize/localization/core_ext.rb +170 -0
  229. data/vendor/plugins/globalize/lib/globalize/localization/core_ext_hooks.rb +33 -0
  230. data/vendor/plugins/globalize/lib/globalize/localization/db_translate.rb +494 -0
  231. data/vendor/plugins/globalize/lib/globalize/localization/db_view_translator.rb +152 -0
  232. data/vendor/plugins/globalize/lib/globalize/localization/locale.rb +173 -0
  233. data/vendor/plugins/globalize/lib/globalize/localization/rfc_3066.rb +40 -0
  234. data/vendor/plugins/globalize/lib/globalize/models/country.rb +24 -0
  235. data/vendor/plugins/globalize/lib/globalize/models/currency.rb +188 -0
  236. data/vendor/plugins/globalize/lib/globalize/models/language.rb +84 -0
  237. data/vendor/plugins/globalize/lib/globalize/models/model_translation.rb +4 -0
  238. data/vendor/plugins/globalize/lib/globalize/models/translation.rb +9 -0
  239. data/vendor/plugins/globalize/lib/globalize/models/view_translation.rb +14 -0
  240. data/vendor/plugins/globalize/lib/globalize/rails/action_mailer.rb +125 -0
  241. data/vendor/plugins/globalize/lib/globalize/rails/action_view.rb +79 -0
  242. data/vendor/plugins/globalize/lib/globalize/rails/active_record.rb +129 -0
  243. data/vendor/plugins/globalize/lib/globalize/rails/active_record_helper.rb +33 -0
  244. data/vendor/plugins/globalize/populators/pop_dates.rb +81 -0
  245. data/vendor/plugins/globalize/populators/pop_migration.rb +18 -0
  246. data/vendor/plugins/globalize/populators/pop_pluralization.rb +26 -0
  247. data/vendor/plugins/globalize/populators/pop_seps.rb +32 -0
  248. data/vendor/plugins/globalize/tasks/data.rake +130 -0
  249. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.en-US.plain.text.rhtml +1 -0
  250. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.en.plain.text.rhtml +1 -0
  251. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.he.plain.text.rhtml +1 -0
  252. data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.plain.text.rhtml +1 -0
  253. data/vendor/plugins/globalize/test/action_mailer_test.rb +54 -0
  254. data/vendor/plugins/globalize/test/config/database.yml.default +16 -0
  255. data/vendor/plugins/globalize/test/config/database.yml.example +22 -0
  256. data/vendor/plugins/globalize/test/core_ext_test.rb +61 -0
  257. data/vendor/plugins/globalize/test/currency_test.rb +141 -0
  258. data/vendor/plugins/globalize/test/date_helper_test.rb +634 -0
  259. data/vendor/plugins/globalize/test/db/schema.rb +90 -0
  260. data/vendor/plugins/globalize/test/db_translation_test.rb +374 -0
  261. data/vendor/plugins/globalize/test/fixtures/globalize_categories.yml +7 -0
  262. data/vendor/plugins/globalize/test/fixtures/globalize_categories_products.yml +7 -0
  263. data/vendor/plugins/globalize/test/fixtures/globalize_countries.yml +41 -0
  264. data/vendor/plugins/globalize/test/fixtures/globalize_languages.yml +64 -0
  265. data/vendor/plugins/globalize/test/fixtures/globalize_manufacturers.yml +5 -0
  266. data/vendor/plugins/globalize/test/fixtures/globalize_products.yml +29 -0
  267. data/vendor/plugins/globalize/test/fixtures/globalize_simples.yml +5 -0
  268. data/vendor/plugins/globalize/test/fixtures/globalize_translations.yml +354 -0
  269. data/vendor/plugins/globalize/test/locale_test.rb +27 -0
  270. data/vendor/plugins/globalize/test/mime_responds_test.rb +358 -0
  271. data/vendor/plugins/globalize/test/model_test.rb +17 -0
  272. data/vendor/plugins/globalize/test/standard_data_test_helper.rb +33 -0
  273. data/vendor/plugins/globalize/test/test_helper.rb +19 -0
  274. data/vendor/plugins/globalize/test/test_standard_data.rb +54 -0
  275. data/vendor/plugins/globalize/test/validation_test.rb +29 -0
  276. data/vendor/plugins/globalize/test/view_picking_test.rb +49 -0
  277. data/vendor/plugins/globalize/test/view_translation_test.rb +237 -0
  278. data/vendor/plugins/globalize/test/views/layouts/standard.rhtml +1 -0
  279. data/vendor/plugins/globalize/test/views/respond_to/all_types_with_layout.rhtml +1 -0
  280. data/vendor/plugins/globalize/test/views/respond_to/all_types_with_layout.rjs +1 -0
  281. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rhtml +1 -0
  282. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rjs +1 -0
  283. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rxml +1 -0
  284. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rhtml +1 -0
  285. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rjs +1 -0
  286. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rxml +1 -0
  287. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rhtml +1 -0
  288. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rjs +1 -0
  289. data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rxml +1 -0
  290. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rhtml +1 -0
  291. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rjs +1 -0
  292. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rxml +1 -0
  293. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rhtml +1 -0
  294. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rjs +1 -0
  295. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rxml +1 -0
  296. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rhtml +1 -0
  297. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rjs +1 -0
  298. data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rxml +1 -0
  299. data/vendor/plugins/globalize/test/views/test.he-IL.rhtml +1 -0
  300. data/vendor/plugins/globalize/test/views/test.rhtml +1 -0
  301. data/vendor/plugins/globalize/test/views/test2.he.rhtml +1 -0
  302. data/vendor/plugins/globalize/test/views/test2.rhtml +1 -0
  303. data/vendor/plugins/test_xml/MIT-LICENSE +20 -0
  304. data/vendor/plugins/test_xml/README +20 -0
  305. data/vendor/plugins/test_xml/Rakefile +22 -0
  306. data/vendor/plugins/test_xml/init.rb +7 -0
  307. data/vendor/plugins/test_xml/lib/xml_assertions.rb +22 -0
  308. data/vendor/plugins/test_xml/test/test_xml_test.rb +40 -0
  309. metadata +505 -0
@@ -0,0 +1,14 @@
1
+ class RemoveHeadlineTitle < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ remove_column 'headlines', 'title'
5
+ add_index 'headlines', 'rid'
6
+ end
7
+
8
+
9
+ def self.down
10
+ remove_index 'headlines', 'rid'
11
+ add_column 'headlines', 'title', :string, :limit => 100, :default => "", :null => false
12
+ end
13
+
14
+ end
@@ -0,0 +1,11 @@
1
+ class StretchRid < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ change_column 'headlines', 'rid', :string, :limit => 255
5
+ end
6
+
7
+ def self.down
8
+ change_column 'headlines', 'rid', :string, :limit => 40
9
+ end
10
+
11
+ end
@@ -0,0 +1,12 @@
1
+ class AddPageEditors < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ add_column 'pages', 'editors', :text, :default => "", :null => false
5
+ end
6
+
7
+
8
+ def self.down
9
+ remove_column 'pages', 'editors'
10
+ end
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ class AddPageOriginalAuthor < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ add_column 'pages', 'original_author_id', :integer
5
+ end
6
+
7
+
8
+ def self.down
9
+ remove_column 'pages', 'original_author_id'
10
+ end
11
+
12
+ end
@@ -0,0 +1,17 @@
1
+ class RemoveEmptyStringDefaultsFromPages < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ rename_table 'pages', 'pages_old'
5
+ create_table 'pages', :force => true do |t|
6
+ t.column "name", :string, :null => false
7
+ t.column "text", :text, :null => false
8
+ t.column 'editors', :text, :null => false
9
+ t.column 'original_author_id', :integer
10
+ end
11
+ execute 'INSERT INTO pages (name, text, editors, original_author_id) SELECT name, text, editors, original_author_id FROM pages_old'
12
+ drop_table 'pages_old'
13
+ end
14
+
15
+ def self.down; end
16
+
17
+ end
@@ -0,0 +1,13 @@
1
+ class AddTitleAndKindToPages < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ add_column 'pages', 'kind', :text
5
+ add_column 'pages', 'title', :text
6
+ end
7
+
8
+ def self.down
9
+ remove_column 'pages', 'kind'
10
+ remove_column 'pages', 'title'
11
+ end
12
+
13
+ end
@@ -0,0 +1,13 @@
1
+ class PageModificationInfo < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ add_column 'pages', 'modified_at', :timestamp
5
+ add_column 'pages', 'last_editor_id', :integer
6
+ end
7
+
8
+ def self.down
9
+ remove_column 'pages', 'modified_at'
10
+ remove_column 'pages', 'last_editor_id'
11
+ end
12
+
13
+ end
@@ -0,0 +1,21 @@
1
+ class NullifyInitialPageAttributes < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ rename_table 'pages', 'pages_old'
5
+ create_table 'pages', :force => true do |t|
6
+ t.column "name", :string
7
+ t.column "text", :text
8
+ t.column 'editors', :text
9
+ t.column 'original_author_id', :integer
10
+ t.column 'kind', :text
11
+ t.column 'title', :text
12
+ t.column 'modified_at', :timestamp
13
+ t.column 'last_editor_id', :integer
14
+ end
15
+ execute 'INSERT INTO pages (name, text, editors, original_author_id, kind, title, modified_at, last_editor_id) SELECT name, text, editors, original_author_id, kind, title, modified_at, last_editor_id FROM pages_old'
16
+ drop_table 'pages_old'
17
+ end
18
+
19
+ def self.down; end
20
+
21
+ end
@@ -0,0 +1,13 @@
1
+ class EventsAreWikiPages < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ add_column('pages', 'type', :string)
5
+ add_column('pages', 'happens_at', :date)
6
+ end
7
+
8
+ def self.down
9
+ remove_column('pages', 'type')
10
+ remove_column('pages', 'happens_at')
11
+ end
12
+
13
+ end
@@ -0,0 +1,23 @@
1
+ class MigratePreviousEventData < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ Headline.find(:all, :conditions => "reported_by = 'events'").each do |hl|
5
+ author = User.find_by_login(hl.author)
6
+ e = Event.new(:title => hl.title,
7
+ :name => hl.title.downcase.gsub(/ /, '_').camelize,
8
+ :text => hl.description,
9
+ :editors => '', :original_author => author, :kind => 'event',
10
+ :modified_at => Time.local(2007, 1, 22, 14, 35, 43),
11
+ :last_editor => author,
12
+ :happens_at => Date.civil(hl.happened_at.year,
13
+ hl.happened_at.month,
14
+ hl.happened_at.day))
15
+ e.save
16
+ hl.destroy
17
+ end
18
+ end
19
+
20
+ def self.down
21
+ end
22
+
23
+ end
@@ -0,0 +1,36 @@
1
+ class InitialStructure < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table "headlines", :force => true do |t|
5
+ t.column "author", :string, :limit => 40, :default => "", :null => false
6
+ t.column "title", :string, :limit => 100, :default => "", :null => false
7
+ t.column "happened_at", :timestamp
8
+ t.column "reported_by", :string, :limit => 40, :default => "", :null => false
9
+ t.column "rid", :string, :limit => 40, :default => "", :null => false
10
+ end
11
+
12
+ create_table "articles", :force => true do |t|
13
+ t.column "headline_id", :integer, :default => 0, :null => false
14
+ t.column "description", :text
15
+ end
16
+
17
+ add_index "articles", ["headline_id"], :name => "fk_article_headline"
18
+
19
+ create_table "changes", :force => true do |t|
20
+ t.column "article_id", :integer, :default => 0, :null => false
21
+ t.column "summary", :text, :default => "", :null => false
22
+ t.column "resource_kind", :string, :limit => 6
23
+ t.column "diff", :text
24
+ end
25
+
26
+ add_index "changes", ["article_id"], :name => "fk_change_article"
27
+
28
+ end
29
+
30
+
31
+ def self.down
32
+ drop_table 'changes'
33
+ drop_table 'articles'
34
+ drop_table 'headlines'
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ class AddAuthentication < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :users do |t|
4
+ t.column :login, :string, :default => nil
5
+ t.column :password, :string, :default => nil
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ drop_table :users
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ class DropArticles < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ add_column 'headlines', "description", :text
5
+ remove_index 'changes', :name => 'fk_change_article'
6
+ rename_column 'changes', 'article_id', 'headline_id'
7
+ add_index "changes", ["headline_id"], :name => "fk_change_headline"
8
+ drop_table 'articles'
9
+ end
10
+
11
+
12
+ def self.down
13
+ create_table "articles", :force => true do |t|
14
+ t.column "headline_id", :integer, :default => 0, :null => false
15
+ t.column "description", :text
16
+ end
17
+
18
+ add_index "articles", ["headline_id"], :name => "fk_article_headline"
19
+
20
+ remove_index 'changes', :name => 'fk_change_headline'
21
+ rename_column 'changes', 'headline_id', 'article_id'
22
+ add_index "changes", ["article_id"], :name => "fk_change_article"
23
+
24
+ remove_column 'headlines', 'descrition'
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ class AddPageEditing < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table "pages", :force => true do |t|
5
+ t.column "name", :string, :default => '', :null => false
6
+ t.column "text", :text, :default => '', :null => false
7
+ end
8
+ end
9
+
10
+
11
+ def self.down
12
+ drop_table "pages"
13
+ end
14
+ end
Binary file
data/db/schema_version ADDED
@@ -0,0 +1 @@
1
+ 15
@@ -0,0 +1,76 @@
1
+ {
2
+ # Relative dates
3
+ 'Tomorrow' => 'Amanhã',
4
+ 'Yesterday' => 'Ontem',
5
+ "%s ago" => 'Há %s',
6
+ "%s from now" => 'Daqui a %s',
7
+ 'minute' => 'minuto',
8
+ 'hour' => 'hora',
9
+ 'day' => 'dia',
10
+ 'week' => 'semana',
11
+ 'month' => 'mês',
12
+ 'year' => 'ano',
13
+ 'Less than one minute ago' => 'Há menos de um minuto',
14
+
15
+ # Main page
16
+ 'Welcome' => 'Bem-vindo',
17
+ 'User' => 'Usuário',
18
+ 'Password' => 'Senha',
19
+ 'Confirmation' => 'Confirmação',
20
+ 'New user?' => 'Novo usuário?',
21
+ 'Not available' => 'Não está disponível',
22
+ 'Passwords do not match' => 'Senhas não conferem',
23
+ 'Sign out' => 'Sair',
24
+ 'Last update by %s at %s' => 'Última atualização por %s em %s',
25
+ 'Edit' => 'Editar',
26
+ '(requires authentication)' => '(identifique-se, por favor)',
27
+ '(not authorized)' => '(não autorizado)',
28
+ 'Latest news from %s' => 'Últimas notícias do %s',
29
+ 'Recently changed suggestions' => 'Últimas sugestões modificadas',
30
+ 'Scheduled events' => 'Eventos agendados',
31
+ 'Planned features' => 'Funcionalidades planejadas',
32
+ 'version' => 'versão',
33
+ 'Add' => 'Adicionar',
34
+ 'Older' => 'Antigas',
35
+
36
+ # Breadcrumbs for revision and wiki pages
37
+ 'You are here: ' => 'Você está aqui: ',
38
+ 'Home' => 'Início',
39
+ 'Features' => 'Sugestões',
40
+ 'Events' => 'Eventos',
41
+
42
+ # Source revision details page
43
+ 'Revision details' => 'Detalhes de revisão',
44
+ 'Revision %s' => 'Revisão %s',
45
+ 'Changes to %s' => 'Alterações em %s',
46
+ 'The article %s from the %s reporter could not be found' => 'Não foi possível encontrar o artigo %s do repórter %s',
47
+
48
+ # Event details and new event pages
49
+ 'Events' => 'Eventos',
50
+ 'Event' => 'Evento',
51
+ 'Date' => 'Data',
52
+ 'Note' => 'Observação',
53
+ 'Event added' => 'Evento registrado',
54
+ 'This event is planned for' => 'Este evento está planejado para',
55
+ 'This event was planned for' => 'Este evento foi planejado para',
56
+ 'The first line on the event text will turn into a summary displayed on the main page' => 'A primeira linha do texto do evento será exibida como resumo na página principal',
57
+
58
+ # Wiki edition page
59
+ 'Insert page title here' => 'Digite o título aqui',
60
+ 'Save modifications' => 'Salvar modificações',
61
+ 'Discard' => 'Descartar',
62
+ 'Quick reference' => 'Referência rápida',
63
+ 'Title' => 'Título',
64
+ 'address' => 'endereço',
65
+ 'label' => 'rótulo',
66
+ 'Page properties' => 'Propriedades da página',
67
+ 'This page is a' => 'Esta página é uma',
68
+ 'common wiki page' => 'página wiki comum',
69
+ 'feature suggestion' => 'sugestão de recurso',
70
+ 'event description' => 'descrição de evento',
71
+ 'Who should be able to edit this page?' => 'Quem pode editar esta página?',
72
+ '(Usernames separated by spaces. Blank for everyone)' => '(Nomes de usuário separados por espaços. Em branco para todos.)',
73
+
74
+ # Older headlines page
75
+ 'Author' => 'Autor'
76
+ }
@@ -0,0 +1,2 @@
1
+ Use this README file to introduce your application and point to useful places in the API for learning more.
2
+ Run "rake appdoc" to generate API documentation for your models and controllers.
@@ -0,0 +1,5 @@
1
+ ---
2
+ rails-environment: production
3
+ database: sqlite
4
+ web-server: mongrel
5
+ threads: 2
@@ -0,0 +1,154 @@
1
+ require 'csv'
2
+
3
+ def populate_translation_tables
4
+ # add in defaults
5
+ load_from_csv("globalize_countries", country_data)
6
+ load_from_csv("globalize_languages", language_data)
7
+ load_from_csv("globalize_translations", translation_data)
8
+ end
9
+
10
+ def load_from_csv(table_name, data)
11
+ column_clause = nil
12
+ is_header = false
13
+ cnx = ActiveRecord::Base.connection
14
+ ActiveRecord::Base.silence do
15
+ reader = CSV::Reader.create(data)
16
+
17
+ columns = reader.shift.map {|column_name| cnx.quote_column_name(column_name) }
18
+ column_clause = columns.join(', ')
19
+
20
+ reader.each do |row|
21
+ next if row.first.nil? # skip blank lines
22
+ raise "No table name defined" if !table_name
23
+ raise "No header defined" if !column_clause
24
+ values_clause = row.map {|v| cnx.quote(v).gsub('\\n', "\n").gsub('\\r', "\r") }.join(', ')
25
+ sql = "INSERT INTO #{table_name} (#{column_clause}) VALUES (#{values_clause})"
26
+ cnx.insert(sql)
27
+ end
28
+ end
29
+ end
30
+
31
+ def country_data
32
+ <<END_OF_DATA
33
+ "id","code","english_name","date_format","currency_format","currency_code","thousands_sep","decimal_sep","currency_decimal_sep","number_grouping_scheme"
34
+ 1,"BR","Brazil",,"R$%n","BRR",".",",",",","western"
35
+ 2,"US","United States of America",,,"USD",",",".",".","western"
36
+ END_OF_DATA
37
+ end
38
+
39
+ def language_data
40
+ <<END_OF_DATA
41
+ "id","iso_639_1","iso_639_2","iso_639_3","rfc_3066","english_name","english_name_locale","english_name_modifier","native_name","native_name_locale","native_name_modifier","macro_language","direction","pluralization","scope"
42
+ 1,"en","eng","eng",,"English",,,,,,0,"ltr","c == 1 ? 1 : 2","L"
43
+ 2,"pt","por","por",,"Portuguese",,,"português",,,0,"ltr","c == 1 ? 1 : 2","L"
44
+ END_OF_DATA
45
+ end
46
+
47
+ def translation_data
48
+ <<END_OF_DATA
49
+ "id","type","tr_key","table_name","item_id","facet","language_id","text","pluralization_index"
50
+ 1,"ViewTranslation","Sunday [weekday]","",,"",1,"Sunday",1
51
+ 2,"ViewTranslation","Monday [weekday]","",,"",1,"Monday",1
52
+ 3,"ViewTranslation","Tuesday [weekday]","",,"",1,"Tuesday",1
53
+ 4,"ViewTranslation","Wednesday [weekday]","",,"",1,"Wednesday",1
54
+ 5,"ViewTranslation","Thursday [weekday]","",,"",1,"Thursday",1
55
+ 6,"ViewTranslation","Friday [weekday]","",,"",1,"Friday",1
56
+ 7,"ViewTranslation","Saturday [weekday]","",,"",1,"Saturday",1
57
+ 8,"ViewTranslation","Sun [abbreviated weekday]","",,"",1,"Sun",1
58
+ 9,"ViewTranslation","Mon [abbreviated weekday]","",,"",1,"Mon",1
59
+ 10,"ViewTranslation","Tue [abbreviated weekday]","",,"",1,"Tue",1
60
+ 11,"ViewTranslation","Wed [abbreviated weekday]","",,"",1,"Wed",1
61
+ 12,"ViewTranslation","Thu [abbreviated weekday]","",,"",1,"Thu",1
62
+ 13,"ViewTranslation","Fri [abbreviated weekday]","",,"",1,"Fri",1
63
+ 14,"ViewTranslation","Sat [abbreviated weekday]","",,"",1,"Sat",1
64
+ 15,"ViewTranslation","January [month]","",,"",1,"January",1
65
+ 16,"ViewTranslation","February [month]","",,"",1,"February",1
66
+ 17,"ViewTranslation","March [month]","",,"",1,"March",1
67
+ 18,"ViewTranslation","April [month]","",,"",1,"April",1
68
+ 19,"ViewTranslation","May [month]","",,"",1,"May",1
69
+ 20,"ViewTranslation","June [month]","",,"",1,"June",1
70
+ 21,"ViewTranslation","July [month]","",,"",1,"July",1
71
+ 22,"ViewTranslation","August [month]","",,"",1,"August",1
72
+ 23,"ViewTranslation","September [month]","",,"",1,"September",1
73
+ 24,"ViewTranslation","October [month]","",,"",1,"October",1
74
+ 25,"ViewTranslation","November [month]","",,"",1,"November",1
75
+ 26,"ViewTranslation","December [month]","",,"",1,"December",1
76
+ 27,"ViewTranslation","Jan [abbreviated month]","",,"",1,"Jan",1
77
+ 28,"ViewTranslation","Feb [abbreviated month]","",,"",1,"Feb",1
78
+ 29,"ViewTranslation","Mar [abbreviated month]","",,"",1,"Mar",1
79
+ 30,"ViewTranslation","Apr [abbreviated month]","",,"",1,"Apr",1
80
+ 31,"ViewTranslation","May [abbreviated month]","",,"",1,"May",1
81
+ 32,"ViewTranslation","Jun [abbreviated month]","",,"",1,"Jun",1
82
+ 33,"ViewTranslation","Jul [abbreviated month]","",,"",1,"Jul",1
83
+ 34,"ViewTranslation","Aug [abbreviated month]","",,"",1,"Aug",1
84
+ 35,"ViewTranslation","Sep [abbreviated month]","",,"",1,"Sep",1
85
+ 36,"ViewTranslation","Oct [abbreviated month]","",,"",1,"Oct",1
86
+ 37,"ViewTranslation","Nov [abbreviated month]","",,"",1,"Nov",1
87
+ 38,"ViewTranslation","Dec [abbreviated month]","",,"",1,"Dec",1
88
+ 5967,"ViewTranslation","Sunday [weekday]","",,"",2,"Domingo",1
89
+ 5968,"ViewTranslation","Monday [weekday]","",,"",2,"Segunda",1
90
+ 5969,"ViewTranslation","Tuesday [weekday]","",,"",2,"Terça",1
91
+ 5970,"ViewTranslation","Wednesday [weekday]","",,"",2,"Quarta",1
92
+ 5971,"ViewTranslation","Thursday [weekday]","",,"",2,"Quinta",1
93
+ 5972,"ViewTranslation","Friday [weekday]","",,"",2,"Sexta",1
94
+ 5973,"ViewTranslation","Saturday [weekday]","",,"",2,"Sábado",1
95
+ 5974,"ViewTranslation","Sun [abbreviated weekday]","",,"",2,"Dom",1
96
+ 5975,"ViewTranslation","Mon [abbreviated weekday]","",,"",2,"Seg",1
97
+ 5976,"ViewTranslation","Tue [abbreviated weekday]","",,"",2,"Ter",1
98
+ 5977,"ViewTranslation","Wed [abbreviated weekday]","",,"",2,"Qua",1
99
+ 5978,"ViewTranslation","Thu [abbreviated weekday]","",,"",2,"Qui",1
100
+ 5979,"ViewTranslation","Fri [abbreviated weekday]","",,"",2,"Sex",1
101
+ 5980,"ViewTranslation","Sat [abbreviated weekday]","",,"",2,"Sáb",1
102
+ 5981,"ViewTranslation","January [month]","",,"",2,"Janeiro",1
103
+ 5982,"ViewTranslation","February [month]","",,"",2,"Fevereiro",1
104
+ 5983,"ViewTranslation","March [month]","",,"",2,"Março",1
105
+ 5984,"ViewTranslation","April [month]","",,"",2,"Abril",1
106
+ 5985,"ViewTranslation","May [month]","",,"",2,"Maio",1
107
+ 5986,"ViewTranslation","June [month]","",,"",2,"Junho",1
108
+ 5987,"ViewTranslation","July [month]","",,"",2,"Julho",1
109
+ 5988,"ViewTranslation","August [month]","",,"",2,"Agosto",1
110
+ 5989,"ViewTranslation","September [month]","",,"",2,"Setembro",1
111
+ 5990,"ViewTranslation","October [month]","",,"",2,"Outubro",1
112
+ 5991,"ViewTranslation","November [month]","",,"",2,"Novembro",1
113
+ 5992,"ViewTranslation","December [month]","",,"",2,"Dezembro",1
114
+ 5993,"ViewTranslation","Jan [abbreviated month]","",,"",2,"Jan",1
115
+ 5994,"ViewTranslation","Feb [abbreviated month]","",,"",2,"Fev",1
116
+ 5995,"ViewTranslation","Mar [abbreviated month]","",,"",2,"Mar",1
117
+ 5996,"ViewTranslation","Apr [abbreviated month]","",,"",2,"Abr",1
118
+ 5997,"ViewTranslation","May [abbreviated month]","",,"",2,"Mai",1
119
+ 5998,"ViewTranslation","Jun [abbreviated month]","",,"",2,"Jun",1
120
+ 5999,"ViewTranslation","Jul [abbreviated month]","",,"",2,"Jul",1
121
+ 6000,"ViewTranslation","Aug [abbreviated month]","",,"",2,"Ago",1
122
+ 6001,"ViewTranslation","Sep [abbreviated month]","",,"",2,"Set",1
123
+ 6002,"ViewTranslation","Oct [abbreviated month]","",,"",2,"Out",1
124
+ 6003,"ViewTranslation","Nov [abbreviated month]","",,"",2,"Nov",1
125
+ 6004,"ViewTranslation","Dec [abbreviated month]","",,"",2,"Dez",1
126
+ END_OF_DATA
127
+ end
128
+
129
+ begin
130
+ Locale.set_base_language('en-US')
131
+
132
+ begin
133
+ Locale.set_translation('test', Language.pick('pt-BR'), 'teste')
134
+ rescue
135
+ populate_translation_tables
136
+ end
137
+
138
+ translation_dir = File.expand_path(__FILE__ + '/../../db/translation')
139
+ Dir.foreach(translation_dir) do |file|
140
+ if (file != '.' && file != '..' && file =~ /\.rb\Z/) then
141
+ lang_code = file[0, file.length - 3]
142
+ language = Language.pick(lang_code)
143
+ contents = File.read(File.join(translation_dir, file))
144
+ translations = eval contents
145
+ translations.each do |key, value|
146
+ Locale.set_translation(key, language, value)
147
+ end
148
+ end
149
+ end
150
+ rescue
151
+ # ignore errors and don't do anything, we are probably being called by
152
+ # rake as part of the initial migration. after it runs, no errors will be
153
+ # raised and we'll execute normally
154
+ end
@@ -0,0 +1,89 @@
1
+ require_dependency "user"
2
+
3
+ module LoginSystem
4
+
5
+ protected
6
+
7
+ # overwrite this if you want to restrict access to only a few actions
8
+ # or if you want to check if the user has the correct rights
9
+ # example:
10
+ #
11
+ # # only allow nonbobs
12
+ # def authorize?(user)
13
+ # user.login != "bob"
14
+ # end
15
+ def authorize?(user)
16
+ true
17
+ end
18
+
19
+ # overwrite this method if you only want to protect certain actions of the controller
20
+ # example:
21
+ #
22
+ # # don't protect the login and the about method
23
+ # def protect?(action)
24
+ # if ['action', 'about'].include?(action)
25
+ # return false
26
+ # else
27
+ # return true
28
+ # end
29
+ # end
30
+ def protect?(action)
31
+ true
32
+ end
33
+
34
+ # login_required filter. add
35
+ #
36
+ # before_filter :login_required
37
+ #
38
+ # if the controller should be under any rights management.
39
+ # for finer access control you can overwrite
40
+ #
41
+ # def authorize?(user)
42
+ #
43
+ def login_required
44
+
45
+ if not protect?(action_name)
46
+ return true
47
+ end
48
+
49
+ if session[:user] and authorize?(session[:user])
50
+ return true
51
+ end
52
+
53
+ # store current location so that we can
54
+ # come back after the user logged in
55
+ store_location
56
+
57
+ # call overwriteable reaction to unauthorized access
58
+ access_denied
59
+ return false
60
+ end
61
+
62
+ # overwrite if you want to have special behavior in case the user is not authorized
63
+ # to access the current operation.
64
+ # the default action is to redirect to the login screen
65
+ # example use :
66
+ # a popup window might just close itself for instance
67
+ def access_denied
68
+ redirect_to :controller=>"/account", :action =>"login"
69
+ end
70
+
71
+ # store current uri in the session.
72
+ # we can return to this location by calling return_location
73
+ def store_location
74
+ session[:return_to] = request.request_uri
75
+ end
76
+
77
+ # move to the last store_location call or to the passed default one
78
+ def redirect_back_or_default(target)
79
+ if ! target.nil?
80
+ redirect_to target
81
+ elsif session[:return_to].nil?
82
+ redirect_to :controller => 'root', :action => 'index'
83
+ else
84
+ redirect_to_url session[:return_to]
85
+ session[:return_to] = nil
86
+ end
87
+ end
88
+
89
+ end
@@ -0,0 +1,48 @@
1
+ class Time
2
+
3
+ def relative_to_now(reference_time=Time.now)
4
+ secs = self.to_i - reference_time.to_i
5
+ sufix = if secs < 0 then 'ago' else 'from now' end
6
+ secs = secs.abs
7
+ result = nil
8
+ # 31536000 = 86400 * 365 days (1 year)
9
+ # 2592000 = 86400 * 30 days (1 month)
10
+ # 604800 = 86400 seconds * 7 days (1 week)
11
+ # 86400 = 60 seconds * 60 minutes * 24 h (1 day)
12
+ # 3600 = 60 seconds * 60 minutes (1 hour)
13
+ [ [31536000, 'year'], [2592000, 'month'], [604800, 'week'],
14
+ [86400, 'day'], [3600, 'hour'], [60, 'minute']].
15
+ each do |x|
16
+ if result.nil? && secs >= x[0] then
17
+ number = secs / x[0]
18
+ result = filter_time_to(number, x[1], sufix)
19
+ end
20
+ end
21
+ return result || 'Less than one minute ago'.t
22
+ end
23
+
24
+ private
25
+
26
+ include Inflector
27
+
28
+ def filter_time_to(number, period, sufix)
29
+ return 'Yesterday'.t if 1 == number && 'day' == period && 'ago' == sufix
30
+ return 'Tomorrow'.t if 1 == number && 'day' == period && 'from now' == sufix
31
+ period = period.t
32
+ inflected = if number > 1 then pluralize(period) else period end
33
+ return "%s #{sufix}" / "#{number} #{inflected}"
34
+ end
35
+
36
+ end
37
+
38
+ class Date
39
+
40
+ def relative_to_now(reference_time=Time.now)
41
+ to_t.relative_to_now(reference_time)
42
+ end
43
+
44
+ def to_t
45
+ Time.local(year, month, day, 23, 59, 59)
46
+ end
47
+
48
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'mediacloth'
3
+
4
+ class String
5
+
6
+ def medialize
7
+ MediaCloth::wiki_to_html self
8
+ end
9
+
10
+ end