marty 0.5.12

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 (345) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +84 -0
  4. data/Rakefile +29 -0
  5. data/app/assets/javascripts/marty/application.js +15 -0
  6. data/app/assets/stylesheets/marty/application.css +13 -0
  7. data/app/components/marty/api_auth_view.rb +32 -0
  8. data/app/components/marty/auth_app.rb +55 -0
  9. data/app/components/marty/auth_app.rb~ +51 -0
  10. data/app/components/marty/auth_app/javascripts/auth_app.js +91 -0
  11. data/app/components/marty/auth_app/javascripts/auth_app.js~ +91 -0
  12. data/app/components/marty/cm_form_panel.rb~ +5 -0
  13. data/app/components/marty/cm_grid_panel.rb~ +35 -0
  14. data/app/components/marty/data_import_view.rb~ +142 -0
  15. data/app/components/marty/extras/layout.rb +46 -0
  16. data/app/components/marty/extras/layout.rb~ +46 -0
  17. data/app/components/marty/extras/misc.rb +18 -0
  18. data/app/components/marty/form.rb +6 -0
  19. data/app/components/marty/grid.rb +45 -0
  20. data/app/components/marty/grid_append_only.rb +12 -0
  21. data/app/components/marty/import_type_view.rb +53 -0
  22. data/app/components/marty/live_search_grid_panel.rb +46 -0
  23. data/app/components/marty/live_search_grid_panel.rb~ +49 -0
  24. data/app/components/marty/main_auth_app.rb +269 -0
  25. data/app/components/marty/main_auth_app.rb~ +238 -0
  26. data/app/components/marty/mcfly_grid_panel.rb +62 -0
  27. data/app/components/marty/mcfly_grid_panel.rb~ +80 -0
  28. data/app/components/marty/new_posting_form.rb +46 -0
  29. data/app/components/marty/new_posting_form.rb~ +46 -0
  30. data/app/components/marty/new_posting_window.rb +21 -0
  31. data/app/components/marty/new_posting_window.rb~ +21 -0
  32. data/app/components/marty/panel.rb +12 -0
  33. data/app/components/marty/pivot_grid.rb +52 -0
  34. data/app/components/marty/pivot_grid/endpoints.rb +45 -0
  35. data/app/components/marty/pivot_grid/javascripts/extensions.js +150 -0
  36. data/app/components/marty/pivot_grid/javascripts/pivot_grid.js +86 -0
  37. data/app/components/marty/pivot_grid/services.rb +44 -0
  38. data/app/components/marty/posting_grid.rb +139 -0
  39. data/app/components/marty/posting_grid.rb~ +140 -0
  40. data/app/components/marty/posting_window.rb +27 -0
  41. data/app/components/marty/promise_view.rb +177 -0
  42. data/app/components/marty/promise_view.rb~ +157 -0
  43. data/app/components/marty/promise_view/stylesheets/promise_view.css +26 -0
  44. data/app/components/marty/promise_view/stylesheets/promise_view.css~ +15 -0
  45. data/app/components/marty/report_form.rb +225 -0
  46. data/app/components/marty/report_form.rb~ +217 -0
  47. data/app/components/marty/report_select.rb +145 -0
  48. data/app/components/marty/report_select.rb~ +133 -0
  49. data/app/components/marty/reporting.rb +39 -0
  50. data/app/components/marty/reporting.rb~ +39 -0
  51. data/app/components/marty/script_detail.rb~ +430 -0
  52. data/app/components/marty/script_form.rb +233 -0
  53. data/app/components/marty/script_form.rb~ +233 -0
  54. data/app/components/marty/script_form/javascripts/Ext.ux.form.field.CodeMirror.js +698 -0
  55. data/app/components/marty/script_form/javascripts/Ext.ux.form.field.CodeMirror.js~ +909 -0
  56. data/app/components/marty/script_form/javascripts/codemirror.js +3130 -0
  57. data/app/components/marty/script_form/javascripts/mode/clike/clike.js +284 -0
  58. data/app/components/marty/script_form/javascripts/mode/clike/index.html +102 -0
  59. data/app/components/marty/script_form/javascripts/mode/clike/scala.html +766 -0
  60. data/app/components/marty/script_form/javascripts/mode/clojure/clojure.js +206 -0
  61. data/app/components/marty/script_form/javascripts/mode/clojure/index.html +67 -0
  62. data/app/components/marty/script_form/javascripts/mode/coffeescript/LICENSE +22 -0
  63. data/app/components/marty/script_form/javascripts/mode/coffeescript/coffeescript.js +346 -0
  64. data/app/components/marty/script_form/javascripts/mode/coffeescript/index.html +728 -0
  65. data/app/components/marty/script_form/javascripts/mode/commonlisp/commonlisp.js +101 -0
  66. data/app/components/marty/script_form/javascripts/mode/commonlisp/index.html +165 -0
  67. data/app/components/marty/script_form/javascripts/mode/css/css.js +448 -0
  68. data/app/components/marty/script_form/javascripts/mode/css/index.html +58 -0
  69. data/app/components/marty/script_form/javascripts/mode/css/test.js +501 -0
  70. data/app/components/marty/script_form/javascripts/mode/delorean/delorean.js +189 -0
  71. data/app/components/marty/script_form/javascripts/mode/diff/diff.js +32 -0
  72. data/app/components/marty/script_form/javascripts/mode/diff/index.html +105 -0
  73. data/app/components/marty/script_form/javascripts/mode/ecl/ecl.js +203 -0
  74. data/app/components/marty/script_form/javascripts/mode/ecl/index.html +42 -0
  75. data/app/components/marty/script_form/javascripts/mode/erlang/erlang.js +463 -0
  76. data/app/components/marty/script_form/javascripts/mode/erlang/index.html +63 -0
  77. data/app/components/marty/script_form/javascripts/mode/gfm/gfm.js +150 -0
  78. data/app/components/marty/script_form/javascripts/mode/gfm/index.html +48 -0
  79. data/app/components/marty/script_form/javascripts/mode/go/go.js +170 -0
  80. data/app/components/marty/script_form/javascripts/mode/go/index.html +73 -0
  81. data/app/components/marty/script_form/javascripts/mode/groovy/groovy.js +210 -0
  82. data/app/components/marty/script_form/javascripts/mode/groovy/index.html +72 -0
  83. data/app/components/marty/script_form/javascripts/mode/haskell/haskell.js +242 -0
  84. data/app/components/marty/script_form/javascripts/mode/haskell/index.html +61 -0
  85. data/app/components/marty/script_form/javascripts/mode/haxe/haxe.js +429 -0
  86. data/app/components/marty/script_form/javascripts/mode/haxe/index.html +91 -0
  87. data/app/components/marty/script_form/javascripts/mode/htmlembedded/htmlembedded.js +72 -0
  88. data/app/components/marty/script_form/javascripts/mode/htmlembedded/index.html +50 -0
  89. data/app/components/marty/script_form/javascripts/mode/htmlmixed/htmlmixed.js +84 -0
  90. data/app/components/marty/script_form/javascripts/mode/htmlmixed/index.html +52 -0
  91. data/app/components/marty/script_form/javascripts/mode/javascript/index.html +78 -0
  92. data/app/components/marty/script_form/javascripts/mode/javascript/javascript.js +361 -0
  93. data/app/components/marty/script_form/javascripts/mode/jinja2/index.html +38 -0
  94. data/app/components/marty/script_form/javascripts/mode/jinja2/jinja2.js +42 -0
  95. data/app/components/marty/script_form/javascripts/mode/less/index.html +740 -0
  96. data/app/components/marty/script_form/javascripts/mode/less/less.js +266 -0
  97. data/app/components/marty/script_form/javascripts/mode/lua/index.html +73 -0
  98. data/app/components/marty/script_form/javascripts/mode/lua/lua.js +140 -0
  99. data/app/components/marty/script_form/javascripts/mode/markdown/index.html +343 -0
  100. data/app/components/marty/script_form/javascripts/mode/markdown/markdown.js +382 -0
  101. data/app/components/marty/script_form/javascripts/mode/markdown/test.js +1084 -0
  102. data/app/components/marty/script_form/javascripts/mode/mysql/index.html +42 -0
  103. data/app/components/marty/script_form/javascripts/mode/mysql/mysql.js +186 -0
  104. data/app/components/marty/script_form/javascripts/mode/ntriples/index.html +33 -0
  105. data/app/components/marty/script_form/javascripts/mode/ntriples/ntriples.js +172 -0
  106. data/app/components/marty/script_form/javascripts/mode/ocaml/index.html +130 -0
  107. data/app/components/marty/script_form/javascripts/mode/ocaml/ocaml.js +114 -0
  108. data/app/components/marty/script_form/javascripts/mode/pascal/LICENSE +7 -0
  109. data/app/components/marty/script_form/javascripts/mode/pascal/index.html +49 -0
  110. data/app/components/marty/script_form/javascripts/mode/pascal/pascal.js +94 -0
  111. data/app/components/marty/script_form/javascripts/mode/perl/LICENSE +19 -0
  112. data/app/components/marty/script_form/javascripts/mode/perl/index.html +63 -0
  113. data/app/components/marty/script_form/javascripts/mode/perl/perl.js +816 -0
  114. data/app/components/marty/script_form/javascripts/mode/php/index.html +49 -0
  115. data/app/components/marty/script_form/javascripts/mode/php/php.js +148 -0
  116. data/app/components/marty/script_form/javascripts/mode/pig/index.html +43 -0
  117. data/app/components/marty/script_form/javascripts/mode/pig/pig.js +172 -0
  118. data/app/components/marty/script_form/javascripts/mode/plsql/index.html +63 -0
  119. data/app/components/marty/script_form/javascripts/mode/plsql/plsql.js +217 -0
  120. data/app/components/marty/script_form/javascripts/mode/properties/index.html +41 -0
  121. data/app/components/marty/script_form/javascripts/mode/properties/properties.js +63 -0
  122. data/app/components/marty/script_form/javascripts/mode/python/LICENSE.txt +21 -0
  123. data/app/components/marty/script_form/javascripts/mode/python/index.html +123 -0
  124. data/app/components/marty/script_form/javascripts/mode/python/python.js +338 -0
  125. data/app/components/marty/script_form/javascripts/mode/r/LICENSE +24 -0
  126. data/app/components/marty/script_form/javascripts/mode/r/index.html +74 -0
  127. data/app/components/marty/script_form/javascripts/mode/r/r.js +141 -0
  128. data/app/components/marty/script_form/javascripts/mode/rpm/changes/changes.js +19 -0
  129. data/app/components/marty/script_form/javascripts/mode/rpm/changes/index.html +54 -0
  130. data/app/components/marty/script_form/javascripts/mode/rpm/spec/index.html +100 -0
  131. data/app/components/marty/script_form/javascripts/mode/rpm/spec/spec.css +5 -0
  132. data/app/components/marty/script_form/javascripts/mode/rpm/spec/spec.js +66 -0
  133. data/app/components/marty/script_form/javascripts/mode/rst/index.html +526 -0
  134. data/app/components/marty/script_form/javascripts/mode/rst/rst.js +326 -0
  135. data/app/components/marty/script_form/javascripts/mode/ruby/LICENSE +24 -0
  136. data/app/components/marty/script_form/javascripts/mode/ruby/index.html +172 -0
  137. data/app/components/marty/script_form/javascripts/mode/ruby/ruby.js +195 -0
  138. data/app/components/marty/script_form/javascripts/mode/rust/index.html +49 -0
  139. data/app/components/marty/script_form/javascripts/mode/rust/rust.js +432 -0
  140. data/app/components/marty/script_form/javascripts/mode/scheme/index.html +65 -0
  141. data/app/components/marty/script_form/javascripts/mode/scheme/scheme.js +230 -0
  142. data/app/components/marty/script_form/javascripts/mode/shell/index.html +50 -0
  143. data/app/components/marty/script_form/javascripts/mode/shell/shell.js +118 -0
  144. data/app/components/marty/script_form/javascripts/mode/sieve/LICENSE +23 -0
  145. data/app/components/marty/script_form/javascripts/mode/sieve/index.html +81 -0
  146. data/app/components/marty/script_form/javascripts/mode/sieve/sieve.js +156 -0
  147. data/app/components/marty/script_form/javascripts/mode/smalltalk/index.html +56 -0
  148. data/app/components/marty/script_form/javascripts/mode/smalltalk/smalltalk.js +139 -0
  149. data/app/components/marty/script_form/javascripts/mode/smarty/index.html +83 -0
  150. data/app/components/marty/script_form/javascripts/mode/smarty/smarty.js +148 -0
  151. data/app/components/marty/script_form/javascripts/mode/sparql/index.html +41 -0
  152. data/app/components/marty/script_form/javascripts/mode/sparql/sparql.js +143 -0
  153. data/app/components/marty/script_form/javascripts/mode/stex/index.html +98 -0
  154. data/app/components/marty/script_form/javascripts/mode/stex/stex.js +182 -0
  155. data/app/components/marty/script_form/javascripts/mode/stex/test.js +343 -0
  156. data/app/components/marty/script_form/javascripts/mode/tiddlywiki/index.html +141 -0
  157. data/app/components/marty/script_form/javascripts/mode/tiddlywiki/tiddlywiki.css +14 -0
  158. data/app/components/marty/script_form/javascripts/mode/tiddlywiki/tiddlywiki.js +384 -0
  159. data/app/components/marty/script_form/javascripts/mode/tiki/index.html +83 -0
  160. data/app/components/marty/script_form/javascripts/mode/tiki/tiki.css +26 -0
  161. data/app/components/marty/script_form/javascripts/mode/tiki/tiki.js +309 -0
  162. data/app/components/marty/script_form/javascripts/mode/vb/LICENSE.txt +21 -0
  163. data/app/components/marty/script_form/javascripts/mode/vb/index.html +89 -0
  164. data/app/components/marty/script_form/javascripts/mode/vb/vb.js +260 -0
  165. data/app/components/marty/script_form/javascripts/mode/vbscript/index.html +43 -0
  166. data/app/components/marty/script_form/javascripts/mode/vbscript/vbscript.js +26 -0
  167. data/app/components/marty/script_form/javascripts/mode/velocity/index.html +104 -0
  168. data/app/components/marty/script_form/javascripts/mode/velocity/velocity.js +146 -0
  169. data/app/components/marty/script_form/javascripts/mode/verilog/index.html +211 -0
  170. data/app/components/marty/script_form/javascripts/mode/verilog/verilog.js +194 -0
  171. data/app/components/marty/script_form/javascripts/mode/xml/index.html +45 -0
  172. data/app/components/marty/script_form/javascripts/mode/xml/xml.js +318 -0
  173. data/app/components/marty/script_form/javascripts/mode/xquery/LICENSE +20 -0
  174. data/app/components/marty/script_form/javascripts/mode/xquery/index.html +223 -0
  175. data/app/components/marty/script_form/javascripts/mode/xquery/test/index.html +27 -0
  176. data/app/components/marty/script_form/javascripts/mode/xquery/test/testBase.js +42 -0
  177. data/app/components/marty/script_form/javascripts/mode/xquery/test/testEmptySequenceKeyword.js +16 -0
  178. data/app/components/marty/script_form/javascripts/mode/xquery/test/testMultiAttr.js +16 -0
  179. data/app/components/marty/script_form/javascripts/mode/xquery/test/testNamespaces.js +91 -0
  180. data/app/components/marty/script_form/javascripts/mode/xquery/test/testProcessingInstructions.js +16 -0
  181. data/app/components/marty/script_form/javascripts/mode/xquery/test/testQuotes.js +19 -0
  182. data/app/components/marty/script_form/javascripts/mode/xquery/xquery.js +451 -0
  183. data/app/components/marty/script_form/javascripts/mode/yaml/index.html +68 -0
  184. data/app/components/marty/script_form/javascripts/mode/yaml/yaml.js +95 -0
  185. data/app/components/marty/script_form/javascripts/util/closetag.js +164 -0
  186. data/app/components/marty/script_form/javascripts/util/dialog.css +27 -0
  187. data/app/components/marty/script_form/javascripts/util/dialog.js +70 -0
  188. data/app/components/marty/script_form/javascripts/util/foldcode.js +196 -0
  189. data/app/components/marty/script_form/javascripts/util/formatting.js +193 -0
  190. data/app/components/marty/script_form/javascripts/util/javascript-hint.js +134 -0
  191. data/app/components/marty/script_form/javascripts/util/loadmode.js +51 -0
  192. data/app/components/marty/script_form/javascripts/util/match-highlighter.js +44 -0
  193. data/app/components/marty/script_form/javascripts/util/multiplex.js +77 -0
  194. data/app/components/marty/script_form/javascripts/util/overlay.js +54 -0
  195. data/app/components/marty/script_form/javascripts/util/pig-hint.js +123 -0
  196. data/app/components/marty/script_form/javascripts/util/runmode-standalone.js +90 -0
  197. data/app/components/marty/script_form/javascripts/util/runmode.js +53 -0
  198. data/app/components/marty/script_form/javascripts/util/search.js +118 -0
  199. data/app/components/marty/script_form/javascripts/util/searchcursor.js +119 -0
  200. data/app/components/marty/script_form/javascripts/util/simple-hint.css +16 -0
  201. data/app/components/marty/script_form/javascripts/util/simple-hint.js +97 -0
  202. data/app/components/marty/script_form/javascripts/util/xml-hint.js +137 -0
  203. data/app/components/marty/script_form/stylesheets/codemirror.css +172 -0
  204. data/app/components/marty/script_form/stylesheets/delorean.css +10 -0
  205. data/app/components/marty/script_form/stylesheets/theme/ambiance.css +81 -0
  206. data/app/components/marty/script_form/stylesheets/theme/blackboard.css +25 -0
  207. data/app/components/marty/script_form/stylesheets/theme/cobalt.css +18 -0
  208. data/app/components/marty/script_form/stylesheets/theme/eclipse.css +25 -0
  209. data/app/components/marty/script_form/stylesheets/theme/elegant.css +10 -0
  210. data/app/components/marty/script_form/stylesheets/theme/erlang-dark.css +21 -0
  211. data/app/components/marty/script_form/stylesheets/theme/lesser-dark.css +44 -0
  212. data/app/components/marty/script_form/stylesheets/theme/monokai.css +28 -0
  213. data/app/components/marty/script_form/stylesheets/theme/neat.css +9 -0
  214. data/app/components/marty/script_form/stylesheets/theme/night.css +21 -0
  215. data/app/components/marty/script_form/stylesheets/theme/rubyblue.css +21 -0
  216. data/app/components/marty/script_form/stylesheets/theme/vibrant-ink.css +27 -0
  217. data/app/components/marty/script_form/stylesheets/theme/xq-dark.css +46 -0
  218. data/app/components/marty/script_grid.rb +104 -0
  219. data/app/components/marty/script_grid.rb~ +99 -0
  220. data/app/components/marty/script_tester.rb +114 -0
  221. data/app/components/marty/script_tester.rb~ +213 -0
  222. data/app/components/marty/scripting.rb +132 -0
  223. data/app/components/marty/scripting.rb~ +124 -0
  224. data/app/components/marty/select_report.rb~ +143 -0
  225. data/app/components/marty/simple_app.rb +97 -0
  226. data/app/components/marty/simple_app.rb~ +101 -0
  227. data/app/components/marty/simple_app/javascripts/simple_app.js +50 -0
  228. data/app/components/marty/simple_app/javascripts/statusbar_ext.js +8 -0
  229. data/app/components/marty/tag_grid.rb +83 -0
  230. data/app/components/marty/tag_grid.rb~ +89 -0
  231. data/app/components/marty/tree_panel.rb~ +256 -0
  232. data/app/components/marty/tree_panel/javascripts/tree_panel.js~ +317 -0
  233. data/app/components/marty/user_pivot.rb +128 -0
  234. data/app/components/marty/user_view.rb +181 -0
  235. data/app/components/marty/user_view.rb~ +188 -0
  236. data/app/controllers/marty/application_controller.rb +124 -0
  237. data/app/controllers/marty/application_controller.rb~ +133 -0
  238. data/app/controllers/marty/components_controller.rb +41 -0
  239. data/app/controllers/marty/components_controller.rb~ +37 -0
  240. data/app/controllers/marty/job_controller.rb +28 -0
  241. data/app/controllers/marty/job_controller.rb~ +28 -0
  242. data/app/controllers/marty/rpc_controller.rb +64 -0
  243. data/app/controllers/marty/rpc_controller.rb~ +61 -0
  244. data/app/helpers/marty/application_helper.rb +4 -0
  245. data/app/helpers/marty/script_set.rb +57 -0
  246. data/app/helpers/marty/script_set.rb~ +59 -0
  247. data/app/models/marty/api_auth.rb +44 -0
  248. data/app/models/marty/api_auth.rb~ +48 -0
  249. data/app/models/marty/base.rb +4 -0
  250. data/app/models/marty/data_change.rb +179 -0
  251. data/app/models/marty/data_change.rb~ +141 -0
  252. data/app/models/marty/enum.rb +22 -0
  253. data/app/models/marty/enum.rb~ +16 -0
  254. data/app/models/marty/import_type.rb +44 -0
  255. data/app/models/marty/import_type.rb~ +48 -0
  256. data/app/models/marty/poop.rb~ +169 -0
  257. data/app/models/marty/posting.rb +101 -0
  258. data/app/models/marty/posting.rb~ +86 -0
  259. data/app/models/marty/posting_type.rb +12 -0
  260. data/app/models/marty/posting_type.rb~ +21 -0
  261. data/app/models/marty/promise.rb +252 -0
  262. data/app/models/marty/promise.rb~ +196 -0
  263. data/app/models/marty/role.rb +6 -0
  264. data/app/models/marty/role.rb~ +10 -0
  265. data/app/models/marty/script.rb +144 -0
  266. data/app/models/marty/script.rb~ +62 -0
  267. data/app/models/marty/tag.rb +96 -0
  268. data/app/models/marty/tag.rb~ +91 -0
  269. data/app/models/marty/token.rb +30 -0
  270. data/app/models/marty/user.rb +146 -0
  271. data/app/models/marty/user.rb~ +148 -0
  272. data/app/models/marty/user_role.rb +7 -0
  273. data/app/models/marty/user_role.rb~ +13 -0
  274. data/app/views/layouts/marty/application.html.erb +12 -0
  275. data/app/views/layouts/marty/application.html.erb~ +11 -0
  276. data/config/locales/en.yml +134 -0
  277. data/config/routes.rb +6 -0
  278. data/config/routes.rb~ +10 -0
  279. data/db/migrate/001_create_marty_scripts.rb +14 -0
  280. data/db/migrate/003_create_marty_users.rb +12 -0
  281. data/db/migrate/004_create_marty_roles.rb +7 -0
  282. data/db/migrate/005_create_marty_user_roles.rb +14 -0
  283. data/db/migrate/006_create_marty_tokens.rb +14 -0
  284. data/db/migrate/008_create_marty_posting_types.rb +7 -0
  285. data/db/migrate/019_create_marty_postings.rb +18 -0
  286. data/db/migrate/019_create_marty_postings.rb~ +19 -0
  287. data/db/migrate/068_create_marty_import_types.rb +12 -0
  288. data/db/migrate/069_create_marty_import_synonyms.rb +15 -0
  289. data/db/migrate/070_create_versions.rb +18 -0
  290. data/db/migrate/071_add_object_changes_column_to_versions.rb +9 -0
  291. data/db/migrate/072_add_validation_function_to_import_types.rb +6 -0
  292. data/db/migrate/073_add_preprocess_function_to_import_types.rb +5 -0
  293. data/db/migrate/090_create_delayed_jobs.rb +22 -0
  294. data/db/migrate/091_create_marty_promises.rb +36 -0
  295. data/db/migrate/095_create_marty_tags.rb +14 -0
  296. data/db/migrate/095_create_marty_tags.rb~ +19 -0
  297. data/db/migrate/096_add_user_roles_to_import_types.rb +11 -0
  298. data/db/migrate/097_drop_versions.rb +9 -0
  299. data/db/migrate/098_create_marty_api_auths.rb +20 -0
  300. data/db/seeds.rb +48 -0
  301. data/lib/marty.rb +18 -0
  302. data/lib/marty.rb~ +13 -0
  303. data/lib/marty/content_handler.rb +97 -0
  304. data/lib/marty/content_handler.rb~ +93 -0
  305. data/lib/marty/data_conversion.rb +298 -0
  306. data/lib/marty/data_exporter.rb +150 -0
  307. data/lib/marty/data_exporter.rb~ +137 -0
  308. data/lib/marty/data_importer.rb +122 -0
  309. data/lib/marty/data_importer.rb~ +114 -0
  310. data/lib/marty/data_row_processor.rb~ +206 -0
  311. data/lib/marty/drop_folder_hook.rb~ +17 -0
  312. data/lib/marty/engine.rb +10 -0
  313. data/lib/marty/folder_hook.rb~ +9 -0
  314. data/lib/marty/lazy_column_loader.rb +57 -0
  315. data/lib/marty/lazy_column_loader.rb~ +47 -0
  316. data/lib/marty/mcfly_query.rb +189 -0
  317. data/lib/marty/mcfly_query.rb~ +188 -0
  318. data/lib/marty/migrations.rb +108 -0
  319. data/lib/marty/migrations.rb~ +65 -0
  320. data/lib/marty/monkey.rb +163 -0
  321. data/lib/marty/monkey.rb~ +160 -0
  322. data/lib/marty/permissions.rb +64 -0
  323. data/lib/marty/permissions.rb~ +69 -0
  324. data/lib/marty/promise.rb~ +41 -0
  325. data/lib/marty/promise_job.rb +123 -0
  326. data/lib/marty/promise_job.rb~ +121 -0
  327. data/lib/marty/promise_proxy.rb +94 -0
  328. data/lib/marty/promise_proxy.rb~ +69 -0
  329. data/lib/marty/railtie.rb +5 -0
  330. data/lib/marty/relation.rb +39 -0
  331. data/lib/marty/util.rb +110 -0
  332. data/lib/marty/util.rb~ +80 -0
  333. data/lib/marty/version.rb +3 -0
  334. data/lib/marty/version.rb~ +3 -0
  335. data/lib/marty/xl.rb +527 -0
  336. data/lib/marty/xl.rb~ +526 -0
  337. data/lib/pyxll/README.txt +19 -0
  338. data/lib/pyxll/README.txt~ +16 -0
  339. data/lib/pyxll/gemini.py +155 -0
  340. data/lib/pyxll/gemini.py~ +110 -0
  341. data/lib/pyxll/pyxll.cfg +12 -0
  342. data/lib/pyxll/pyxll.cfg~ +12 -0
  343. data/lib/pyxll/sample.xlsx +0 -0
  344. data/lib/tasks/marty_tasks.rake +37 -0
  345. metadata +517 -0
