lanes 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (446) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +1 -1
  4. data/Rakefile +0 -42
  5. data/client/{javascripts/component → lanes/components}/Base.coffee +10 -10
  6. data/client/{javascripts/component → lanes/components}/ChoicesInput.coffee +0 -0
  7. data/client/lanes/components/enabled.js.erb +3 -0
  8. data/client/{javascripts/lib/create-namespace.js → lanes/components/enabled.scss.erb} +0 -0
  9. data/client/{javascripts/component → lanes/components}/grid/Editor.coffee +10 -13
  10. data/client/{javascripts/component → lanes/components/grid}/Grid.coffee +6 -6
  11. data/client/{javascripts/component → lanes/components}/grid/PopOverEditor.coffee +3 -3
  12. data/client/{javascripts/component → lanes/components}/grid/RowEditor.coffee +2 -3
  13. data/client/lanes/components/grid/config.json +3 -0
  14. data/client/{stylesheets/compoonents/grid-editors.scss → lanes/components/grid/editors.scss} +0 -0
  15. data/client/{stylesheets/compoonents → lanes/components/grid}/grid.scss +8 -6
  16. data/client/lanes/components/grid/index.js +8 -0
  17. data/client/{javascripts/component → lanes/components}/grid/popover-editor.html +0 -0
  18. data/client/{javascripts/component → lanes/components}/grid/row-editor.html +0 -0
  19. data/client/{javascripts/component/grid.html → lanes/components/grid/template.html} +0 -0
  20. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/dataTables.bootstrap.js +0 -0
  21. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/dataTables.scroller.js +0 -0
  22. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/datatables.responsive.js +0 -0
  23. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/index.js +0 -0
  24. data/client/{javascripts/vendor/dataTables → lanes/components/grid/vendor}/jquery.dataTables.js +1 -0
  25. data/client/lanes/components/index.js +2 -0
  26. data/client/lanes/components/modal/ModalDialog.coffee +47 -0
  27. data/client/lanes/components/modal/index.js +2 -0
  28. data/client/lanes/components/modal/modal.scss +20 -0
  29. data/client/{javascripts/component/modal.html → lanes/components/modal/template.html} +5 -4
  30. data/client/{javascripts/component → lanes/components/popover}/PopOver.coffee +4 -4
  31. data/client/lanes/components/popover/index.js +2 -0
  32. data/client/lanes/components/popover/popover.scss +1 -0
  33. data/client/{javascripts/component/popover.html → lanes/components/popover/template.html} +0 -0
  34. data/client/{javascripts/component → lanes/components/radio_group}/RadioGroup.coffee +1 -1
  35. data/client/{javascripts/component → lanes/components/record_finder}/RecordFinder.coffee +4 -4
  36. data/client/{javascripts/component/record-finder → lanes/components/record_finder}/clause.skr +0 -0
  37. data/client/{javascripts/component/record-finder → lanes/components/record_finder}/dialog.skr +0 -0
  38. data/client/{javascripts/component/record-finder → lanes/components/record_finder}/field.skr +0 -0
  39. data/client/lanes/components/select_field/SelectField.coffee +87 -0
  40. data/client/{screens/user-management → lanes/components/select_field}/index.js +0 -1
  41. data/client/{javascripts/workspace/tab.html → lanes/components/select_field/select_field.scss} +0 -0
  42. data/client/{javascripts → lanes}/data/Bootstrap.coffee +0 -0
  43. data/client/{javascripts → lanes}/data/ChangeSet.coffee +0 -0
  44. data/client/{javascripts → lanes}/data/Collection.coffee +37 -6
  45. data/client/{javascripts → lanes}/data/Config.coffee +0 -0
  46. data/client/{javascripts → lanes}/data/Model.coffee +8 -9
  47. data/client/{javascripts → lanes}/data/PubSub.coffee +0 -0
  48. data/client/{javascripts → lanes}/data/Query.coffee +0 -0
  49. data/client/{javascripts → lanes}/data/Screens.coffee +48 -19
  50. data/client/{javascripts → lanes}/data/Sync.coffee +5 -5
  51. data/client/lanes/data/User.coffee +46 -0
  52. data/client/{javascripts → lanes}/data/index.js +1 -2
  53. data/client/{javascripts → lanes}/data/mixins/HasCodeField.coffee +1 -1
  54. data/client/{javascripts → lanes}/extension/Base.coffee +1 -1
  55. data/client/lanes/extension/EarlyExtensions.js.erb +3 -0
  56. data/client/{javascripts → lanes}/extension/Extensions.coffee +5 -0
  57. data/client/{javascripts → lanes}/extension/GlAccounts.coffee +0 -0
  58. data/client/lanes/extension/LateLoaded.js.erb +3 -0
  59. data/client/lanes/extension/index.js +5 -0
  60. data/client/lanes/extension/namespace-available.js.erb +3 -0
  61. data/client/lanes/index.js +11 -0
  62. data/client/{javascripts → lanes}/lib/MakeBaseClass.coffee +0 -0
  63. data/client/{javascripts → lanes}/lib/ModuleSupport.coffee +0 -0
  64. data/client/{javascripts → lanes}/lib/Templates.coffee +2 -5
  65. data/{spec/client/foo_spec.js → client/lanes/lib/create-namespace.js} +0 -0
  66. data/client/{javascripts → lanes}/lib/debounce.coffee +0 -0
  67. data/client/{javascripts → lanes}/lib/defer.coffee +0 -0
  68. data/client/{javascripts → lanes}/lib/el.js +0 -0
  69. data/client/{javascripts → lanes}/lib/index.js +0 -4
  70. data/client/{javascripts → lanes}/lib/loader.coffee +15 -10
  71. data/client/{javascripts → lanes}/lib/namespace.coffee +3 -0
  72. data/client/{javascripts → lanes}/lib/noConflict.coffee +1 -0
  73. data/client/{javascripts → lanes}/lib/promise_helpers.coffee +0 -0
  74. data/client/{javascripts → lanes}/lib/results.coffee +0 -0
  75. data/client/{javascripts → lanes}/lib/utilFunctions.coffee +11 -13
  76. data/client/{javascripts → lanes}/plugins/ResizeSensor.js +0 -0
  77. data/client/lanes/plugins/index.js +1 -0
  78. data/client/{javascripts → lanes}/plugins/overlay.coffee +0 -0
  79. data/client/{javascripts → lanes}/plugins/trigger.coffee +0 -0
  80. data/client/lanes/screens/Base.coffee +40 -0
  81. data/client/{javascripts/view/mixins/ScreenChangeListener.coffee → lanes/screens/ChangeListener.coffee} +2 -2
  82. data/client/lanes/screens/Router.coffee +6 -0
  83. data/client/lanes/screens/index.js +1 -0
  84. data/client/{javascripts/view → lanes/screens}/screen-definitions.js.erb +0 -0
  85. data/client/{javascripts → lanes}/vendor/bootstrap/affix.js +43 -23
  86. data/client/{javascripts → lanes}/vendor/bootstrap/alert.js +6 -4
  87. data/client/{javascripts → lanes}/vendor/bootstrap/button.js +16 -10
  88. data/client/{javascripts → lanes}/vendor/bootstrap/carousel.js +27 -10
  89. data/client/{javascripts → lanes}/vendor/bootstrap/collapse.js +69 -28
  90. data/client/{javascripts → lanes}/vendor/bootstrap/dropdown.js +20 -10
  91. data/client/{javascripts → lanes}/vendor/bootstrap/modal.js +67 -23
  92. data/client/{javascripts → lanes}/vendor/bootstrap/popover.js +13 -7
  93. data/client/{javascripts → lanes}/vendor/bootstrap/scrollspy.js +12 -7
  94. data/client/{javascripts → lanes}/vendor/bootstrap/tab.js +41 -16
  95. data/client/{javascripts → lanes}/vendor/bootstrap/tooltip.js +60 -39
  96. data/client/{javascripts → lanes}/vendor/bootstrap/transition.js +1 -1
  97. data/client/{javascripts → lanes}/vendor/jquery-2.js +0 -0
  98. data/client/{javascripts → lanes}/vendor/jquery.tap.js +0 -0
  99. data/client/{javascripts → lanes}/vendor/magicsuggest.js +0 -0
  100. data/client/{javascripts → lanes}/vendor/message-bus.js +0 -0
  101. data/client/lanes/vendor/modern-stack.js +27 -0
  102. data/client/lanes/vendor/packaged.js +13698 -0
  103. data/client/{javascripts/view → lanes/views}/Assets.coffee +1 -1
  104. data/client/lanes/views/Base.coffee +426 -0
  105. data/client/{javascripts/view → lanes/views}/FormBindings.coffee +1 -1
  106. data/client/{javascripts/view → lanes/views}/Functions.coffee +1 -1
  107. data/client/{javascripts/view → lanes/views}/Helpers.coffee +6 -6
  108. data/client/{javascripts/view → lanes/views}/Keys.coffee +3 -3
  109. data/client/{javascripts/view → lanes/views}/ModelObserver.coffee +1 -1
  110. data/client/{javascripts/view → lanes/views}/ModelUpdate.coffee +2 -2
  111. data/client/{javascripts/view → lanes/views}/PubSub.coffee +3 -3
  112. data/client/{javascripts/view → lanes/views}/RenderContext.coffee +1 -1
  113. data/client/{javascripts/view → lanes/views}/SaveNotify.coffee +2 -2
  114. data/client/{javascripts/view → lanes/views}/TimedHighlight.coffee +1 -1
  115. data/client/{javascripts/view → lanes/views}/TimedMask.coffee +1 -1
  116. data/client/{javascripts/view/InterfaceState.coffee → lanes/views/Viewport.coffee} +18 -18
  117. data/client/{javascripts/view → lanes/views}/_button.html +0 -0
  118. data/client/{javascripts/view → lanes/views}/_toolbar.html +0 -0
  119. data/client/lanes/views/index.js +2 -0
  120. data/client/{javascripts/view → lanes/views}/model-update.html +0 -0
  121. data/client/{javascripts → lanes}/workspace/ActiveScreensSwitcher.coffee +23 -27
  122. data/client/{javascripts → lanes}/workspace/Instance.es6 +25 -21
  123. data/client/{javascripts → lanes}/workspace/Layout.coffee +6 -5
  124. data/client/{javascripts → lanes}/workspace/Navbar.coffee +2 -2
  125. data/client/{javascripts → lanes}/workspace/Pages.coffee +9 -13
  126. data/client/{javascripts → lanes}/workspace/ScreensMenu.coffee +11 -11
  127. data/client/{javascripts → lanes}/workspace/index.js +7 -5
  128. data/client/{javascripts → lanes}/workspace/layout.html +0 -0
  129. data/client/{javascripts → lanes}/workspace/menu.html +0 -0
  130. data/client/{javascripts → lanes}/workspace/menu_toggle.html +0 -0
  131. data/client/{javascripts → lanes}/workspace/navbar.html +0 -0
  132. data/client/{javascripts → lanes}/workspace/pages.html +0 -0
  133. data/client/{javascripts → lanes}/workspace/screens-menu.html +0 -0
  134. data/client/{javascripts → lanes}/workspace/screens-switcher.html +0 -0
  135. data/client/lanes/workspace/tab.html +0 -0
  136. data/client/lanes/workspace.scss.erb +21 -0
  137. data/client/{javascripts/lanes-complete.js → lanes-complete.js} +0 -0
  138. data/client/lanes-workspace.scss.erb +21 -0
  139. data/client/{stylesheets/compoonents → styles/components}/all.scss +0 -0
  140. data/client/{stylesheets/compoonents → styles/components}/changes-notification.scss +0 -0
  141. data/client/{stylesheets/compoonents → styles/components}/record-finder.scss +0 -0
  142. data/client/{stylesheets/compoonents → styles/components}/suggest.scss +0 -0
  143. data/client/{stylesheets → styles}/fonts/icomoon.eot +0 -0
  144. data/client/{stylesheets → styles}/fonts/icomoon.svg +0 -0
  145. data/client/{stylesheets → styles}/fonts/icomoon.ttf +0 -0
  146. data/client/{stylesheets → styles}/fonts/icomoon.woff +0 -0
  147. data/client/{stylesheets → styles}/fonts/selection.json +0 -0
  148. data/client/{stylesheets/fonts/style.css → styles/fonts/style.scss} +0 -0
  149. data/client/{stylesheets → styles}/fonts.scss +6 -6
  150. data/client/{stylesheets → styles}/forms.scss +0 -0
  151. data/client/{stylesheets → styles}/index.css +0 -0
  152. data/client/{stylesheets → styles}/keybindings.scss +0 -0
  153. data/client/{stylesheets → styles}/layout.scss +1 -1
  154. data/client/{stylesheets → styles}/plugins/all.scss +0 -0
  155. data/client/{stylesheets → styles}/plugins/overlay.scss +1 -1
  156. data/client/{stylesheets → styles}/plugins/resize-sensor.scss +0 -0
  157. data/client/{stylesheets → styles}/screens.scss +0 -0
  158. data/client/{stylesheets → styles}/tabs.scss +0 -0
  159. data/client/{stylesheets → styles}/vendor/bootstrap/_alerts.scss +0 -0
  160. data/client/styles/vendor/bootstrap/_badges.scss +63 -0
  161. data/client/{stylesheets → styles}/vendor/bootstrap/_breadcrumbs.scss +0 -0
  162. data/client/styles/vendor/bootstrap/_button-groups.scss +243 -0
  163. data/client/styles/vendor/bootstrap/_buttons.scss +160 -0
  164. data/client/styles/vendor/bootstrap/_carousel.scss +267 -0
  165. data/client/{stylesheets → styles}/vendor/bootstrap/_close.scss +0 -0
  166. data/client/styles/vendor/bootstrap/_code.scss +69 -0
  167. data/client/styles/vendor/bootstrap/_component-animations.scss +38 -0
  168. data/client/styles/vendor/bootstrap/_dropdowns.scss +213 -0
  169. data/client/styles/vendor/bootstrap/_forms.scss +548 -0
  170. data/client/styles/vendor/bootstrap/_glyphicons.scss +234 -0
  171. data/client/styles/vendor/bootstrap/_grid.scss +84 -0
  172. data/client/{stylesheets → styles}/vendor/bootstrap/_input-groups.scss +0 -0
  173. data/client/styles/vendor/bootstrap/_jumbotron.scss +49 -0
  174. data/client/{stylesheets → styles}/vendor/bootstrap/_labels.scss +0 -0
  175. data/client/styles/vendor/bootstrap/_list-group.scss +124 -0
  176. data/client/styles/vendor/bootstrap/_media.scss +47 -0
  177. data/client/{stylesheets → styles}/vendor/bootstrap/_mixins.scss +0 -0
  178. data/client/styles/vendor/bootstrap/_modals.scss +148 -0
  179. data/client/styles/vendor/bootstrap/_navbar.scss +662 -0
  180. data/client/styles/vendor/bootstrap/_navs.scss +244 -0
  181. data/client/styles/vendor/bootstrap/_normalize.scss +427 -0
  182. data/client/styles/vendor/bootstrap/_pager.scss +54 -0
  183. data/client/styles/vendor/bootstrap/_pagination.scss +88 -0
  184. data/client/styles/vendor/bootstrap/_panels.scss +261 -0
  185. data/client/styles/vendor/bootstrap/_popovers.scss +135 -0
  186. data/client/styles/vendor/bootstrap/_print.scss +107 -0
  187. data/client/styles/vendor/bootstrap/_progress-bars.scss +87 -0
  188. data/client/styles/vendor/bootstrap/_responsive-embed.scss +35 -0
  189. data/client/{stylesheets → styles}/vendor/bootstrap/_responsive-utilities.scss +0 -0
  190. data/client/styles/vendor/bootstrap/_scaffolding.scss +150 -0
  191. data/client/styles/vendor/bootstrap/_tables.scss +234 -0
  192. data/client/styles/vendor/bootstrap/_theme.scss +272 -0
  193. data/client/styles/vendor/bootstrap/_thumbnails.scss +38 -0
  194. data/client/styles/vendor/bootstrap/_tooltip.scss +103 -0
  195. data/client/styles/vendor/bootstrap/_type.scss +298 -0
  196. data/client/styles/vendor/bootstrap/_utilities.scss +56 -0
  197. data/client/styles/vendor/bootstrap/_variables.scss +864 -0
  198. data/client/{stylesheets → styles}/vendor/bootstrap/_wells.scss +0 -0
  199. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_alerts.scss +0 -0
  200. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_background-variant.scss +0 -0
  201. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_border-radius.scss +0 -0
  202. data/client/styles/vendor/bootstrap/mixins/_buttons.scss +52 -0
  203. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_center-block.scss +0 -0
  204. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_clearfix.scss +0 -0
  205. data/client/styles/vendor/bootstrap/mixins/_forms.scss +88 -0
  206. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_gradients.scss +0 -0
  207. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_grid-framework.scss +0 -0
  208. data/client/styles/vendor/bootstrap/mixins/_grid.scss +122 -0
  209. data/client/styles/vendor/bootstrap/mixins/_hide-text.scss +21 -0
  210. data/client/styles/vendor/bootstrap/mixins/_image.scss +33 -0
  211. data/client/styles/vendor/bootstrap/mixins/_labels.scss +12 -0
  212. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_list-group.scss +0 -0
  213. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_nav-divider.scss +0 -0
  214. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  215. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_opacity.scss +0 -0
  216. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_pagination.scss +0 -0
  217. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_panels.scss +0 -0
  218. data/client/styles/vendor/bootstrap/mixins/_progress-bar.scss +10 -0
  219. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_reset-filter.scss +0 -0
  220. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_resize.scss +0 -0
  221. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_responsive-visibility.scss +0 -0
  222. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_size.scss +0 -0
  223. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_tab-focus.scss +0 -0
  224. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_table-row.scss +0 -0
  225. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_text-emphasis.scss +0 -0
  226. data/client/{stylesheets → styles}/vendor/bootstrap/mixins/_text-overflow.scss +0 -0
  227. data/client/styles/vendor/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  228. data/client/styles/vendor/bootstrap/old/_alerts.scss +68 -0
  229. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_badges.scss +0 -0
  230. data/client/styles/vendor/bootstrap/old/_breadcrumbs.scss +26 -0
  231. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_button-groups.scss +0 -0
  232. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_buttons.scss +0 -0
  233. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_carousel.scss +0 -0
  234. data/client/styles/vendor/bootstrap/old/_close.scss +35 -0
  235. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_code.scss +0 -0
  236. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_component-animations.scss +0 -0
  237. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_dropdowns.scss +0 -0
  238. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_forms.scss +0 -0
  239. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_glyphicons.scss +0 -0
  240. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_grid.scss +0 -0
  241. data/client/styles/vendor/bootstrap/old/_input-groups.scss +166 -0
  242. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_jumbotron.scss +0 -0
  243. data/client/styles/vendor/bootstrap/old/_labels.scss +66 -0
  244. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_list-group.scss +0 -0
  245. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_media.scss +0 -0
  246. data/client/styles/vendor/bootstrap/old/_mixins.scss +39 -0
  247. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_modals.scss +0 -0
  248. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_navbar.scss +0 -0
  249. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_navs.scss +0 -0
  250. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_normalize.scss +0 -0
  251. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_pager.scss +0 -0
  252. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_pagination.scss +0 -0
  253. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_panels.scss +0 -0
  254. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_popovers.scss +0 -0
  255. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_print.scss +0 -0
  256. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_progress-bars.scss +0 -0
  257. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_responsive-embed.scss +0 -0
  258. data/client/styles/vendor/bootstrap/old/_responsive-utilities.scss +174 -0
  259. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_scaffolding.scss +0 -0
  260. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_tables.scss +0 -0
  261. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_theme.scss +0 -0
  262. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_thumbnails.scss +0 -0
  263. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_tooltip.scss +0 -0
  264. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_type.scss +0 -0
  265. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_utilities.scss +0 -0
  266. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/_variables.scss +0 -0
  267. data/client/styles/vendor/bootstrap/old/_wells.scss +29 -0
  268. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/bootstrap.scss +0 -0
  269. data/client/styles/vendor/bootstrap/old/mixins/_alerts.scss +14 -0
  270. data/client/styles/vendor/bootstrap/old/mixins/_background-variant.scss +11 -0
  271. data/client/styles/vendor/bootstrap/old/mixins/_border-radius.scss +18 -0
  272. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_buttons.scss +0 -0
  273. data/client/styles/vendor/bootstrap/old/mixins/_center-block.scss +7 -0
  274. data/client/styles/vendor/bootstrap/old/mixins/_clearfix.scss +22 -0
  275. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_forms.scss +0 -0
  276. data/client/styles/vendor/bootstrap/old/mixins/_gradients.scss +58 -0
  277. data/client/styles/vendor/bootstrap/old/mixins/_grid-framework.scss +81 -0
  278. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_grid.scss +0 -0
  279. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_hide-text.scss +0 -0
  280. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_image.scss +0 -0
  281. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_labels.scss +0 -0
  282. data/client/styles/vendor/bootstrap/old/mixins/_list-group.scss +31 -0
  283. data/client/styles/vendor/bootstrap/old/mixins/_nav-divider.scss +10 -0
  284. data/client/styles/vendor/bootstrap/old/mixins/_nav-vertical-align.scss +9 -0
  285. data/client/styles/vendor/bootstrap/old/mixins/_opacity.scss +8 -0
  286. data/client/styles/vendor/bootstrap/old/mixins/_pagination.scss +23 -0
  287. data/client/styles/vendor/bootstrap/old/mixins/_panels.scss +24 -0
  288. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_progress-bar.scss +0 -0
  289. data/client/styles/vendor/bootstrap/old/mixins/_reset-filter.scss +8 -0
  290. data/client/styles/vendor/bootstrap/old/mixins/_resize.scss +6 -0
  291. data/client/styles/vendor/bootstrap/old/mixins/_responsive-visibility.scss +21 -0
  292. data/client/styles/vendor/bootstrap/old/mixins/_size.scss +10 -0
  293. data/client/styles/vendor/bootstrap/old/mixins/_tab-focus.scss +9 -0
  294. data/client/styles/vendor/bootstrap/old/mixins/_table-row.scss +28 -0
  295. data/client/styles/vendor/bootstrap/old/mixins/_text-emphasis.scss +11 -0
  296. data/client/styles/vendor/bootstrap/old/mixins/_text-overflow.scss +8 -0
  297. data/client/{stylesheets/vendor/bootstrap → styles/vendor/bootstrap/old}/mixins/_vendor-prefixes.scss +0 -0
  298. data/client/{stylesheets → styles}/vendor/bootstrap-custom-grid.scss +0 -0
  299. data/client/{stylesheets → styles}/vendor/bootstrap-custom-modals.scss +0 -0
  300. data/client/{stylesheets → styles}/vendor/bootstrap.scss +14 -9
  301. data/client/{stylesheets → styles}/vendor/dataTables.scss +0 -0
  302. data/lanes.gemspec +5 -1
  303. data/lib/lanes/api/controller.rb +47 -6
  304. data/lib/lanes/api/helper_methods.rb +2 -10
  305. data/lib/lanes/api/javascript_processor.rb +17 -7
  306. data/lib/lanes/api/null_authentication_provider.rb +33 -0
  307. data/lib/lanes/api/request_wrapper.rb +49 -28
  308. data/lib/lanes/api/root.rb +12 -30
  309. data/lib/lanes/api/routing.rb +37 -0
  310. data/lib/lanes/api/sprockets_compressor.rb +35 -0
  311. data/lib/lanes/api/sprockets_extension.rb +69 -0
  312. data/lib/lanes/api/test_specs.rb +13 -9
  313. data/lib/lanes/api.rb +2 -18
  314. data/lib/lanes/cli.rb +22 -2
  315. data/lib/lanes/command/app.rb +49 -0
  316. data/lib/lanes/command/client_model_update.rb +65 -0
  317. data/lib/lanes/command/console.rb +20 -0
  318. data/lib/lanes/command/db.rb +33 -0
  319. data/lib/lanes/command/db.usage +1 -0
  320. data/lib/lanes/command/generate.rb +21 -0
  321. data/lib/lanes/command/generate_model.rb +105 -0
  322. data/lib/lanes/command/generate_model.usage +45 -0
  323. data/lib/lanes/command/generate_screen.rb +31 -0
  324. data/lib/lanes/command/generate_screen.usage +11 -0
  325. data/lib/lanes/command/generate_view.rb +22 -0
  326. data/lib/lanes/command/generate_view.usage +13 -0
  327. data/lib/lanes/command/model_attribute.rb +188 -0
  328. data/lib/lanes/command/named_command.rb +27 -0
  329. data/lib/lanes/command/server.rb +19 -0
  330. data/lib/lanes/command/server.usage +3 -0
  331. data/lib/lanes/command/templates/Gemfile +10 -0
  332. data/lib/lanes/{generators/app → command/templates}/Guardfile +0 -0
  333. data/lib/lanes/command/templates/Rakefile +2 -0
  334. data/lib/lanes/command/templates/client/Extension.coffee +5 -0
  335. data/lib/lanes/command/templates/client/components/.gitkeep +0 -0
  336. data/lib/lanes/command/templates/client/components/Component.coffee +1 -0
  337. data/lib/lanes/command/templates/client/data/Model.coffee +24 -0
  338. data/lib/lanes/command/templates/client/namespace-extension.js +17 -0
  339. data/lib/lanes/command/templates/client/screens/Screen.coffee +9 -0
  340. data/lib/lanes/command/templates/client/screens/index.js +5 -0
  341. data/lib/lanes/command/templates/client/screens/layout.html +3 -0
  342. data/lib/lanes/command/templates/client/screens/styles.scss +9 -0
  343. data/lib/lanes/command/templates/client/styles/styles.scss +1 -0
  344. data/lib/lanes/command/templates/client/views/.gitkeep +0 -0
  345. data/lib/lanes/command/templates/client/views/View.coffee +9 -0
  346. data/lib/lanes/command/templates/client/views/template.html +3 -0
  347. data/lib/lanes/{generators/app → command/templates}/config/database.yml +0 -0
  348. data/lib/lanes/command/templates/config/lanes.rb +7 -0
  349. data/lib/lanes/command/templates/config/routes.rb +2 -0
  350. data/lib/lanes/{generators/app → command/templates}/config.ru +1 -0
  351. data/lib/lanes/command/templates/db/create_table_migration.rb +19 -0
  352. data/lib/lanes/command/templates/gitignore +1 -0
  353. data/lib/lanes/command/templates/lib/namespace/extension.rb +13 -0
  354. data/lib/lanes/command/templates/lib/namespace/model.rb +7 -0
  355. data/lib/lanes/command/templates/lib/namespace/screen.rb +17 -0
  356. data/lib/lanes/command/templates/lib/namespace/version.rb +3 -0
  357. data/lib/lanes/command/templates/lib/namespace.rb +12 -0
  358. data/lib/lanes/command/templates/spec/client/data/ModelSpec.coffee +5 -0
  359. data/lib/lanes/command/templates/spec/client/views/ViewSpec.coffee +5 -0
  360. data/lib/lanes/command/templates/spec/fixtures/namespace/model.yml +16 -0
  361. data/lib/lanes/command/templates/spec/namespace/model_spec.rb +10 -0
  362. data/lib/lanes/command/templates/spec/spec_helper.rb +15 -0
  363. data/lib/lanes/command/update.rb +13 -0
  364. data/lib/lanes/command/update_model.rb +125 -0
  365. data/lib/lanes/command/update_model.usage +2 -0
  366. data/lib/lanes/command.rb +37 -0
  367. data/lib/lanes/components.rb +45 -0
  368. data/lib/lanes/concerns/set_attribute_data.rb +2 -2
  369. data/lib/lanes/configuration.rb +3 -3
  370. data/lib/lanes/db.rb +5 -39
  371. data/lib/lanes/extension.rb +64 -19
  372. data/lib/lanes/guard_tasks.rb +7 -5
  373. data/lib/lanes/rake_tasks.rb +47 -0
  374. data/lib/lanes/screens.rb +1 -48
  375. data/{spec → lib/lanes}/spec_helper.rb +0 -0
  376. data/lib/lanes/version.rb +1 -1
  377. data/lib/lanes.rb +1 -3
  378. data/npm-build/compile.coffee +1 -1
  379. data/npm-build/package.json +5 -5
  380. data/npm-build/template.js +13 -13
  381. data/spec/api/javascript_processor_spec.rb +1 -1
  382. data/spec/client/view/BaseSpec.coffee +166 -0
  383. data/spec/helpers/jasmine-jquery.js +813 -0
  384. data/spec/helpers/jasmine-matchers.js +1586 -0
  385. data/tasks/migrations.rake +1 -1
  386. data/views/index.erb +9 -13
  387. metadata +419 -268
  388. data/client/javascripts/component/ModalDialog.coffee +0 -44
  389. data/client/javascripts/component/SelectField.coffee +0 -43
  390. data/client/javascripts/component/TaggedField.coffee +0 -27
  391. data/client/javascripts/component/index.js +0 -5
  392. data/client/javascripts/data/Roles.coffee +0 -91
  393. data/client/javascripts/data/User.coffee +0 -70
  394. data/client/javascripts/extension/index.js +0 -6
  395. data/client/javascripts/extension/load.js.erb +0 -3
  396. data/client/javascripts/lanes-workspace.js +0 -1
  397. data/client/javascripts/lib/underscore.inflection.js +0 -210
  398. data/client/javascripts/plugins/index.js +0 -4
  399. data/client/javascripts/vendor/modern-stack.js +0 -14
  400. data/client/javascripts/vendor/packaged.js +0 -13769
  401. data/client/javascripts/view/Base.coffee +0 -231
  402. data/client/javascripts/view/Screen.coffee +0 -30
  403. data/client/javascripts/view/index.js +0 -10
  404. data/client/javascripts/workspace/LoginDialog.coffee +0 -33
  405. data/client/javascripts/workspace/login-dialog.html +0 -16
  406. data/client/screens/user-management/UserEditScreen.coffee +0 -21
  407. data/client/screens/user-management/UserManagement.coffee +0 -24
  408. data/client/screens/user-management/grid-popover-editor.html +0 -33
  409. data/client/screens/user-management/index.css +0 -4
  410. data/client/screens/user-management/user-management-styles.scss +0 -7
  411. data/client/screens/user-management/user-management.html +0 -8
  412. data/client/stylesheets/compoonents/modal-dialog.scss +0 -23
  413. data/client/stylesheets/lanes-workspace.scss +0 -17
  414. data/config/puma.rb +0 -7
  415. data/db/seed.rb +0 -37
  416. data/foo/Gemfile +0 -5
  417. data/foo/Guardfile +0 -13
  418. data/foo/foo/Gemfile +0 -5
  419. data/foo/foo/lib/foo.rb +0 -7
  420. data/foo/lib/foo/version.rb +0 -3
  421. data/foo/lib/foo.rb +0 -8
  422. data/lib/lanes/access/locked_fields.rb +0 -43
  423. data/lib/lanes/access/role.rb +0 -58
  424. data/lib/lanes/access/role_collection.rb +0 -75
  425. data/lib/lanes/access/roles/administrator.rb +0 -25
  426. data/lib/lanes/access/roles/support.rb +0 -13
  427. data/lib/lanes/access/user_maint_screen.rb +0 -32
  428. data/lib/lanes/access.rb +0 -50
  429. data/lib/lanes/api/asset_pipeline.rb +0 -59
  430. data/lib/lanes/api/authentication_helper.rb +0 -21
  431. data/lib/lanes/api/authentication_provider.rb +0 -45
  432. data/lib/lanes/api/default_routes.rb +0 -35
  433. data/lib/lanes/api/skr_templates.rb +0 -60
  434. data/lib/lanes/concerns/track_modifications.rb +0 -51
  435. data/lib/lanes/db/seed.rb +0 -27
  436. data/lib/lanes/generators/app/Gemfile +0 -5
  437. data/lib/lanes/generators/app/Rakefile +0 -9
  438. data/lib/lanes/generators/app/lib/main_class/version.rb +0 -3
  439. data/lib/lanes/generators/app/lib/main_class.rb +0 -8
  440. data/lib/lanes/generators/app.rb +0 -36
  441. data/lib/lanes/user.rb +0 -127
  442. data/spec/client/component/ChoicesInputSpec.coffee +0 -12
  443. data/spec/client/component/foo_spec.coffee +0 -4
  444. data/spec/client/support/jasmine.yml +0 -128
  445. data/spec/client/support/jasmine_helper.rb +0 -15
  446. data/spec/helpers/SpecHelper.js +0 -18
