summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo <mo.khan@gmail.com>2017-09-24 14:21:35 -0600
committermo <mo.khan@gmail.com>2017-09-24 14:21:35 -0600
commitc14120056549765beb35f5a35f8c76e0e8ef7397 (patch)
treec126ad5b9ae3361aeed9b037533be4452ff217b3
parent4887ba54da7ff8a25347b58c4a426cb5cf1dee3b (diff)
create helper to generate a backbone collection.
-rw-r--r--app/assets/javascripts/views/my/cakes/edit_view.js.coffee2
-rw-r--r--app/assets/javascripts/views/my/tutorials/new_view.js.coffee2
-rw-r--r--app/helpers/application_helper.rb4
-rw-r--r--app/models/tag.rb2
-rw-r--r--app/views/application/_backbone_collection.html.erb5
-rw-r--r--app/views/my/kitchens/show.html.erb6
-rw-r--r--spec/helpers/application_helper_spec.rb15
7 files changed, 29 insertions, 7 deletions
diff --git a/app/assets/javascripts/views/my/cakes/edit_view.js.coffee b/app/assets/javascripts/views/my/cakes/edit_view.js.coffee
index 64c4da4c..9da1698e 100644
--- a/app/assets/javascripts/views/my/cakes/edit_view.js.coffee
+++ b/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) =>
diff --git a/app/assets/javascripts/views/my/tutorials/new_view.js.coffee b/app/assets/javascripts/views/my/tutorials/new_view.js.coffee
index 582dd370..46918386 100644
--- a/app/assets/javascripts/views/my/tutorials/new_view.js.coffee
+++ b/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()
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 2000ffb9..893abc5d 100644
--- a/app/helpers/application_helper.rb
+++ b/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
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 1f8309e5..c2cdb91c 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -4,6 +4,6 @@ class Tag
.joins(:taggings)
.where(taggings: { context: 'tags' })
.order(:name)
- .uniq
+ .distinct
end
end
diff --git a/app/views/application/_backbone_collection.html.erb b/app/views/application/_backbone_collection.html.erb
new file mode 100644
index 00000000..a806939f
--- /dev/null
+++ b/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 %>
diff --git a/app/views/my/kitchens/show.html.erb b/app/views/my/kitchens/show.html.erb
index 195a8d94..e9a2c94d 100644
--- a/app/views/my/kitchens/show.html.erb
+++ b/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 %>
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index b547f93f..b1c8ae68 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/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