luca 0.9.7 → 0.9.8

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 (377) hide show
  1. data/CHANGELOG +38 -0
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +27 -0
  4. data/README.md +45 -42
  5. data/ROADMAP +6 -29
  6. data/{assets → app/assets}/images/glyphicons-halflings-white.png +0 -0
  7. data/{assets → app/assets}/images/glyphicons-halflings.png +0 -0
  8. data/app/assets/javascripts/luca/basic.coffee +8 -0
  9. data/{src → app/assets/javascripts/luca}/components/application.coffee +153 -40
  10. data/{src → app/assets/javascripts/luca}/components/base_toolbar.coffee +2 -2
  11. data/{src → app/assets/javascripts/luca}/components/collection_loader_view.coffee +0 -0
  12. data/{src → app/assets/javascripts/luca}/components/collection_view.coffee +45 -104
  13. data/app/assets/javascripts/luca/components/controller.coffee +99 -0
  14. data/{src/core/field.coffee → app/assets/javascripts/luca/components/fields/base.coffee} +1 -1
  15. data/{src → app/assets/javascripts/luca}/components/fields/button_field.coffee +1 -2
  16. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_array.coffee +0 -0
  17. data/{src → app/assets/javascripts/luca}/components/fields/checkbox_field.coffee +0 -0
  18. data/{src → app/assets/javascripts/luca}/components/fields/file_upload_field.coffee +0 -0
  19. data/{src → app/assets/javascripts/luca}/components/fields/hidden_field.coffee +0 -0
  20. data/{src → app/assets/javascripts/luca}/components/fields/label_field.coffee +0 -0
  21. data/{src → app/assets/javascripts/luca}/components/fields/select_field.coffee +8 -4
  22. data/{src → app/assets/javascripts/luca}/components/fields/text_area_field.coffee +3 -2
  23. data/{src → app/assets/javascripts/luca}/components/fields/text_field.coffee +2 -3
  24. data/{src → app/assets/javascripts/luca}/components/fields/type_ahead_field.coffee +0 -0
  25. data/{src → app/assets/javascripts/luca}/components/form_button_toolbar.coffee +0 -0
  26. data/{src → app/assets/javascripts/luca}/components/form_view.coffee +111 -44
  27. data/{src → app/assets/javascripts/luca}/components/grid_view.coffee +6 -6
  28. data/{src → app/assets/javascripts/luca}/components/index.coffee +0 -0
  29. data/app/assets/javascripts/luca/components/load_mask.coffee +8 -0
  30. data/app/assets/javascripts/luca/components/multi_collection_view.coffee +92 -0
  31. data/{src → app/assets/javascripts/luca}/components/nav_bar.coffee +5 -1
  32. data/app/assets/javascripts/luca/components/page_controller.coffee +7 -0
  33. data/{src → app/assets/javascripts/luca}/components/pagination_control.coffee +13 -13
  34. data/{src → app/assets/javascripts/luca}/components/record_manager.coffee +0 -0
  35. data/{src → app/assets/javascripts/luca}/components/router.coffee +6 -1
  36. data/app/assets/javascripts/luca/components/table_view.coffee +89 -0
  37. data/{src → app/assets/javascripts/luca}/components/template.coffee +0 -0
  38. data/{src → app/assets/javascripts/luca}/components/toolbar_dialog.coffee +0 -0
  39. data/{src → app/assets/javascripts/luca}/concerns/application_event_bindings.coffee +1 -1
  40. data/app/assets/javascripts/luca/concerns/collection_event_bindings.coffee +44 -0
  41. data/{src → app/assets/javascripts/luca}/concerns/deferrable.coffee +1 -2
  42. data/{src/plugins → app/assets/javascripts/luca/concerns}/development_tool_helpers.coffee +1 -1
  43. data/{src → app/assets/javascripts/luca}/concerns/dom_helpers.coffee +10 -7
  44. data/{src → app/assets/javascripts/luca}/concerns/enhanced_properties.coffee +0 -0
  45. data/app/assets/javascripts/luca/concerns/filterable.coffee +104 -0
  46. data/{src → app/assets/javascripts/luca}/concerns/grid_layout.coffee +0 -0
  47. data/{src → app/assets/javascripts/luca}/concerns/loadmaskable.coffee +17 -11
  48. data/{src → app/assets/javascripts/luca}/concerns/local_storage.coffee +0 -0
  49. data/{src → app/assets/javascripts/luca}/concerns/modal_view.coffee +0 -0
  50. data/{src → app/assets/javascripts/luca}/concerns/model_presenter.coffee +0 -0
  51. data/{src → app/assets/javascripts/luca}/concerns/paginatable.coffee +6 -14
  52. data/app/assets/javascripts/luca/concerns/query_collection_bindings.coffee +46 -0
  53. data/app/assets/javascripts/luca/concerns/sortable.coffee +69 -0
  54. data/app/assets/javascripts/luca/concerns/state_model.coffee +44 -0
  55. data/{src → app/assets/javascripts/luca}/concerns/templating.coffee +4 -1
  56. data/app/assets/javascripts/luca/config.coffee +49 -0
  57. data/{src → app/assets/javascripts/luca}/containers/card_view.coffee +30 -13
  58. data/{src/core → app/assets/javascripts/luca/containers}/container.coffee +57 -18
  59. data/app/assets/javascripts/luca/containers/index.coffee +2 -0
  60. data/{src → app/assets/javascripts/luca}/containers/modal_view.coffee +1 -1
  61. data/{src → app/assets/javascripts/luca}/containers/panel_toolbar.coffee +1 -1
  62. data/{src → app/assets/javascripts/luca}/containers/tab_view.coffee +1 -1
  63. data/{src → app/assets/javascripts/luca}/containers/viewport.coffee +4 -4
  64. data/{src → app/assets/javascripts/luca}/core/collection.coffee +58 -49
  65. data/{src/plugins → app/assets/javascripts/luca/core}/events.coffee +34 -2
  66. data/app/assets/javascripts/luca/core/index.coffee +12 -0
  67. data/{src → app/assets/javascripts/luca}/core/model.coffee +1 -1
  68. data/{src → app/assets/javascripts/luca}/core/observer.coffee +0 -0
  69. data/app/assets/javascripts/luca/core/panel.coffee +112 -0
  70. data/app/assets/javascripts/luca/core/registry/component_definition.coffee +318 -0
  71. data/{src → app/assets/javascripts/luca/core/registry}/concerns.coffee +0 -0
  72. data/app/assets/javascripts/luca/core/registry/index.coffee +4 -0
  73. data/app/assets/javascripts/luca/core/registry/meta_data.coffee +97 -0
  74. data/{src/core → app/assets/javascripts/luca/core/registry}/registry.coffee +10 -6
  75. data/app/assets/javascripts/luca/core/templates.coffee +47 -0
  76. data/{src → app/assets/javascripts/luca}/core/view.coffee +69 -11
  77. data/app/assets/javascripts/luca/dependencies.coffee +7 -0
  78. data/{src/tools → app/assets/javascripts/luca/development}/code_mirror_field.coffee +2 -1
  79. data/{src/tools → app/assets/javascripts/luca/development}/console.coffee +6 -5
  80. data/app/assets/javascripts/luca/development/index.coffee +2 -0
  81. data/{src → app/assets/javascripts/luca}/framework.coffee +74 -90
  82. data/app/assets/javascripts/luca/index.coffee +8 -0
  83. data/{src → app/assets/javascripts/luca}/managers/collection_manager.coffee +16 -7
  84. data/app/assets/javascripts/luca/managers/index.coffee +2 -0
  85. data/app/assets/javascripts/luca/managers/socket_manager.coffee +66 -0
  86. data/{src → app/assets/javascripts/luca}/templates/components/bootstrap_form_controls.jst.ejs +0 -0
  87. data/{src → app/assets/javascripts/luca}/templates/components/collection_loader_view.jst.ejs +0 -0
  88. data/{src → app/assets/javascripts/luca}/templates/components/form_alert.jst.ejs +0 -0
  89. data/{src → app/assets/javascripts/luca}/templates/components/grid_view.jst.ejs +0 -0
  90. data/{src → app/assets/javascripts/luca}/templates/components/grid_view_empty_text.jst.ejs +0 -0
  91. data/{src → app/assets/javascripts/luca}/templates/components/load_mask.jst.ejs +0 -0
  92. data/{src → app/assets/javascripts/luca}/templates/components/nav_bar.jst.ejs +0 -0
  93. data/{src → app/assets/javascripts/luca}/templates/components/pagination.jst.ejs +0 -0
  94. data/{src/templates → app/assets/javascripts/luca/templates/components}/table_view.jst.ejs +0 -0
  95. data/{src → app/assets/javascripts/luca}/templates/containers/basic.jst.ejs +0 -0
  96. data/{src → app/assets/javascripts/luca}/templates/containers/tab_selector_container.jst.ejs +0 -0
  97. data/{src → app/assets/javascripts/luca}/templates/containers/tab_view.jst.ejs +0 -0
  98. data/{src → app/assets/javascripts/luca}/templates/containers/toolbar_wrapper.jst.ejs +0 -0
  99. data/{src → app/assets/javascripts/luca}/templates/fields/button_field.jst.ejs +0 -0
  100. data/{src → app/assets/javascripts/luca}/templates/fields/button_field_link.jst.ejs +0 -0
  101. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array.jst.ejs +0 -0
  102. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_array_item.jst.ejs +0 -0
  103. data/{src → app/assets/javascripts/luca}/templates/fields/checkbox_field.jst.ejs +0 -0
  104. data/{src → app/assets/javascripts/luca}/templates/fields/file_upload_field.jst.ejs +0 -0
  105. data/{src → app/assets/javascripts/luca}/templates/fields/hidden_field.jst.ejs +0 -0
  106. data/{src → app/assets/javascripts/luca}/templates/fields/select_field.jst.ejs +0 -0
  107. data/{src → app/assets/javascripts/luca}/templates/fields/text_area_field.jst.ejs +1 -1
  108. data/{src → app/assets/javascripts/luca}/templates/fields/text_field.jst.ejs +1 -1
  109. data/app/assets/javascripts/luca/util/deprecations.coffee +18 -0
  110. data/app/assets/javascripts/luca/util/index.coffee +3 -0
  111. data/app/assets/javascripts/luca/util/logging.coffee +15 -0
  112. data/{src/util.coffee → app/assets/javascripts/luca/util/luca.coffee} +20 -4
  113. data/{src/core → app/assets/javascripts/luca/util}/script_loader.coffee +0 -0
  114. data/app/assets/javascripts/luca-ui.js +1 -0
  115. data/{src/stylesheets → app/assets/stylesheets/luca}/components/checkbox_array.scss +0 -0
  116. data/app/assets/stylesheets/luca/components/form_view.scss +7 -0
  117. data/{src/stylesheets → app/assets/stylesheets/luca}/components/grid_view.scss +0 -0
  118. data/{src/stylesheets → app/assets/stylesheets/luca}/components/load_mask.scss +0 -0
  119. data/{src/stylesheets → app/assets/stylesheets/luca}/components/viewport.scss +0 -0
  120. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/container.scss +0 -0
  121. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/modal_view.scss +0 -0
  122. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/panels.scss +0 -0
  123. data/{src/stylesheets → app/assets/stylesheets/luca}/containers/tab_view.scss +0 -0
  124. data/{src/stylesheets/tools → app/assets/stylesheets/luca/development}/console.scss +0 -0
  125. data/app/assets/stylesheets/luca/development/index.css +3 -0
  126. data/app/assets/stylesheets/luca/index.css +4 -0
  127. data/{src/stylesheets → app/assets/stylesheets/luca}/normalize.scss +0 -0
  128. data/app.rb +2 -4
  129. data/lib/generators/luca/application/application_generator.rb +12 -8
  130. data/lib/generators/luca/application/templates/controller.rb +0 -2
  131. data/lib/generators/luca/application/templates/index.html.erb +12 -0
  132. data/lib/generators/luca/application/templates/index.html.haml +1 -0
  133. data/lib/generators/luca/application/templates/javascripts/application.coffee +18 -0
  134. data/lib/generators/luca/application/templates/javascripts/collection_manager.coffee +2 -0
  135. data/lib/generators/luca/application/templates/javascripts/config.coffee +3 -0
  136. data/lib/generators/luca/application/templates/javascripts/{dependencies.js.coffee → dependencies.coffee} +1 -0
  137. data/lib/generators/luca/application/templates/javascripts/home.jst.ejs +2 -0
  138. data/lib/generators/luca/application/templates/javascripts/index.coffee +15 -0
  139. data/lib/generators/luca/application/templates/javascripts/router.coffee +4 -0
  140. data/lib/luca/component_documentation.rb +72 -0
  141. data/lib/luca/rails/engine.rb +4 -0
  142. data/lib/luca/rails/version.rb +1 -1
  143. data/lib/luca.rb +1 -1
  144. data/lib/railties/luca/tasks.rake +31 -0
  145. data/luca.gemspec +1 -0
  146. data/spec/components/controller_spec.coffee +62 -0
  147. data/spec/components/form_view_spec.coffee +4 -0
  148. data/spec/concerns/collection_event_bindings_spec.coffee +15 -0
  149. data/spec/concerns/dom_helpers_spec.coffee +2 -2
  150. data/spec/concerns/filterable_spec.coffee +4 -4
  151. data/spec/concerns/state_model_spec.coffee +50 -0
  152. data/spec/core/collection_spec.coffee +25 -0
  153. data/spec/{concerns_spec.coffee → core/concerns_spec.coffee} +0 -0
  154. data/spec/core/container_spec.coffee +57 -5
  155. data/spec/core/define_spec.coffee +116 -0
  156. data/spec/core/events_spec.coffee +26 -0
  157. data/spec/core/field_spec.coffee +4 -0
  158. data/spec/{framework_spec.coffee → core/framework_spec.coffee} +31 -2
  159. data/spec/{util_spec.coffee → core/util_spec.coffee} +2 -2
  160. data/spec/core/view_spec.coffee +65 -1
  161. data/spec/dependencies/index.coffee +3 -0
  162. data/{assets/javascripts → spec}/dependencies/jasmine-html.js +0 -0
  163. data/{assets/javascripts → spec}/dependencies/jasmine.js +0 -0
  164. data/{assets/javascripts → spec}/dependencies/sinon.js +0 -0
  165. data/spec/luca-spec.coffee +9 -0
  166. data/vendor/assets/javascripts/backbone-ext.js +21 -0
  167. data/vendor/assets/javascripts/backbone-min.js +38 -0
  168. data/vendor/assets/javascripts/backbone-query.min.js +1 -0
  169. data/vendor/assets/javascripts/bootstrap.min.js +7 -0
  170. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-coffeescript.js +0 -0
  171. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-css.js +0 -0
  172. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-html.js +0 -0
  173. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-javascript.js +0 -0
  174. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-less.js +0 -0
  175. data/vendor/assets/javascripts/codemirror-ui.js +503 -0
  176. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror-vim.js +0 -0
  177. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/codemirror.js +0 -0
  178. data/vendor/assets/javascripts/inflections.js +656 -0
  179. data/vendor/assets/javascripts/jasmine-html.js +190 -0
  180. data/vendor/assets/javascripts/jasmine.js +2476 -0
  181. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/jquery.js +0 -0
  182. data/vendor/assets/javascripts/luca-spec.js +11 -0
  183. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modal.js +0 -0
  184. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/modernizr.min.js +0 -0
  185. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/prettify.js +0 -0
  186. data/vendor/assets/javascripts/sinon.js +3469 -0
  187. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/spin-min.js +0 -0
  188. data/{assets/javascripts/dependencies → vendor/assets/javascripts}/underscore-min.js +0 -0
  189. data/vendor/assets/javascripts/underscore-string.min.js +1 -0
  190. data/vendor/assets/stylesheets/bootstrap-responsive.min.css +9 -0
  191. data/vendor/assets/stylesheets/bootstrap.min.css +9 -0
  192. data/{assets → vendor/assets}/stylesheets/codemirror-blackboard.css +0 -0
  193. data/{assets → vendor/assets}/stylesheets/codemirror-monokai.css +0 -0
  194. data/{assets → vendor/assets}/stylesheets/codemirror.css +0 -0
  195. data/{assets → vendor/assets}/stylesheets/jasmine.css +0 -0
  196. data/vendor/assets/stylesheets/luca-ui.css +0 -601
  197. data/views/jasmine.erb +2 -2
  198. metadata +190 -299
  199. data/assets/javascripts/dependencies/backbone-min.js +0 -37
  200. data/assets/javascripts/dependencies/backbone-query.min.js +0 -1
  201. data/assets/javascripts/dependencies/bootstrap.min.js +0 -7
  202. data/assets/javascripts/dependencies/coffee-script.js +0 -12189
  203. data/assets/javascripts/dependencies/underscore-string.min.js +0 -14
  204. data/assets/javascripts/dependencies.coffee +0 -5
  205. data/assets/javascripts/luca/index.coffee +0 -1
  206. data/assets/javascripts/luca-templates.js +0 -1
  207. data/assets/javascripts/luca-ui-base.coffee +0 -1
  208. data/assets/javascripts/luca-ui-bootstrap.js +0 -1
  209. data/assets/javascripts/luca-ui-development-tools.coffee +0 -9
  210. data/assets/javascripts/luca-ui-full.js +0 -3
  211. data/assets/javascripts/luca-ui-spec.coffee +0 -2
  212. data/assets/javascripts/luca-ui.js +0 -3
  213. data/assets/javascripts/sandbox/application.coffee +0 -57
  214. data/assets/javascripts/sandbox/config.coffee +0 -7
  215. data/assets/javascripts/sandbox/router.coffee +0 -24
  216. data/assets/javascripts/sandbox/templates/builder/component_list.luca +0 -1
  217. data/assets/javascripts/sandbox/templates/builder.luca +0 -2
  218. data/assets/javascripts/sandbox/templates/main.luca +0 -53
  219. data/assets/javascripts/sandbox/templates/sandbox/docs_index.luca +0 -1
  220. data/assets/javascripts/sandbox/templates/sandbox/navigation.luca +0 -8
  221. data/assets/javascripts/sandbox/templates/sandbox/readme.luca +0 -30
  222. data/assets/javascripts/sandbox/templates/sandbox.luca +0 -1
  223. data/assets/javascripts/sandbox/views/builder/builder_canvas.coffee +0 -3
  224. data/assets/javascripts/sandbox/views/builder/builder_editor.coffee +0 -6
  225. data/assets/javascripts/sandbox/views/builder/component_list.coffee +0 -38
  226. data/assets/javascripts/sandbox/views/builder/project_browser.coffee +0 -14
  227. data/assets/javascripts/sandbox/views/builder.coffee +0 -133
  228. data/assets/javascripts/sandbox/views/docs_controller.coffee +0 -7
  229. data/assets/javascripts/sandbox/views/inspector/instance_filter.coffee +0 -18
  230. data/assets/javascripts/sandbox/views/inspector/instance_list.coffee +0 -0
  231. data/assets/javascripts/sandbox/views/inspector.coffee +0 -11
  232. data/assets/javascripts/sandbox/views/top_navigation.coffee +0 -4
  233. data/assets/javascripts/sandbox.coffee +0 -7
  234. data/assets/javascripts/spec-dependencies.coffee +0 -4
  235. data/assets/stylesheets/bootstrap-responsive.min.css +0 -2
  236. data/assets/stylesheets/bootstrap.min.css +0 -727
  237. data/assets/stylesheets/luca-ui-bootstrap.css +0 -4
  238. data/assets/stylesheets/luca-ui-development-tools.css +0 -5
  239. data/assets/stylesheets/luca-ui-full.css +0 -3
  240. data/assets/stylesheets/luca-ui-spec.css +0 -3
  241. data/assets/stylesheets/luca-ui.css +0 -3
  242. data/assets/stylesheets/prettify.css +0 -40
  243. data/assets/stylesheets/sandbox/builder.scss +0 -79
  244. data/assets/stylesheets/sandbox/sandbox.scss +0 -18
  245. data/assets/stylesheets/sandbox.css +0 -3
  246. data/assets/stylesheets/themes/amelia-bootstrap.css +0 -826
  247. data/assets/stylesheets/themes/slate-bootstrap.css +0 -797
  248. data/assets/stylesheets/themes/superhero-bootstrap.css +0 -830
  249. data/lib/generators/luca/application/templates/javascripts/application.js +0 -28
  250. data/lib/generators/luca/application/templates/javascripts/application.js.coffee +0 -20
  251. data/lib/generators/luca/application/templates/javascripts/config.js +0 -15
  252. data/lib/generators/luca/application/templates/javascripts/config.js.coffee +0 -9
  253. data/lib/generators/luca/application/templates/javascripts/dependencies.js +0 -5
  254. data/lib/generators/luca/application/templates/javascripts/index.js +0 -9
  255. data/lib/generators/luca/application/templates/javascripts/index.js.coffee +0 -9
  256. data/lib/generators/luca/application/templates/javascripts/main.js +0 -8
  257. data/lib/generators/luca/application/templates/javascripts/main.js.coffee +0 -3
  258. data/lib/generators/luca/application/templates/javascripts/main.jst.ejs +0 -1
  259. data/lib/generators/luca/application/templates/javascripts/router.js +0 -12
  260. data/lib/generators/luca/application/templates/javascripts/router.js.coffee +0 -7
  261. data/spec/containers/column_view_spec.coffee +0 -0
  262. data/spec/containers/split_view_spec.coffee +0 -0
  263. data/spec/define_spec.coffee +0 -13
  264. data/src/components/controller.coffee +0 -65
  265. data/src/components/load_mask.coffee +0 -3
  266. data/src/components/multi_collection_view.coffee +0 -121
  267. data/src/components/page_controller.coffee +0 -2
  268. data/src/components/table_view.coffee +0 -62
  269. data/src/concerns/collection_event_bindings.coffee +0 -26
  270. data/src/concerns/filterable.coffee +0 -82
  271. data/src/concerns/state_model.coffee +0 -16
  272. data/src/containers/column_view.coffee +0 -42
  273. data/src/containers/page_view.coffee +0 -2
  274. data/src/containers/panel_view.coffee +0 -23
  275. data/src/containers/split_view.coffee +0 -8
  276. data/src/core/core.coffee +0 -0
  277. data/src/core/meta_data.coffee +0 -37
  278. data/src/core/panel.coffee +0 -118
  279. data/src/define.coffee +0 -170
  280. data/src/index.coffee +0 -25
  281. data/src/managers/socket_manager.coffee +0 -54
  282. data/src/samples/definition.coffee +0 -49
  283. data/src/stylesheets/base.scss +0 -0
  284. data/src/stylesheets/components/form_view.scss +0 -59
  285. data/src/stylesheets/components/toolbar.scss +0 -0
  286. data/src/stylesheets/tools/class_browser.scss +0 -32
  287. data/src/stylesheets/tools/code_editor.scss +0 -24
  288. data/src/stylesheets/tools/component_tester.scss +0 -26
  289. data/src/tools/application_inspector.coffee +0 -2
  290. data/src/tools/code_editor.coffee +0 -258
  291. data/src/tools/coffee_script_editor.coffee +0 -82
  292. data/src/tools/collection_inspector.coffee +0 -4
  293. data/src/tools/collections/components.coffee +0 -59
  294. data/src/tools/collections/instances.coffee +0 -15
  295. data/src/tools/component_tester.coffee +0 -462
  296. data/src/tools/models/components.coffee +0 -25
  297. data/src/tools/models/instance.coffee +0 -2
  298. data/src/tools/templates/component_tester/help.luca +0 -14
  299. data/vendor/assets/javascripts/luca-ui-base.js +0 -5304
  300. data/vendor/assets/javascripts/luca-ui-bootstrap.js +0 -9
  301. data/vendor/assets/javascripts/luca-ui-development-tools.js +0 -18561
  302. data/vendor/assets/javascripts/luca-ui-development-tools.min.js +0 -15
  303. data/vendor/assets/javascripts/luca-ui-full.js +0 -6319
  304. data/vendor/assets/javascripts/luca-ui-full.min.js +0 -9
  305. data/vendor/assets/javascripts/luca-ui-spec.js +0 -6815
  306. data/vendor/assets/javascripts/luca-ui-templates.js +0 -92
  307. data/vendor/assets/javascripts/luca-ui.js +0 -6234
  308. data/vendor/assets/javascripts/luca-ui.min.js +0 -5
  309. data/vendor/assets/luca-ui/base.css +0 -85
  310. data/vendor/assets/luca-ui/components/application.js +0 -91
  311. data/vendor/assets/luca-ui/components/base_toolbar.js +0 -23
  312. data/vendor/assets/luca-ui/components/controller.js +0 -38
  313. data/vendor/assets/luca-ui/components/fields/button_field.js +0 -45
  314. data/vendor/assets/luca-ui/components/fields/checkbox_field.js +0 -43
  315. data/vendor/assets/luca-ui/components/fields/file_upload_field.js +0 -20
  316. data/vendor/assets/luca-ui/components/fields/hidden_field.js +0 -20
  317. data/vendor/assets/luca-ui/components/fields/select_field.js +0 -97
  318. data/vendor/assets/luca-ui/components/fields/text_area_field.js +0 -48
  319. data/vendor/assets/luca-ui/components/fields/text_field.js +0 -46
  320. data/vendor/assets/luca-ui/components/fields/type_ahead_field.js +0 -13
  321. data/vendor/assets/luca-ui/components/form_button_toolbar.js +0 -32
  322. data/vendor/assets/luca-ui/components/form_view.css +0 -32
  323. data/vendor/assets/luca-ui/components/form_view.js +0 -207
  324. data/vendor/assets/luca-ui/components/grid_view.css +0 -76
  325. data/vendor/assets/luca-ui/components/grid_view.js +0 -202
  326. data/vendor/assets/luca-ui/components/record_manager.js +0 -207
  327. data/vendor/assets/luca-ui/components/router.js +0 -36
  328. data/vendor/assets/luca-ui/components/template.js +0 -26
  329. data/vendor/assets/luca-ui/components/toolbar.css +0 -11
  330. data/vendor/assets/luca-ui/containers/card_view.js +0 -98
  331. data/vendor/assets/luca-ui/containers/column_view.js +0 -52
  332. data/vendor/assets/luca-ui/containers/container.css +0 -3
  333. data/vendor/assets/luca-ui/containers/modal_view.css +0 -0
  334. data/vendor/assets/luca-ui/containers/modal_view.js +0 -87
  335. data/vendor/assets/luca-ui/containers/panel_view.js +0 -34
  336. data/vendor/assets/luca-ui/containers/split_view.js +0 -13
  337. data/vendor/assets/luca-ui/containers/tab_view.css +0 -16
  338. data/vendor/assets/luca-ui/containers/tab_view.js +0 -80
  339. data/vendor/assets/luca-ui/containers/viewport.js +0 -18
  340. data/vendor/assets/luca-ui/core/collection.js +0 -221
  341. data/vendor/assets/luca-ui/core/container.js +0 -205
  342. data/vendor/assets/luca-ui/core/field.js +0 -59
  343. data/vendor/assets/luca-ui/core/observer.js +0 -42
  344. data/vendor/assets/luca-ui/core/view.js +0 -127
  345. data/vendor/assets/luca-ui/framework.js +0 -110
  346. data/vendor/assets/luca-ui/index.js +0 -5
  347. data/vendor/assets/luca-ui/managers/collection_manager.js +0 -98
  348. data/vendor/assets/luca-ui/managers/socket_manager.js +0 -52
  349. data/vendor/assets/luca-ui/modules/deferrable.js +0 -21
  350. data/vendor/assets/luca-ui/modules/local_storage.js +0 -81
  351. data/vendor/assets/luca-ui/normalize.css +0 -359
  352. data/vendor/assets/luca-ui/stylesheets/base.css +0 -85
  353. data/vendor/assets/luca-ui/stylesheets/components/form_view.css +0 -32
  354. data/vendor/assets/luca-ui/stylesheets/components/grid_view.css +0 -76
  355. data/vendor/assets/luca-ui/stylesheets/components/toolbar.css +0 -11
  356. data/vendor/assets/luca-ui/stylesheets/containers/container.css +0 -3
  357. data/vendor/assets/luca-ui/stylesheets/containers/modal_view.css +0 -0
  358. data/vendor/assets/luca-ui/stylesheets/containers/tab_view.css +0 -16
  359. data/vendor/assets/luca-ui/stylesheets/normalize.css +0 -359
  360. data/vendor/assets/luca-ui/templates/components/bootstrap_form_controls.js +0 -4
  361. data/vendor/assets/luca-ui/templates/components/form_view.js +0 -4
  362. data/vendor/assets/luca-ui/templates/components/grid_view.js +0 -4
  363. data/vendor/assets/luca-ui/templates/components/grid_view_empty_text.js +0 -4
  364. data/vendor/assets/luca-ui/templates/containers/basic.js +0 -4
  365. data/vendor/assets/luca-ui/templates/containers/tab_selector_container.js +0 -4
  366. data/vendor/assets/luca-ui/templates/containers/tab_view.js +0 -4
  367. data/vendor/assets/luca-ui/templates/containers/toolbar_wrapper.js +0 -4
  368. data/vendor/assets/luca-ui/templates/fields/button_field.js +0 -4
  369. data/vendor/assets/luca-ui/templates/fields/button_field_link.js +0 -4
  370. data/vendor/assets/luca-ui/templates/fields/checkbox_field.js +0 -4
  371. data/vendor/assets/luca-ui/templates/fields/file_upload_field.js +0 -4
  372. data/vendor/assets/luca-ui/templates/fields/hidden_field.js +0 -4
  373. data/vendor/assets/luca-ui/templates/fields/select_field.js +0 -4
  374. data/vendor/assets/luca-ui/templates/fields/text_area_field.js +0 -4
  375. data/vendor/assets/luca-ui/templates/fields/text_field.js +0 -4
  376. data/vendor/assets/luca-ui/templates/sample/contents.js +0 -4
  377. data/vendor/assets/luca-ui/templates/sample/welcome.js +0 -4
