diff options
| author | mo <mo.khan@gmail.com> | 2017-09-03 19:36:11 -0600 |
|---|---|---|
| committer | mo <mo.khan@gmail.com> | 2017-09-03 19:36:11 -0600 |
| commit | 11cd3aba0c073a5cf9c65a4aa6acd9082a521246 (patch) | |
| tree | bd4fae8bbd6e87c5dabbf6538cb04d9ae628c58a | |
| parent | 168716b78cf4d128d73885f875c4bb6d03caf06b (diff) | |
change autoview to lookup by path rather than key.
| -rw-r--r-- | app/assets/javascripts/cakeside.js.coffee | 1 | ||||
| -rw-r--r-- | app/assets/javascripts/initializers/auto_view_setup.js.coffee | 22 | ||||
| -rw-r--r-- | app/assets/javascripts/views/my/passwords/change_password.js.coffee | 7 | ||||
| -rw-r--r-- | app/views/cakes/_show.html.erb | 2 | ||||
| -rw-r--r-- | app/views/my/passwords/index.html.erb | 2 | ||||
| -rw-r--r-- | spec/javascripts/initializers/auto_view_setup_spec.js.coffee | 26 | ||||
| -rw-r--r-- | spec/javascripts/models/cake_spec.js.coffee (renamed from spec/javascripts/backbone/models/cake_spec.js.coffee) | 0 | ||||
| -rw-r--r-- | spec/javascripts/views/cake_view_spec.js.coffee (renamed from spec/javascripts/backbone/views/cake_view_spec.js.coffee) | 0 |
8 files changed, 57 insertions, 3 deletions
diff --git a/app/assets/javascripts/cakeside.js.coffee b/app/assets/javascripts/cakeside.js.coffee index bd4afe78..20125a2e 100644 --- a/app/assets/javascripts/cakeside.js.coffee +++ b/app/assets/javascripts/cakeside.js.coffee @@ -1,5 +1,6 @@ #= require_self #= require_tree ./initializers +#= require_tree ./lib #= require_tree ./templates #= require_tree ./models #= require ./views diff --git a/app/assets/javascripts/initializers/auto_view_setup.js.coffee b/app/assets/javascripts/initializers/auto_view_setup.js.coffee index 3a462068..4198749d 100644 --- a/app/assets/javascripts/initializers/auto_view_setup.js.coffee +++ b/app/assets/javascripts/initializers/auto_view_setup.js.coffee @@ -1,8 +1,28 @@ #= require ./behaviour class CakeSide.AutoViewSetup extends CakeSide.Behaviour + @views = {} @on "ready" + constructor: (logger = console) -> + @logger = logger + execute: -> for element in $('[data-autoview]') - CakeSide.AutoView.install(element) + #CakeSide.AutoView.install(element) + @install($(element)) + + install: (element) -> + viewName = element.data('autoview') + constructor = CakeSide.Proxy.create(CakeSide.Views, viewName) + + if _.isUndefined(constructor) + @logger.error("Could not find autoview for #{viewName}") + return + + view = new constructor + el: element + $el: $(element) + view.render() + + CakeSide.AutoViewSetup.views[viewName.replace('.', '')] = view diff --git a/app/assets/javascripts/views/my/passwords/change_password.js.coffee b/app/assets/javascripts/views/my/passwords/change_password.js.coffee new file mode 100644 index 00000000..668975f4 --- /dev/null +++ b/app/assets/javascripts/views/my/passwords/change_password.js.coffee @@ -0,0 +1,7 @@ +#= require views/auto_view + +class CakeSide.Views.My.ChangePassword extends CakeSide.AutoView + @viewName 'change-password' + + render: () -> + console.log('change password') diff --git a/app/views/cakes/_show.html.erb b/app/views/cakes/_show.html.erb index 2e4a01c3..ee6cee9e 100644 --- a/app/views/cakes/_show.html.erb +++ b/app/views/cakes/_show.html.erb @@ -1,4 +1,4 @@ -<div class="row" data-autoview="cakes#show"> +<div class="row" data-autoview="Cakes.ShowPage"> <div class="col"> <h1><%= link_to @creation.name, cake_path(@creation) %></h1> <p>By <%= link_to @creation.user.name, profile_path(@creation.user) %></p> diff --git a/app/views/my/passwords/index.html.erb b/app/views/my/passwords/index.html.erb index 95f8ab65..f37c31c8 100644 --- a/app/views/my/passwords/index.html.erb +++ b/app/views/my/passwords/index.html.erb @@ -2,7 +2,7 @@ <div class="col-3"> <%= render partial: "my/shared/my_nav" %> </div> - <div class="col-9"> + <div class="col-9" data-autoview="My.ChangePassword"> <h1>Change Password</h1> <%= form_for @user, url: my_password_path(@user), html: { method: :patch, class: "form-horizontal" } do |f| %> <div class="form-group"> diff --git a/spec/javascripts/initializers/auto_view_setup_spec.js.coffee b/spec/javascripts/initializers/auto_view_setup_spec.js.coffee new file mode 100644 index 00000000..3eb49971 --- /dev/null +++ b/spec/javascripts/initializers/auto_view_setup_spec.js.coffee @@ -0,0 +1,26 @@ +describe "CakeSide.AutoViewSetup", -> + subject = null + logger = null + + beforeEach -> + logger = + error: () -> {} + spyOn(logger, 'error') + subject = new CakeSide.AutoViewSetup(logger) + + describe "#execute", -> + beforeEach -> + CakeSide.AutoViewSetup.views = {} + + it 'attaches the autoview to the DOM element', -> + fixture.set '<div data-autoview="My.ChangePassword"></div>' + subject.execute() + result = CakeSide.AutoViewSetup.views['MyChangePassword'] + expect(result instanceof CakeSide.Views.My.ChangePassword).toEqual(true) + + it "returns nil if the autoview cannot be discovered", -> + fixture.set '<div data-autoview="Unknown"></div>' + subject.execute() + + expect(_.isEmpty(CakeSide.AutoViewSetup.views)).toEqual(true) + expect(logger.error).toHaveBeenCalled() diff --git a/spec/javascripts/backbone/models/cake_spec.js.coffee b/spec/javascripts/models/cake_spec.js.coffee index 4223a255..4223a255 100644 --- a/spec/javascripts/backbone/models/cake_spec.js.coffee +++ b/spec/javascripts/models/cake_spec.js.coffee diff --git a/spec/javascripts/backbone/views/cake_view_spec.js.coffee b/spec/javascripts/views/cake_view_spec.js.coffee index f84d70a4..f84d70a4 100644 --- a/spec/javascripts/backbone/views/cake_view_spec.js.coffee +++ b/spec/javascripts/views/cake_view_spec.js.coffee |
