Commit c1412005
Changed files (7)
app
assets
javascripts
views
my
cakes
tutorials
helpers
models
views
application
my
kitchens
spec
helpers
app/assets/javascripts/views/my/cakes/edit_view.js.coffee
@@ -35,7 +35,7 @@ class csx.Views.My.Cakes.EditView extends Marionette.CompositeView
onRender: ->
@$("#cake_category_id").val(@model.category_id())
- @ui.tags.tagit({ availableTags: ALL_TAGS })
+ @ui.tags.tagit({ availableTags: csx.Tags.pluck('name') })
@disableSaveButton()
savedSuccessfully: (cake) =>
app/assets/javascripts/views/my/tutorials/new_view.js.coffee
@@ -36,7 +36,7 @@ class csx.Views.My.Tutorials.NewView extends Marionette.ItemView
author_url: attributes.provider_url
onRender: ->
- @ui.tags.tagit({ availableTags: ALL_TAGS })
+ @ui.tags.tagit({ availableTags: csx.Tags.pluck('name') })
validate: ->
@model.isValid()
app/helpers/application_helper.rb
@@ -38,4 +38,8 @@ module ApplicationHelper
'info'
end
end
+
+ def backbone_collection_for(items)
+ render partial: 'backbone_collection', locals: { items: items }
+ end
end
app/models/tag.rb
@@ -4,6 +4,6 @@ class Tag
.joins(:taggings)
.where(taggings: { context: 'tags' })
.order(:name)
- .uniq
+ .distinct
end
end
app/views/application/_backbone_collection.html.erb
@@ -0,0 +1,5 @@
+<% cache items do %>
+<%= javascript_tag do %>
+csx.<%= items.name.split('::').last.pluralize %> = new Backbone.Collection(<%= items.to_json.html_safe %>);
+<% end %>
+<% end %>
app/views/my/kitchens/show.html.erb
@@ -1,10 +1,8 @@
<% provide(:title, "Kitchen") -%>
<%= content_for :javascript do -%>
+ <%= backbone_collection_for @categories %>
+ <%= backbone_collection_for @tags %>
<%= javascript_tag do %>
- csx.Categories = new Backbone.Collection(<%= raw @categories.to_json %>);
-
- <%# backbone_collection_for @categories %>
- var ALL_TAGS = <%= raw @tags.pluck(:name) %>;
csx.initialize({ access_token: '<%= current_user.authentication_token %>' });
<% end %>
<% end %>
spec/helpers/application_helper_spec.rb
@@ -1,4 +1,19 @@
require "rails_helper"
describe ApplicationHelper do
+ describe "#backbone_collection_for" do
+ it 'returns a script with the backbone collection' do
+ categories = Category.all
+ result = helper.backbone_collection_for(categories)
+ expect(result).to include("csx.Categories")
+ expect(result).to include("Backbone.Collection")
+ end
+
+ it 'escapes namespaces correctly' do
+ tags = ActsAsTaggableOn::Tag.all
+ result = helper.backbone_collection_for(tags)
+ expect(result).to include("csx.Tags")
+ expect(result).to include("Backbone.Collection")
+ end
+ end
end