gfdnavi 1.3.0.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 (446) hide show
  1. data/ChangeLog +10949 -0
  2. data/LICENCE.txt +57 -0
  3. data/Makefile +18 -0
  4. data/TODO +132 -0
  5. data/app/controllers/analysis_controller.rb +700 -0
  6. data/app/controllers/application.rb +41 -0
  7. data/app/controllers/draw_method_controller.rb +172 -0
  8. data/app/controllers/explorer_controller.rb +197 -0
  9. data/app/controllers/finder_controller.rb +331 -0
  10. data/app/controllers/function_controller.rb +204 -0
  11. data/app/controllers/group_controller.rb +115 -0
  12. data/app/controllers/keyword_attributes_controller.rb +52 -0
  13. data/app/controllers/knowledge_controller.rb +928 -0
  14. data/app/controllers/nodes_controller.rb +515 -0
  15. data/app/controllers/search_controller.rb +341 -0
  16. data/app/controllers/user_controller.rb +337 -0
  17. data/app/helpers/analysis_helper.rb +2 -0
  18. data/app/helpers/application_helper.rb +105 -0
  19. data/app/helpers/description_helper.rb +2 -0
  20. data/app/helpers/function_helper.rb +2 -0
  21. data/app/helpers/group_helper.rb +2 -0
  22. data/app/helpers/search_helper.rb +3 -0
  23. data/app/helpers/user_helper.rb +2 -0
  24. data/app/helpers/work_flow_helper.rb +92 -0
  25. data/app/models/actual_file.rb +3 -0
  26. data/app/models/analysis.rb +715 -0
  27. data/app/models/analysis_history.rb +42 -0
  28. data/app/models/cross_array.rb +22 -0
  29. data/app/models/cross_result.rb +254 -0
  30. data/app/models/derived_spatial_attribute.rb +3 -0
  31. data/app/models/diagram_cache.rb +16 -0
  32. data/app/models/diagram_cache_datum.rb +4 -0
  33. data/app/models/diagram_cache_session.rb +8 -0
  34. data/app/models/directory.rb +21 -0
  35. data/app/models/draw_method.rb +48 -0
  36. data/app/models/draw_method_attribute.rb +8 -0
  37. data/app/models/draw_parameter.rb +12 -0
  38. data/app/models/explorer_query.rb +354 -0
  39. data/app/models/explorer_result.rb +312 -0
  40. data/app/models/function.rb +75 -0
  41. data/app/models/function_argument.rb +6 -0
  42. data/app/models/function_output.rb +4 -0
  43. data/app/models/group.rb +153 -0
  44. data/app/models/image.rb +20 -0
  45. data/app/models/keyword_attribute.rb +179 -0
  46. data/app/models/knowledge.rb +94 -0
  47. data/app/models/knowledge_backup.rb +32 -0
  48. data/app/models/knowledge_figure.rb +16 -0
  49. data/app/models/knowledge_figure_backup.rb +16 -0
  50. data/app/models/knowledge_parser.rb +392 -0
  51. data/app/models/node.rb +605 -0
  52. data/app/models/node_entity_abstract.rb +112 -0
  53. data/app/models/node_lineage.rb +6 -0
  54. data/app/models/node_relation.rb +4 -0
  55. data/app/models/path_node.rb +60 -0
  56. data/app/models/query.rb +193 -0
  57. data/app/models/query_history.rb +12 -0
  58. data/app/models/results.rb +48 -0
  59. data/app/models/sign_up_user.rb +25 -0
  60. data/app/models/spatial_and_time_attribute.rb +11 -0
  61. data/app/models/user.rb +115 -0
  62. data/app/models/user_mailer.rb +48 -0
  63. data/app/models/value_type.rb +3 -0
  64. data/app/models/variable.rb +70 -0
  65. data/app/models/virtual_node.rb +457 -0
  66. data/app/views/analysis/__help_analysis_tab.en.html +57 -0
  67. data/app/views/analysis/__help_draw_share.en.html +12 -0
  68. data/app/views/analysis/__help_draw_tab.en.html +6 -0
  69. data/app/views/analysis/_analysis_function_settings.rhtml +61 -0
  70. data/app/views/analysis/_analysis_settings.rhtml +28 -0
  71. data/app/views/analysis/_diagram.rhtml +70 -0
  72. data/app/views/analysis/_dimension_option.rhtml +59 -0
  73. data/app/views/analysis/_draw_general_settings.rhtml +217 -0
  74. data/app/views/analysis/_draw_settings.rhtml +73 -0
  75. data/app/views/analysis/_history.rhtml +19 -0
  76. data/app/views/analysis/_popular_diagrams.rhtml +42 -0
  77. data/app/views/analysis/_save_form.rhtml +44 -0
  78. data/app/views/analysis/_variables.rhtml +66 -0
  79. data/app/views/analysis/_variables_order.rhtml +56 -0
  80. data/app/views/analysis/index.rhtml +195 -0
  81. data/app/views/analysis/preview.rhtml +3 -0
  82. data/app/views/analysis/save.rhtml +73 -0
  83. data/app/views/analysis/show_diagram.rhtml +42 -0
  84. data/app/views/cross/_display_map.rhtml +201 -0
  85. data/app/views/cross/_result.rhtml +205 -0
  86. data/app/views/cross/_show_result_tree.rhtml +40 -0
  87. data/app/views/cross/_show_results.rhtml +80 -0
  88. data/app/views/cross/_style.rhtml +21 -0
  89. data/app/views/cross/index.rhtml +271 -0
  90. data/app/views/draw_method/_edit_form.rhtml +110 -0
  91. data/app/views/draw_method/create.rhtml +8 -0
  92. data/app/views/draw_method/details.rhtml +113 -0
  93. data/app/views/draw_method/edit.rhtml +8 -0
  94. data/app/views/draw_method/list.rhtml +80 -0
  95. data/app/views/explorer/_display_map.rhtml +199 -0
  96. data/app/views/explorer/_show_result_tree.rhtml +40 -0
  97. data/app/views/explorer/_show_results.rhtml +101 -0
  98. data/app/views/explorer/_style.rhtml +21 -0
  99. data/app/views/explorer/index.rhtml +214 -0
  100. data/app/views/finder/_children.html.erb +84 -0
  101. data/app/views/finder/_children_details.html.erb +74 -0
  102. data/app/views/finder/_children_details_tr.html.erb +196 -0
  103. data/app/views/finder/create_tree.html.erb +15 -0
  104. data/app/views/finder/flex.html.erb +52 -0
  105. data/app/views/finder/index.html.erb +47 -0
  106. data/app/views/finder/show_details.html.erb +3 -0
  107. data/app/views/finder/show_images.html.erb +3 -0
  108. data/app/views/function/_edit_form.rhtml +106 -0
  109. data/app/views/function/create.rhtml +8 -0
  110. data/app/views/function/details.rhtml +96 -0
  111. data/app/views/function/edit.rhtml +8 -0
  112. data/app/views/function/list.rhtml +80 -0
  113. data/app/views/group/add_member.rhtml +13 -0
  114. data/app/views/group/change_owner.rhtml +15 -0
  115. data/app/views/group/create.rhtml +11 -0
  116. data/app/views/group/delete_member.rhtml +14 -0
  117. data/app/views/group/list.rhtml +63 -0
  118. data/app/views/knowledge/_backup.rhtml +135 -0
  119. data/app/views/knowledge/_category.rhtml +58 -0
  120. data/app/views/knowledge/_category_list.rhtml +34 -0
  121. data/app/views/knowledge/_category_table.rhtml +23 -0
  122. data/app/views/knowledge/_comment.rhtml +64 -0
  123. data/app/views/knowledge/_comment_input_form.rhtml +19 -0
  124. data/app/views/knowledge/_comments.rhtml +84 -0
  125. data/app/views/knowledge/_form.rhtml +139 -0
  126. data/app/views/knowledge/_group_figure_form.rhtml +187 -0
  127. data/app/views/knowledge/_layout_figure.rhtml +61 -0
  128. data/app/views/knowledge/_layout_figures_in_a_row_above_text.rhtml +42 -0
  129. data/app/views/knowledge/_layout_figures_under_text.rhtml +45 -0
  130. data/app/views/knowledge/_layout_one_figure_above_text.rhtml +28 -0
  131. data/app/views/knowledge/_summary.rhtml +21 -0
  132. data/app/views/knowledge/edit.rhtml +37 -0
  133. data/app/views/knowledge/list.rhtml +287 -0
  134. data/app/views/knowledge/new.rhtml +23 -0
  135. data/app/views/knowledge/new_from_analysis.rhtml +21 -0
  136. data/app/views/knowledge/show.rhtml +196 -0
  137. data/app/views/layouts/gfdnavi.rhtml +105 -0
  138. data/app/views/nodes/_ancestors.html.erb +89 -0
  139. data/app/views/nodes/_description_methods_table.html.erb +75 -0
  140. data/app/views/nodes/_mode.html.erb +16 -0
  141. data/app/views/nodes/description.html.erb +181 -0
  142. data/app/views/nodes/description_methods.html.erb +1 -0
  143. data/app/views/nodes/edit.html.erb +73 -0
  144. data/app/views/nodes/index.html.erb +25 -0
  145. data/app/views/nodes/show.html.erb +20 -0
  146. data/app/views/search/_children_details_mapsearch.rhtml +68 -0
  147. data/app/views/search/_children_details_tr.rhtml +205 -0
  148. data/app/views/search/_show_grouplist.rhtml +74 -0
  149. data/app/views/search/_show_results.rhtml +43 -0
  150. data/app/views/search/_show_results_global.rhtml +36 -0
  151. data/app/views/search/_show_results_partial.rhtml +39 -0
  152. data/app/views/search/_show_results_partial_groupbyfile.rhtml +50 -0
  153. data/app/views/search/_show_variablelist.rhtml +28 -0
  154. data/app/views/search/mapsearch.rhtml +176 -0
  155. data/app/views/search/remapsearch.rjs +18 -0
  156. data/app/views/search/show_details.rhtml +3 -0
  157. data/app/views/user/add_user.rhtml +30 -0
  158. data/app/views/user/change_password.rhtml +25 -0
  159. data/app/views/user/edit.html.erb +50 -0
  160. data/app/views/user/index.rhtml +162 -0
  161. data/app/views/user/login.rhtml +41 -0
  162. data/app/views/user/logout.rhtml +4 -0
  163. data/app/views/user/signup.rhtml +36 -0
  164. data/app/views/user/signup_succeeded.rhtml +36 -0
  165. data/app/views/user_mailer/authorization_inform.rhtml +15 -0
  166. data/app/views/user_mailer/signup_accepted.rhtml +12 -0
  167. data/app/views/user_mailer/signup_confirm.rhtml +14 -0
  168. data/app/views/user_mailer/signup_inform.rhtml +13 -0
  169. data/app/views/user_mailer/signup_rejected.rhtml +11 -0
  170. data/app/views/work_flow/_push_wsdls.rhtml +55 -0
  171. data/app/views/work_flow/index.rhtml +46 -0
  172. data/config/database.yml.example +35 -0
  173. data/config/environment.rb +68 -0
  174. data/config/gfdnavi.yml.example +95 -0
  175. data/config/load_config.rb +151 -0
  176. data/config/routes.rb +35 -0
  177. data/consistency_checker.rb +129 -0
  178. data/data/gfdnavi_docs/how_to_draw_multiple_images.knlge +68 -0
  179. data/data/gfdnavi_docs/how_to_knowledge.knlge +138 -0
  180. data/data/gfdnavi_docs/how_to_write_document_about_Gfdnavi.knlge +30 -0
  181. data/data/samples/jmadata.SIGEN +8 -0
  182. data/data/samples/jmadata.yml +6 -0
  183. data/data/samples/jmadata/MSM-P/2006.nc.yml +2 -0
  184. data/data/samples/jmadata/MSM-P/2006.yml +17 -0
  185. data/data/samples/jmadata/MSM-P/2006/0101.nc +0 -0
  186. data/data/samples/jmadata/MSM-P/2006/0101.nc.yml +13 -0
  187. data/data/samples/jmadata/MSM-P/2006/0102.nc +0 -0
  188. data/data/samples/jmadata/MSM-P/2006/0103.nc +0 -0
  189. data/data/samples/jmadata/MSM-P/2006/0104.nc +0 -0
  190. data/data/samples/jmadata/MSM-P/2006/0105.nc +0 -0
  191. data/data/samples/jmadata/MSM-P/2006/010[1-3].nc.yml +2 -0
  192. data/data/samples/jmadata/MSM-P/2006/skip_data.rb +96 -0
  193. data/data/samples/jmadata/MSM-P/2006/skip_data.sh +6 -0
  194. data/data/samples/reanalysis.SIGEN +8 -0
  195. data/data/samples/reanalysis/era40.SIGEN +8 -0
  196. data/data/samples/reanalysis/era40.yml +2 -0
  197. data/data/samples/reanalysis/era40/t.jan.nc +0 -0
  198. data/data/samples/reanalysis/era40/t.jan.nc.yml +1 -0
  199. data/data/samples/reanalysis/ncep.SIGEN +9 -0
  200. data/data/samples/reanalysis/ncep/T.jan.100hPa.png +0 -0
  201. data/data/samples/reanalysis/ncep/T.jan.100hPa.png.yml +43 -0
  202. data/data/samples/reanalysis/ncep/T.jan.nc +0 -0
  203. data/data/samples/reanalysis/ncep/T.jan.zonal_mean.nc +0 -0
  204. data/data/samples/reanalysis/ncep/T.jan.zonal_mean.nc.yml +8 -0
  205. data/data/samples/reanalysis/ncep/T.jan_only_root.nc +0 -0
  206. data/data/samples/reanalysis/ncep/T.jan_only_root.nc.yml +4 -0
  207. data/data/samples/reanalysis/ncep/UV.jan.nc +0 -0
  208. data/data/samples/reanalysis/ncep/UV.jan.nc.yml +10 -0
  209. data/data/samples/reanalysis/ncep/UV.jan.nc.yml.ja +11 -0
  210. data/data/samples/sonde_operational.yml +5 -0
  211. data/data/samples/sonde_operational/std_plev.yml +12 -0
  212. data/data/samples/sonde_operational/std_plev/41256.spl.nc +0 -0
  213. data/data/samples/sonde_operational/std_plev/42410.spl.nc +0 -0
  214. data/data/samples/sonde_operational/std_plev/43333.spl.nc +0 -0
  215. data/data/samples/sonde_operational/std_plev/43346.spl.nc +0 -0
  216. data/data/samples/sonde_operational/std_plev/48698.spl.nc +0 -0
  217. data/data/samples/sonde_operational/std_plev/61641.spl.nc +0 -0
  218. data/data/samples/sonde_operational/std_plev/63741.spl.nc +0 -0
  219. data/data/samples/sonde_operational/std_plev/67083.spl.nc +0 -0
  220. data/data/samples/sonde_operational/std_plev/72261.spl.nc +0 -0
  221. data/data/samples/sonde_operational/std_plev/76805.spl.nc +0 -0
  222. data/data/samples/sonde_operational/std_plev/82193.spl.nc +0 -0
  223. data/data/samples/sonde_operational/std_plev/91165.spl.nc +0 -0
  224. data/data/samples/sonde_operational/std_plev/91610.spl.nc +0 -0
  225. data/data/samples/sonde_operational/std_plev/91948.spl.nc +0 -0
  226. data/data/samples/sonde_operational/std_plev/94294.spl.nc +0 -0
  227. data/db/NetCDFparser.rb +406 -0
  228. data/db/create_derived_spatial_attributes.sql +12 -0
  229. data/db/draw_methods/line.yml +6 -0
  230. data/db/draw_methods/scatter.yml +38 -0
  231. data/db/draw_methods/tone.yml +64 -0
  232. data/db/draw_methods/vector.yml +19 -0
  233. data/db/dump_db.rb +43 -0
  234. data/db/functions/additions.yml +10 -0
  235. data/db/functions/cut.yml +10 -0
  236. data/db/functions/division.yml +10 -0
  237. data/db/functions/mean.yml +28 -0
  238. data/db/functions/multiplication.yml +10 -0
  239. data/db/functions/stddev.yml +28 -0
  240. data/db/functions/subtraction.yml +10 -0
  241. data/db/migrate/001_initial_scheme.rb +289 -0
  242. data/db/migrate/002_add_open_id_authentication_tables.rb +20 -0
  243. data/db/register_directory_tree.rb +760 -0
  244. data/db/restore_db.rb +60 -0
  245. data/gfdnavi-install +828 -0
  246. data/install.rb +828 -0
  247. data/lib/activerecord_gfdnavi.rb +31 -0
  248. data/lib/basic_authorization.rb +50 -0
  249. data/lib/create_activeresources.rb +108 -0
  250. data/lib/execute_analysis.rb +472 -0
  251. data/lib/file_gfdnavi.rb +38 -0
  252. data/lib/gphys_gfdnavi.rb +81 -0
  253. data/lib/localdir.rb +110 -0
  254. data/lib/login_system.rb +110 -0
  255. data/lib/multibytes.rb +20 -0
  256. data/lib/narray_yaml.rb +58 -0
  257. data/lib/no_rdb_base.rb +40 -0
  258. data/lib/opendapdir.rb +171 -0
  259. data/lib/tar.rb +127 -0
  260. data/lib/tasks/clean.rake +65 -0
  261. data/lib/tasks/setup.rake +316 -0
  262. data/lib/tasks/update.rake +62 -0
  263. data/lib/vizshot_gfdnavi.rb +224 -0
  264. data/public/crossdomain.xml +4 -0
  265. data/public/flex/NodeTreeDescriptor.as +55 -0
  266. data/public/flex/TreeNode.as +253 -0
  267. data/public/flex/finder.mxml +304 -0
  268. data/public/flex/finder.swf +0 -0
  269. data/public/flex/gfdnavi.mxml +52 -0
  270. data/public/flex/gfdnavi.swf +0 -0
  271. data/public/images/Help_S-shots/dir_tree_with_add.jpg +0 -0
  272. data/public/images/analyze.gif +0 -0
  273. data/public/images/circle.gif +0 -0
  274. data/public/images/create_from_analysis_button.png +0 -0
  275. data/public/images/delete.png +0 -0
  276. data/public/images/down.png +0 -0
  277. data/public/images/drawbutton.gif +0 -0
  278. data/public/images/gfdnavi_home_logo.png +0 -0
  279. data/public/images/gfdnavi_logo_big.png +0 -0
  280. data/public/images/gfdnavi_logo_med.png +0 -0
  281. data/public/images/gfdnavi_logo_mini.png +0 -0
  282. data/public/images/gfdnavi_logo_nobg_big.png +0 -0
  283. data/public/images/gfdnavi_logo_nobg_med.png +0 -0
  284. data/public/images/gfdnavi_logo_nobg_small.png +0 -0
  285. data/public/images/gfdnavi_logo_small.png +0 -0
  286. data/public/images/gfdnavi_logo_xsmall.png +0 -0
  287. data/public/images/hbar.png +0 -0
  288. data/public/images/helpmark16.png +0 -0
  289. data/public/images/helpmark18.png +0 -0
  290. data/public/images/kikyu_g.gif +0 -0
  291. data/public/images/kikyu_r.gif +0 -0
  292. data/public/images/map_icon_g.gif +0 -0
  293. data/public/images/map_icon_r.gif +0 -0
  294. data/public/images/new_knowledge.png +0 -0
  295. data/public/images/openid.png +0 -0
  296. data/public/images/read_in_the_form.png +0 -0
  297. data/public/images/slider_f.gif +0 -0
  298. data/public/images/slider_f_red.gif +0 -0
  299. data/public/images/star1.gif +0 -0
  300. data/public/images/star2.gif +0 -0
  301. data/public/images/startanim.gif +0 -0
  302. data/public/images/stopanim.gif +0 -0
  303. data/public/images/tree/DL.png +0 -0
  304. data/public/images/tree/anal_viz.png +0 -0
  305. data/public/images/tree/analyze_visualize_checked_items.png +0 -0
  306. data/public/images/tree/binary.png +0 -0
  307. data/public/images/tree/details.png +0 -0
  308. data/public/images/tree/download_checked_items.png +0 -0
  309. data/public/images/tree/folder.png +0 -0
  310. data/public/images/tree/folder_close.gif +0 -0
  311. data/public/images/tree/image2.png +0 -0
  312. data/public/images/tree/knowledge.png +0 -0
  313. data/public/images/tree/knowledges.png +0 -0
  314. data/public/images/tree/last.gif +0 -0
  315. data/public/images/tree/last.png +0 -0
  316. data/public/images/tree/minus.gif +0 -0
  317. data/public/images/tree/minus_simple.gif +0 -0
  318. data/public/images/tree/none.gif +0 -0
  319. data/public/images/tree/none.png +0 -0
  320. data/public/images/tree/plus.gif +0 -0
  321. data/public/images/tree/plus_simple.gif +0 -0
  322. data/public/images/tree/show.png +0 -0
  323. data/public/images/tree/show_checked_items.png +0 -0
  324. data/public/images/tree/t.gif +0 -0
  325. data/public/images/tree/t.png +0 -0
  326. data/public/images/tree/tate.gif +0 -0
  327. data/public/images/tree/tate.png +0 -0
  328. data/public/images/up.png +0 -0
  329. data/public/images/vbar.png +0 -0
  330. data/public/images/white.bmp +0 -0
  331. data/public/images/x.gif +0 -0
  332. data/public/index.html +100 -0
  333. data/public/javascripts/AC_OETags.js +269 -0
  334. data/public/javascripts/analysis.js +751 -0
  335. data/public/javascripts/application.js +29 -0
  336. data/public/javascripts/directory_tree.js +102 -0
  337. data/public/javascripts/draw_method.js +83 -0
  338. data/public/javascripts/excanvas.js +704 -0
  339. data/public/javascripts/function.js +107 -0
  340. data/public/javascripts/gfdnavi.js +175 -0
  341. data/public/javascripts/knowledge.js +384 -0
  342. data/public/javascripts/mapsearch.js +313 -0
  343. data/public/javascripts/progress.js +42 -0
  344. data/public/javascripts/resizable_box.js +164 -0
  345. data/public/javascripts/slider.js +260 -0
  346. data/public/javascripts/tab.js +17 -0
  347. data/public/javascripts/work_flow.js +452 -0
  348. data/public/stylesheets/analysis.css +111 -0
  349. data/public/stylesheets/description.css +71 -0
  350. data/public/stylesheets/gfdnavi.css +141 -0
  351. data/public/stylesheets/knowledge.css +218 -0
  352. data/public/stylesheets/search.css +184 -0
  353. data/public/stylesheets/tree.css +45 -0
  354. data/public/stylesheets/tree_for_ie.css +3 -0
  355. data/public/stylesheets/work_flow.css +78 -0
  356. data/script/cleaner +11 -0
  357. data/script/server_ssl +131 -0
  358. data/test/fixtures/diagram_cache_data.yml +5 -0
  359. data/test/fixtures/diagram_cache_sessions.yml +6 -0
  360. data/test/fixtures/diagram_caches.yml +6 -0
  361. data/test/fixtures/directories.yml +57 -0
  362. data/test/fixtures/draw_parameters.yml +6 -0
  363. data/test/fixtures/function_arguments.yml +15 -0
  364. data/test/fixtures/function_outputs.yml +15 -0
  365. data/test/fixtures/functions.yml +29 -0
  366. data/test/fixtures/group_members.yml +33 -0
  367. data/test/fixtures/groups.yml +25 -0
  368. data/test/fixtures/images.yml +12 -0
  369. data/test/fixtures/keyword_attributes.yml +73 -0
  370. data/test/fixtures/knowledges.yml +10 -0
  371. data/test/fixtures/node_relations.yml +11 -0
  372. data/test/fixtures/nodes.yml +298 -0
  373. data/test/fixtures/sign_up_users.yml +8 -0
  374. data/test/fixtures/spatial_and_time_attributes.yml +29 -0
  375. data/test/fixtures/user_mailer/authorization_inform +11 -0
  376. data/test/fixtures/user_mailer/signup_accepted +10 -0
  377. data/test/fixtures/user_mailer/signup_confirm +17 -0
  378. data/test/fixtures/user_mailer/signup_inform +10 -0
  379. data/test/fixtures/user_mailer/signup_rejected +9 -0
  380. data/test/fixtures/users.yml +31 -0
  381. data/test/fixtures/value_types.yml +10 -0
  382. data/test/fixtures/variables.yml +17 -0
  383. data/test/functional/analysis_controller_test.rb +169 -0
  384. data/test/functional/description_controller_test.rb +18 -0
  385. data/test/functional/function_controller_test.rb +18 -0
  386. data/test/functional/group_controller_test.rb +18 -0
  387. data/test/functional/search_controller_test.rb +83 -0
  388. data/test/functional/user_controller_test.rb +77 -0
  389. data/test/functional/webservice_analysis_api_test.rb +12 -0
  390. data/test/functional/work_flow_controller_test.rb +18 -0
  391. data/test/test_helper.rb +28 -0
  392. data/test/unit/diagram_cache_datum_test.rb +10 -0
  393. data/test/unit/diagram_cache_session_test.rb +10 -0
  394. data/test/unit/diagram_cache_test.rb +10 -0
  395. data/test/unit/directory_test.rb +49 -0
  396. data/test/unit/draw_parameter_test.rb +10 -0
  397. data/test/unit/function_argument_test.rb +10 -0
  398. data/test/unit/function_output_test.rb +10 -0
  399. data/test/unit/function_test.rb +10 -0
  400. data/test/unit/group_test.rb +48 -0
  401. data/test/unit/image_test.rb +13 -0
  402. data/test/unit/keyword_attribute_test.rb +33 -0
  403. data/test/unit/knowledge_test.rb +13 -0
  404. data/test/unit/node_relation_test.rb +20 -0
  405. data/test/unit/node_test.rb +85 -0
  406. data/test/unit/sign_up_user_test.rb +20 -0
  407. data/test/unit/spatial_and_time_attribute_test.rb +29 -0
  408. data/test/unit/user_mailer_test.rb +101 -0
  409. data/test/unit/user_test.rb +134 -0
  410. data/test/unit/value_type_test.rb +10 -0
  411. data/test/unit/variable_test.rb +35 -0
  412. data/vendor/plugins/acts_as_list/README +23 -0
  413. data/vendor/plugins/acts_as_list/init.rb +3 -0
  414. data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
  415. data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
  416. data/vendor/plugins/acts_as_tree/README +26 -0
  417. data/vendor/plugins/acts_as_tree/Rakefile +22 -0
  418. data/vendor/plugins/acts_as_tree/init.rb +1 -0
  419. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +96 -0
  420. data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
  421. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
  422. data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  423. data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  424. data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  425. data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  426. data/vendor/plugins/will_paginate/CHANGELOG +92 -0
  427. data/vendor/plugins/will_paginate/LICENSE +18 -0
  428. data/vendor/plugins/will_paginate/README.rdoc +131 -0
  429. data/vendor/plugins/will_paginate/Rakefile +62 -0
  430. data/vendor/plugins/will_paginate/examples/apple-circle.gif +0 -0
  431. data/vendor/plugins/will_paginate/examples/index.haml +69 -0
  432. data/vendor/plugins/will_paginate/examples/index.html +92 -0
  433. data/vendor/plugins/will_paginate/examples/pagination.css +90 -0
  434. data/vendor/plugins/will_paginate/examples/pagination.sass +91 -0
  435. data/vendor/plugins/will_paginate/init.rb +1 -0
  436. data/vendor/plugins/will_paginate/lib/will_paginate.rb +86 -0
  437. data/vendor/plugins/will_paginate/lib/will_paginate/array.rb +16 -0
  438. data/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +145 -0
  439. data/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +32 -0
  440. data/vendor/plugins/will_paginate/lib/will_paginate/finder.rb +247 -0
  441. data/vendor/plugins/will_paginate/lib/will_paginate/named_scope.rb +132 -0
  442. data/vendor/plugins/will_paginate/lib/will_paginate/named_scope_patch.rb +39 -0
  443. data/vendor/plugins/will_paginate/lib/will_paginate/version.rb +9 -0
  444. data/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +373 -0
  445. data/vendor/plugins/will_paginate/will_paginate.gemspec +21 -0
  446. metadata +586 -0