@@ -10,16 +10,16 @@ module Luca
10
10
  argument :application_name, :type => :string, :default => "luca_app"
11
11
 
12
12
  def generate_controller
13
- template "controller.rb", "app/controllers/#{application_name}_controller.rb"
13
+ template "controller.rb", "app/controllers/#{application_name.gsub(/-/,'_')}_controller.rb"
14
14
  end
15
15
 
16
16
  def generate_view
17
- template "index.html.#{template_extension}", "app/views/#{application_name}/index.html.#{template_extension}"
17
+ template "index.html.#{template_extension}", "app/views/#{application_name.gsub(/-/,'_')}/index.html.#{template_extension}"
18
18
  end
19
19
 
20
20
  def generate_route
21
21
  sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
22
- routing_code = "get '/#{application_name}', :to => '#{application_name}#index'"
22
+ routing_code = "get '/#{application_name}', :to => '#{application_name.gsub(/-/,'_')}#index'"
23
23
 
24
24
  in_root do
25
25
  inject_into_file 'config/routes.rb', "\n #{routing_code}\n", { :after => sentinel, :verbose => false }
@@ -27,18 +27,22 @@ module Luca
27
27
  end
28
28
 
29
29
  def generate_javascript
30
- file_extension = javascript_extension == :coffee ? "js.coffee" : "js"
31
- template "javascripts/application.#{file_extension}", "app/assets/javascripts/#{application_name}/application.#{file_extension}"
30
+ file_extension = "coffee"
31
+ template "javascripts/application.#{file_extension}", "app/assets/javascripts/#{application_name}/#{ application_name }_application.#{file_extension}"
32
32
  template "javascripts/dependencies.#{file_extension}", "app/assets/javascripts/#{application_name}/dependencies.#{file_extension}"
