Commit 11cd3aba

mo <mo.khan@gmail.com>
2017-09-04 01:36:11
change autoview to lookup by path rather than key.
1 parent 168716b
Changed files (8)
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
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')
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
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>
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">
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()
spec/javascripts/backbone/models/cake_spec.js.coffee → spec/javascripts/models/cake_spec.js.coffee
File renamed without changes
spec/javascripts/backbone/views/cake_view_spec.js.coffee → spec/javascripts/views/cake_view_spec.js.coffee
File renamed without changes