@@ -0,0 +1,7 @@
1
+ module <%= namespace.camelize %>
2
+
3
+ class <%= class_name %> < <%= options[:parent] %>
4
+
5
+ end
6
+
7
+ end
@@ -0,0 +1,17 @@
1
+ require 'lanes'
2
+
3
+ module <%= namespace.camelize %>
4
+
5
+ class <%= class_name %>Screen < Lanes::Screens::Definition
6
+
7
+ identifier "<%= name.dasherize %>"
8
+ title "<%= options[:title] %>"
9
+ description "<%= options[:description] %>"
10
+ icon "<%= options[:icon] %>"
11
+ group_id "<%= options[:group] %>"
12
+ model_class "<%= options[:model_class] %>"
13
+ view_class "<%= namespace.camelize %>.Screens.<%= class_name %>"
14
+ files ['screens/<%= name.dasherize %>.js','screens/<%= name.dasherize %>.css']
15
+ end
16
+
17
+ end
@@ -0,0 +1,3 @@
1
+ module <%= namespace.camelize %>
2
+ VERSION=0.1
3
+ end
@@ -0,0 +1,12 @@
1
+ require "lanes"
2
+ require 'require_all'
3
+ require_relative "<%= name %>/version.rb"
4
+ require_relative "<%= name %>/extension.rb"
5
+ require_rel '<%= name %>'
6
+
7
+ # The main namespace for <%= name.camelize %>
8
+ module <%= namespace.camelize %>
9
+ def self.table_name_prefix
10
+ "<%= name %>_"
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ describe "<%= class_name %> Model Suite", ->
2
+
3
+ it "can be instantiated", ->
4
+ model = new Lanes.<%= namespace.camelize %>.Data.<%= class_name %>()
5
+ expect(model).toEqual(jasmine.any(Lanes.<%= namespace.camelize %>.Data.<%= class_name %>));
@@ -0,0 +1,5 @@
1
+ describe "<%= class_name %> View Suite", ->
2
+
3
+ it "can be instantiated", ->
4
+ view = new Lanes.<%= namespace.camelize %>.Views.<%= class_name %>()
5
+ expect(view).toEqual(jasmine.any(Lanes.<%= namespace.camelize %>.Views.<%= class_name %>));
@@ -0,0 +1,16 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+ <% unless fields.empty? -%>
3
+ <% %w(first second).each do |name| %>
4
+ <%= name %>:
5
+ <% fields.each do |attribute| -%>
6
+ <%- if attribute.password_digest? -%>
7
+ password_digest: <%%= BCrypt::Password.create('secret') %>
8
+ <%- else -%>
9
+ <%= yaml_key_value(attribute.column_name, attribute.default) %>
10
+ <%- end -%>
11
+ <%- if attribute.polymorphic? -%>
12
+ <%= yaml_key_value("#{attribute.name}_type", attribute.human_name) %>
13
+ <%- end -%>
14
+ <% end -%>
15
+ <% end %>
16
+ <% end %>
@@ -0,0 +1,10 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe <%= namespace.camelize %>::<%= class_name %> do
4
+
5
+ it "can be instantiated" do
6
+ model = <%= class_name %>.new
7
+ model.must_be_instance_of(<%= class_name %>)
8
+ end
9
+
10
+ end
@@ -0,0 +1,15 @@
1
+ require 'lanes/spec_helper'
2
+
3
+ module <%= namespace %>
4
+
5
+ # Add more helper methods to be used by all tests here...
6
+
7
+ class TestCase < Lanes::TestCase
8
+
9
+ end
10
+
11
+ class ApiTestCase < Lanes::ApiTestCase
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,13 @@
1
+ module Lanes
2
+ module Command
3
+
4
+ class Update < Thor
5
+
6
+ desc 'update model [NAME]', 'Updates a model'
7
+ long_desc Command.usage_from_file("update_model")
8
+ register Command::UpdateModel, 'model', 'model [NAME]', 'Updates a client model to match the server definition'
9
+
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,125 @@
1
+ require_relative 'model_attribute'
2
+
3
+ module Lanes
4
+ module Command
5
+
6
+ class UpdateModel < Thor::Group
7
+
8
+ include Thor::Actions
9
+
10
+ argument :name
11
+ attr_reader :namespace, :class_name, :namespaced_name
12
+
13
+ def self.source_root
14
+ Pathname.new(__FILE__).dirname.join("templates")
15
+ end
16
+
17
+ def read_class
18
+ if name=~/::/
19
+ (@namespace,@name) = name.split("::")
20
+ else
21
+ ext = Command.load_current_extension
22
+ @namespace = ext.identifier
23
+ end
24
+ class_name = name.camelize
25
+ namespaced_name = "#{namespace.classify}::#{class_name}"
26
+ @klass = namespaced_name.safe_constantize
27
+ if !@klass
28
+ raise Thor::Error.new("#{namespaced_name} was not found")
29
+ end
30
+ @file = Pathname.new("client/data/#{class_name}.coffee")
31
+ unless @file.exist?
32
+ raise Thor::Error.new("Model #{@file} doesn't exist")
33
+ end
34
+ Lanes::DB.establish_connection
35
+ end
36
+
37
+ def replace_props
38
+ columns = columns_for(@klass)
39
+ return unless columns.any? # could happen I guess?
40
+ (props,indent) = read_indent('props')
41
+ maxlen = columns.map{|field| field.name.length }.max
42
+ contents = props
43
+ columns.each do | column |
44
+ contents << sprintf("#{indent}%-#{maxlen+1}s",column.name+':') + type_specification(column) + "\n"
45
+ end
46
+ gsub_file @file, /props\s*:\s*\n.*?\n(?!#{indent})/m, contents
47
+ end
48
+
49
+ def replace_associations
50
+ associations = associations_for(@klass)
51
+ return unless associations.any?
52
+ (section,indent) = read_indent('associations',optional: true)
53
+ maxlen = associations.map{|field| field.name.length }.max
54
+ contents = section || (
55
+ single_indent = @file.read[/\n(\h+)(\w+):/,1] || ' '
56
+ indent = single_indent*2
57
+ "\n#{single_indent}associations:\n"
58
+ )
59
+ associations.each do | assoc |
60
+ type = assoc.collection? ? 'collection' : 'model'
61
+ contents << sprintf("#{indent}%-#{maxlen+2}s",assoc.name.to_s+':') + \
62
+ "{ #{type}: \"#{assoc.class_name.demodulize}\" }\n"
63
+ end
64
+ if section
65
+ gsub_file @file, /associations\s*:\s*\n.*?\n(?!#{indent})/m, contents
66
+ else
67
+ gsub_file @file, /\n\z/m, contents
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def read_indent(section, optional: false)
74
+ contents = @file.read
75
+ match = contents.match(/(#{section}\s*:\s*\n+)(\s+)\w/m)
76
+ return match.captures if match
77
+ if optional
78
+ return [nil,nil]
79
+ else
80
+ raise Thor::Error.new("Unable to detect #{section} section")
81
+ end
82
+ end
83
+
84
+ def type_specification(column)
85
+ if column.null
86
+ '"' + type_for_column(column) + '"'
87
+ else
88
+ type = { type: type_for_column(column), required: true }
89
+ if column.default
90
+ type[:default] = column.default
91
+ end
92
+ type.to_json
93
+ end
94
+ end
95
+
96
+ def associations_for(klass)
97
+ klass.reflect_on_all_associations.reject{|assoc| assoc.name =~ /^(created|updated)_by/ }
98
+ end
99
+
100
+ def columns_for(klass)
101
+ klass.columns.reject{ |column| column.name =~ /^(created|updated)_/ }
102
+ end
103
+
104
+ def type_for_column(column)
105
+ if column.array
106
+ 'array'
107
+ elsif column.sql_type == 'json'
108
+ 'object'
109
+ else
110
+ case column.type
111
+ when :datetime then 'date'
112
+ when :integer then 'integer'
113
+ when :float then 'number'
114
+ when :text then 'string'
115
+ when :string then 'string'
116
+ when :boolean then 'boolean'
117
+ when :decimal then 'bigdec'
118
+ else 'any'
119
+ end
120
+ end
121
+ end
122
+
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,2 @@
1
+ Updates a model's client definition to match the fields
2
+ that are defined on the server.
@@ -0,0 +1,37 @@
1
+ module Lanes
2
+ module Command
3
+ class << self
4
+
5
+ # Reads and returns the contents of a usage file. Used
6
+ # internally by commands to populate their long_desc
7
+ # @param [String] basename of file to read usage from
8
+ def usage_from_file(file)
9
+ Pathname.new(__FILE__).dirname.join("command","#{file}.usage").read
10
+ end
11
+
12
+ # Loads the code for the extension that the user is currently
13
+ # working inside. The `lanes` command uses this to detect
14
+ # what actions should be taken.
15
+ #
16
+ # Will silently swallow any exceptions that are raised when the file is required and return nil
17
+ #
18
+ # @return [Extension] extension that was loaded, nil if none was found
19
+ def load_current_extension
20
+ previous = Extensions.all
21
+ ext = Dir.glob("./lib/**/extension.rb").first
22
+ if ext
23
+ begin
24
+ require(ext)
25
+ rescue
26
+ return nil
27
+ end
28
+ diff = Extensions.all - previous
29
+ return diff.any? ? diff.first.new : nil
30
+ else
31
+ return nil
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,45 @@
1
+ require 'pry'
2
+ module Lanes
3
+
4
+ module Components
5
+ @@enabled = []
6
+
7
+ class << self
8
+
9
+ # @param names [Symbol] list of components to include in applications
10
+ def enable(*names)
11
+ @@enabled += names.map(&:to_sym)
12
+ @@enabled.uniq!
13
+ end
14
+
15
+ def enabled(&block)
16
+ @@enabled.each{ |component| yield component }
17
+ end
18
+
19
+ # Called by sprockets during processing from the client/components/enabled.js.erb
20
+ # Requires the enabled components and all of their dependencies
21
+ def enabled_with_dependencies(env, &block)
22
+ enabled do | component |
23
+ depends = component_configuration(component, env.environment)['depends']
24
+ depends.each{ |d| yield d } if depends
25
+ yield component
26
+ end
27
+ end
28
+
29
+ # @param component [String,Symbol] component name to lookup
30
+ # @return Hash configuration for component, read from a config.json file in the components directory,
31
+ # or an empty hash if no configuration is present
32
+ def component_configuration(component, env)
33
+ if asset = env.find_asset("components/#{component}")
34
+ config_file = asset.pathname.dirname.join("config.json")
35
+ if config_file.exist?
36
+ return Oj.load(config_file.read)
37
+ end
38
+ end
39
+ return {}
40
+ end
41
+
42
+ end
43
+ end
44
+
45
+ end
@@ -55,7 +55,7 @@ module Lanes::Concerns
55
55
  attributes.each{|attr| self.blacklisted_attributes[ attr.to_sym ] = options }
56
56
  end
57
57
 
58
- def from_attribute_data(data,user=Lanes::User.current)
58
+ def from_attribute_data(data,user)
59
59
  record = self.new
60
60
  record.set_attribute_data(data, user)
61
61
  record
@@ -84,7 +84,7 @@ module Lanes::Concerns
84
84
  # @param data [Hash]
85
85
  # @param user [User] who is performing request
86
86
  # @returns
87
- def set_attribute_data(data, user = Lanes::User.current)
87
+ def set_attribute_data(data, user)
88
88
 
89
89
  return {} unless self.can_write_attributes?(data, user)
90
90
 
@@ -1,6 +1,6 @@
1
1
  require_relative "concerns/attr_accessor_with_default"
2
2
  require 'securerandom'
3
-
3
+ require 'pathname'
4
4
  module Lanes
5
5
 
6
6
  class Configuration
@@ -65,9 +65,9 @@ module Lanes
65
65
  config_option :es6_transpiler_path, '6to5'
66
66
  config_option :es6_transpiler_options, '-t '
67
67
  config_option :app_title, "Lanes Test"
68
-
68
+ config_option :assets_path_prefix, "/assets"
69
69
  config_option :mounted_at, ''
70
-
70
+ config_option :root_view, 'Lanes.Workspace.Layout'
71
71
  config_option :specs_root, Pathname.getwd
72
72
  end
73
73
 
data/lib/lanes/db.rb CHANGED
@@ -1,5 +1,3 @@
1
- require_relative 'db/seed'
2
-
3
1
  module Lanes
4
2
 
5
3
  module DB
@@ -18,21 +16,17 @@ module Lanes
18
16
  ::ActiveRecord::Base.establish_connection( configuration )
19
17
  end
20
18
 
21
- def migration_exists?( file_name ) #:nodoc:
22
- Dir.glob("#{migrations_dir}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first
23
- end
24
-
25
19
  def load_seed
26
- load Pathname.new(__FILE__).dirname.join("../../db/seed.rb")
27
- Seed.execute!
20
+ path = Pathname.new("./db/seed.rb")
21
+ load path if path.exist?
28
22
  end
29
23
 
30
24
  def configure_rake_environment
31
25
  ActiveRecord::Tasks::DatabaseTasks.seed_loader = Lanes::DB
32
26
  env = ENV['RAILS_ENV'] || 'development'
33
- Lanes::DB.config_file ||= 'config/database.yml'
34
- ENV['SCHEMA'] ||= 'db/schema.sql'
35
- ENV['DB_STRUCTURE'] ||= 'db/schema.sql'
27
+ Lanes::DB.config_file ||= 'config/database.yml'
28
+ ENV['SCHEMA'] ||= 'db/schema.sql'
29
+ ENV['DB_STRUCTURE'] ||= 'db/schema.sql'
36
30
  ActiveRecord::Base.schema_format = :sql
37
31
  Lanes::DB.establish_connection( env )
38
32
  ActiveRecord::Tasks::DatabaseTasks.database_configuration = ActiveRecord::Base.configurations
@@ -41,34 +35,6 @@ module Lanes
41
35
  ActiveRecord::Tasks::DatabaseTasks.current_config( :config => ActiveRecord::Base.configurations[ env ] )
42
36
  end
43
37
 
44
- def create_migration( migration_name )
45
- STDERR.puts "Migration #{migration_name} already exists!" and return false if migration_exists?( migration_name )
46
- migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S")
47
- migration_file = File.join(migrations_dir, "#{migration_number}_#{migration_name}.rb")
48
- migration_class = migration_name.split("_").map(&:capitalize).join
49
- File.open(migration_file, 'w') do |file|
50
- file.write <<-MIGRATION.strip_heredoc
51
- class #{migration_class} < ActiveRecord::Migration
52
- def change
53
- end
54
- end
55
- MIGRATION
56
- end
57
- end
58
-
59
- def migrate(version = nil)
60
- silence_activerecord do
61
- migration_version = version ? version.to_i : version
62
- ::ActiveRecord::Migrator.migrate( migrations_dir, migration_version )
63
- end
64
- end
65
-
66
- def rollback(step = nil)
67
- silence_activerecord do
68
- migration_step = step ? step.to_i : 1
69
- ::ActiveRecord::Migrator.rollback(migrations_dir, migration_step)
70
- end
71
- end
72
38
 
73
39
  private
74
40
 
@@ -1,24 +1,49 @@
1
1
  module Lanes
2
2
 
3
- class Extension
3
+ module Extensions
4
4
 
5
- def initialize(*args)
6
- end
5
+ class Definition
6
+ include Concerns::AttrAccessorWithDefault
7
+
8
+ attr_reader :context
9
+
10
+ attr_accessor_with_default :load_phase, :late
11
+
12
+ attr_accessor_with_default :identifier
13
+
14
+ # Array of Pathname's to add to sprockets
15
+ attr_accessor_with_default :root_path
16
+
17
+ # Load extension before/after the named extensions
18
+ class_attribute :before
19
+ class_attribute :after
7
20
 
8
- class_attribute :identifier
21
+ def self.components(*names)
22
+ Components.enable(*names)
23
+ end
9
24
 
10
- # [String] The path for including the extension in the asset pipeline
11
- class_attribute :logical_path
25
+ def client_bootstrap_data(view)
26
+ {}
27
+ end
12
28
 
29
+ def javascript_include
30
+ self.identifier + ".js"
31
+ end
13
32
 
14
- # [String] The directory that holds the the root of the asset pipeline
15
- class_attribute :asset_path
33
+ def client_namespace
34
+ identifier.underscore.camelize
35
+ end
16
36
 
17
- class_attribute :before
18
- class_attribute :after
37
+ def client_paths
38
+ [ self.root_path.join("client") ]
39
+ end
19
40
 
20
- def bootstrap_data(view)
21
- {}
41
+ def route(route_set)
42
+ routes_config = root_path.join('config','routes.rb')
43
+ if routes_config.exist?
44
+ require routes_config
45
+ end
46
+ end
22
47
  end
23
48
 
24
49
  class << self
@@ -31,8 +56,12 @@ module Lanes
31
56
  self.before = extension
32
57
  end
33
58
 
34
- def active
35
- unmapped = self.descendants
59
+ def all
60
+ Definition.descendants
61
+ end
62
+
63
+ def sorted
64
+ unmapped = all
36
65
  mapped = []
37
66
  while unmapped.any?
38
67
  mapped_count = mapped.length
@@ -55,17 +84,33 @@ module Lanes
55
84
  mapped
56
85
  end
57
86
 
58
- def each(config={})
59
- self.active.each{ |klass| yield klass.new(config) }
87
+ def each
88
+ sorted.map{ |klass| yield klass.new }
60
89
  end
61
90
 
62
- def bootstrap_data(env)
63
- data = { 'roles' => Lanes::Access::Role.all_available }
91
+ def early_loaded
92
+ each{ |ext| yield ext if ext.load_phase == :early }
93
+ end
94
+
95
+ def late_loaded
96
+ each{ |ext| yield ext if ext.load_phase == :late }
97
+ end
98
+
99
+ def client_bootstrap_data(view)
100
+ data = {}
64
101
  each do | ext |
65
- data[ext.identifier] = data.bootstrap_data(env)
102
+ data[ext.identifier] = ext.client_bootstrap_data(view)
66
103
  end
67
104
  return data
68
105
  end
106
+
107
+ def load_current_config
108
+ config_file = Pathname.getwd.join('config','lanes.rb')
109
+ if config_file.exist?
110
+ require config_file
111
+ end
112
+ end
113
+
69
114
  end
70
115
 
71
116
  end
@@ -1,5 +1,6 @@
1
1
  require_relative "../lanes"
2
- require 'guard'
2
+ require 'guard/jasmine'
3
+ require 'guard/minitest'
3
4
 
4
5
  module Lanes
5
6
  module GuardTasks
@@ -20,12 +21,13 @@ module Lanes
20
21
  matchers = CustomMatchers.new
21
22
  yield matchers
22
23
 
23
- jasmine_options = {
24
- server_mount: '/spec', server_env: 'test', server: :puma, spec_dir: 'spec/client', debug: false
25
- }
24
+ jasmine_options = options.merge({
25
+ port: 8888, server_mount: '/spec', server_env: 'test', server: :puma,
26
+ spec_dir: 'spec/client', console: :always, debug: false
27
+ })
26
28
 
27
29
  dsl.guard :jasmine, jasmine_options do
28
- dsl.watch(%r{^client/javascripts/(.+?)\.(js|coffee)$}){ |m| "spec/client/#{m[1]}_spec.#{m[2]}" }
30
+ dsl.watch(%r{^client/(.+?)\.(js|coffee)$}){ |m| "spec/client/#{m[1]}_spec.#{m[2]}" }
29
31
  dsl.watch(%r{^spec/client/.*(?:_s|S)pec\.coffee$})
30
32
  matchers.client_matches.call if matchers.client_matches
31
33
  end
@@ -0,0 +1,47 @@
1
+ require 'puma/control_cli'
2
+ require_relative '../lanes'
3
+
4
+ desc "Run the puma server in development mode"
5
+ task :dev do
6
+ Puma::ControlCLI.new(['start']).run
7
+ end
8
+
9
+ desc "Open an irb session configured with the Lanes environment"
10
+ task :console do
11
+ require 'irb'
12
+ require 'irb/completion'
13
+ require 'pp'
14
+ include Lanes
15
+ DB.establish_connection
16
+ ActiveRecord::Base.logger = Logger.new STDOUT
17
+ ARGV.clear
18
+ IRB.start
19
+ end
20
+
21
+
22
+ # ## quite a bit of this is cribbed from Sinatra ActiveRecord
23
+ load 'active_record/railties/databases.rake'
24
+
25
+ task :routes do
26
+ require 'lanes/api'
27
+ Lanes::API::Root.routes.each do |verb,handlers|
28
+ puts "\n#{verb}:\n"
29
+ handlers.each do |handler|
30
+ puts handler[0].source.to_s.gsub("\\A",'').gsub("\\z",'')
31
+ end
32
+ end
33
+ end
34
+
35
+
36
+ namespace :db do
37
+ task :environment do
38
+ Lanes::DB.configure_rake_environment
39
+ end
40
+ end
41
+
42
+ namespace :assets do
43
+ task :precompile do
44
+ require_relative 'api/sprockets_extension'
45
+ Lanes::API::SprocketsExtension.compile!
46
+ end
47
+ end