33
33
  template "javascripts/index.#{file_extension}", "app/assets/javascripts/#{application_name}/index.#{file_extension}"
34
- template "javascripts/router.#{file_extension}", "app/assets/javascripts/#{application_name}/router.#{file_extension}"
35
- template "javascripts/main.#{file_extension}", "app/assets/javascripts/#{application_name}/views/main.#{file_extension}"
34
+ template "javascripts/router.#{file_extension}", "app/assets/javascripts/#{application_name}/lib/router.#{file_extension}"
35
+ template "javascripts/collection_manager.#{file_extension}", "app/assets/javascripts/#{application_name}/lib/collection_manager.#{file_extension}"
36
36
  template "javascripts/config.#{file_extension}", "app/assets/javascripts/#{application_name}/config.#{file_extension}"
37
- template "javascripts/main.jst.ejs", "app/assets/javascripts/#{application_name}/templates/main.jst.ejs"
37
+ template "javascripts/home.jst.ejs", "app/assets/javascripts/#{application_name}/templates/pages/home.jst.ejs"
38
38
 
39
39
  empty_directory_with_gitkeep("app/assets/javascripts/#{application_name}/models")
40
40
  empty_directory_with_gitkeep("app/assets/javascripts/#{application_name}/collections")
41
+ empty_directory_with_gitkeep("app/assets/javascripts/#{application_name}/views")
42
+ empty_directory_with_gitkeep("app/assets/javascripts/#{application_name}/lib")
41
43
  empty_directory_with_gitkeep("app/assets/javascripts/#{application_name}/util")
