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,105 @@
1
+ require_relative 'model_attribute'
2
+
3
+ module Lanes
4
+ module Command
5
+
6
+ class GenerateModel < NamedCommand
7
+ RESERVED_YAML_KEYWORDS = %w(y yes n no true false on off null)
8
+ OPTIONS ||= {
9
+ timestamps: true,
10
+ parent: "Lanes::Model",
11
+ client_collection_parent: "Lanes.Data.Collection"
12
+ }
13
+
14
+ class_options OPTIONS
15
+
16
+ argument :fields, type: :array, default: []
17
+
18
+ attr_reader :file_name, :table_name
19
+
20
+ def set_variables
21
+ super
22
+ if name=~/::/
23
+ (@namespace,@name) = name.split("::")
24
+ else
25
+ @namespace = computed_namespace
26
+ end
27
+ @file_name = name.underscore
28
+ @table_name = namespace + "_" + name.tableize
29
+ end
30
+
31
+ def create_migration
32
+ migration = exising_migration || Time.now.utc.strftime("%Y%m%d%H%M%S") + "_create_#{table_name}.rb"
33
+ self.fields = fields.map{ |field| ModelAttribute.parse(field) }
34
+ template "db/create_table_migration.rb", "db/migrate/#{migration}"
35
+ end
36
+
37
+ def create_model
38
+ template "lib/namespace/model.rb", "lib/#{namespace}/#{file_name}.rb"
39
+ template "spec/namespace/model_spec.rb", "spec/#{namespace}/#{file_name}.rb"
40
+ template "spec/fixtures/namespace/model.yml", "spec/fixtures/#{namespace}/#{file_name}.yml"
41
+ end
42
+
43
+ def create_client
44
+ template "client/data/Model.coffee", \
45
+ "#{client_dir}/data/#{class_name}.coffee"
46
+ template "spec/client/data/ModelSpec.coffee", \
47
+ "spec/client/data/#{class_name}Spec.coffee"
48
+ end
49
+
50
+ def add_route
51
+ insert_into_file "config/routes.rb", before: "end" do
52
+ " resources #{namespace.camelize}::#{class_name}\n"
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def fields_with_index
59
+ fields.select { |a| !a.reference? && a.has_index? }
60
+ end
61
+
62
+ def exising_migration
63
+ migrations = Pathname.glob("#{destination_root}/db/migrate/[0-9]*_create_#{table_name}.rb")
64
+ migrations.any? ? migrations.first.basename.to_s : nil
65
+ end
66
+
67
+ def computed_namespace
68
+ # find a file and directory with the same basename
69
+ entries = Dir.glob(self.destination_root + "/lib/*")
70
+ name = entries.detect{ |directory|
71
+ FileTest.directory?(directory) && entries.detect{ |file|
72
+ file == directory+".rb"
73
+ }
74
+ }
75
+ name ? File.basename(name).to_s : nil
76
+ end
77
+
78
+ def yaml_key_value(key, value)
79
+ if RESERVED_YAML_KEYWORDS.include?(key.downcase)
80
+ "'#{key}': #{value}"
81
+ else
82
+ "#{key}: #{value}"
83
+ end
84
+ end
85
+
86
+ def client_parent
87
+ if options[:parent] == 'Lanes::Model'
88
+ "Lanes.Data.Model"
89
+ else
90
+ "Lanes.#{namespace.camelize}.#{options[:parent]}"
91
+ end
92
+ end
93
+
94
+ def max_field_length
95
+ @max_field_length ||= fields.map{|field|
96
+ field.name.length + ( field.reference? ? 3 : 0 )
97
+ }.max
98
+ end
99
+
100
+ def reference_fields
101
+ fields.select { |a| a.reference? }
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,45 @@
1
+ Stubs out a new model. Pass the model name, either CamelCased or
2
+ under_scored, and an optional list of attribute pairs as arguments.
3
+
4
+ Attribute pairs are field:type arguments specifying the
5
+ model's attributes. Timestamps are added by default, so you don't have to
6
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
7
+
8
+ You don't have to think up every attribute up front, but it helps to
9
+ sketch out a few so you can start working with the model immediately.
10
+
11
+
12
+ Available field types:
13
+
14
+ Are the same as ActiveRecord, to wit:
15
+ integer
16
+ primary_key
17
+ decimal
18
+ float
19
+ boolean
20
+ binary
21
+ string
22
+ text
23
+ date
24
+ time
25
+ datetime
26
+ references
27
+
28
+ Example:
29
+
30
+ When executed inside a project called "Blog":
31
+
32
+ `lanes generate model comments user:references subject:string{60} body:text`
33
+
34
+ Lanes will create:
35
+
36
+ Migration: db/migrate/XXX_create_comments.rb
37
+ Model: lib/blog/comment.rb
38
+ Model Spec: spec/comment_spec.rb
39
+ Fixtures: spec/fixtures/comments.yml
40
+ Client Model: client/data/Comment.coffee
41
+ Client Spec: spec/client/data/CommentSpec.coffee
42
+
43
+ The Ruby model will contain a `belongs_to` association to the User model,
44
+ and the Javascript model definition will also have an association defined.
45
+
@@ -0,0 +1,31 @@
1
+ require_relative 'model_attribute'
2
+
3
+ module Lanes
4
+ module Command
5
+
6
+ class GenerateScreen < NamedCommand
7
+ OPTIONS = {
8
+ title: '',
9
+ description: '',
10
+ icon: '',
11
+ group_id: '',
12
+ model_class: '',
13
+ namespace: nil
14
+ }
15
+ class_options( OPTIONS )
16
+
17
+ def set_defaults
18
+ options[:title] = name.titleize if options[:title].blank?
19
+ end
20
+
21
+ def create_screen
22
+ template "lib/namespace/screen.rb", "lib/#{namespace}/#{name}_screen.rb"
23
+ template "client/screens/index.js", "#{client_dir}/screens/#{name}/index.js"
24
+ template "client/screens/styles.scss", "#{client_dir}/screens/#{name}/index.scss"
25
+ template "client/screens/Screen.coffee", "#{client_dir}/screens/#{name}/#{name.classify}.coffee"
26
+ template "client/screens/layout.html", "#{client_dir}/screens/#{name}/layout.html"
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ Create the bare-bones definition of a screen
2
+
3
+ Screens are a special type of view that have a few extra attributes.
4
+ Namely, they have a "title" attribute and can be hidden and shown.
5
+
6
+ They are dynamically loaded. Initially only the definition for the view
7
+ is available, and the css and javascript for the view is only loaded
8
+ when the view is first displayed.
9
+
10
+ If the "model-class" option is provided, the screen will only be
11
+ available to users who have read or write access to the given model.
@@ -0,0 +1,22 @@
1
+ require_relative 'model_attribute'
2
+
3
+ module Lanes
4
+ module Command
5
+
6
+ class GenerateView < NamedCommand
7
+ OPTIONS ||= {
8
+ namespace: nil
9
+ }
10
+ class_options( OPTIONS )
11
+
12
+ def create_screen
13
+ template "client/views/View.coffee", "#{client_dir}/views/#{name.classify}.coffee"
14
+ template "client/views/template.html", "#{client_dir}/views/#{name.dasherize}.html"
15
+ template "spec/client/views/ViewSpec.coffee", \
16
+ "spec/client/views/#{class_name}Spec.coffee"
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ Stubs out a new View. Pass the view name, either CamelCased or
2
+ under_scored
3
+
4
+ When executed inside a project called "Blog":
5
+
6
+ `lanes generate view comment`
7
+
8
+ Lanes will create:
9
+
10
+ Client View: client/view/Comment.coffee
11
+ Template: client/view/comment.html
12
+ Spec: spec/client/view/CommentSpec.coffee
13
+
@@ -0,0 +1,188 @@
1
+ require 'active_support/time'
2
+
3
+ # This is a straight-up copy of railties/lib/rails/generators/generated_attribute.rb
4
+
5
+ module Lanes
6
+ module Command
7
+ class ModelAttribute # :nodoc:
8
+ INDEX_OPTIONS = %w(index uniq)
9
+ UNIQ_INDEX_OPTIONS = %w(uniq)
10
+
11
+ attr_accessor :name, :type
12
+ attr_reader :attr_options
13
+ attr_writer :index_name
14
+
15
+ class << self
16
+ def parse(column_definition)
17
+ name, type, has_index = column_definition.split(':')
18
+
19
+ # if user provided "name:index" instead of "name:string:index"
20
+ # type should be set blank so GeneratedAttribute's constructor
21
+ # could set it to :string
22
+ has_index, type = type, nil if INDEX_OPTIONS.include?(type)
23
+
24
+ type, attr_options = *parse_type_and_options(type)
25
+ type = type.to_sym if type
26
+
27
+ if type && reference?(type)
28
+ references_index = UNIQ_INDEX_OPTIONS.include?(has_index) ? { unique: true } : true
29
+ attr_options[:index] = references_index
30
+ end
31
+
32
+ new(name, type, has_index, attr_options)
33
+ end
34
+
35
+ def reference?(type)
36
+ [:references, :belongs_to].include? type
37
+ end
38
+
39
+ private
40
+
41
+ # parse possible attribute options like :limit for string/text/binary/integer, :precision/:scale for decimals or :polymorphic for references/belongs_to
42
+ # when declaring options curly brackets should be used
43
+ def parse_type_and_options(type)
44
+ case type
45
+ when /(string|text|binary|integer)\{(\d+)\}/
46
+ return $1, limit: $2.to_i
47
+ when /decimal\{(\d+)[,.-](\d+)\}/
48
+ return :decimal, precision: $1.to_i, scale: $2.to_i
49
+ when /(references|belongs_to)\{(.+)\}/
50
+ type = $1
51
+ provided_options = $2.split(/[,.-]/)
52
+ options = Hash[provided_options.map { |opt| [opt.to_sym, true] }]
53
+ return type, options
54
+ else
55
+ return type, {}
56
+ end
57
+ end
58
+ end
59
+
60
+ def initialize(name, type=nil, index_type=false, attr_options={})
61
+ @name = name
62
+ @type = type || :string
63
+ @has_index = INDEX_OPTIONS.include?(index_type)
64
+ @has_uniq_index = UNIQ_INDEX_OPTIONS.include?(index_type)
65
+ @attr_options = attr_options
66
+ end
67
+
68
+ def field_type
69
+ @field_type ||= case type
70
+ when :integer then :number_field
71
+ when :float, :decimal then :text_field
72
+ when :time then :time_select
73
+ when :datetime, :timestamp then :datetime_select
74
+ when :date then :date_select
75
+ when :text then :text_area
76
+ when :boolean then :check_box
77
+ else
78
+ :text_field
79
+ end
80
+ end
81
+
82
+ def default
83
+ @default ||= case type
84
+ when :integer then 1
85
+ when :float then 1.5
86
+ when :decimal then "9.99"
87
+ when :datetime, :timestamp, :time then Time.now.to_s(:db)
88
+ when :date then Date.today.to_s(:db)
89
+ when :string then name == "type" ? "" : "MyString"
90
+ when :text then "MyText"
91
+ when :boolean then false
92
+ when :references, :belongs_to then nil
93
+ else
94
+ ""
95
+ end
96
+ end
97
+
98
+ def plural_name
99
+ name.sub(/_id$/, '').pluralize
100
+ end
101
+
102
+ def singular_name
103
+ name.sub(/_id$/, '').singularize
104
+ end
105
+
106
+ def human_name
107
+ name.humanize
108
+ end
109
+
110
+ def index_name
111
+ @index_name ||= if polymorphic?
112
+ %w(id type).map { |t| "#{name}_#{t}" }
113
+ else
114
+ column_name
115
+ end
116
+ end
117
+
118
+ def column_name
119
+ @column_name ||= reference? ? "#{name}_id" : name
120
+ end
121
+
122
+ def foreign_key?
123
+ !!(name =~ /_id$/)
124
+ end
125
+
126
+ def reference?
127
+ self.class.reference?(type)
128
+ end
129
+
130
+ def polymorphic?
131
+ self.attr_options[:polymorphic]
132
+ end
133
+
134
+ def required?
135
+ self.attr_options[:required]
136
+ end
137
+
138
+ def has_index?
139
+ @has_index
140
+ end
141
+
142
+ def has_uniq_index?
143
+ @has_uniq_index
144
+ end
145
+
146
+ def password_digest?
147
+ name == 'password' && type == :digest
148
+ end
149
+
150
+ def inject_options
151
+ "".tap { |s| options_for_migration.each { |k,v| s << ", #{k}: #{v.inspect}" } }
152
+ end
153
+
154
+ def inject_index_options
155
+ has_uniq_index? ? ", unique: true" : ""
156
+ end
157
+
158
+ def options_for_migration
159
+ @attr_options.dup.tap do |options|
160
+ if required?
161
+ options.delete(:required)
162
+ options[:null] = false
163
+ end
164
+ end
165
+ end
166
+
167
+ def client_type
168
+ @client_type ||= case type
169
+ when :datetime then 'date'
170
+ when :integer then 'integer'
171
+ when :float then 'number'
172
+ when :text then 'string'
173
+ when :string then 'string'
174
+ when :boolean then 'boolean'
175
+ when :decimal then 'bigdec'
176
+ when :hstore then 'object'
177
+ when :references, :belongs_to then 'integer'
178
+ else 'any'
179
+ end
180
+ end
181
+
182
+ def belongs_to?
183
+ :belongs_to == type
184
+ end
185
+
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,27 @@
1
+ module Lanes
2
+ module Command
3
+
4
+ class NamedCommand < Thor::Group
5
+ include Thor::Actions
6
+
7
+ argument :name
8
+
9
+ attr_reader :namespace, :class_name, :client_dir
10
+
11
+ def self.source_root
12
+ Pathname.new(__FILE__).dirname.join("templates")
13
+ end
14
+
15
+ def load_namespace
16
+ @namespace = options[:namespace] || Command.load_current_extension.identifier
17
+ raise Thor::Error("Unable to locate Lanes environment") unless @namespace
18
+ end
19
+
20
+ def set_variables
21
+ @class_name = name.classify
22
+ @client_dir = "client/#{namespace}"
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ require 'guard'
2
+
3
+ module Lanes
4
+ module Command
5
+
6
+ class Server < Thor::Group
7
+ include Thor::Actions
8
+
9
+ class_option :port, type: :numeric
10
+
11
+ def launch
12
+ say "Launching testing server at http://localhost:8888/", :green
13
+ Guard.start
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,3 @@
1
+ Run the webserver and testing tasks. The server
2
+ will monitor the files for changes and automatically
3
+ run the relevant tests when modifications occur.
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "guard-jasmine", github: "guard/guard-jasmine", branch: 'master'
4
+ gem "lanes", github: "argosity/lanes", branch: 'master'
5
+
6
+ # Uncomment to enable access control and user administration
7
+ # gem "lanes-access", github: "argosity/lanes-access", branch: 'master'
8
+
9
+ gem "rake"
10
+ gem 'puma'
@@ -0,0 +1,2 @@
1
+ require_relative 'lib/<%= namespace %>'
2
+ require 'lanes/rake_tasks'
@@ -0,0 +1,5 @@
1
+ class Lanes.<%= namespace.underscore.camelize %>.Extension extends Lanes.Extensions.Base
2
+
3
+ identifier: "<%= namespace %>"
4
+
5
+ setBootstrapData: (data)->
@@ -0,0 +1 @@
1
+ class Lanes.<%= namespace.camelize %>.Component.<%= class_name %> extends Lanes.Component.Base
@@ -0,0 +1,24 @@
1
+ class <%= namespace.camelize %>.Data.<%= class_name %> extends <%= client_parent %>
2
+
3
+ api_path: '<%= name.downcase.pluralize.underscore.dasherize %>'
4
+ namespace: NAMESPACE
5
+
6
+ props:
7
+ <% fields.each do |field| -%>
8
+ <% if field.reference? -%>
9
+ <%= sprintf("%-#{max_field_length}s",field.name+'_id') %>: "<%= field.client_type %>"
10
+ <% else -%>
11
+ <%= sprintf("%-#{max_field_length}s",field.name) %>: "<%= field.client_type %>"
12
+ <% end -%>
13
+ <% end %>
14
+ <% if reference_fields.any? -%>
15
+
16
+ associations:
17
+ <% reference_fields.each do |field| -%>
18
+ <%= sprintf("%-#{max_field_length}s ",field.name) %>: { <%= field.belongs_to? ? 'model' : 'collection' -%>: "Lanes.<%= namespace.camelize %>.<%= field.name.camelize %>" }
19
+ <% end -%>
20
+ <% end -%>
21
+
22
+ class Lanes.<%= namespace.camelize %>.Data.<%= class_name %>Collection extends <%= options[:client_collection_parent] %>
23
+
24
+ model: Lanes.<%= namespace.camelize %>.Data.<%= class_name %>
@@ -0,0 +1,17 @@
1
+ //=require_tree ./data
2
+ //=require_tree ./views
3
+ //=require_tree ./components
4
+ //=require ./Extension
5
+
6
+ /*
7
+ Files located in the above directories are part of the default
8
+ Javascript build and are downloaded to the client on the initial
9
+ request.
10
+
11
+ Accordingly, only essential files should be included here. Code that
12
+ relates to a screen should be placed in the "screens" directory,
13
+ where it will be loaded dynamically when the screen is displayed.
14
+
15
+ Alternatively, feel free to modify the require statements above to
16
+ only include the paths you need.
17
+ */
@@ -0,0 +1,9 @@
1
+ class <%= namespace.camelize %>.Screens.<%= class_name %> extends Lanes.Screens.Base
2
+
3
+ namespace: NAMESPACE
4
+
5
+ # List subviews <TODO: add link to docs>
6
+ subviews: {}
7
+
8
+ # List events <TODO: add link to docs>
9
+ events: {}
@@ -0,0 +1,5 @@
1
+ //= require_tree .
2
+
3
+ /*
4
+ Add additional requirement statements for other files that the screen uses
5
+ */
@@ -0,0 +1,3 @@
1
+ <div>
2
+ <h1><%= options[:title] %></h1>
3
+ </div>
@@ -0,0 +1,9 @@
1
+ /*
2
+ If your screen does not use any custom styles
3
+
4
+ You should remove this file and it's reference from:
5
+ lib/<%= namespace %>/<%= name %>_screen.rb
6
+
7
+ Otherwise Lanes will continue to fetch an empty file whenever
8
+ the screen is displayed
9
+ */
@@ -0,0 +1 @@
1
+ /* Enter styles for your application in scss format here */
File without changes
@@ -0,0 +1,9 @@
1
+ class <%= namespace.classify %>.Views.<%= class_name %> extends Lanes.Views.Base
2
+
3
+ namespace: NAMESPACE
4
+
5
+ # List subviews <TODO: add link to docs>
6
+ subviews: {}
7
+
8
+ # List events <TODO: add link to docs>
9
+ events: {}
@@ -0,0 +1,3 @@
1
+ <div>
2
+ <!-- Template for <%= class_name %>-->
3
+ </div>
@@ -0,0 +1,7 @@
1
+ # This file will be loaded if the current extension is the
2
+ # one controlling Lanes.
3
+ #
4
+ # It will not be evaluated if another extension is loading this one
5
+ Lanes.configure do | config |
6
+ config.root_view = "<%= class_name %>.Screens.<%= class_name %>"
7
+ end
@@ -0,0 +1,2 @@
1
+ Lanes::API.routes.draw do
2
+ end
@@ -1,4 +1,5 @@
1
1
  require 'bundler'
