summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo <mo.khan@gmail.com>2017-09-03 19:36:11 -0600
committermo <mo.khan@gmail.com>2017-09-03 19:36:11 -0600
commit11cd3aba0c073a5cf9c65a4aa6acd9082a521246 (patch)
treebd4fae8bbd6e87c5dabbf6538cb04d9ae628c58a
parent168716b78cf4d128d73885f875c4bb6d03caf06b (diff)
change autoview to lookup by path rather than key.
-rw-r--r--app/assets/javascripts/cakeside.js.coffee1
-rw-r--r--app/assets/javascripts/initializers/auto_view_setup.js.coffee22
-rw-r--r--app/assets/javascripts/views/my/passwords/change_password.js.coffee7
-rw-r--r--app/views/cakes/_show.html.erb2
-rw-r--r--app/views/my/passwords/index.html.erb2
-rw-r--r--spec/javascripts/initializers/auto_view_setup_spec.js.coffee26
-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