44
+
45
+ empty_directory_with_gitkeep("app/assets/stylesheets/#{application_name}")
42
46
  end
43
47
 
44
48
  private
@@ -1,6 +1,4 @@
1
1
  class <%= application_class_name %>Controller < ApplicationController
2
-
3
2
  def index
4
3
  end
5
-
6
4
  end
@@ -1,7 +1,19 @@
1
1
  <div id='viewport'></div>
2
2
 
3
3
  <script type="text/javascript">
4
+ /*
5
+ the bootstrap is where you should include serialized
6
+ models that you want to be available to your collections on
7
+ page load. A collection will look for an array of models
8
+ at the property returned by that collection's cache_key() property.
9
+ */
4
10
  window.<%= javascript_namespace %>Bootstrap = {};
11
+
12
+ /*
13
+ the base params will be included as query parameters for
14
+ any RESTful call to the API made by your collections.
15
+ */
16
+ window.<%= javascript_namespace %>BaseParams = {};
5
17
  </script>
6
18
 
7
19
  <%%= javascript_include_tag "<%= application_name %>/dependencies", "<%= application_name %>" %>
@@ -2,5 +2,6 @@
2
2
 
3
3
  :javascript
4
4
  window.<%= javascript_namespace %>Bootstrap = {};
5
+ window.<%= javascript_namespace %>BaseParams = {};
5
6
 