@@ -0,0 +1,188 @@
1
+ class Marty::UserView < Marty::CmGridPanel
2
+ has_marty_permissions create: [:admin, :user_manager],
3
+ read: :any,
4
+ update: [:admin, :user_manager],
5
+ delete: [:admin, :user_manager]
6
+
7
+ def configure(c)
8
+ super
9
+
10
+ c.title ||= I18n.t('users', default: "Users")
11
+ c.model = "Marty::User"
12
+ c.enable_extended_search = false
13
+ c.enable_edit_inline = false
14
+
15
+ c.columns ||= [:login,
16
+ :firstname,
17
+ :lastname,
18
+ :active,
19
+ :uuid,
20
+ :roles
21
+ ]
22
+
23
+ c.data_store.sorters = {
24
+ property: :login,
25
+ direction: 'ASC',
26
+ } if c.columns.include?(:login)
27
+ end
28
+
29
+ js_configure do |c|
30
+ c.init_component = <<-JS
31
+ function() {
32
+ this.callParent();
33
+ // Set single selection mode. FIXME: can this be done on config?
34
+ this.getSelectionModel().setSelectionMode('SINGLE');
35
+ }
36
+ JS
37
+ end
38
+
39
+ def self.set_roles(roles, user)
40
+ roles ||= []
41
+
42
+ # Destroy old roles (must call destroy for auditing to work properly)
43
+ user.user_roles.each do |ur|
44
+ ur.destroy unless roles.include?(I18n.t("roles.#{ur.role.name}"))
45
+ end
46
+
47
+ # set new roles
48
+ user.roles = Marty::Role.all.select { |r|
49
+ roles.include? I18n.t("roles.#{r.name}") }
50
+ end
51
+
52
+ def self.create_edit_user(data)
53
+ # Creates the initial place-holder user object and check it
54
+ # out.
55
+ user = data["id"].nil? ? Marty::User.new : Marty::User.find(data["id"])
56
+ user.login = data["login"]
57
+ user.firstname = data["firstname"]
58
+ user.lastname = data["lastname"]
59
+ user.active = data["active"]
60
+ user.uuid = data["uuid"]
61
+
62
+ if user.valid?
63
+ set_roles(data["roles"], user)
64
+ user.save
65
+ end
66
+
67
+ user
68
+ end
69
+
70
+ # override the add_in_form and edit_in_form endpoint. User creation/update
71
+ # needs to use the create_edit_user method.
72
+
73
+ endpoint :add_window__add_form__netzke_submit do |params, this|
74
+ data = ActiveSupport::JSON.decode(params[:data])
75
+ data["id"] = nil
76
+
77
+ unless self.class.can_perform_action?(:create)
78
+ this.netzke_feedback "Permission Denied"
79
+ return
80
+ end
81
+
82
+ user = self.class.create_edit_user(data)
83
+ if user.valid?
84
+ this.success = true
85
+ this.on_submit_success
86
+ else
87
+ data_adapter.errors_array(user).each do |error|
88
+ flash :error => error
89
+ end
90
+ this.netzke_feedback(@flash)
91
+ end
92
+ end
93
+
94
+ endpoint :edit_window__edit_form__netzke_submit do |params, this|
95
+ data = ActiveSupport::JSON.decode(params[:data])
96
+ unless self.class.can_perform_action?(:update)
97
+ this.netzke_feedback "Permission Denied"
98
+ return
99
+ end
100
+
101
+ user = self.class.create_edit_user(data)
102
+ if user.valid?
103
+ this.success = true
104
+ this.on_submit_success
105
+ else
106
+ data_adapter.errors_array(user).each do |error|
107
+ flash :error => error
108
+ end
109
+ this.netzke_feedback(@flash)
110
+ end
111
+ end
112
+
113
+ action :add_in_form do |a|
114
+ a.text = I18n.t("user_grid.new")
115
+ a.tooltip = I18n.t("user_grid.new")
116
+ a.icon = :user_add
117
+ a.disabled = !self.class.can_perform_action?(:create)
118
+ end
119
+
120
+ action :edit_in_form do |a|
121
+ a.disabled = !self.class.can_perform_action?(:update)
122
+ a.icon = :user_edit
123
+ end
124
+
125
+ action :del do |a|
126
+ a.icon = :user_delete
127
+ end
128
+
129
+ def default_bbar
130
+ [:add_in_form, :edit_in_form, :del]
131
+ end
132
+
133
+ def default_context_menu
134
+ []
135
+ end
136
+
137
+ column :login do |c|
138
+ c.width = 100
139
+ c.text = I18n.t("user_grid.login")
140
+ end
141
+
142
+ column :firstname do |c|
143
+ c.width = 100
144
+ c.text = I18n.t("user_grid.firstname")
145
+ end
146
+
147
+ column :lastname do |c|
148
+ c.width = 100
149
+ c.text = I18n.t("user_grid.lastname")
150
+ end
151
+
152
+ column :active do |c|
153
+ c.width = 60
154
+ c.text = I18n.t("user_grid.active")
155
+ end
156
+
157
+ column :uuid do |c|
158
+ c.width = 60
159
+ c.text = I18n.t("user_grid.uuid")
160
+ end
161
+
162
+ column :roles do |c|
163
+ c.width = 100
164
+ c.flex = 1
165
+ c.editor = {
166
+ trigger_action: :all,
167
+ name: "roles",
168
+ attr_type: :string,
169
+ xtype: :combo,
170
+ store: Marty::Role.all.map { |r| I18n.t("roles.#{r.name}") }.sort,
171
+ empty_text: "Roles",
172
+ multi_select: true,
173
+ }
174
+
175
+ c.getter = lambda do |r|
176
+ r.roles.map { |ur| I18n.t("roles.#{ur.name}") }.sort
177
+ end
178
+ end
179
+
180
+ column :created_dt do |c|
181
+ c.text = I18n.t("user_grid.created_dt")
182
+ c.format = "Y-m-d H:i"
183
+ c.read_only = true
184
+ end
185
+
186
+ end
187
+
188
+ UserView = Marty::UserView
@@ -0,0 +1,124 @@
1
+ class Marty::ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ # Marty's ApplicationController is based on Redmine's
5
+ # implementation.
6
+
7
+ def handle_unverified_request
8
+ super
9
+ cookies.delete(:autologin)
10
+ end
11
+
12
+ before_filter :session_expiration,
13
+ :user_setup
14
+
15
+ def get_conf
16
+ Rails.configuration.marty
17
+ end
18
+
19
+ def session_expiration
20
+ if session[:user_id]
21
+ if session_expired? && !try_to_autologin
22
+ reset_session
23
+ else
24
+ session[:atime] = Time.now.utc.to_i
25
+ end
26
+ end
27
+ end
28
+
29
+ def session_expired?
30
+ session_lifetime, session_timeout =
31
+ get_conf.session_lifetime, get_conf.session_timeout
32
+
33
+ if session_lifetime
34
+ return true unless session[:ctime] &&
35
+ (Time.now.utc.to_i -
36
+ session[:ctime].to_i <= session_lifetime.to_i * 60)
37
+ end
38
+
39
+ if session_timeout
40
+ return true unless session[:atime] &&
41
+ (Time.now.utc.to_i - session[:atime].to_i <= session_timeout.to_i * 60)
42
+ end
43
+
44
+ false
45
+ end
46
+
47
+ def start_user_session(user)
48
+ session[:user_id] = user.id
49
+ session[:ctime] = Time.now.utc.to_i
50
+ session[:atime] = Time.now.utc.to_i
51
+ end
52
+
53
+ def user_setup
54
+ # Find the current user
55
+ user = Marty::User.current = find_current_user
56
+
57
+ logger.info(" Current user: #{user.login} (id=#{user.id})") if
58
+ logger && user
59
+ end
60
+
61
+ # Returns the current user or nil if no user is logged in
62
+ def find_current_user
63
+ user_id = session[:user_id]
64
+ if user_id
65
+ user = Marty::User.active.find(user_id) rescue nil
66
+ else
67
+ user = try_to_autologin
68
+ end
69
+
70
+ user
71
+ end
72
+
73
+ def try_to_autologin
74
+ if cookies[:autologin] && get_conf.autologin
75
+ # auto-login feature starts a new session
76
+ user = Marty::User.try_to_autologin(cookies[:autologin])
77
+ if user
78
+ reset_session
79
+ start_user_session(user)
80
+ end
81
+ user
82
+ end
83
+ end
84
+
85
+ # Sets the logged in user
86
+ def set_user(user)
87
+ reset_session
88
+ if user && user.is_a?(Marty::User)
89
+ Marty::User.current = user
90
+ start_user_session(user)
91
+ else
92
+ Marty::User.current = nil
93
+ end
94
+ end
95
+
96
+ # Logs out current user
97
+ def logout_user
98
+ if Marty::User.current
99
+ cookies.delete :autologin
100
+ Marty::Token.delete_all(["user_id = ?", Marty::User.current.id]) unless
101
+ Marty::Util.db_in_recovery?
102
+ self.set_user(nil)
103
+ end
104
+ end
105
+
106
+ def password_authentication
107
+ user = Marty::User.try_to_login(params[:username], params[:password])
108
+
109
+ user.nil? ? failed_authentication(params[:username] || 'nil username') :
110
+ successful_authentication(user)
111
+ end
112
+
113
+ def failed_authentication(login)
114
+ logger.info("Failed authentication for '#{login}' " +
115
+ "from #{request.remote_ip} at #{Time.now.utc}")
116
+ end
117
+
118
+ def successful_authentication(user)
119
+ logger.info("Successful authentication for '#{user.login}' " +
120
+ "from #{request.remote_ip} at #{Time.now.utc}")
121
+ self.set_user(user)
122
+ end
123
+
124
+ end
@@ -0,0 +1,133 @@
1
+ class Marty::ApplicationController < ActionController::Base
2
+ # HACKKKKKKKKKKKKKKKKKKKKKKKKKKKK!!!
3
+ # protect_from_forgery
4
+
5
+ # Marty's ApplicationController is based on Redmine's
6
+ # implementation.
7
+
8
+ def handle_unverified_request
9
+ super
10
+ cookies.delete(:autologin)
11
+ end
12
+
13
+ before_filter :session_expiration,
14
+ :user_setup
15
+
16
+ def get_conf
17
+ Rails.configuration.marty
18
+ end
19
+
20
+ def session_expiration
21
+ if session[:user_id]
22
+ if session_expired? && !try_to_autologin
23
+ reset_session
24
+ else
25
+ session[:atime] = Time.now.utc.to_i
26
+ end
27
+ end
28
+ end
29
+
30
+ def session_expired?
31
+ session_lifetime, session_timeout =
32
+ get_conf.session_lifetime, get_conf.session_timeout
33
+
34
+ if session_lifetime
35
+ return true unless session[:ctime] &&
36
+ (Time.now.utc.to_i -
37
+ session[:ctime].to_i <= session_lifetime.to_i * 60)
38
+ end
39
+
40
+ if session_timeout
41
+ return true unless session[:atime] &&
42
+ (Time.now.utc.to_i - session[:atime].to_i <= session_timeout.to_i * 60)
43
+ end
44
+
45
+ false
46
+ end
47
+
48
+ def start_user_session(user)
49
+ session[:user_id] = user.id
50
+ session[:ctime] = Time.now.utc.to_i
51
+ session[:atime] = Time.now.utc.to_i
52
+ end
53
+
54
+ def user_setup
55
+ # Find the current user
56
+ user = Marty::User.current = find_current_user
57
+
58
+ logger.info(" Current user: #{user.login} (id=#{user.id})") if
59
+ logger && user
60
+ end
61
+
62
+ # Returns the current user or nil if no user is logged in
63
+ def find_current_user
64
+ user_id = session[:user_id]
65
+ if user_id
66
+ user = Marty::User.active.find(user_id) rescue nil
67
+ else
68
+ user = try_to_autologin
69
+ end
70
+
71
+ user
72
+ end
73
+
74
+ def try_to_autologin
75
+ if cookies[:autologin] && get_conf.autologin
76
+ # auto-login feature starts a new session
77
+ user = Marty::User.try_to_autologin(cookies[:autologin])
78
+ if user
79
+ reset_session
80
+ start_user_session(user)
81
+ end
82
+ user
83
+ end
84
+ end
85
+
86
+ # Sets the logged in user
87
+ def set_user(user)
88
+ reset_session
89
+ if user && user.is_a?(Marty::User)
90
+ Marty::User.current = user
91
+ start_user_session(user)
92
+ else
93
+ Marty::User.current = nil
94
+ end
95
+ end
96
+
97
+ # Logs out current user
98
+ def logout_user
99
+ if Marty::User.current
100
+ cookies.delete :autologin
101
+ Marty::Token.delete_all(["user_id = ?", Marty::User.current.id]) unless
102
+ Marty::Util.db_in_recovery?
103
+ self.set_user(nil)
104
+ end
105
+ end
106
+
107
+ def user_for_paper_trail
108
+ if Marty::User.current
109
+ Marty::User.current.login
110
+ else
111
+ 'unknown'
112
+ end
113
+ end
114
+
115
+ def password_authentication
116
+ user = Marty::User.try_to_login(params[:username], params[:password])
117
+
118
+ user.nil? ? failed_authentication(params[:username] || 'nil username') :
119
+ successful_authentication(user)
120
+ end
121
+
122
+ def failed_authentication(login)
123
+ logger.info("Failed authentication for '#{login}' " +
124
+ "from #{request.remote_ip} at #{Time.now.utc}")
125
+ end
126
+
127
+ def successful_authentication(user)
128
+ logger.info("Successful authentication for '#{user.login}' " +
129
+ "from #{request.remote_ip} at #{Time.now.utc}")
130
+ self.set_user(user)
131
+ end
132
+
133
+ end
@@ -0,0 +1,41 @@
1
+ class Marty::ComponentsController < Marty::ApplicationController
2
+ # This is useful for individual component testing. Note that the
3
+ # appropriate route needs to be defined.
4
+ # <base_url>/components/<ComponentCamelCaseName>
5
+
6
+ # FIXME: what is this??????
7
+ # helper Rails.application.routes.url_helpers
8
+
9
+ def index
10
+ component = params[:component]
11
+
12
+ return redirect_to root_path unless component
13
+
14
+ format, req_disposition, title =
15
+ params[:format], params[:disposition], params[:reptitle]
16
+
17
+ if format && Marty::ContentHandler::GEN_FORMATS.member?(format)
18
+ klass = component.constantize
19
+
20
+ raise "bad component" unless klass < Netzke::Base
21
+
22
+ inst = klass.new
23
+ return unless inst.respond_to?(:export_content)
24
+
25
+ title ||= component
26
+
27
+ res, type, disposition, filename =
28
+ inst.export_content(format, title, params)
29
+
30
+ return send_data(res,
31
+ type: type,
32
+ filename: filename,
33
+ disposition: req_disposition || disposition,
34
+ )
35
+ end
36
+
37
+ cname = component.gsub("::", "_").underscore
38
+ render layout: true,
39
+ inline: "<%= netzke :#{cname}, class_name: '#{component}', height: 650 %>"
40
+ end
41
+ end