Commit 11cd3aba
Changed files (8)
app
assets
javascripts
initializers
views
my
passwords
views
cakes
my
passwords
spec
javascripts
initializers
models
views
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