6
7
  = javascript_include_tag "<%= application_name %>/dependencies", "<%= application_name %>"
@@ -0,0 +1,18 @@
1
+ application = <%= javascript_namespace %>.register "<%= javascript_namespace %>.Application"
2
+
3
+ application.extends "Luca.Application"
4
+
5
+ application.defines
6
+ components:[
7
+ type: 'controller'
8
+ name: 'pages'
9
+ components:[
10
+ name: "home"
11
+ template: "pages/home"
12
+ ]
13
+ ]
14
+ el: '#viewport'
15
+ autoBoot: false
16
+ name: '<%= javascript_namespace %>App'
17
+ router: "<%= javascript_namespace %>.Router"
18
+ collectionManager: "<%= javascript_namespace %>CollectionManager"
@@ -0,0 +1,2 @@
1
+ class <%= javascript_namespace %>.CollectionManager extends Luca.CollectionManager
2
+ name: "primary"
@@ -0,0 +1,3 @@
1
+ Luca.initialize '<%= javascript_namespace %>',
2
+ modelBootstrap: window.<%= javascript_namespace %>Bootstrap
3
+ baseParams: window.<%= javascript_namespace %>BaseParams
@@ -2,4 +2,5 @@
2
2
  #= require underscore-min
3
3
  #= require underscore-string.min