2
2
  Bundler.require
3
+ require_relative 'lib/<%= namespace %>'
3
4
  require 'lanes/api'
4
5
  run Lanes::API::Root
@@ -0,0 +1,19 @@
1
+ class Create<%= namespace.camelize %><%= class_name.pluralize %> < ActiveRecord::Migration
2
+ def change
3
+ create_table :<%= table_name %> do |t|
4
+ <% fields.each do |attribute| -%>
5
+ <% if attribute.password_digest? -%>
6
+ t.string :password_digest<%= attribute.inject_options %>
7
+ <% else -%>
8
+ t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
9
+ <% end -%>
10
+ <% end -%>
11
+ <% if options[:timestamps] %>
12
+ t.timestamps null: false
13
+ <% end -%>
14
+ end
15
+ <% fields_with_index.each do |attribute| -%>
16
+ add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
17
+ <% end -%>
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ tmp/cache
@@ -0,0 +1,13 @@
1
+ require_relative '../<%= name %>'
2
+
3
+ module <%= namespace.camelize %>
4
+
5
+ class Extension < Lanes::Extensions::Definition
6
+
7
+ identifier "<%= name %>"
8
+
9
+ root_path Pathname.new(__FILE__).dirname.join("..","..").expand_path
10
+
11
+ end
12
+
13
+ end