lanes 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.jshintrc +3 -0
  4. data/Gemfile +9 -0
  5. data/Guardfile +15 -0
  6. data/LICENSE-MIT.txt +21 -0
  7. data/README.md +15 -0
  8. data/Rakefile +74 -0
  9. data/bin/lanes +5 -0
  10. data/client/images/ajax-loader.gif +0 -0
  11. data/client/images/dataTables/Sorting icons.psd +0 -0
  12. data/client/images/dataTables/back_disabled.png +0 -0
  13. data/client/images/dataTables/back_enabled.png +0 -0
  14. data/client/images/dataTables/back_enabled_hover.png +0 -0
  15. data/client/images/dataTables/favicon.ico +0 -0
  16. data/client/images/dataTables/forward_disabled.png +0 -0
  17. data/client/images/dataTables/forward_enabled.png +0 -0
  18. data/client/images/dataTables/forward_enabled_hover.png +0 -0
  19. data/client/images/dataTables/loading-background.png +0 -0
  20. data/client/images/dataTables/sort_asc.png +0 -0
  21. data/client/images/dataTables/sort_asc_disabled.png +0 -0
  22. data/client/images/dataTables/sort_both.png +0 -0
  23. data/client/images/dataTables/sort_desc.png +0 -0
  24. data/client/images/dataTables/sort_desc_disabled.png +0 -0
  25. data/client/images/logo-sm.png +0 -0
  26. data/client/javascripts/component/Base.coffee +39 -0
  27. data/client/javascripts/component/ChoicesInput.coffee +47 -0
  28. data/client/javascripts/component/Grid.coffee +199 -0
  29. data/client/javascripts/component/ModalDialog.coffee +44 -0
  30. data/client/javascripts/component/PopOver.coffee +52 -0
  31. data/client/javascripts/component/RadioGroup.coffee +59 -0
  32. data/client/javascripts/component/RecordFinder.coffee +143 -0
  33. data/client/javascripts/component/SelectField.coffee +43 -0
  34. data/client/javascripts/component/TaggedField.coffee +27 -0
  35. data/client/javascripts/component/grid/Editor.coffee +65 -0
  36. data/client/javascripts/component/grid/PopOverEditor.coffee +29 -0
  37. data/client/javascripts/component/grid/RowEditor.coffee +31 -0
  38. data/client/javascripts/component/grid/popover-editor.html +18 -0
  39. data/client/javascripts/component/grid/row-editor.html +16 -0
  40. data/client/javascripts/component/grid.html +4 -0
  41. data/client/javascripts/component/index.js +5 -0
  42. data/client/javascripts/component/modal.html +17 -0
  43. data/client/javascripts/component/popover.html +5 -0
  44. data/client/javascripts/component/record-finder/clause.skr +35 -0
  45. data/client/javascripts/component/record-finder/dialog.skr +4 -0
  46. data/client/javascripts/component/record-finder/field.skr +8 -0
  47. data/client/javascripts/data/Bootstrap.coffee +8 -0
  48. data/client/javascripts/data/ChangeSet.coffee +50 -0
  49. data/client/javascripts/data/Collection.coffee +111 -0
  50. data/client/javascripts/data/Config.coffee +15 -0
  51. data/client/javascripts/data/Model.coffee +269 -0
  52. data/client/javascripts/data/PubSub.coffee +68 -0
  53. data/client/javascripts/data/Query.coffee +184 -0
  54. data/client/javascripts/data/Roles.coffee +91 -0
  55. data/client/javascripts/data/Screens.coffee +157 -0
  56. data/client/javascripts/data/Sync.coffee +62 -0
  57. data/client/javascripts/data/User.coffee +70 -0
  58. data/client/javascripts/data/index.js +7 -0
  59. data/client/javascripts/data/mixins/HasCodeField.coffee +13 -0
  60. data/client/javascripts/extension/Base.coffee +9 -0
  61. data/client/javascripts/extension/Extensions.coffee +17 -0
  62. data/client/javascripts/extension/GlAccounts.coffee +9 -0
  63. data/client/javascripts/extension/index.js +6 -0
  64. data/client/javascripts/extension/load.js.erb +3 -0
  65. data/client/javascripts/lanes-complete.js +3 -0
  66. data/client/javascripts/lanes-workspace.js +1 -0
  67. data/client/javascripts/lib/MakeBaseClass.coffee +55 -0
  68. data/client/javascripts/lib/ModuleSupport.coffee +22 -0
  69. data/client/javascripts/lib/Templates.coffee +47 -0
  70. data/client/javascripts/lib/create-namespace.js +0 -0
  71. data/client/javascripts/lib/debounce.coffee +15 -0
  72. data/client/javascripts/lib/defer.coffee +7 -0
  73. data/client/javascripts/lib/el.js +115 -0
  74. data/client/javascripts/lib/index.js +9 -0
  75. data/client/javascripts/lib/loader.coffee +95 -0
  76. data/client/javascripts/lib/namespace.coffee +9 -0
  77. data/client/javascripts/lib/noConflict.coffee +14 -0
  78. data/client/javascripts/lib/promise_helpers.coffee +4 -0
  79. data/client/javascripts/lib/results.coffee +15 -0
  80. data/client/javascripts/lib/underscore.inflection.js +210 -0
  81. data/client/javascripts/lib/utilFunctions.coffee +51 -0
  82. data/client/javascripts/plugins/ResizeSensor.js +144 -0
  83. data/client/javascripts/plugins/index.js +4 -0
  84. data/client/javascripts/plugins/overlay.coffee +41 -0
  85. data/client/javascripts/plugins/trigger.coffee +15 -0
  86. data/client/javascripts/vendor/bootstrap/affix.js +142 -0
  87. data/client/javascripts/vendor/bootstrap/alert.js +92 -0
  88. data/client/javascripts/vendor/bootstrap/button.js +110 -0
  89. data/client/javascripts/vendor/bootstrap/carousel.js +223 -0
  90. data/client/javascripts/vendor/bootstrap/collapse.js +170 -0
  91. data/client/javascripts/vendor/bootstrap/dropdown.js +151 -0
  92. data/client/javascripts/vendor/bootstrap/modal.js +280 -0
  93. data/client/javascripts/vendor/bootstrap/popover.js +113 -0
  94. data/client/javascripts/vendor/bootstrap/scrollspy.js +170 -0
  95. data/client/javascripts/vendor/bootstrap/tab.js +128 -0
  96. data/client/javascripts/vendor/bootstrap/tooltip.js +457 -0
  97. data/client/javascripts/vendor/bootstrap/transition.js +59 -0
  98. data/client/javascripts/vendor/dataTables/dataTables.bootstrap.js +156 -0
  99. data/client/javascripts/vendor/dataTables/dataTables.scroller.js +1185 -0
  100. data/client/javascripts/vendor/dataTables/datatables.responsive.js +666 -0
  101. data/client/javascripts/vendor/dataTables/index.js +2 -0
  102. data/client/javascripts/vendor/dataTables/jquery.dataTables.js +14380 -0
  103. data/client/javascripts/vendor/jquery-2.js +9190 -0
  104. data/client/javascripts/vendor/jquery.tap.js +401 -0
  105. data/client/javascripts/vendor/magicsuggest.js +1565 -0
  106. data/client/javascripts/vendor/message-bus.js +285 -0
  107. data/client/javascripts/vendor/modern-stack.js +14 -0
  108. data/client/javascripts/vendor/packaged.js +13769 -0
  109. data/client/javascripts/view/Assets.coffee +9 -0
  110. data/client/javascripts/view/Base.coffee +231 -0
  111. data/client/javascripts/view/FormBindings.coffee +98 -0
  112. data/client/javascripts/view/Functions.coffee +13 -0
  113. data/client/javascripts/view/Helpers.coffee +77 -0
  114. data/client/javascripts/view/InterfaceState.coffee +88 -0
  115. data/client/javascripts/view/Keys.coffee +59 -0
  116. data/client/javascripts/view/ModelObserver.coffee +31 -0
  117. data/client/javascripts/view/ModelUpdate.coffee +8 -0
  118. data/client/javascripts/view/PubSub.coffee +29 -0
  119. data/client/javascripts/view/RenderContext.coffee +32 -0
  120. data/client/javascripts/view/SaveNotify.coffee +30 -0
  121. data/client/javascripts/view/Screen.coffee +30 -0
  122. data/client/javascripts/view/TimedHighlight.coffee +38 -0
  123. data/client/javascripts/view/TimedMask.coffee +65 -0
  124. data/client/javascripts/view/_button.html +3 -0
  125. data/client/javascripts/view/_toolbar.html +27 -0
  126. data/client/javascripts/view/index.js +10 -0
  127. data/client/javascripts/view/mixins/ScreenChangeListener.coffee +43 -0
  128. data/client/javascripts/view/model-update.html +13 -0
  129. data/client/javascripts/view/screen-definitions.js.erb +7 -0
  130. data/client/javascripts/workspace/ActiveScreensSwitcher.coffee +117 -0
  131. data/client/javascripts/workspace/Instance.es6 +60 -0
  132. data/client/javascripts/workspace/Layout.coffee +18 -0
  133. data/client/javascripts/workspace/LoginDialog.coffee +33 -0
  134. data/client/javascripts/workspace/Navbar.coffee +44 -0
  135. data/client/javascripts/workspace/Pages.coffee +46 -0
  136. data/client/javascripts/workspace/ScreensMenu.coffee +126 -0
  137. data/client/javascripts/workspace/index.js +12 -0
  138. data/client/javascripts/workspace/layout.html +4 -0
  139. data/client/javascripts/workspace/login-dialog.html +16 -0
  140. data/client/javascripts/workspace/menu.html +356 -0
  141. data/client/javascripts/workspace/menu_toggle.html +9 -0
  142. data/client/javascripts/workspace/navbar.html +19 -0
  143. data/client/javascripts/workspace/pages.html +6 -0
  144. data/client/javascripts/workspace/screens-menu.html +11 -0
  145. data/client/javascripts/workspace/screens-switcher.html +7 -0
  146. data/client/javascripts/workspace/tab.html +0 -0
  147. data/client/screens/user-management/UserEditScreen.coffee +21 -0
  148. data/client/screens/user-management/UserManagement.coffee +24 -0
  149. data/client/screens/user-management/grid-popover-editor.html +33 -0
  150. data/client/screens/user-management/index.css +4 -0
  151. data/client/screens/user-management/index.js +2 -0
  152. data/client/screens/user-management/user-management-styles.scss +7 -0
  153. data/client/screens/user-management/user-management.html +8 -0
  154. data/client/stylesheets/compoonents/all.scss +6 -0
  155. data/client/stylesheets/compoonents/changes-notification.scss +44 -0
  156. data/client/stylesheets/compoonents/grid-editors.scss +65 -0
  157. data/client/stylesheets/compoonents/grid.scss +301 -0
  158. data/client/stylesheets/compoonents/modal-dialog.scss +23 -0
  159. data/client/stylesheets/compoonents/record-finder.scss +71 -0
  160. data/client/stylesheets/compoonents/suggest.scss +266 -0
  161. data/client/stylesheets/fonts/icomoon.eot +0 -0
  162. data/client/stylesheets/fonts/icomoon.svg +160 -0
  163. data/client/stylesheets/fonts/icomoon.ttf +0 -0
  164. data/client/stylesheets/fonts/icomoon.woff +0 -0
  165. data/client/stylesheets/fonts/selection.json +3565 -0
  166. data/client/stylesheets/fonts/style.css +451 -0
  167. data/client/stylesheets/fonts.scss +38 -0
  168. data/client/stylesheets/forms.scss +75 -0
  169. data/client/stylesheets/index.css +4 -0
  170. data/client/stylesheets/keybindings.scss +6 -0
  171. data/client/stylesheets/lanes-workspace.scss +17 -0
  172. data/client/stylesheets/layout.scss +272 -0
  173. data/client/stylesheets/plugins/all.scss +2 -0
  174. data/client/stylesheets/plugins/overlay.scss +63 -0
  175. data/client/stylesheets/plugins/resize-sensor.scss +24 -0
  176. data/client/stylesheets/screens.scss +66 -0
  177. data/client/stylesheets/tabs.scss +148 -0
  178. data/client/stylesheets/vendor/bootstrap/_alerts.scss +68 -0
  179. data/client/stylesheets/vendor/bootstrap/_badges.scss +57 -0
  180. data/client/stylesheets/vendor/bootstrap/_breadcrumbs.scss +26 -0
  181. data/client/stylesheets/vendor/bootstrap/_button-groups.scss +240 -0
  182. data/client/stylesheets/vendor/bootstrap/_buttons.scss +157 -0
  183. data/client/stylesheets/vendor/bootstrap/_carousel.scss +243 -0
  184. data/client/stylesheets/vendor/bootstrap/_close.scss +35 -0
  185. data/client/stylesheets/vendor/bootstrap/_code.scss +68 -0
  186. data/client/stylesheets/vendor/bootstrap/_component-animations.scss +35 -0
  187. data/client/stylesheets/vendor/bootstrap/_dropdowns.scss +215 -0
  188. data/client/stylesheets/vendor/bootstrap/_forms.scss +538 -0
  189. data/client/stylesheets/vendor/bootstrap/_glyphicons.scss +237 -0
  190. data/client/stylesheets/vendor/bootstrap/_grid.scss +84 -0
  191. data/client/stylesheets/vendor/bootstrap/_input-groups.scss +166 -0
  192. data/client/stylesheets/vendor/bootstrap/_jumbotron.scss +48 -0
  193. data/client/stylesheets/vendor/bootstrap/_labels.scss +66 -0
  194. data/client/stylesheets/vendor/bootstrap/_list-group.scss +132 -0
  195. data/client/stylesheets/vendor/bootstrap/_media.scss +56 -0
  196. data/client/stylesheets/vendor/bootstrap/_mixins.scss +39 -0
  197. data/client/stylesheets/vendor/bootstrap/_modals.scss +150 -0
  198. data/client/stylesheets/vendor/bootstrap/_navbar.scss +659 -0
  199. data/client/stylesheets/vendor/bootstrap/_navs.scss +242 -0
  200. data/client/stylesheets/vendor/bootstrap/_normalize.scss +425 -0
  201. data/client/stylesheets/vendor/bootstrap/_pager.scss +55 -0
  202. data/client/stylesheets/vendor/bootstrap/_pagination.scss +88 -0
  203. data/client/stylesheets/vendor/bootstrap/_panels.scss +243 -0
  204. data/client/stylesheets/vendor/bootstrap/_popovers.scss +133 -0
  205. data/client/stylesheets/vendor/bootstrap/_print.scss +101 -0
  206. data/client/stylesheets/vendor/bootstrap/_progress-bars.scss +105 -0
  207. data/client/stylesheets/vendor/bootstrap/_responsive-embed.scss +34 -0
  208. data/client/stylesheets/vendor/bootstrap/_responsive-utilities.scss +174 -0
  209. data/client/stylesheets/vendor/bootstrap/_scaffolding.scss +150 -0
  210. data/client/stylesheets/vendor/bootstrap/_tables.scss +233 -0
  211. data/client/stylesheets/vendor/bootstrap/_theme.scss +258 -0
  212. data/client/stylesheets/vendor/bootstrap/_thumbnails.scss +38 -0
  213. data/client/stylesheets/vendor/bootstrap/_tooltip.scss +95 -0
  214. data/client/stylesheets/vendor/bootstrap/_type.scss +304 -0
  215. data/client/stylesheets/vendor/bootstrap/_utilities.scss +57 -0
  216. data/client/stylesheets/vendor/bootstrap/_variables.scss +850 -0
  217. data/client/stylesheets/vendor/bootstrap/_wells.scss +29 -0
  218. data/client/stylesheets/vendor/bootstrap/bootstrap.scss +50 -0
  219. data/client/stylesheets/vendor/bootstrap/mixins/_alerts.scss +14 -0
  220. data/client/stylesheets/vendor/bootstrap/mixins/_background-variant.scss +11 -0
  221. data/client/stylesheets/vendor/bootstrap/mixins/_border-radius.scss +18 -0
  222. data/client/stylesheets/vendor/bootstrap/mixins/_buttons.scss +50 -0
  223. data/client/stylesheets/vendor/bootstrap/mixins/_center-block.scss +7 -0
  224. data/client/stylesheets/vendor/bootstrap/mixins/_clearfix.scss +22 -0
  225. data/client/stylesheets/vendor/bootstrap/mixins/_forms.scss +84 -0
  226. data/client/stylesheets/vendor/bootstrap/mixins/_gradients.scss +58 -0
  227. data/client/stylesheets/vendor/bootstrap/mixins/_grid-framework.scss +81 -0
  228. data/client/stylesheets/vendor/bootstrap/mixins/_grid.scss +122 -0
  229. data/client/stylesheets/vendor/bootstrap/mixins/_hide-text.scss +21 -0
  230. data/client/stylesheets/vendor/bootstrap/mixins/_image.scss +34 -0
  231. data/client/stylesheets/vendor/bootstrap/mixins/_labels.scss +12 -0
  232. data/client/stylesheets/vendor/bootstrap/mixins/_list-group.scss +31 -0
  233. data/client/stylesheets/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
  234. data/client/stylesheets/vendor/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  235. data/client/stylesheets/vendor/bootstrap/mixins/_opacity.scss +8 -0
  236. data/client/stylesheets/vendor/bootstrap/mixins/_pagination.scss +23 -0
  237. data/client/stylesheets/vendor/bootstrap/mixins/_panels.scss +24 -0
  238. data/client/stylesheets/vendor/bootstrap/mixins/_progress-bar.scss +10 -0
  239. data/client/stylesheets/vendor/bootstrap/mixins/_reset-filter.scss +8 -0
  240. data/client/stylesheets/vendor/bootstrap/mixins/_resize.scss +6 -0
  241. data/client/stylesheets/vendor/bootstrap/mixins/_responsive-visibility.scss +21 -0
  242. data/client/stylesheets/vendor/bootstrap/mixins/_size.scss +10 -0
  243. data/client/stylesheets/vendor/bootstrap/mixins/_tab-focus.scss +9 -0
  244. data/client/stylesheets/vendor/bootstrap/mixins/_table-row.scss +28 -0
  245. data/client/stylesheets/vendor/bootstrap/mixins/_text-emphasis.scss +11 -0
  246. data/client/stylesheets/vendor/bootstrap/mixins/_text-overflow.scss +8 -0
  247. data/client/stylesheets/vendor/bootstrap/mixins/_vendor-prefixes.scss +219 -0
  248. data/client/stylesheets/vendor/bootstrap-custom-grid.scss +85 -0
  249. data/client/stylesheets/vendor/bootstrap-custom-modals.scss +150 -0
  250. data/client/stylesheets/vendor/bootstrap.scss +69 -0
  251. data/client/stylesheets/vendor/dataTables.scss +4 -0
  252. data/config/database.yml +9 -0
  253. data/config/puma.rb +7 -0
  254. data/config.ru +4 -0
  255. data/db/migrate/20140615031600_create_hip_users.rb +17 -0
  256. data/db/seed.rb +37 -0
  257. data/foo/Gemfile +5 -0
  258. data/foo/Guardfile +13 -0
  259. data/foo/foo/Gemfile +5 -0
  260. data/foo/foo/lib/foo.rb +7 -0
  261. data/foo/lib/foo/version.rb +3 -0
  262. data/foo/lib/foo.rb +8 -0
  263. data/lanes.gemspec +54 -0
  264. data/lib/generators/lanes/migrations/install_generator.rb +42 -0
  265. data/lib/lanes/access/locked_fields.rb +43 -0
  266. data/lib/lanes/access/role.rb +58 -0
  267. data/lib/lanes/access/role_collection.rb +75 -0
  268. data/lib/lanes/access/roles/administrator.rb +25 -0
  269. data/lib/lanes/access/roles/support.rb +13 -0
  270. data/lib/lanes/access/user_maint_screen.rb +32 -0
  271. data/lib/lanes/access.rb +50 -0
  272. data/lib/lanes/api/asset_pipeline.rb +59 -0
  273. data/lib/lanes/api/authentication_helper.rb +21 -0
  274. data/lib/lanes/api/authentication_provider.rb +45 -0
  275. data/lib/lanes/api/controller.rb +290 -0
  276. data/lib/lanes/api/default_routes.rb +35 -0
  277. data/lib/lanes/api/eco.js +516 -0
  278. data/lib/lanes/api/error_formatter.rb +37 -0
  279. data/lib/lanes/api/helper_methods.rb +32 -0
  280. data/lib/lanes/api/javascript_processor.rb +116 -0
  281. data/lib/lanes/api/pub_sub.rb +33 -0
  282. data/lib/lanes/api/request_wrapper.rb +42 -0
  283. data/lib/lanes/api/root.rb +103 -0
  284. data/lib/lanes/api/skr_templates.rb +60 -0
  285. data/lib/lanes/api/test_specs.rb +59 -0
  286. data/lib/lanes/api/updates.rb +38 -0
  287. data/lib/lanes/api.rb +27 -0
  288. data/lib/lanes/cli.rb +13 -0
  289. data/lib/lanes/concerns/all.rb +16 -0
  290. data/lib/lanes/concerns/api_path.rb +21 -0
  291. data/lib/lanes/concerns/association_extensions.rb +85 -0
  292. data/lib/lanes/concerns/attr_accessor_with_default.rb +62 -0
  293. data/lib/lanes/concerns/code_identifier.rb +43 -0
  294. data/lib/lanes/concerns/export_associations.rb +52 -0
  295. data/lib/lanes/concerns/export_join_tables.rb +39 -0
  296. data/lib/lanes/concerns/export_methods.rb +104 -0
  297. data/lib/lanes/concerns/export_scope.rb +66 -0
  298. data/lib/lanes/concerns/exported_limit_evaluator.rb +17 -0
  299. data/lib/lanes/concerns/immutable_model.rb +32 -0
  300. data/lib/lanes/concerns/locked_fields.rb +84 -0
  301. data/lib/lanes/concerns/pub_sub.rb +105 -0
  302. data/lib/lanes/concerns/queries.rb +20 -0
  303. data/lib/lanes/concerns/random_hash_code.rb +40 -0
  304. data/lib/lanes/concerns/sanitize_api_data.rb +15 -0
  305. data/lib/lanes/concerns/set_attribute_data.rb +154 -0
  306. data/lib/lanes/concerns/track_modifications.rb +51 -0
  307. data/lib/lanes/concerns/visible_id_identifier.rb +53 -0
  308. data/lib/lanes/configuration.rb +85 -0
  309. data/lib/lanes/db/migration_helpers.rb +178 -0
  310. data/lib/lanes/db/migrations.rb +13 -0
  311. data/lib/lanes/db/seed.rb +27 -0
  312. data/lib/lanes/db.rb +86 -0
  313. data/lib/lanes/environment.rb +19 -0
  314. data/lib/lanes/extension.rb +72 -0
  315. data/lib/lanes/generators/app/Gemfile +5 -0
  316. data/lib/lanes/generators/app/Guardfile +13 -0
  317. data/lib/lanes/generators/app/Rakefile +9 -0
  318. data/lib/lanes/generators/app/config/database.yml +9 -0
  319. data/lib/lanes/generators/app/config.ru +4 -0
  320. data/lib/lanes/generators/app/lib/main_class/version.rb +3 -0
  321. data/lib/lanes/generators/app/lib/main_class.rb +8 -0
  322. data/lib/lanes/generators/app.rb +36 -0
  323. data/lib/lanes/guard_tasks.rb +44 -0
  324. data/lib/lanes/logger.rb +37 -0
  325. data/lib/lanes/model.rb +26 -0
  326. data/lib/lanes/numbers.rb +72 -0
  327. data/lib/lanes/rails_engine.rb +5 -0
  328. data/lib/lanes/screens.rb +126 -0
  329. data/lib/lanes/spec_asset_expander.rb +43 -0
  330. data/lib/lanes/strings.rb +56 -0
  331. data/lib/lanes/user.rb +127 -0
  332. data/lib/lanes/validators/all.rb +2 -0
  333. data/lib/lanes/validators/email.rb +17 -0
  334. data/lib/lanes/validators/set.rb +18 -0
  335. data/lib/lanes/version.rb +5 -0
  336. data/lib/lanes.rb +22 -0
  337. data/npm-build/README +1 -0
  338. data/npm-build/compile.coffee +15 -0
  339. data/npm-build/package.json +59 -0
  340. data/npm-build/shims/underscore.js +1416 -0
  341. data/npm-build/template.js +33 -0
  342. data/public/javascripts/jasmine_examples/Player.js +22 -0
  343. data/public/javascripts/jasmine_examples/Song.js +7 -0
  344. data/spec/api/javascript_processor_spec.rb +107 -0
  345. data/spec/api/user_spec.rb +52 -0
  346. data/spec/client/component/ChoicesInputSpec.coffee +12 -0
  347. data/spec/client/component/foo_spec.coffee +4 -0
  348. data/spec/client/foo_spec.js +0 -0
  349. data/spec/client/jasmine_examples/PlayerSpec.js +0 -0
  350. data/spec/client/support/jasmine.yml +128 -0
  351. data/spec/client/support/jasmine_helper.rb +15 -0
  352. data/spec/concerns/api_path_spec.rb +14 -0
  353. data/spec/concerns/association_extensions_spec.rb +30 -0
  354. data/spec/concerns/attr_accessor_with_default_spec.rb +57 -0
  355. data/spec/concerns/code_identifier_spec.rb +45 -0
  356. data/spec/concerns/export_associations_spec.rb +7 -0
  357. data/spec/concerns/export_methods_spec.rb +43 -0
  358. data/spec/concerns/export_scope_spec.rb +15 -0
  359. data/spec/concerns/exported_limits_spec.rb +47 -0
  360. data/spec/concerns/pub_sub_spec.rb +83 -0
  361. data/spec/concerns/set_attribute_data_spec.rb +66 -0
  362. data/spec/configuration_spec.rb +26 -0
  363. data/spec/fixtures/lanes/users.yml +13 -0
  364. data/spec/helpers/.gitkeep +0 -0
  365. data/spec/helpers/SpecHelper.js +18 -0
  366. data/spec/locked_fields_spec.rb +27 -0
  367. data/spec/numbers_spec.rb +26 -0
  368. data/spec/role_collection_spec.rb +19 -0
  369. data/spec/spec_helper.rb +163 -0
  370. data/spec/strings_spec.rb +41 -0
  371. data/spec/testing_models.rb +54 -0
  372. data/spec/user_role_spec.rb +7 -0
  373. data/spec/user_spec.rb +53 -0
  374. data/tasks/migrations.rake +22 -0
  375. data/tasks/publish.rake +8 -0
  376. data/views/index.erb +29 -0
  377. data/views/specs.erb +25 -0
  378. data/yard_ext/all.rb +9 -0
  379. data/yard_ext/code_identifier_handler.rb +33 -0
  380. data/yard_ext/concern_meta_methods.rb +60 -0
  381. data/yard_ext/config_options.rb +27 -0
  382. data/yard_ext/exported_scope.rb +4 -0
  383. data/yard_ext/immutable_handler.rb +17 -0
  384. data/yard_ext/json_attr_accessor.rb +22 -0
  385. data/yard_ext/locked_fields_handler.rb +21 -0
  386. data/yard_ext/templates/default/layout/html/layout.erb +20 -0
  387. data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
  388. data/yard_ext/templates/default/method_details/setup.rb +3 -0
  389. data/yard_ext/validators.rb +1 -0
  390. data/yard_ext/visible_id_handler.rb +38 -0
  391. metadata +772 -0