4
4
  #= require backbone-min
5
+ #= require backbone-query.min
5
6
  #= require luca-ui.min
@@ -0,0 +1,2 @@
1
+ Welcome.
2
+ <a href="http://datapimp.com/luca">View the Documentation</a>
@@ -0,0 +1,15 @@
1
+ #= require ./config
2
+ #= require_tree ./util
3
+ #= require_tree ./lib
4
+ #= require_tree ./templates
5
+ #= require_tree ./models
6
+ #= require_tree ./collections
7
+ #= require_tree ./views
8
+
9
+ #= require ./<%= application_name.gsub(/-/,'_') %>_application
10
+
11
+ #= require_self
12
+
13
+ <%= javascript_namespace %>.onReady ->
14
+ window.<%= javascript_namespace %>CollectionManager = new <%= javascript_namespace %>.CollectionManager();
15
+ (window.<%= javascript_namespace %>App = new <%= javascript_namespace %>.Application()).boot();
@@ -0,0 +1,4 @@
1
+ _.def('<%= javascript_namespace %>.Router').extends('Luca.Router').with
2
+
3
+ routes:
4
+ "" : <%= javascript_namespace %>.route("home")
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if __FILE__==$0
4
+ require 'pry'
5
+ end
6
+
7
+ class ComponentDocumentation
8
+ def initialize component_name
9
+ @component_name = component_name
10
+ file_root = ""
11
+ filename = @component_name.split('.')[1].downcase
12
+ @file_path = "#{file_root}/src/components/#{filename}.coffee"
13
+ @file_contents = File.open(file_path).read()
14
+ end
15
+
16
+ def method_data
17
+ end
18
+
19
+ def comments
20
+ end
21
+
22
+ def arguments
23
+
24
+ end
25
+ end
26
+
27
+ class DocumentationGenerator
28
+ FILE_ROOT = "/Users/alexsmith/Development/luca"
29
+ def initialize options={}
30
+ raise "Must pass options[:class_name]" if options[:class_name].nil?
31
+ raise "Myst pass options[:property]" if options[:property].nil?
32
+ @class_name = options[:class_name]
33
+ @property_name = options[:property]
34
+ load_target_file
35
+ end
36
+
37
+ def load_target_file
38
+ file_path = "#{FILE_ROOT}/src/components/#{@class_name}.coffee"
39
+ @file_contents = File.open(file_path).read()
40
+ @property_match = @file_contents.match(/(^\s*#.*$\n)*(\s*#{@property_name}\s*:\s*\(.*\)\s*-\>.*$)/)
41
+ end
42
+
43
+ def args
44
+ args = @property_match[0].match(/^\s*#{@property_name}\s*:\s*\((.*)\)\s*-\>.*$/)[1]
45
+ args = args.gsub(/\s/,'').split(',')
46
+ args.inject({}) do |memo, arg|
47
+ if default_args = arg.match(/^(.*)=(.+)/)
48
+ memo[default_args[1].to_sym] = default_args[2]
49
+ else
50
+ memo[arg.to_sym] = nil
51
+ end
52
+ memo
53
+ end
54
+ end
55
+
56
+ def comments
57
+ @comments = @property_match[0].match(/(^\s*#.*$\n)*/)[0]
58
+ end
59
+
60
+ def function_signature
61
+
62
+ end
63
+
64
+ def docs
65
+ @property_match[0]
66
+ end
67
+
68
+ end
69
+
70
+ if __FILE__==$0
71
+ pry
72
+ end
@@ -1,6 +1,10 @@
1
1
  module Luca
2
2
  module Rails
3
3
  class Engine < ::Rails::Engine
4
+ rake_tasks do
5
+ load "railties/luca/tasks.rake"
6
+ end
7
+
4
8
  initializer "luca.register_template" do |app|
5
9
  app.assets.register_engine ".luca", Luca::Template
6
10
  Luca::TestHarness.set(:sprockets,app.assets)
@@ -1,6 +1,6 @@
1
1
  module Luca
2
2
  module Rails
3
- VERSION = "0.9.7"
3
+ VERSION = '0.9.8'
4
4
  end
5
5
  end
6
6
 
data/lib/luca.rb CHANGED
@@ -1 +1 @@
1
- require 'luca/rails'
1
+ require 'luca/rails'
@@ -0,0 +1,31 @@
1
+ namespace :luca do
2
+ desc "Download the vendor dependencies for a luca app"
3
+ task :dependencies do
4
+ base = 'https://raw.github.com/datapimp/luca/master/assets/javascripts/dependencies/'
5
+
6
+ scripts = [
7
+ 'underscore-min.js',
8
+ 'underscore-string.min.js',
9
+ 'bootstrap.min.js',
10
+ 'backbone-min.js',
11
+ 'backbone-query.min.js'
12
+ ]
13
+
14
+ scripts.each do |script|
15
+ puts "Downloading #{ script } from #{ base + script }"
16
+ `wget -q #{ base + script } > #{ Rails.root }/vendor/assets/javascripts/#{ script }`
17
+ end
18
+
19
+ style_base = "https://raw.github.com/datapimp/luca/master/assets/stylesheets/"
20
+
21
+ stylesheets = [
22
+ 'bootstrap.min.css',
23
+ 'bootstrap-responsive.min.css'
24
+ ]
25
+
26
+ stylesheets.each do |stylesheet|
27
+ puts "Downloading #{ stylesheet } from #{ style_base + stylesheet }"
28
+ `wget -q #{ style_base + stylesheet } > #{ Rails.root }/vendor/assets/dependencies/#{ stylesheet }`
29
+ end
30
+ end
31
+ end
data/luca.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency "railties", "~> 3.1"
17
17
  s.add_dependency "thor", "~> 0.14"
18
18
  s.add_dependency "sinatra", ">= 0.9.2"
19
+ s.add_dependency "ejs"
19
20
  s.add_development_dependency "bundler", "~> 1.0.0"
20
21
  s.add_development_dependency "rails", "~> 3.1"
21
22
 
@@ -0,0 +1,62 @@
1
+ describe 'The Controller Component', ->
2
+ beforeEach ->
3
+ controller = Luca.register 'Luca.components.SpecController'
4
+ controller.extends 'Luca.components.Controller'
5
+ controller.defines
6
+ name: "spec_controller"
7
+ defaultCard: 'one'
8
+ rootComponent: true
9
+ components:[
10
+ name: "one"
11
+ type: "controller"
12
+ components:[
13
+ name: "alpha"
14
+ ,
15
+ name: "bravo"
16
+ ]
17
+ ,
18
+ name: "two"
19
+ type: "controller"
20
+ components:[
21
+ name: "charlie"
22
+ ,
23
+ name: "delta"
24
+ ]
25
+ ,
26
+ name: "three"
27
+ type: "controller"
28
+ components:[
29
+ name: "echo"
30
+ ]
31
+ ,
32
+ name: "four"
33
+ type: "view"
34
+ ]
35
+
36
+ @controller = new Luca.components.SpecController().render()
37
+
38
+ it "should track the names of its pages", ->
39
+ names = @controller.sectionNames()
40
+ expect( names... ).toEqual 'one', 'two', 'three', 'four'
41
+
42
+ it "should track the names of its controllers", ->
43
+ names = _( @controller.controllers() ).pluck 'name'
44
+ expect( names... ).toEqual 'one', 'two', 'three'
45
+
46
+ it "should be stateful", ->
47
+ expect( @controller.state ).toBeDefined()
48
+
49
+ it "should track the active page", ->
50
+ @controller.navigate_to("two")
51
+ expect( @controller.activePage() ).toEqual 'two'
52
+
53
+ it "should track controller activation events", ->
54
+ two = @controller.navigate_to("two")
55
+ expect( two.activatedByController ).toBeTruthy()
56
+
57
+ it "should define a controllerPath method on each page", ->
58
+ expect( @controller.activeComponent().controllerPath ).toBeDefined()
59
+
60
+ it "should know the controller path", ->
61
+ path = @controller.activeComponent().controllerPath()
62
+ expect( path... ).toEqual "spec_controller", "one"
@@ -47,6 +47,10 @@ describe 'The Form View', ->
47
47
  it "should create a form", ->
48
48
  expect( @form ).toBeDefined()
49
49
 
50
+ it "should have access to all of the fields", ->
51
+ @form.render()
52
+ expect( @form.getFields().length ).toEqual 6
53
+
50
54
  it "should load the model", ->
51
55
  @form.loadModel(@model)
52
56
  expect( @form.currentModel() ).toEqual @model
@@ -0,0 +1,15 @@
1
+ describe 'Collection Event Bindings', ->
2
+ view = Luca.register("Luca.components.CollectionBindingView")
3
+ view.extends "Luca.View"
4
+ view.mixesIn "CollectionEventBindings"
5
+ view.defines
6
+ collection: new Luca.Collection()
7
+
8
+ xit "should allow me to bind to collection manager events"
9
+
10
+ it "should setup event relaying from the collection", ->
11
+ view = new Luca.components.CollectionBindingView()
12
+ for eventId in ["reset","add","remove","change"]
13
+ view.collection.trigger(eventId)
14
+ expect( view ).toHaveTriggered("collection:#{ eventId }")
15
+
@@ -6,11 +6,11 @@ describe 'The DOM Helpers module', ->
6
6
 
7
7
  describe "Auto Assigning Class Names", ->
8
8
  it "should apply the class of the component all the way up its hierarchy", ->
9
- c = new Luca.core.Container()
9
+ c = new Luca.Container()
10
10
  expect( c.$el.is(".luca-container") ).toBeTruthy()
11
11
  expect( c.$el.is(".luca-panel") ).toBeTruthy()
12
12
 
13
13
  it "should leave out backbone and luca view classes", ->
14
- c = new Luca.core.Container()
14
+ c = new Luca.Container()
15
15
  expect( c.$el.is(".luca-view") ).not.toBeTruthy()
16
16
  expect( c.$el.is(".backbone-view") ).not.toBeTruthy()
@@ -10,6 +10,9 @@ describe 'The Filterable Plugin', ->
10
10
  it 'should generate a Backbone.QueryCollection query payload', ->
11
11
  expect( @view.getFilterState().toQuery() ).toBeDefined()
12
12
 
13
+ it 'should generate a Backbone.QueryCollection options payload', ->
14
+ expect( @view.getFilterState().toOptions() ).toBeDefined()
15
+
13
16
  it "should have a toRemote method which merges params", ->
14
17
  expect( @view.getFilterState().toRemote() ).toBeDefined()
15
18
 
@@ -17,9 +20,6 @@ describe 'The Filterable Plugin', ->
17
20
  @view.applyFilter(filter:"value")
18
21
  expect( @view.getFilterState().toQuery().filter ).toEqual('value')
19
22
 
20
- it 'should generate a Backbone.QueryCollection options payload', ->
21
- expect( @view.getFilterState().toOptions() ).toBeDefined()
22
-
23
23
  it "should trigger a refresh event on filter change", ->
24
24
  @view.applyFilter(filter:"value")
25
- expect( @view ).toHaveTriggered("refresh")
25
+ expect( @view ).toHaveTriggered("data:refresh")
@@ -0,0 +1,50 @@
1
+ describe 'The State Model Concern', ->
2
+ view = Luca.register "Luca.components.StatefulView"
3
+ view.extends "Luca.View"
4
+ view.mixesIn "StateModel"
5
+ view.defines
6
+ stateful:
7
+ key1: "val1"
8
+ key2: "val2"
9
+
10
+ it "should create a state model on the view", ->
11
+ view = new Luca.components.StatefulView()
12
+ expect( view.state ).toBeDefined()
13
+ expect( Luca.isBackboneModel(view.state) ).toEqual true
14
+
15
+ it "should delegate the get method on the state model to the view", ->
16
+ view = new Luca.components.StatefulView()
17
+ expect( view.get ).toBeDefined()
18
+ expect( view.get('key1') ).toEqual 'val1'
19
+
20
+ it "should delegate the set method on the state model to the view", ->
21
+ view = new Luca.components.StatefulView()
22
+ view.set('key1','boom')
23
+ expect( view.state.get('key1') ).toEqual 'boom'
24
+
25
+ it "should apply the default state attributes", ->
26
+ view = new Luca.components.StatefulView()
27
+ expect( view.state.toJSON() ).toEqual key1:"val1", key2: "val2"
28
+
29
+ describe 'State Change Event Bindings', ->
30
+ it "should trigger state change events on the view", ->
31
+ view = new Luca.components.StatefulView()
32
+ view.set('key1','boom')
33
+ expect( view ).toHaveTriggered("state:change")
34
+
35
+ it "should trigger individual attribute change events on the view", ->
36
+ view = new Luca.components.StatefulView()
37
+ view.set('key1','boom')
38
+ expect( view ).toHaveTriggered("state:change:key1")
39
+
40
+ it "should respond to @stateChangeEvents configuration", ->
41
+ view = new Luca.components.StatefulView
42
+ onKeyChange: sinon.spy()
43
+ blah: sinon.spy()
44
+ stateChangeEvents:
45
+ "key1" : "onKeyChange"
46
+ "key2" : "blah"
47
+
48
+ view.set('key1','boom')
49
+ expect( view.blah ).not.toHaveBeenCalled()
50
+ expect( view.onKeyChange ).toHaveBeenCalled()
@@ -260,6 +260,31 @@ describe "The Model Bootstrap", ->
260
260
  expect( spy.called ).toBeTruthy()
261
261
 
262
262
 
263
+ describe "Base Params on the URL Method", ->
264
+ beforeEach ->
265
+ @collection = new Luca.Collection [],
266
+ url: ()-> "/url/to/endpoint"
267
+
268
+ afterEach ->
269
+ Luca.Collection.resetBaseParams()
270
+
271
+ it "should work with strings too", ->
272
+ collection = new Luca.Collection [], url: "/string/based/url"
273
+ expect( collection.url ).toEqual "/string/based/url"
274
+
275
+ it "should include base params in the url", ->
276
+ Luca.Collection.baseParams(base:"value")
277
+ expect( @collection.url() ).toEqual '/url/to/endpoint?base=value'
278
+
279
+ it "should include params in the url", ->
280
+ @collection.applyParams(param:"value")
281
+ expect( @collection.url() ).toEqual '/url/to/endpoint?param=value'
282
+
283
+ it "should include one time params, in addition to base params", ->
284
+ Luca.Collection.baseParams(base:"value")
285
+ @collection.applyParams(one:"time")
286
+ expect( @collection.url() ).toEqual "/url/to/endpoint?base=value&one=time"
287
+
263
288
 
264
289
 
265
290
 
@@ -1,6 +1,6 @@
1
1
  describe 'The Luca Container', ->
2
2
  beforeEach ->
3
- c = @container = new Luca.core.Container
3
+ c = @container = new Luca.Container
4
4
  defaults:
5
5
  defaultProperty: 'it_works'
6
6
  extensions:[
@@ -43,6 +43,8 @@ describe 'The Luca Container', ->
43
43
  ]
44
44
  ]
45
45
 
46
+ @container.on "before:attach", ()->
47
+ console.log "before attach", @, arguments
46
48
  @container.render()
47
49
 
48
50
  it "should create getter methods on the for components with roles", ->
@@ -98,7 +100,7 @@ describe 'The Luca Container', ->
98
100
 
99
101
  describe 'Component Inheritance and Customization', ->
100
102
  it "should accept an array for extensions configuration and join on position/index", ->
101
- container = new Luca.core.Container
103
+ container = new Luca.Container
102
104
  extensions:[
103
105
  undefined
104
106
  ,
@@ -117,7 +119,7 @@ describe 'Component Inheritance and Customization', ->
117
119
  expect( container.getComponentTwo().name ).toEqual "custom_two"
118
120
 
119
121
  it "should accept an object for extensions configuration and join using role", ->
120
- container = new Luca.core.Container
122
+ container = new Luca.Container
121
123
  extensions:
122
124
  component_one:
123
125
  name: "custom_one"
@@ -135,7 +137,7 @@ describe 'Component Inheritance and Customization', ->
135
137
 
136
138
  describe 'Component Event Binding', ->
137
139
  beforeEach ->
138
- @container = new Luca.core.Container
140
+ @container = new Luca.Container
139
141
  componentEvents:
140
142
  "haha trigger:one" : "one"
141
143
  "alpha trigger:two" : "two"
@@ -162,7 +164,7 @@ describe 'Component Event Binding', ->
162
164
  @getGamma().trigger("after:render:gamma")
163
165
 
164
166
  registerComponentEvents: ()->
165
- Luca.core.Container::registerComponentEvents.apply(@, arguments)
167
+ Luca.Container::registerComponentEvents.apply(@, arguments)
166
168
 
167
169
  components:[
168
170
  name: "component_alpha"
@@ -233,3 +235,53 @@ describe 'Component Event Binding', ->
233
235
  it "should accept component events with a component getter", ->
234
236
  @container.getAlphaComponent().trigger "trigger:three"
235
237
  expect(@container).toHaveTriggered("three")
238
+
239
+
240
+ describe 'Parent Container Tracking', ->
241
+ nestedContainer = Luca.register("Luca.components.NestedSpec")
242
+ nestedContainer.extends("Luca.Container")
243
+ nestedContainer.defines
244
+ name: "nested_container"
245
+ components:[
246
+ type: "container"
247
+ name: "one",
248
+ role: "one"
249
+ components:[
250
+ type: "container"
251
+ role: "two"
252
+ name: "two"
253
+ components:[
254
+ name: "three"
255
+ role: "three"
256
+ ]
257
+ ]
258
+ ]
259
+
260
+ it "should not have a parent unless created by a container", ->
261
+ nestedContainer = (new Luca.components.NestedSpec()).render()
262
+ expect( nestedContainer.getParent ).not.toBeDefined()
263
+
264
+ it "should know the root", ->
265
+ nestedContainer = (new Luca.components.NestedSpec()).render()
266
+ one = nestedContainer.getOne()
267
+ expect( one.getRootComponent().name ).toEqual 'nested_container'
268
+
269
+ it "should know the root", ->
270
+ nestedContainer = (new Luca.components.NestedSpec()).render()
271
+ two = nestedContainer.getTwo()
272
+ expect( two.getRootComponent().name ).toEqual 'nested_container'
273
+
274
+ it "should know its parent", ->
275
+ nestedContainer = (new Luca.components.NestedSpec()).render()
276
+ one = nestedContainer.getOne()
277
+ expect( one.getParent().name ).toEqual 'nested_container'
278
+
279
+ it "should know its parent", ->
280
+ nestedContainer = (new Luca.components.NestedSpec()).render()
281
+ two = nestedContainer.getTwo()
282
+ expect( two.getParent().name ).toEqual 'one'
283
+
284
+ it "should know its parent", ->
285
+ nestedContainer = (new Luca.components.NestedSpec()).render()
286
+ three = nestedContainer.getThree()
287
+ expect( three.getParent().name ).toEqual 'two'