From fd0065598c9c21e07be178f0c2c4e56abe84f06f Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Thu, 8 Mar 2012 14:27:34 -0800 Subject: [PATCH] DG MS; posting to services now works, updated form serializer to handle array attributes. --- app/models/service.rb | 1 + public/javascripts/app/forms.js | 11 ++++++++++- public/javascripts/app/forms/post_form.js | 3 ++- public/javascripts/app/models/status_message.js | 11 ++++++++++- public/javascripts/app/pages/post-new.js | 2 +- spec/javascripts/app/forms/post_form_spec.js | 16 ++++++++++++++++ 6 files changed, 40 insertions(+), 4 deletions(-) diff --git a/app/models/service.rb b/app/models/service.rb index 9eab8442a..8f0ed9d1c 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -14,6 +14,7 @@ class Service < ActiveRecord::Base end def public_message(post, length, url = "") + Rails.logger.info("Posting out to #{self.class}") url = "" if post.respond_to?(:photos) && post.photos.count == 0 space_for_url = url.blank? ? 0 : (url.length + 1) truncated = truncate(post.text(:plain_text => true), :length => (length - space_for_url)) diff --git a/public/javascripts/app/forms.js b/public/javascripts/app/forms.js index 0aceb159b..cbfff963f 100644 --- a/public/javascripts/app/forms.js +++ b/public/javascripts/app/forms.js @@ -9,7 +9,16 @@ app.forms.Base = app.views.Base.extend({ var form = this.$("form"); function setValueFromField(memo, attribute, selector){ - memo[attribute] = form.find(selector).val() + var selectors = form.find(selector); + + if(selectors.length > 1) { + memo[attribute] = _.map(selectors, function(selector){ + return $(selector).val() + }) + } else { + memo[attribute] = selectors.val(); + } + return memo } diff --git a/public/javascripts/app/forms/post_form.js b/public/javascripts/app/forms/post_form.js index a10c02785..afc5198c9 100644 --- a/public/javascripts/app/forms/post_form.js +++ b/public/javascripts/app/forms/post_form.js @@ -8,7 +8,8 @@ app.forms.Post = app.forms.Base.extend({ formAttrs : { "textarea.text" : "text", - "input.aspect_ids" : "aspect_ids" + "input.aspect_ids" : "aspect_ids", + 'input.service:checked' : 'services' }, initialize : function(){ diff --git a/public/javascripts/app/models/status_message.js b/public/javascripts/app/models/status_message.js index e87cdda7f..e9a6f3204 100644 --- a/public/javascripts/app/models/status_message.js +++ b/public/javascripts/app/models/status_message.js @@ -4,11 +4,20 @@ app.models.StatusMessage = app.models.Post.extend({ }, mungeAndSave : function(){ - var mungedAttrs = {status_message : _.clone(this.attributes), aspect_ids : mungeAspects(this.get("aspect_ids"))} + var mungedAttrs = { + status_message : _.clone(this.attributes), + aspect_ids : mungeAspects(this.get("aspect_ids")), + services : mungeServices(this.get("services")) + } + this.save(mungedAttrs) function mungeAspects (value){ return [value] } + + function mungeServices (values) { + return values.length > 1 ? values : [values] + } } }); diff --git a/public/javascripts/app/pages/post-new.js b/public/javascripts/app/pages/post-new.js index 3315e6911..b2f74d8da 100644 --- a/public/javascripts/app/pages/post-new.js +++ b/public/javascripts/app/pages/post-new.js @@ -13,4 +13,4 @@ app.pages.PostNew = app.views.Base.extend({ saveModel : function(){ this.model.mungeAndSave(); } -}) +}); diff --git a/spec/javascripts/app/forms/post_form_spec.js b/spec/javascripts/app/forms/post_form_spec.js index 3161b681c..16d3aa31d 100644 --- a/spec/javascripts/app/forms/post_form_spec.js +++ b/spec/javascripts/app/forms/post_form_spec.js @@ -13,12 +13,28 @@ describe("app.forms.Post", function(){ beforeEach(function(){ this.view.$("form .text").val("Oh My") this.view.$("form .aspect_ids").val("public") + + /* appending checkboxes */ + this.view.$("form").append($("", { + value : "fakeBook", + checked : "checked", + "class" : "service", + "type" : "checkbox" + })) + + this.view.$("form").append($("", { + value : "twitter", + checked : "checked", + "class" : "service", + "type" : "checkbox" + })) }) it("instantiates a post on form submit", function(){ this.view.$("form").submit() expect(this.view.model.get("text")).toBe("Oh My") expect(this.view.model.get("aspect_ids")).toBe("public") + expect(this.view.model.get("services").length).toBe(2) }) it("triggers a 'setFromForm' event", function(){