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,62 @@
1
+ class Marty::McflyGridPanel < Marty::Grid
2
+ def configure(c)
3
+ super
4
+
5
+ warped = Marty::Util.warped?
6
+
7
+ c.enable_extended_search = false
8
+ c.enable_edit_in_form &&= !warped
9
+ c.prohibit_update ||= warped
10
+ c.prohibit_delete ||= warped
11
+ c.prohibit_create ||= warped
12
+ #c.prohibit_read ||= !self.class.has_any_perm?
13
+
14
+ # default sort all Mcfly grids with id
15
+ c.data_store.sorters ||= {property: :id, direction: 'ASC'}
16
+ end
17
+
18
+ def get_records(params)
19
+ ts = Mcfly.normalize_infinity(Marty::Util.get_posting_time)
20
+ tb = data_class.table_name
21
+
22
+ data_class.where("#{tb}.obsoleted_dt >= ? AND #{tb}.created_dt < ?",
23
+ ts, ts).scoping do
24
+ super
25
+ end
26
+ end
27
+
28
+ ######################################################################
29
+
30
+ def augment_column_config(c)
31
+ super
32
+
33
+ # Set mcfly_scope if the attribute is a mcfly association
34
+ if !c[:scope] && data_adapter.association_attr?(c)
35
+ assoc_name, assoc_method = c[:name].split('__')
36
+ begin
37
+ aklass = data_class.reflect_on_association(assoc_name.to_sym).klass
38
+ rescue
39
+ raise "trouble finding #{assoc_name} assoc class on #{data_class}"
40
+ end
41
+
42
+ c[:scope] = Mcfly.has_mcfly?(aklass) ?
43
+ self.class.mcfly_scope(assoc_method || 'id') :
44
+ self.class.sorted_scope(assoc_method || 'id')
45
+ end
46
+ end
47
+
48
+ private
49
+ def self.mcfly_scope(sort_column)
50
+ lambda { |r|
51
+ ts = Mcfly.normalize_infinity(Marty::Util.get_posting_time)
52
+ r.where("obsoleted_dt >= ? AND created_dt < ?", ts, ts).
53
+ order(sort_column.to_sym)
54
+ }
55
+ end
56
+
57
+ def self.sorted_scope(sort_column)
58
+ lambda { |r|
59
+ r.order(sort_column.to_sym)
60
+ }
61
+ end
62
+ end
@@ -0,0 +1,80 @@
1
+ class Marty::McflyGridPanel < Marty::CmGridPanel
2
+ def configure(c)
3
+ super
4
+
5
+ warped = Marty::Util.warped?
6
+
7
+ c.enable_extended_search = false
8
+ c.enable_edit_in_form &&= !warped
9
+ c.prohibit_update ||= warped
10
+ c.prohibit_delete ||= warped
11
+ c.prohibit_create ||= warped
12
+ #c.prohibit_read ||= !self.class.has_any_perm?
13
+
14
+ # default sort all Mcfly grids with id
15
+ c.data_store.sorters ||= {property: :id, direction: 'ASC'}
16
+
17
+ # Set Mcfly scoping
18
+ c.scope = lambda { |r|
19
+ ts = Mcfly.normalize_infinity(Marty::Util.get_posting_time)
20
+ tb = data_class.table_name
21
+ r.where("#{tb}.obsoleted_dt >= ? AND #{tb}.created_dt < ?", ts, ts)
22
+ }
23
+ end
24
+
25
+ ######################################################################
26
+
27
+ def augment_column_config(c)
28
+ super
29
+
30
+ name = c[:name]
31
+
32
+ # Set mcfly_scope if the attribute is a mcfly association
33
+ if !c[:scope] && data_adapter.association_attr?(name)
34
+ assoc_name, assoc_method = name.split('__')
35
+ begin
36
+ aklass = data_class.reflect_on_association(assoc_name.to_sym).klass
37
+ rescue
38
+ raise "trouble finding #{assoc_name} assoc class on #{data_class}"
39
+ end
40
+
41
+ # FIXME: MCFLY_UNIQUENESS is the easiest way I can think of
42
+ # figuring out if a class is Mcfly.
43
+ if (aklass.const_get(:MCFLY_UNIQUENESS) rescue nil)
44
+ c[:scope] = self.class.mcfly_scope(assoc_method || 'id')
45
+ else
46
+ c[:scope] = self.class.sorted_scope(assoc_method || 'id')
47
+ end
48
+ end
49
+ end
50
+
51
+ # HACKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
52
+ # # The basepack grid doesn't catch general exceptions. We can get
53
+ # # this if there's some sort of failure with saving to the DB.
54
+ # # e.g. range violation.
55
+ # def process_data_with_error_handling(data, operation)
56
+ # begin
57
+ # process_data_without_error_handling(data, operation)
58
+ # rescue => exc
59
+ # success = false
60
+ # flash :error => "Error: #{exc}"
61
+ # end
62
+ # end
63
+
64
+ # alias_method_chain :process_data, :error_handling
65
+
66
+ private
67
+ def self.mcfly_scope(sort_column)
68
+ lambda { |r|
69
+ ts = Mcfly.normalize_infinity(Marty::Util.get_posting_time)
70
+ r.where("obsoleted_dt >= ? AND created_dt < ?", ts, ts).
71
+ order(sort_column.to_sym)
72
+ }
73
+ end
74
+
75
+ def self.sorted_scope(sort_column)
76
+ lambda { |r|
77
+ r.order(sort_column.to_sym)
78
+ }
79
+ end
80
+ end
@@ -0,0 +1,46 @@
1
+ class Marty::NewPostingForm < Marty::Form
2
+ extend ::Marty::Permissions
3
+
4
+ # override this to set permissions for posting types
5
+ has_marty_permissions read: :any
6
+
7
+ js_configure do |c|
8
+ c.close_me = <<-JS
9
+ function() {
10
+ // assume we're embedded in a window
11
+ this.netzkeGetParentComponent().close();
12
+ }
13
+ JS
14
+ end
15
+
16
+ action :apply do |a|
17
+ a.text = I18n.t("create_posting")
18
+ a.tooltip = I18n.t("create_posting")
19
+ a.icon = :time_add
20
+ end
21
+
22
+ ######################################################################
23
+
24
+ endpoint :netzke_submit do |params, this|
25
+ res = super(params, this)
26
+ this.close_me
27
+ res
28
+ end
29
+
30
+ def configure(c)
31
+ super
32
+
33
+ c.model = "Marty::Posting"
34
+ c.items = [
35
+ {
36
+ name: :posting_type__name,
37
+ scope: lambda { |r|
38
+ r.where(name: Marty::NewPostingForm.can_perform_actions)
39
+ },
40
+ },
41
+ :comment,
42
+ ]
43
+ end
44
+ end
45
+
46
+ NewPostingForm = Marty::NewPostingForm
@@ -0,0 +1,46 @@
1
+ class Marty::NewPostingForm < Marty::CmFormPanel
2
+ extend Marty::Permissions
3
+
4
+ # override this to set permissions for posting types
5
+ has_marty_permissions read: :any
6
+
7
+ js_configure do |c|
8
+ c.close_me = <<-JS
9
+ function() {
10
+ // assume we're embedded in a window
11
+ this.netzkeGetParentComponent().close();
12
+ }
13
+ JS
14
+ end
15
+
16
+ action :apply do |a|
17
+ a.text = I18n.t("create_posting")
18
+ a.tooltip = I18n.t("create_posting")
19
+ a.icon = :time_add
20
+ end
21
+
22
+ ######################################################################
23
+
24
+ endpoint :netzke_submit do |params, this|
25
+ res = super(params, this)
26
+ this.close_me
27
+ res
28
+ end
29
+
30
+ def configure(c)
31
+ super
32
+
33
+ c.model = "Marty::Posting"
34
+ c.items = [
35
+ {
36
+ name: :posting_type__name,
37
+ scope: lambda { |r|
38
+ r.where(name: Marty::NewPostingForm.can_perform_actions)
39
+ },
40
+ },
41
+ :comment,
42
+ ]
43
+ end
44
+ end
45
+
46
+ NewPostingForm = Marty::NewPostingForm
@@ -0,0 +1,21 @@
1
+ require 'marty/new_posting_form'
2
+
3
+ class Marty::NewPostingWindow < Netzke::Basepack::Window
4
+ def configure(c)
5
+ super
6
+
7
+ c.title = I18n.t('new_posting')
8
+ c.modal = true
9
+ c.items = [:new_posting_form]
10
+ c.lazy_loading = true
11
+ c.width = 350
12
+ c.height = 130
13
+ end
14
+
15
+ component :new_posting_form do |c|
16
+ c.header = false
17
+ end
18
+
19
+ end
20
+
21
+ NewPostingWindow = Marty::NewPostingWindow
@@ -0,0 +1,21 @@
1
+ require 'marty/new_posting_form'
2
+
3
+ class Marty::NewPostingWindow < Netzke::Basepack::Window
4
+ def configure(c)
5
+ super
6
+
7
+ c.title = I18n.t('new_posting')
8
+ c.modal = true
9
+ c.items = [:new_posting_form]
10
+ c.lazy_loading = true
11
+ c.width = 350
12
+ c.height = 150
13
+ end
14
+
15
+ component :new_posting_form do |c|
16
+ c.header = false
17
+ end
18
+
19
+ end
20
+
21
+ NewPostingWindow = Marty::NewPostingWindow
@@ -0,0 +1,12 @@
1
+ # Marty's version of the Netzke Panel component.
2
+ class Marty::Panel < Netzke::Core::Panel
3
+ js_configure do |c|
4
+ c.update_body_html = <<-JS
5
+ function(html){
6
+ this.body.update(html);
7
+ }
8
+ JS
9
+ end
10
+ end
11
+
12
+ Panel = Marty::Panel
@@ -0,0 +1,52 @@
1
+ class Marty::PivotGrid < Netzke::Base
2
+ include self::Endpoints
3
+ include self::Services
4
+ include Netzke::Basepack::Columns
5
+ include Netzke::Basepack::DataAccessor
6
+ include Netzke::Core::ConfigToDslDelegator
7
+
8
+ js_configure do |c|
9
+ c.require "/home2/abostani/pivot-grid/mzPivotGrid-all.js"
10
+
11
+ c.extend = 'Mz.pivot.Grid'
12
+ c.mixin :pivot_grid
13
+
14
+ c.mixins << "Netzke.mixins.Basepack.Columns"
15
+ c.mixins << "Netzke.mixins.Basepack.GridEventHandlers"
16
+
17
+ c.require :extensions
18
+ end
19
+
20
+ css_configure do |c|
21
+ c.require "/home2/abostani/pivot-grid/mzPivotGrid.css"
22
+ end
23
+
24
+ delegates_to_dsl :model
25
+
26
+ def js_configure(c)
27
+ super
28
+
29
+ c.title = c.title || self.class.js_config.properties[:title] || data_class.name.pluralize
30
+ c.context_menu = context_menu
31
+ c.columns = {items: js_columns}
32
+ c.columns_order = columns_order
33
+ c.inline_data = read if c.load_inline_data
34
+ c.pri = data_adapter.primary_key
35
+ end
36
+
37
+ def config
38
+ @config ||= ActiveSupport::OrderedOptions.new.tap do |c|
39
+ # extend with data_store convenient config object
40
+ c.data_store = ActiveSupport::OrderedOptions.new
41
+ end
42
+ end
43
+
44
+ def context_menu
45
+ config.has_key?(:context_menu) ? config[:context_menu] : default_context_menu
46
+ end
47
+
48
+ # Override to change the default context menu
49
+ def default_context_menu
50
+ []
51
+ end
52
+ end
@@ -0,0 +1,45 @@
1
+ class Marty::PivotGrid < Netzke::Base
2
+ module Endpoints
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ endpoint :server_read do |data, this|
7
+ attempt_operation(:read, data, this)
8
+ end
9
+
10
+ # Returns options for a combobox
11
+ # params receive:
12
+ # +attr+ - column's name
13
+ # +query+ - what's typed-in in the combobox
14
+ # +id+ - selected record id
15
+ endpoint :get_combobox_options do |params, this|
16
+ column = final_columns.detect{ |c| c[:name] == params[:attr] }
17
+ this.data = data_adapter.combo_data(column, params[:query])
18
+ end
19
+
20
+ # Operations:
21
+ # create, read, update, delete
22
+ def attempt_operation(op, data, this)
23
+ # if data is ActionController::Parameters and a scope is in the component config
24
+ # then ran this in an ActiveModel::ForbiddenAttributesError (rails 4 strong parameters)
25
+ # solution: in this case convert ActionController::Parameters to a Hash
26
+ if data.is_a?ActionController::Parameters
27
+ dataHash = {}
28
+ data.each do |k,v|
29
+ #preserve keys as symbol
30
+ dataHash[k.to_sym] = v
31
+ end
32
+ data = dataHash
33
+ end
34
+ if !config["prohibit_#{op}"]
35
+ res = send(op, data)
36
+ this.netzke_set_result res
37
+ res
38
+ else
39
+ this.netzke_feedback I18n.t("netzke.basepack.grid.cannot_#{op}")
40
+ this.netzke_set_result(data: [], total: 0)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Extended Ext.data.reader.Array, which can handle commands from the endpoint, and fires the 'endpointcommands' event
3
+ * when commands are present in the endpoint response
4
+ */
5
+ Ext.define('Netzke.classes.Basepack.Grid.ArrayReader', {
6
+ extend: 'Ext.data.reader.Array',
7
+ config: {
8
+ rootProperty: 'data',
9
+ successProperty: 'success',
10
+ totalProperty: 'total',
11
+ },
12
+ read: function(response) {
13
+ var data = {data: response.data, total: response.total, success: response.success};
14
+ delete(response.data);
15
+ delete(response.total);
16
+ delete(response.success);
17
+ this.fireEvent('endpointcommands', response);
18
+ return this.callParent([data]);
19
+ }
20
+ });
21
+
22
+ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
23
+ extend: 'Ext.data.proxy.Server',
24
+
25
+ batch: function(options) {
26
+ if (!options) return;
27
+ for (operation in options.operations) {
28
+ var op = new Ext.data.Operation({action: operation, records: options.operations[operation]});
29
+ this[op.action](op, Ext.emptyFn, this);
30
+ }
31
+ },
32
+
33
+ destroy: function(op, callback, scope) {
34
+ var data = Ext.Array.map(op.getRecords(), function(r) { return r.getData().id; });
35
+ var store = this.grid.getStore();
36
+ this.grid.serverDelete(data, function(res){
37
+ var errors = [];
38
+ for (id in res) {
39
+ var error;
40
+ if (error = res[id].error) {
41
+ errors.push(error);
42
+ store.getRemovedRecords().forEach(function(record, i){
43
+ if (record.getId() == id) {
44
+ store.insert(record.index, record);
45
+ }
46
+ });
47
+ }
48
+ }
49
+
50
+ // clear store state
51
+ store.commitChanges();
52
+
53
+ if (errors.length > 0) {
54
+ this.grid.netzkeFeedback([errors]);
55
+ }
56
+
57
+ this.grid.getStore().load();
58
+
59
+ }, this);
60
+ },
61
+
62
+ create: function(op, callback, scope) {
63
+ var records = op.getRecords(),
64
+ data = Ext.Array.map(records, function(r) { return Ext.apply(r.getData(), {internal_id: r.internalId}); });
65
+
66
+ this.grid.serverCreate(data, function(res) {
67
+ var errors = [];
68
+ Ext.each(records, function(r) {
69
+ var rid = r.internalId,
70
+ recordData = res[rid].record,
71
+ error = res[rid].error;
72
+ if (recordData) {
73
+ serverRecord = this.getReader().read({data: [res[rid].record]}).records[0];
74
+ r.copyFrom(serverRecord);
75
+ r.commit();
76
+ }
77
+ if (error) { errors.push(error); }
78
+ }, this);
79
+
80
+ if (errors.length == 0) {
81
+ this.grid.getStore().load();
82
+ } else {
83
+ this.grid.netzkeFeedback(errors);
84
+ }
85
+
86
+ }, this);
87
+ },
88
+
89
+ update: function(op, callback, scope) {
90
+ var data = Ext.Array.map(op.getRecords(), function(r) { return r.getData(); });
91
+
92
+ this.grid.serverUpdate(data, function(res) {
93
+ var errors = [];
94
+ Ext.each(op.records, function(r) {
95
+ var rid = r.getId(),
96
+ recordData = res[rid].record,
97
+ error = res[rid].error;
98
+ if (recordData) {
99
+ serverRecord = this.getReader().read({data: [res[rid].record]}).records[0];
100
+ r.copyFrom(serverRecord);
101
+ r.commit();
102
+ }
103
+ if (error) { errors.push(error); }
104
+ }, this);
105
+
106
+ if (errors.length == 0) {
107
+ this.grid.getStore().load();
108
+ } else {
109
+ this.grid.netzkeFeedback(errors);
110
+ }
111
+ }, this);
112
+ },
113
+
114
+ read: function(operation, callback, scope) {
115
+ this.grid.serverRead(this.paramsFromOperation(operation), function(res) {
116
+ this.processResponse(true, operation, {}, res, callback, scope);
117
+ }, this);
118
+ return {};
119
+ },
120
+
121
+ // Build consistent request params
122
+ paramsFromOperation: function(operation) {
123
+ var params = Ext.apply({}, this.getParams(operation));
124
+
125
+ if (params.filter) {
126
+ params.filters = Ext.decode(params.filter);
127
+ delete params.filter;
128
+ }
129
+
130
+ if (params.sort) {
131
+ params.sorters = Ext.decode(params.sort);
132
+ delete params.sort;
133
+ }
134
+
135
+ Ext.apply(params, this.extraParams);
136
+
137
+ return params;
138
+ }
139
+ });
140
+
141
+ /**
142
+ * A fix for CheckColumn
143
+ */
144
+ Ext.override(Ext.ux.CheckColumn, {
145
+ processEvent: function(type) {
146
+ // by returning true, we'll allow event propagation, so it reacts similarly to other columns
147
+ if (this.readOnly && type == 'mousedown') return true;
148
+ else return this.callOverridden(arguments);
149
+ }
150
+ });