@@ -0,0 +1,33 @@
1
+ var Lanes = ( global.Lanes || (global.Lanes = {}) );
2
+
3
+ Lanes.Vendor = ( Lanes.Vendor || {} );
4
+
5
+ Lanes.Vendor.Ampersand = ( Lanes.Ampersand || {} );
6
+ Lanes.Vendor.Ampersand.View = require("ampersand-view");
7
+ Lanes.Vendor.Ampersand.State = require("ampersand-state");
8
+ Lanes.Vendor.Ampersand.CollectionView = require("ampersand-collection-view");
9
+ Lanes.Vendor.Ampersand.SubCollection = require("ampersand-subcollection");
10
+ Lanes.Vendor.Ampersand.RestCollection = require("ampersand-rest-collection");
11
+ Lanes.Vendor.Ampersand.USCollection = require('ampersand-collection-underscore-mixin');
12
+ Lanes.Vendor.Ampersand.Collection = require("ampersand-collection");
13
+ Lanes.Vendor.Ampersand.Model = require("ampersand-model");
14
+ Lanes.Vendor.Ampersand.Router = require("ampersand-router");
15
+ Lanes.Vendor.AmpersandFormView = require("ampersand-form-view");
16
+ Lanes.Vendor.AmpersandInputView = require("ampersand-input-view");
17
+ Lanes.Vendor.KeyMaster = require("keymaster");
18
+ Lanes.Vendor.Moment = require("moment");
19
+ Lanes.Vendor.RSVP = require('rsvp');
20
+ Lanes.Promise = Lanes.Vendor.RSVP.Promise;
21
+ Lanes.Deferred = Lanes.Vendor.RSVP.defer;
22
+
23
+
24
+ var u = require('underscore');
25
+ var spf = require('sprintf-js');
26
+
27
+ u.getPath = require('get-object-path');
28
+ u.bigDecimal = require('big.js');
29
+ u.dom = require('ampersand-dom');
30
+ u.sprintf = spf.sprintf;
31
+ u.vsprintf = spf.vsprintf;
32
+
33
+ global._ = u;
@@ -0,0 +1,22 @@
1
+ function Player() {
2
+ }
3
+ Player.prototype.play = function(song) {
4
+ this.currentlyPlayingSong = song;
5
+ this.isPlaying = true;
6
+ };
7
+
8
+ Player.prototype.pause = function() {
9
+ this.isPlaying = false;
10
+ };
11
+
12
+ Player.prototype.resume = function() {
13
+ if (this.isPlaying) {
14
+ throw new Error("song is already playing");
15
+ }
16
+
17
+ this.isPlaying = true;
18
+ };
19
+
20
+ Player.prototype.makeFavorite = function() {
21
+ this.currentlyPlayingSong.persistFavoriteStatus(true);
22
+ };
@@ -0,0 +1,7 @@
1
+ function Song() {
2
+ }
3
+
4
+ Song.prototype.persistFavoriteStatus = function(value) {
5
+ // something complicated
6
+ throw new Error("not yet implemented");
7
+ };
@@ -0,0 +1,107 @@
1
+ require_relative "../spec_helper"
2
+
3
+ class JavascriptProcessorTest < Lanes::TestCase
4
+
5
+ SCRIPT = <<-EOS
6
+ class NS.Baz
7
+ constructor: ->
8
+ alert("foo")
9
+ alert: (msg)->
10
+ alert(msg);
11
+
12
+ class NS.Bar extends NS.Baz
13
+ squawk:->
14
+ this.alert("Hello World!")
15
+
16
+ class Foo extends Bar
17
+ constructor: ->
18
+ this.called=true
19
+ super
20
+ aMethod: ->
21
+ @squawk("howdy!")
22
+
23
+ EOS
24
+
25
+ CLEANED=<<-EOS
26
+ class NS.Baz
27
+ constructor: ->
28
+ alert("foo")
29
+ alert: (msg)->
30
+ alert(msg);
31
+
32
+ class NS.Bar
33
+ constructor: -> super
34
+ squawk:->
35
+ this.alert("Hello World!")
36
+
37
+ NS.Baz.extend(NS.Bar)
38
+
39
+ class Foo
40
+ constructor: ->
41
+ this.called=true
42
+ super
43
+ aMethod: ->
44
+ @squawk("howdy!")
45
+
46
+ Bar.extend(Foo)
47
+
48
+ EOS
49
+
50
+ JS=<<-EOS
51
+ (function(Lanes, _, window, undefined) {
52
+ var Foo;
53
+
54
+ NS.Baz = (function() {
55
+ function Baz() {
56
+ alert("foo");
57
+ }
58
+
59
+ Baz.prototype.alert = function(msg) {
60
+ return alert(msg);
61
+ };
62
+
63
+ return Baz;
64
+
65
+ })();
66
+
67
+ NS.Bar = (function() {
68
+ function Bar() {
69
+ Bar.__super__.constructor.apply(this, arguments);
70
+ }
71
+
72
+ Bar.prototype.squawk = function() {
73
+ return this.alert("Hello World!");
74
+ };
75
+
76
+ return Bar;
77
+
78
+ })();
79
+
80
+ NS.Baz.extend(NS.Bar);
81
+
82
+ Foo = (function() {
83
+ function Foo() {
84
+ this.called = true;
85
+ Foo.__super__.constructor.apply(this, arguments);
86
+ }
87
+
88
+ Foo.prototype.aMethod = function() {
89
+ return this.squawk("howdy!");
90
+ };
91
+
92
+ return Foo;
93
+
94
+ })();
95
+
96
+ Bar.extend(Foo);
97
+
98
+ })(window.Lanes, window._, window);
99
+ EOS
100
+
101
+
102
+ def test_coffeescript_generation
103
+ template = API::CoffeeScriptWrapper.new{ |t| SCRIPT }
104
+ assert_equal CLEANED, template.cleaned
105
+ assert_equal JS.chomp, template.render
106
+ end
107
+ end
@@ -0,0 +1,52 @@
1
+ require_relative "../spec_helper"
2
+
3
+ class ApiUserTest < Lanes::ApiTestCase
4
+
5
+ def test_query
6
+ get "/users/#{admin.id}.json"
7
+ refute_ok
8
+ login!
9
+ get "/users/#{admin.id}.json"
10
+ assert_ok
11
+ assert_equal admin.id, json_data.id
12
+ end
13
+
14
+ def test_create
15
+ login!
16
+ assert_difference ->{User.count}, 1 do
17
+ post "/users.json", {
18
+ login: "nas", name: "Nathan", email: "test@test.com", password: 'testing1234'
19
+ }
20
+ assert_ok
21
+ end
22
+ end
23
+
24
+ def test_update_by_self
25
+ user = lanes_users(:support)
26
+ login!(user)
27
+ assert User.can_write_attributes?({id: user.id, :foo=>1}, user)
28
+ put "/users/#{user.id}.json", { name: 'Updated Name', password: 'pass1234', email: 'sam@test.com' }
29
+ assert_ok
30
+ user.reload
31
+ assert_equal 'Updated Name', user.name
32
+ assert_equal 'sam@test.com', user.email
33
+ end
34
+
35
+ def test_updating_roles
36
+ login!
37
+ user = lanes_users(:support)
38
+ put "/users/#{user.id}.json", { name: 'Sam', role_names:['administrator'] }
39
+ assert_ok
40
+ user.reload
41
+ assert_equal 'Sam', user.name
42
+ assert_equal ['administrator'], user.role_names
43
+ end
44
+
45
+ def test_delete
46
+ login!
47
+ assert_difference ->{User.count}, -1 do
48
+ delete "/users/#{admin.id}.json"
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,12 @@
1
+ describe "Choices Input Suite", ->
2
+
3
+ it "renders to a view", ->
4
+ roles = new Lanes.Data.Roles([
5
+ {id: 'one', name:'One'}
6
+ {id: 'two', name:'Two'}
7
+ ])
8
+ sf = new Lanes.Component.SelectField({
9
+ multiple: true, data: roles, mappings:{ title: 'name', selected: 'member' }
10
+ })
11
+ sf.render().el
12
+ expect( sf.$('option').length ).toEqual(2)
@@ -0,0 +1,4 @@
1
+ describe "Foo Input Suite", ->
2
+
3
+ it "one eq one", ->
4
+ expect(1).toEqual(1)
File without changes
File without changes
@@ -0,0 +1,128 @@
1
+ # src_files
2
+ #
3
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
4
+ # Default: []
5
+ #
6
+ # EXAMPLE:
7
+ #
8
+ # src_files:
9
+ # - lib/source1.js
10
+ # - lib/source2.js
11
+ # - dist/**/*.js
12
+ #
13
+ src_files:
14
+ - public/javascripts/**/*.{js,coffee}
15
+ - assets/lanes-workspace.js
16
+ # - assets/**/*.{js,coffee}
17
+
18
+
19
+ # stylesheets
20
+ #
21
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
22
+ # Default: []
23
+ #
24
+ # EXAMPLE:
25
+ #
26
+ # stylesheets:
27
+ # - css/style.css
28
+ # - stylesheets/*.css
29
+ #
30
+ stylesheets:
31
+ - stylesheets/**/*.css
32
+
33
+ # helpers
34
+ #
35
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
36
+ # Default: ["helpers/**/*.js"]
37
+ #
38
+ # EXAMPLE:
39
+ #
40
+ # helpers:
41
+ # - helpers/**/*.js
42
+ #
43
+ helpers:
44
+ - 'helpers/**/*.js'
45
+
46
+ # spec_files
47
+ #
48
+ # Return an array of filepaths relative to spec_dir to include.
49
+ # Default: ["**/*[sS]pec.js"]
50
+ #
51
+ # EXAMPLE:
52
+ #
53
+ # spec_files:
54
+ # - **/*[sS]pec.js
55
+ #
56
+ spec_files:
57
+ - "**/*[Ss]pec.{js,coffee}"
58
+
59
+
60
+ # src_dir
61
+ #
62
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
63
+ # Default: project root
64
+ #
65
+ # EXAMPLE:
66
+ #
67
+ # src_dir: public
68
+ #
69
+ src_dir:
70
+
71
+ # spec_dir
72
+ #
73
+ # Spec directory path. Your spec_files must be returned relative to this path.
74
+ # Default: spec/javascripts
75
+ #
76
+ # EXAMPLE:
77
+ #
78
+ # spec_dir: spec/javascripts
79
+ #
80
+ spec_dir:
81
+
82
+ # spec_helper
83
+ #
84
+ # Ruby file that Jasmine server will require before starting.
85
+ # Returned relative to your root path
86
+ # Default spec/javascripts/support/jasmine_helper.rb
87
+ #
88
+ # EXAMPLE:
89
+ #
90
+ # spec_helper: spec/javascripts/support/jasmine_helper.rb
91
+ #
92
+ spec_helper: spec/javascripts/support/jasmine_helper.rb
93
+
94
+ # boot_dir
95
+ #
96
+ # Boot directory path. Your boot_files must be returned relative to this path.
97
+ # Default: Built in boot file
98
+ #
99
+ # EXAMPLE:
100
+ #
101
+ # boot_dir: spec/javascripts/support/boot
102
+ #
103
+ boot_dir:
104
+
105
+ # boot_files
106
+ #
107
+ # Return an array of filepaths relative to boot_dir to include in order to boot Jasmine
108
+ # Default: Built in boot file
109
+ #
110
+ # EXAMPLE
111
+ #
112
+ # boot_files:
113
+ # - '**/*.js'
114
+ #
115
+ boot_files:
116
+
117
+ # rack_options
118
+ #
119
+ # Extra options to be passed to the rack server
120
+ # by default, Port and AccessLog are passed.
121
+ #
122
+ # This is an advanced options, and left empty by default
123
+ #
124
+ # EXAMPLE
125
+ #
126
+ # rack_options:
127
+ # server: 'thin'
128
+
@@ -0,0 +1,15 @@
1
+ #Use this file to set/override Jasmine configuration options
2
+ #You can remove it if you don't need it.
3
+ #This file is loaded *after* jasmine.yml is interpreted.
4
+ #
5
+ #Example: using a different boot file.
6
+ #Jasmine.configure do |config|
7
+ # config.boot_dir = '/absolute/path/to/boot_dir'
8
+ # config.boot_files = lambda { ['/absolute/path/to/boot_dir/file.js'] }
9
+ #end
10
+ #
11
+ #Example: prevent PhantomJS auto install, uses PhantomJS already on your path.
12
+ #Jasmine.configure do |config|
13
+ # config.prevent_phantom_js_auto_install = true
14
+ #end
15
+ #
@@ -0,0 +1,14 @@
1
+ require_relative '../spec_helper'
2
+
3
+ class ApiPathTest < Lanes::TestCase
4
+
5
+ include TestingModels
6
+
7
+ def test_path_generation
8
+ assert_equal 'test-models', TestModel.api_path
9
+ end
10
+
11
+ def testing_path_to_model
12
+ assert_equal TestModel, Lanes::Model.from_api_path('test-models')
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ class AssociationExtensionsTest < Lanes::TestCase
5
+
6
+ include TestingModels
7
+
8
+ def test_adding_event_listener_requires_inverse
9
+ err = assert_raise(ArgumentError) do
10
+ TestModel.has_one(:tmhm,:listen=>{:save=>:on_save})
11
+ end
12
+ assert_match( /does not have an inverse_of specified./, err.message )
13
+ end
14
+
15
+ def test_adds_listener
16
+ Tmhm.expects(:_add_event_listener).with(:save,is_a(Proc))
17
+ TestModel.has_one(:tmhm,:listen=>{:save=>:on_save}, :inverse_of=>:tm)
18
+ end
19
+
20
+ def test_exports_associations
21
+ TestModel.expects(:export_associations).with(:tmhm,{})
22
+ TestModel.has_one(:tmhm, export: true)
23
+ end
24
+
25
+ def test_does_not_allow_other_garbage
26
+ assert_raise(ArgumentError) do
27
+ TestModel.has_one(:tmhm,:blarg=>true)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,57 @@
1
+ require_relative '../spec_helper'
2
+
3
+ class AttrAccessorWithDefaultTest < Lanes::TestCase
4
+
5
+ Shared = Struct.new(:value)
6
+
7
+ class AttrTestClass
8
+ include Lanes::Concerns::AttrAccessorWithDefault
9
+ attr_accessor_with_default :as_proc, Proc.new{ 42 }
10
+ attr_accessor_with_default :non_copying, ->{ "default string" }
11
+ attr_accessor_with_default :shared, Shared.new('default')
12
+ attr_accessor_with_default :non_shared, ->{ Shared.new('default') }
13
+ end
14
+
15
+ class Inherited<AttrTestClass
16
+ non_shared "Foo"
17
+ end
18
+
19
+ def test_access
20
+ a = AttrTestClass.new
21
+ b = AttrTestClass.new
22
+
23
+ assert_equal 42, b.as_proc
24
+
25
+ assert_equal "default string", b.non_copying
26
+
27
+ b.non_copying = "A new string"
28
+
29
+ assert_equal "default string", a.non_copying
30
+ a.non_copying = "third value"
31
+ assert_equal "A new string", b.non_copying
32
+
33
+
34
+ assert_equal "default", a.shared.value
35
+ assert_equal "default", b.shared.value
36
+
37
+ a.shared.value = "a new value"
38
+
39
+ assert_equal "a new value", a.shared.value
40
+ assert_equal "a new value", b.shared.value
41
+
42
+ a.non_shared.value = "a new value"
43
+ assert_equal "a new value", a.non_shared.value
44
+ assert_equal "default", b.non_shared.value
45
+ end
46
+
47
+ def test_inheritance
48
+ a = Inherited.new
49
+ b = AttrTestClass.new
50
+ assert_kind_of String, a.non_shared
51
+ assert_kind_of Shared, b.non_shared
52
+ assert_equal "Foo", a.non_shared
53
+ assert_equal "default", b.non_shared.value
54
+ end
55
+
56
+
57
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ class CodeIdentifierTest < Lanes::TestCase
5
+
6
+ class CodeIdentifierTestModel
7
+ class_attribute :blocks
8
+ attr_accessor :code
9
+
10
+ include Lanes::Concerns::CodeIdentifier
11
+
12
+ def self.before_validation( opts={}, &block )
13
+ self.blocks||=[]
14
+ self.blocks.push( block )
15
+ end
16
+
17
+ def self.validates( *opts )
18
+ end
19
+
20
+ def run_validations
21
+ self.class.blocks.each{ |b| self.instance_eval(&b) }
22
+ end
23
+
24
+ def [](name)
25
+ :name == name ? 'A Long String of Nonsense' : ''
26
+ end
27
+
28
+ has_code_identifier :from => :name
29
+ end
30
+
31
+ def test_that_it_uppercases
32
+ ci = CodeIdentifierTestModel.new
33
+ ci.code='test'
34
+ ci.run_validations
35
+ assert_equal 'TEST', ci.code
36
+ end
37
+
38
+ def test_that_it_generates
39
+ ci = CodeIdentifierTestModel.new
40
+ ci.run_validations
41
+ assert ci.code.present?, "Code wasn't auto-generated"
42
+ assert_equal 'ALOSTOFNON', ci.code
43
+ end
44
+
45
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ class ExportAssociationsTest < Lanes::TestCase
5
+
6
+
7
+ end
@@ -0,0 +1,43 @@
1
+ require_relative '../spec_helper'
2
+
3
+ class ExportMethodsTest < Lanes::TestCase
4
+ include TestingModels
5
+
6
+ def around(&block)
7
+ with_testing_models(&block)
8
+ end
9
+
10
+ def setup
11
+ # @model = TestModel.new
12
+ # @model.bt = TestModelBelongsTo.new
13
+ end
14
+
15
+ def teardown
16
+ # TestModel.send( :remove_method, :bt_description ) if User.new.respond_to?( :bt_description )
17
+ end
18
+
19
+
20
+ def test_simple_delegation
21
+
22
+
23
+ refute TestModel.new.respond_to? :bt_description
24
+
25
+ TestModel.send :delegate_and_export, "bt_description"
26
+
27
+ md = TestModel.new
28
+ assert md.respond_to? :bt_description, "Didn't add transaction_description method"
29
+ assert_nil md.bt_description
30
+ md.build_bt( description: "test123" )
31
+ assert_equal "test123", md.bt_description
32
+
33
+ assert TestModel.has_exported_method?( :bt_description, nil ), "Didn't export method"
34
+ end
35
+
36
+ def test_dependancy_calculation
37
+ TestModel.send :delegate_and_export, "bt_description"
38
+ TestModel.send :delegate_and_export, "bt_notes", optional: false
39
+ assert_includes TestModel.exported_method_dependancies([]), :bt
40
+ assert_includes TestModel.exported_method_dependancies(['bt_description']), :bt
41
+ end
42
+
43
+ end
@@ -0,0 +1,15 @@
1
+ require_relative '../spec_helper'
2
+
3
+ class ExportScopeTest < Lanes::TestCase
4
+
5
+ def teardown
6
+ User.send( :remove_method, :big_query ) if User.respond_to?( :account_name )
7
+ end
8
+
9
+ def test_scope_method_creation
10
+ refute User.respond_to?(:big_query)
11
+ User.send( :export_scope, :big_query, ->{} )
12
+ assert User.respond_to?(:big_query)
13
+ end
14
+
15
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ class ExportedLimitsTest < Lanes::TestCase
5
+
6
+ class LimitsTestingModel
7
+
8
+ include Lanes::Concerns::ExportScope
9
+ include Lanes::Concerns::ExportMethods
10
+
11
+ def self.scope(name, query)# act like ActiveRecord model
12
+ end
13
+
14
+ def secret_method( name, query )
15
+ end
16
+
17
+ def test_method( name, query )
18
+ end
19
+
20
+ export_methods :test_method, limit: lambda{ | user, type, name |
21
+ user == 'anon'
22
+ }
23
+
24
+ export_scope :admin_data, lambda{ | param |
25
+ param
26
+ }, limit: :only_admins
27
+
28
+ export_methods :secret_method, limit: :only_admins
29
+
30
+
31
+ def self.only_admins( user, type, name )
32
+ return user == 'admin'
33
+ end
34
+
35
+ end
36
+
37
+ def test_limits
38
+ assert LimitsTestingModel.has_exported_method?( 'test_method', 'anon' ), "anyone can retrieve no_limit data"
39
+
40
+ assert LimitsTestingModel.has_exported_scope?( 'admin_data', 'admin' ), "Admins can retrieve admin data"
41
+ refute LimitsTestingModel.has_exported_scope?( 'admin_data', 'non-admin' ), "Non-Admin cannot retrieve admin data"
42
+
43
+ assert LimitsTestingModel.has_exported_method?( 'secret_method', 'admin' ), "Public can retrieve public data"
44
+ refute LimitsTestingModel.has_exported_method?( 'secret_method', 'unk' ), "User must be admin to retrieve public data"
45
+ end
46
+
47
+ end