data/db/restore_db.rb ADDED
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # USAGE:
4
+ #
5
+ # % ruby restore_db.rb [restore_file]
6
+ #
7
+ # If restore_file is not specified, use the newest one.
8
+
9
+ require File.join(File.dirname(__FILE__), "..", "config", "environment")
10
+
11
+ if ARGV[0]
12
+ restore_file = ARGV[0]
13
+ else
14
+ newest = nil
15
+ Dir.foreach( File.dirname(__FILE__) ) do |dir_name|
16
+ next unless /^database_save-(\d*)$/ =~ dir_name
17
+ dt = DateTime.parse($1)
18
+ if newest.nil? || dt > newest[0]
19
+ newest = [dt, dir_name]
20
+ end
21
+ end
22
+ if newest.nil?
23
+ abort "No saved database data was found"
24
+ end
25
+ restore_file = File.join(File.dirname(__FILE__),newest[1])
26
+ end
27
+
28
+ print "restoring from #{restore_file}\n"
29
+ hash = YAML.load( File.read(restore_file) )
30
+
31
+ hash.each do |table_name, ary|
32
+ model_name = table_name.classify
33
+ model_name += "e" if table_name == "diagram_caches"
34
+ ar = ActiveRecord.class_eval(model_name)
35
+ ar.delete_all if ar.table_exists?
36
+ if model_name == "User"
37
+ ary.each{|a|
38
+ pw = a["password"]
39
+ a["password"] = "temporary_password"
40
+ a["password_confirmation"] = a["password"]
41
+ if g=Group.find_by_name(a["login"])
42
+ g.destroy
43
+ end
44
+ u = User.new( a )
45
+ u.id = a['id']
46
+ u.super_user = a['super_user']
47
+ u.save!
48
+ u.password = pw
49
+ u.save!
50
+ }
51
+ else
52
+ ary.each{|a|
53
+ rec = ar.new( a )
54
+ rec.id = a['id']
55
+ rec.save!
56
+ }
57
+ end
58
+ end
59
+
60
+ print "succeeded to restore database data\n"
data/gfdnavi-install ADDED
@@ -0,0 +1,828 @@
1
+ #!/usr/bin/env ruby
2
+ require "fileutils"
3
+ require "yaml"
4
+
5
+ RDBMS = %w(MySQL SQLite3)
6
+ @src_top = File.dirname( File.expand_path(__FILE__) )
7
+
8
+ # SET RAILS-COMMAND
9
+ if RUBY_PLATFORM =~ /mswin|mingw|bccwin/
10
+ # FOR WINDOWS
11
+ $rails_bin = "ruby " + File.join(ENV['RBPATH'],"rails")
12
+ $dev_null = "null"
13
+ else
14
+ # FOR UNIX-LIKE SYSTEMS
15
+ $rails_bin = "rails"
16
+ $dev_null = "/dev/null"
17
+ end
18
+
19
+ # PLUGINS TO BE INSTALLED AFTER RAILS-COMMAND
20
+ $gfdnavi_plugins = [] # NOW IT'S EMPTY
21
+
22
+ =begin
23
+ rails_version = nil
24
+ # CHECK RAILS VERSION
25
+ IO.popen("#{$rails_bin} --version"){|io| rails_version = io.read.split[1].split(".")}
26
+ if (rails_version[0].to_i >= 2) and (rails_version[1].to_i >= 1)
27
+ if system("git --version > #{$dev_null}")
28
+ $gfdnavi_plugins.push("git://github.com/mislav/will_paginate.git")
29
+ else
30
+ raise "please install \"git\"!!!"
31
+ end
32
+ else
33
+ $gfdnavi_plugins.push("svn://errtheblog.com/svn/plugins/will_paginate")
34
+ end
35
+ =end
36
+
37
+ SERVER_TYPE_NAMES = ["1. private/group server",
38
+ "2. open-access server (enable user accounts)",
39
+ "3. open-access server (disable user accounts)"]
40
+
41
+ def setup_destination
42
+ print <<"EOF"
43
+ Set destination directory name and copy files.
44
+ gfdnavi will be installed to "/path_you_input/gfdnavi"
45
+ EOF
46
+ dest_path = @params[:dest_top] ? File.dirname(@params[:dest_top]) : ENV["HOME"]
47
+ # Win32 ##
48
+ unless dest_path == ""
49
+ if RUBY_PLATFORM =~ /mswin|mingw|bccwin/
50
+ dest_path = File.join(ENV['RBPATH'],"..","..")
51
+ end
52
+ end
53
+ print "Please input destination path (default: #{dest_path}): "
54
+ res = $stdin.gets.chomp!
55
+ unless res == ""
56
+ dest_path = res.sub(/\/$/,"")
57
+ end
58
+ ##########
59
+ @params[:dest_top] = File.join(dest_path,"gfdnavi")
60
+
61
+ @params[:skip_rdb] = false
62
+ if File.exists?( File.join(dest_path, "gfdnavi", "config", "database.yml") )
63
+ print "There already exists #{dest_path}/gfdnavi/config/database.yml.\n"
64
+ print "Do you want to keep the settings? (yes/no, default:yes): "
65
+ while true
66
+ case $stdin.gets.chomp!
67
+ when "", "yes"
68
+ if !$load_inst_params
69
+ install_params_file = File.join(dest_path,"gfdnavi","install_params.yml")
70
+ if File.exists?( install_params_file )
71
+ @params = YAML.load(File.read(install_params_file))
72
+ $load_inst_params = true
73
+ end
74
+ end
75
+ @params[:skip_rdb] = true
76
+ break
77
+ when "no"
78
+ break
79
+ else
80
+ print "Do you want to keep the settings? (yes/no, default:yes): "
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ def setup_email
87
+ print "Set admin's email address\n"
88
+ while true
89
+ print "Input email address"
90
+ print "(default: #{@params[:email]})" if @params[:email]
91
+ print ": "
92
+ email = $stdin.gets.chomp!
93
+ email = @params[:email] if email == ""
94
+ unless /^(\w|-)+@(\w|-)+\.(\w|-)+/ =~ email
95
+ print "Invalid email address is input.\n"
96
+ else
97
+ break
98
+ end
99
+ end
100
+ @params[:email] = email
101
+ end
102
+
103
+ def setup_parameter
104
+ if @params[:skip_rdb]
105
+ print "skipped setting for database configurations\n"
106
+ else
107
+ print <<"EOF"
108
+
109
+ ***
110
+ The database settings you will specify in the following will
111
+ be written in the file:
112
+
113
+ #{@params[:dest_top]}/config/database.yml
114
+
115
+ YOU CAN MANUALLY EDIT IT LATER IF YOU LIKE.
116
+ EOF
117
+ print <<"EOF"
118
+ ***
119
+ Please specify the RDBMS you want to use.
120
+ EOF
121
+ RDBMS.each_with_index{|name,i| print "#{i+1}. #{name}\n"}
122
+ print "(Sorry, other RDBMSs are not supported in this installation script.)\n"
123
+ while true
124
+ rdb_type = @params[:rdb_type] || 2
125
+ print "Select the RDBMS (default:#{rdb_type}): "
126
+ type = $stdin.gets.chomp!
127
+ rdb_type = type=="" ? rdb_type : type.to_i
128
+ unless rdb_type >= 1 && rdb_type <= RDBMS.length
129
+ print "Invalid number was input.\n"
130
+ else
131
+ break
132
+ end
133
+ end
134
+ @params[:rdb_type] = rdb_type
135
+ if RDBMS[rdb_type-1] == "MySQL"
136
+ # CYGWIN PATCH BEGIN
137
+ if /cygwin/ =~ RUBY_PLATFORM
138
+ print <<"EOF"
139
+ 1. windows native MySQL
140
+ 2. MySQL compiled on cygwin
141
+ EOF
142
+ while true
143
+ rdb_plf = @params[:rdb_plf] || 1
144
+ print "Select the RDBMS platform (default:#{rdb_plf}): "
145
+ type = $stdin.gets.chomp!
146
+ rdb_plf = type=="" ? rdb_plf : type.to_i
147
+ unless [1,2].include?(rdb_plf)
148
+ print "Invalid number\n"
149
+ else
150
+ break
151
+ end
152
+ end
153
+ @params[:rdb_plf] = rdb_plf
154
+ end
155
+ # CYGWIN PATCH END
156
+ print "Input the RDB user name for gfdnavi_* databases "
157
+ print "(default: #{@params[:rdb_user]})" if @params[:rdb_user]
158
+ print ": "
159
+ rdb_user = $stdin.gets.chomp!
160
+ @params[:rdb_user] = rdb_user unless rdb_user == ""
161
+ print "Input the password for the databases: "
162
+ @params[:rdb_password] = $stdin.gets.chomp!
163
+ end
164
+ ###
165
+ # MySQL SETTINGS
166
+ if RDBMS[rdb_type-1] == "MySQL"
167
+ print <<"EOF"
168
+ You must finish settings of RDBMS before installing gfdnavi.
169
+ If you have not, use another terminal now to set up
170
+ an RDBMS. If you would like to use mysql, I can show you how to do that.
171
+ EOF
172
+ print "Would you like read the how-to for mysql? (yes/no, default:yes): "
173
+
174
+ unless $stdin.gets.chomp! == "no"
175
+ print <<"EOF"
176
+ ***
177
+ >>>>> doc for mysql >>>>>
178
+ You can set mysql database as follows:
179
+
180
+ % mysql -u root -p
181
+ Enter password:
182
+ -- type in password of root.
183
+ (the user name specified with the -u option does not need to be root,
184
+ but it must be a privileged one in order to create new databases.)
185
+ mysql> create database gfdnavi_development;
186
+ mysql> create database gfdnavi_test;
187
+ mysql> create database gfdnavi_production;
188
+ mysql> grant all on gfdnavi_development.* to 'davis'@'localhost' identified by 'hogehero';
189
+ mysql> grant all on gfdnavi_test.* to 'davis'@'localhost' identified by 'hogehero';
190
+ mysql> grant all on gfdnavi_production.* to 'davis'@'localhost' identified by 'hogehero';
191
+
192
+ Here, DO NOT forget to use your own password. DO NOT use 'hogehero'.
193
+ Note that the password will appear in the database.yml file
194
+ WITHOUT ENCRYPTION. So DO NOT USE YOUR LOGIN PASSWORD of any computer
195
+ system either.
196
+ <<<<< doc for mysql <<<<<
197
+
198
+ EOF
199
+ end
200
+ end
201
+ ###
202
+ end
203
+
204
+ print "\n***\nGfdanvi configuration\n\n"
205
+ @params[:skip_configure] = false
206
+ if File.exists?( File.join(@params[:dest_top], "config", "gfdnavi.yml") )
207
+ print "There already exists #{@params[:dest_top]}/config/gfdnavi.yml.\n"
208
+ print "Do you want to keep the settings? (yes/no, default:yes): "
209
+ unless $stdin.gets.chomp! == "no"
210
+ @params[:skip_configure] = true
211
+ end
212
+ end
213
+ if @params[:skip_configure]
214
+ print "skipped setting for gfdnavi configurations\n"
215
+ else
216
+ print <<"EOF"
217
+
218
+ ***
219
+ The gfdnavi settings you will specify in the following will
220
+ be written in the file:
221
+
222
+ #{@params[:dest_top]}/config/gfdnavi.yml
223
+
224
+ YOU CAN MANUALLY EDIT IT LATER IF YOU LIKE.
225
+
226
+ EOF
227
+
228
+ print "Set salt for encryption\n"
229
+ while true
230
+ print "input phrase (at least 5 characters): "
231
+ salt = $stdin.gets.chomp!
232
+ if salt.length < 5
233
+ print "The phrase which you input is too short.\n"
234
+ else
235
+ break
236
+ end
237
+ end
238
+ @params[:salt] = salt
239
+
240
+ # SET E-MAIL ADDRESS
241
+ setup_email
242
+
243
+ print <<"EOF"
244
+ Select server type to set default configuration parameters
245
+ The configurations in "config/gfdnavi.yml" will be set according to your choice of server type.
246
+ #{SERVER_TYPE_NAMES[0]}
247
+ #{SERVER_TYPE_NAMES[1]}
248
+ #{SERVER_TYPE_NAMES[2]}
249
+ EOF
250
+ while true
251
+ print "Select the server type (default:1): "
252
+ server_type = $stdin.gets.chomp!
253
+ server_type = server_type=="" ? 1 : server_type.to_i
254
+ unless [1,2,3].include?(server_type)
255
+ print "Invalid number was input.\n"
256
+ else
257
+ break
258
+ end
259
+ end
260
+ @params[:server_type] = server_type
261
+
262
+ if server_type == 1 # when private server is selected, unlimit soft limit of array.
263
+ @params[:unlimit_array_soft] = true
264
+ end
265
+
266
+ print <<"EOF"
267
+ Select Rails environment.
268
+ When you use Gfdnavi as an open-access server, production environment is strongly recommended.
269
+ If you are unsure, you should select development environment.
270
+ 1. development
271
+ 2. production
272
+ EOF
273
+ while true
274
+ print "Select environment (default:1): "
275
+ rails_env = $stdin.gets.chomp!
276
+ rails_env = rails_env=="" ? 1 : rails_env.to_i
277
+ unless [1,2].include?(rails_env)
278
+ print "Invalid number was input.\n"
279
+ else
280
+ break
281
+ end
282
+ end
283
+ case rails_env
284
+ when 1
285
+ @params[:rails_env] = "development"
286
+ when 2
287
+ @params[:rails_env] = "production"
288
+ end
289
+ end
290
+ end
291
+
292
+ DIRS_TO_EXCLUDE = /#{@src_top}\/data\/samples\/.+|#{@src_top}\/tmp\/.+|#{@src_top}\/public\/diagrams\/.+/
293
+ DIRS_OBSOLETE = /#{@src_top}\/public\/data\/.+/
294
+
295
+ def copy_files_in_dir(src, dest, sampledata=false)
296
+ Dir.foreach(src) do |name|
297
+ next if name == "." || name == ".."
298
+ next if name == "install.rb"
299
+ next if /~$/ =~ name
300
+ dest_name = File.join(dest,name)
301
+ src_name = File.join(src,name)
302
+ if File.directory?(src_name) && !File.symlink?(src_name)
303
+ next if DIRS_OBSOLETE =~ src_name
304
+ next if !sampledata and (DIRS_TO_EXCLUDE =~ src_name)
305
+ FileUtils.mkdir(dest_name) unless File.exist?(dest_name)
306
+ copy_files_in_dir( src_name, dest_name, sampledata)
307
+ else
308
+ FileUtils.copy( src_name, dest_name, {:preserve => true} ) if File.file?(src_name)
309
+ end
310
+ end
311
+ end
312
+
313
+ def copy_files(src, dest, sampledata=false)
314
+ copy_files_in_dir(src, dest, sampledata)
315
+ end
316
+
317
+ def install_files
318
+ dest_top = @params[:dest_top]
319
+ if File.exists?( dest_top )
320
+ unless File.directory?(dest_top)
321
+ abort "#{dest_top} is not a directory."
322
+ end
323
+ # IF TARGET DIRECTORY ALREADY EXISTS
324
+ if @src_top != dest_top
325
+ # IF TARGET != SRC
326
+ print "#{dest_top} already exists.\n"
327
+ unless $noquestions
328
+ while true
329
+ print "Can I overwrite it? (yes/no): "
330
+ case $stdin.gets.chomp!
331
+ when "yes"
332
+ # OVERWRITE
333
+ print "#{dest_top} will be overwritten.\n"
334
+ break
335
+ when "no"
336
+ # KEEP CURRENT FILES
337
+ print <<"EOF"
338
+ #{dest_top} will be kept as is.
339
+ Install process may fail
340
+ if you have not installed gfdnavi to the directory.
341
+ EOF
342
+ return
343
+ end
344
+ end
345
+ end
346
+ else
347
+ # IF TARGET == SRC
348
+ print "You are going to use current directory as the target.\n"
349
+ end
350
+ dest_existed = true
351
+ else
352
+ # CREATE TARGET DIRECTORY
353
+ unless $noquestions
354
+ print "#{dest_top} does not exist.\n"
355
+ print "Can I create the directories? (yes/no, default:yes): "
356
+ make_dest_top = $stdin.gets.chomp!
357
+ else
358
+ make_dest_top = "yes"
359
+ end
360
+ unless make_dest_top == "no"
361
+ FileUtils.makedirs(dest_top)
362
+ else
363
+ # CANCEL
364
+ abort "operation was canceled."
365
+ end
366
+ dest_existed = false
367
+ end
368
+ Dir.chdir( File.join(@params[:dest_top],"..") )
369
+ # CHECK IF RAILS-COMMAND WILL BE EXECUTED
370
+ execute_rails = false
371
+ if dest_existed && File.exists?( File.join(dest_top,'script/about') ) && (!$noquestions)
372
+ print "Do you want execute \"rails\" command? (you seem to have already executed, but it's no problem to repeat it.)(no/yes, default:no): "
373
+ if $stdin.gets.chomp! == "yes"
374
+ execute_rails = true
375
+ end
376
+ else
377
+ execute_rails = true
378
+ end
379
+ unless execute_rails
380
+ # IF NOT EXECUTING RAILS-COMMAND
381
+ print <<"EOF"
382
+ Warning: You selected no.
383
+ Make sure that you have already executed rails command,
384
+ or execute rails later.
385
+ EOF
386
+ else
387
+ if @params[:skip_rdb] || (@src_top == dest_top)
388
+ rails_option = "--skip"
389
+ else
390
+ rails_option = "--force"
391
+ end
392
+ # EXECUTE RAILS-COMMAND
393
+ railscommand = "#{$rails_bin} gfdnavi #{rails_option} -d #{RDBMS[@params[:rdb_type]-1].downcase} > #{$dev_null}"
394
+ unless system(railscommand)
395
+ abort "failed to execute \n #{railscommand}\nat #{Dir.pwd}"
396
+ end
397
+
398
+ if $gfdnavi_plugins.length > 0
399
+ # INSTALL PLUGINS IF RAILS >= 2.0
400
+ require "rubygems"
401
+ begin
402
+ if (gem "rails", ">=2.0")
403
+ Dir.chdir("gfdnavi")
404
+ # REMOTE PLUGINS
405
+ skip_remote_plugin = false
406
+
407
+ #plugincommand = "ruby script/plugin install --force"
408
+ plugincommand = "script/plugin"
409
+
410
+ # $gfdnavi_plugins.each{|plgin| plugincommand << " " << plgin}
411
+ # CHECK PROXY
412
+ proxycommand = ""
413
+ if http_proxy = (ENV["http_proxy"] || ENV["HTTP_PROXY"])
414
+ print "use proxy for http connection\n"
415
+ print "http_proxy = #{ENV["http_proxy"]}\n" if ENV["http_proxy"]
416
+ print "HTTP_PROXY = #{ENV["HTTP_PROXY"]}\n" if ENV["HTTP_PROXY"]
417
+ else
418
+ unless $noquestions
419
+ print <<"EOF"
420
+
421
+ You need http connection to install remote plugins.
422
+ If you are not connected to internet,
423
+ please \"skip\" and try later.
424
+ Which do you choose? (direct / proxy / skip, default:direct):
425
+ EOF
426
+ case $stdin.gets.chomp!
427
+ when "proxy"
428
+ # SET HTTP PROXY
429
+ print "enter proxy (http://your-proxy-sever:port):\n"
430
+ http_proxy = $stdin.gets.chomp!
431
+ ENV["http_proxy"] = http_proxy
432
+ when "skip"
433
+ # SKIP REMOTE PLUGINS
434
+ print <<"EOF"
435
+ You need to execute following command at #{Dir.pwd} later.
436
+ #{plugincommand}
437
+ EOF
438
+ skip_remote_plugin = true
439
+ end
440
+ else
441
+ print "connecting without proxy\n"
442
+ end
443
+ end
444
+ unless skip_remote_plugin
445
+ # INSTALL REMOTE PLUGINS
446
+ # TRY DEFAULT SOURCES
447
+ print "install remote plugins...\n"
448
+ $gfdnavi_plugins.each{|plgin|
449
+ print "install " + plgin + "\n"
450
+ #unless system(plugincommand + " " + plgin)
451
+ unless system(plugincommand + " install " + plgin)
452
+ print <<"EOF"
453
+ failed to execute
454
+ #{plugincommand}
455
+ with http_proxy = #{http_proxy}
456
+ at #{Dir.pwd}
457
+ Before you start the service, please try again.
458
+ EOF
459
+ #end
460
+ end
461
+ }
462
+ end
463
+ end
464
+ rescue Gem::LoadError
465
+ # NO NEED TO INSTALL PLUGINS IF RAILS 1.x
466
+ end
467
+ end
468
+ end
469
+
470
+ # COPY (OVERWRITE) ORIGINAL FILES TO THE DESTINATION
471
+ if @src_top != dest_top
472
+ copy_files( @src_top, dest_top )
473
+ unless $noquestions
474
+ print "Do you want to install sample data? (yes/no, default:yes): "
475
+ inst_sample = $stdin.gets.chomp!
476
+ else
477
+ inst_sample = "yes"
478
+ end
479
+ unless inst_sample == "no"
480
+ dest_sample_dir = File.join(dest_top,"data","samples")
481
+ FileUtils.mkdir( dest_sample_dir ) unless File.exists?( dest_sample_dir )
482
+ copy_files( File.join(@src_top,"data","samples"), dest_sample_dir , sampledata=true)
483
+ end
484
+ else
485
+ printf("src == dest. no need to copy files.\n")
486
+ end
487
+ end
488
+
489
+
490
+
491
+ def set_configure_files
492
+ Dir.chdir( @params[:dest_top] )
493
+ unless @params[:skip_rdb]
494
+ database_file = File.join("config","database.yml")
495
+ # RAILS COMMAND CREATES database.yml
496
+ # THUS IT EXIST ALL THE TIME
497
+ if File.exists?( database_file )
498
+ FileUtils.move( database_file, database_file + ".bak" )
499
+ end
500
+ rdb_type = @params[:rdb_type]
501
+ rdb_plf = @params[:rdb_plf]
502
+ name = %w(mysql sqlite3)[rdb_type-1]
503
+ File.open(database_file,"w"){|file|
504
+ File.foreach( database_file + ".example" ){|line|
505
+ if RDBMS[rdb_type-1] == "MySQL"
506
+ if /^(\s*username:)/ =~ line
507
+ line = "#$1 #{@params[:rdb_user]}\n"
508
+ elsif /^(\s*password:)/ =~ line
509
+ line = "#$1 #{@params[:rdb_password]}\n"
510
+ end
511
+ if RUBY_PLATFORM =~ /mswin|mingw|bccwin/
512
+ # FOR WINDOWS
513
+ else
514
+ # FOR UNIX-LIKE PLATFORMS
515
+ if rdb_plf == 1
516
+ # FOR WINDOWS NATIVE MySQL WITH Cygwin Ruby
517
+ if /^(\s*host:)/ =~ line
518
+ # not Unix Socket but TCP/IP port
519
+ line = "#$1 127.0.0.1\n"
520
+ elsif /^(\s*socket:)/ =~ line
521
+ # do nothing
522
+ end
523
+ else
524
+ if /^(\s*socket:)/ =~ line
525
+ # configuration for MySQL Unix Socket
526
+ # search for MySQL Socket
527
+ sockets = ["/tmp/mysql.sock", # default
528
+ "/var/lib/mysql/mysql.sock", # fedora, vine
529
+ "/var/run/mysqld/mysqld.sock" # debian
530
+ ]
531
+ tmp_sockets = []
532
+ sockets.each{|s|
533
+ tmp_sockets.push(s) if File.exist?(s)
534
+ }
535
+ if tmp_sockets > 1
536
+ raise "More than 1 MySQL sockets found!!!"
537
+ elsif tmp_sockets == 1
538
+ line = "#$1 #{tmp_sockets[0]}"
539
+ else
540
+ raise "MySQL socket not found!!!"
541
+ end
542
+ end
543
+ end
544
+ end
545
+ elsif RDBMS[rdb_type-1] == "SQLite3"
546
+ if /^(\s*adapter:)/ =~ line
547
+ # CHANGE ADAPTER TO SQLite3
548
+ line = " adapter: sqlite3\n"
549
+ elsif /^(\s*database:.*development)/ =~ line
550
+ line = " database: db/development.sqlite3"
551
+ elsif /^(\s*database:.*test)/ =~ line
552
+ line = " database: db/test.sqlite3"
553
+ elsif /^(\s*database:.*production)/ =~ line
554
+ line = " database: db/production.sqlite3"
555
+ elsif /^(\s*username:)/ =~ line
556
+ line = ""
557
+ elsif /^(\s*password:)/ =~ line
558
+ line = ""
559
+ elsif /^(\s*host:)/ =~ line
560
+ line = ""
561
+ end
562
+ end
563
+ file.write line
564
+ }
565
+ }
566
+ end
567
+
568
+ unless @params[:skip_configure]
569
+ config_file = File.join("config","gfdnavi.yml")
570
+ if File.exists?( config_file )
571
+ FileUtils.move( config_file, config_file + ".bak" )
572
+ end
573
+ File.open(config_file,"w") do |file|
574
+ server_type = @params[:server_type]
575
+ salt = @params[:salt]
576
+ email = @params[:email]
577
+ rails_env = @params[:rails_env]
578
+ File.foreach( config_file + ".example" ){|line|
579
+ if /^(passphrase:)/ =~ line
580
+ line = "#$1 #{salt}\n"
581
+ elsif /^(\s*email:) root@example\.org/ =~ line
582
+ line = "#$1 #{email}\n"
583
+ end
584
+ if server_type == 1 # private
585
+ elsif server_type > 1 # open
586
+ if /^(disable_user:)/ =~ line
587
+ if server_type == 3 # disable user accounts
588
+ line = "#$1 true\n"
589
+ end
590
+ elsif /^(enable_email:)/ =~ line
591
+ line = "#$1 true\n"
592
+ elsif /^(:domain:) example\.org/ =~ line
593
+ key = $1
594
+ /[\w|-]*@(.+)/ =~ @email
595
+ line = "#{key} #$1\n"
596
+ end
597
+ end
598
+ if rails_env == "development"
599
+ elsif rails_env == "production"
600
+ if /^#(\s*RAILS_ENV:)/ =~ line
601
+ line = "#$1 #{rails_env}\n"
602
+ end
603
+ end
604
+ #p ["@params[:unlimit_array_soft]",@params[:unlimit_array_soft]]
605
+ if @params[:unlimit_array_soft]
606
+ #hoge
607
+ if /^soft_limit_array_size: 2000000/ =~ line
608
+ line = "#" + line
609
+ end
610
+ end
611
+ file.write line
612
+ }
613
+ end
614
+ end
615
+
616
+ end
617
+
618
+ def execute_setup
619
+ Dir.chdir(@params[:dest_top])
620
+ begin
621
+ if Variable.table_exists?
622
+ print <<"EOF"
623
+ If you already have data in the gfdnavi database, skip this step,
624
+ and execute "rake update" manually if it is necessary.
625
+ EOF
626
+ unless $noquestions
627
+ print "Do you skip? (no/yes, default:no): "
628
+ if $stdin.gets.chomp! == "yes"
629
+ print "skiped\n"
630
+ return
631
+ end
632
+ end
633
+ end
634
+ rescue
635
+ #puts $!
636
+ end
637
+ # WHILE EXECUTION OF RAKE SETUP, WE NEED TO REPLY TO QUESTIONS
638
+ # DO NOT OUTPUT TO /dev/null
639
+ unless $noquestions_rake
640
+ rake_task = "setup"
641
+ else
642
+ rake_task = "setup_noquestions"
643
+ end
644
+ if RUBY_PLATFORM =~ /mswin|mingw|bccwin/
645
+ rakecommand = "rake.bat #{rake_task}"
646
+ else
647
+ rakecommand = "rake #{rake_task}"
648
+ end
649
+ unless system(rakecommand)
650
+ abort "failed to execute \"rake #{rake_task}\" at #{Dir.pwd}\n"
651
+ end
652
+ end
653
+
654
+ def print_parameters
655
+ # SALT FOR ENCRYPTION:
656
+ # DISPLAY "randomly generated" IF NOT MODIFIED BY HAND
657
+
658
+ # E-MAIL:
659
+ # DO NOT SHOW E-MAIL ADDRESS IF PRIVATE SERVER IS SELECTED
660
+
661
+ print <<"EOF"
662
+ Gfdnavi will be installed to the following directory:
663
+ #{@params[:dest_top]}
664
+
665
+ with following settings:
666
+ RDBMS: #{RDBMS[@params[:rdb_type] - 1]} #{if @params[:rdb_type]==1;if @params[:rdb_plf]==1;'on Windows';else;'on Cygwin';end;end}
667
+ salt for encryption#{" (randomly generated)" if @inst_mode.to_i < 3}: #{@params[:salt]}
668
+ email: #{@params[:server_type]==2 ? @params[:email] : "dummy (you can set later)"}
669
+ EOF
670
+ print <<"EOF"
671
+ server type: #{SERVER_TYPE_NAMES[@params[:server_type]-1]}
672
+ unlimit array size (soft limit): #{@params[:unlimit_array_soft] ? "true" : "false"}
673
+ rails env: #{@params[:rails_env]}
674
+ EOF
675
+ end
676
+
677
+ ####################
678
+ ### MAIN PROGRAM ###
679
+ ####################
680
+
681
+ if (ARGV.delete("--help") || ARGV.delete("-h"))
682
+ print <<"EOF"
683
+ This is Gfdnavi installer.
684
+ Options:
685
+ --noquestions : Install with default settings
686
+ --clean : Discard previous settings
687
+ -h, --help : Print this message
688
+ EOF
689
+ exit 0
690
+ end
691
+
692
+ if ARGV.delete("--noquestions")
693
+ $noquestions = true
694
+ $noquestions_rake = true
695
+ end
696
+
697
+ $load_inst_params = false
698
+ install_params_file = File.join(@src_top,"install_params.yml")
699
+ if File.exists?( install_params_file )
700
+ unless ARGV.delete("--clean")
701
+ @params = YAML.load(File.read(install_params_file))
702
+ $load_inst_params = true
703
+ end
704
+ end
705
+ @params = Hash.new unless Hash === @params
706
+ # DEFAULT SETTINGS
707
+
708
+ if @params[:dest_top]
709
+ dest_path = File.dirname(@params[:dest_top])
710
+ else
711
+ if RUBY_PLATFORM =~ /mswin|mingw|bccwin/
712
+ dest_path = File.join(ENV['RBPATH'],"..","..")
713
+ else
714
+ dest_path = ENV["HOME"]
715
+ @params[:dest_top] = File.join(dest_path,"gfdnavi")
716
+ end
717
+ end
718
+ # SQLite3
719
+ @params[:rdb_type] = 2 if !(@params[:rdb_type])
720
+ @params[:rails_env] = "production" if !(@params[:rails_env])
721
+ # Windows native MySQL if MySQL with cygwin
722
+ @params[:rdb_plf] = 1 if !(@params[:rdb_plf])
723
+ @params[:salt] = [rand(64),rand(64),rand(64),rand(64),rand(64)].pack("C*").tr("\x00-\x3f","A-Za-z0-9./")
724
+ @params[:email] = "mail@hoge.com" if !(@params[:email])
725
+ @params[:server_type] = 1 if !(@params[:server_type])
726
+ @params[:rails_env] = "production" if !(@params[:rails_env])
727
+ @params[:skip_rdb] = false
728
+ @params[:skip_configure] = false
729
+
730
+
731
+ print <<"EOF"
732
+ Welcome to Gfdnavi.
733
+ In order to install Gfdnavi,
734
+ there are the following steps.
735
+ Step 1: Setup parameters
736
+ Step 2: Execute rails and copy files"
737
+ Step 3: Create "database.yml" and "gfdnavi.yml"
738
+ Step 4: Execute "rake setup"
739
+ Step 5: Set root's password
740
+ press any key to continue
741
+ EOF
742
+
743
+ unless $noquestions
744
+ $stdin.gets
745
+ end
746
+
747
+ unless $noquestions
748
+ mode_confirm = false
749
+ begin
750
+ print <<"EOF"
751
+ Select install mode:
752
+ 1. install private server with default settings
753
+ 2. install public server with default settings
754
+ 3. configure details
755
+ EOF
756
+ while true
757
+ case @inst_mode = $stdin.gets.chomp!
758
+ when "1"
759
+ @params[:server_type] = 1
760
+ @params[:unlimit_array_soft] = true
761
+ $noquestions = true
762
+ setup_destination
763
+ print_parameters
764
+ print <<"EOF"
765
+ Do you agree?
766
+ (You can manually change the settings later
767
+ by editing config/gfdnavi.yml)
768
+ EOF
769
+ print "(yes/no, default:yes):"
770
+ mode_confirm = true unless ($stdin.gets.chomp!)=="no"
771
+ break
772
+ when "2"
773
+ @params[:server_type] = 2
774
+ $noquestions = true
775
+ setup_destination
776
+ setup_email
777
+ print_parameters
778
+ print <<"EOF"
779
+ Do you agree?
780
+ (You can manually change the settings later
781
+ by editing config/gfdnavi.yml)
782
+ EOF
783
+ print "(yes/no, default:yes):"
784
+ mode_confirm = true unless ($stdin.gets.chomp!)=="no"
785
+ break
786
+ when "3"
787
+ mode_confirm = true
788
+ setup_destination
789
+ break
790
+ else
791
+ print "invalid number!\n"
792
+ end
793
+ end
794
+ end until mode_confirm
795
+ end
796
+
797
+ print "***************************************\nStep 1: Setup parameters\n"
798
+ unless $noquestions
799
+ setup_parameter
800
+ para = @params.dup
801
+ para.delete(:salt)
802
+ para.delete(:rdb_password)
803
+ File.open(install_params_file,"w"){|file|
804
+ file.write para.to_yaml
805
+ }
806
+ else
807
+ print "Skip\n"
808
+ end
809
+
810
+ print "***************************************\nStep 2: Execute rails and copy files\n"
811
+ install_files
812
+
813
+ print "***************************************\nStep 3: Create \"database.yml\" and \"gfdnavi.yml\"\n"
814
+ set_configure_files
815
+
816
+ print "***************************************\nStep 4: Execute rake setup\n"
817
+ require File.join(Dir.pwd, "config", "environment")
818
+ execute_setup
819
+
820
+ print <<"EOF"
821
+ Congraturations!
822
+ You sucessed to install gfdnavi to #{@params[:dest_top]}.
823
+ Before you start gfdnavi,
824
+ change the following configurations
825
+ 1. "config/database.yml"
826
+ 2. "config/gfdnavi.yml"
827
+ and check file permission mode of their files (only webserver can read the files).
828
+ EOF