diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b4543f22d..f173633c4 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -18,7 +18,6 @@ class ApplicationController < ActionController::Base if current_user @groups = current_user.groups @friends = current_user.friends - @latest_status_message = StatusMessage.newest_for(current_user.person) @group = params[:group] ? current_user.group_by_id(params[:group]) : current_user.groups.first end end diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index 91edf995d..e7b994ff5 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -22,10 +22,15 @@ class PublicsController < ApplicationController end def receive - @user = Person.first(:id => params[:id]).owner + render :nothing => true + begin + @user = Person.first(:id => params[:id]).owner + rescue NoMethodError => e + Rails.logger.error("Received post #{params[:xml]} for nonexistent person #{params[:id]}") + return + end Rails.logger.debug "PublicsController has received: #{params[:xml]}" @user.receive params[:xml] if params[:xml] - render :nothing => true end end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index f941389a5..9b363032e 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -3,12 +3,9 @@ class StatusMessagesController < ApplicationController def index @status_messages = StatusMessage.paginate :page => params[:page], :order => 'created_at DESC' - - respond_to do |format| format.html end - end def create diff --git a/app/models/album.rb b/app/models/album.rb index b6daabb47..b30cb5c45 100644 --- a/app/models/album.rb +++ b/app/models/album.rb @@ -27,6 +27,7 @@ class Album def self.mine_or_friends(friend_param, current_user) if friend_param + puts "i am working" Album.find_all_by_person_id(current_user.friend_ids) else current_user.person.albums diff --git a/app/models/group.rb b/app/models/group.rb index 0f40d6d9b..275bbf3a5 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -2,12 +2,15 @@ class Group include MongoMapper::Document key :name, String + validates_presence_of :name key :person_ids, Array key :request_ids, Array + key :post_ids, Array many :people, :in => :person_ids, :class_name => 'Person' many :requests, :in => :request_ids, :class_name => 'Request' + many :posts, :in => :post_ids, :class_name => 'Post' belongs_to :user, :class_name => 'User' diff --git a/app/models/user.rb b/app/models/user.rb index dd1104ad2..145230097 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -52,6 +52,10 @@ class User ######## Posting ######## def post(class_name, options = {}) options[:person] = self.person + + group_id = options[:group_id] + options.delete(:group_id) + model_class = class_name.to_s.camelize.constantize post = model_class.instantiate(options) post.creator_signature = post.sign_with_key(encryption_key) @@ -62,6 +66,12 @@ class User self.raw_visible_posts << post self.save + + if group_id + group = self.groups.find_by_id(group_id) + group.posts << post + group.save + end post end @@ -69,7 +79,7 @@ class User def visible_posts( opts = {} ) if opts[:by_members_of] group = self.groups.find_by_id( opts[:by_members_of].id ) - self.raw_visible_posts.find_all_by_person_id( (group.person_ids + [self.person.id] ), :order => "created_at desc") + group.posts end end @@ -260,7 +270,7 @@ class User person.save elsif object.is_a?(Comment) - dispatch_comment object unless owns?(object) + dispatch_comment object unless owns?(object) else Rails.logger.debug("Saving object: #{object}") object.user_refs += 1 @@ -269,13 +279,18 @@ class User self.raw_visible_posts << object self.save - groups = groups_with_person(object.person) - object.socket_to_uid(id, :group_id => group.id) if (object.respond_to?(:socket_to_uid) && !self.owns?(object)) + groups = self.groups_with_person(object.person) + groups.each{ |group| + group.posts << object + group.save + object.socket_to_uid(id, :group_id => group.id) if (object.respond_to?(:socket_to_uid) && !self.owns?(object)) + } + end + end ###Helpers############ - def terse_url terse= self.url.gsub(/https?:\/\//, '') terse.gsub!(/www\./, '') @@ -312,7 +327,8 @@ class User end def groups_with_person person - groups.select {|group| group.person_ids.include? person.id} + id = ensure_bson person.id + groups.select {|group| group.person_ids.include? id} end protected diff --git a/app/views/groups/index.html.haml b/app/views/groups/index.html.haml index f1785389d..d46e122f7 100644 --- a/app/views/groups/index.html.haml +++ b/app/views/groups/index.html.haml @@ -1,4 +1,4 @@ -= render "shared/publisher" += render "shared/publisher", :group_id => @group.id %ul#stream - for post in @posts diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml index daaaaaabc..73f799c72 100644 --- a/app/views/groups/show.html.haml +++ b/app/views/groups/show.html.haml @@ -1,4 +1,4 @@ -= render "shared/publisher" += render "shared/publisher", :group_id => @group.id %ul#stream - for post in @posts = render type_partial(post), :post => post diff --git a/app/views/shared/_group_nav.haml b/app/views/shared/_group_nav.haml index 66f4fa0bd..455d90bb4 100644 --- a/app/views/shared/_group_nav.haml +++ b/app/views/shared/_group_nav.haml @@ -14,7 +14,12 @@ #friend_pictures - for friend in @group.people = person_image_link(friend) - = link_to "+", "#add_request_pane", :id => 'add_request_button', :class => "add_new" + = link_to (image_tag 'add_friend_button.png'), "#add_request_pane", :id => 'add_request_button' + + - if @group.people.count == 0 + %span.add_new_description + << click the plus to add friends to this group + .yo{:style => 'display:none'} #add_request_pane diff --git a/app/views/shared/_publisher.haml b/app/views/shared/_publisher.haml index 4d2f8640b..fe52ac354 100644 --- a/app/views/shared/_publisher.haml +++ b/app/views/shared/_publisher.haml @@ -3,6 +3,9 @@ #publisher_form = form_for StatusMessage.new, :remote => true do |f| = f.error_messages + + = f.hidden_field :group_id, :value => group_id + %p %label{:for => "status_message_message"} Message = f.text_area :message, :rows => 2 diff --git a/db/seeds/dev.rb b/db/seeds/dev.rb index f13e27f4c..0dfe3f96e 100644 --- a/db/seeds/dev.rb +++ b/db/seeds/dev.rb @@ -1,25 +1,28 @@ -# This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). -# -# Examples: -# -# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) -# Mayor.create(:name => 'Daley', :city => citie - require 'config/environment' +host = "localhost:3000" +url = "http://#{host}/" # Create seed user -user = User.create( :email => "robert@joindiaspora.com", - :password => "evankorth", +user = User.create!( :email => "tom@tom.joindiaspora.com", + :password => "evankorth", :person => Person.new( - :email => "robert@joindiaspora.com", - :url => "http://localhost:3000/", - :profile => Profile.new( - :first_name => "bobert", - :last_name => "brin" ))) + :email => "tom@tom.joindiaspora.com", + :url => url, + :profile => Profile.new( :first_name => "Alexander", :last_name => "Hamiltom" )) + ) +user.person.save! -puts user.save -puts user.person.save! -puts user.save! -puts user.person.inspect -puts user.inspect +user2 = User.create!( :email => "korth@tom.joindiaspora.com", + :password => "evankorth", + :person => Person.new( :email => "korth@tom.joindiaspora.com", + :url => url, + :profile => Profile.new( :first_name => "Evan", + :last_name => "Korth"))) + +user2.person.save! + +# friending users +group = user.group(:name => "other dudes") +request = user.send_friend_request_to(user2.receive_url, group.id) +reversed_request = user2.accept_friend_request( request.id, user2.group(:name => "presidents").id ) +user.receive reversed_request.to_diaspora_xml diff --git a/public/images/add_friend_button.png b/public/images/add_friend_button.png new file mode 100644 index 000000000..6248f1b88 Binary files /dev/null and b/public/images/add_friend_button.png differ diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 18289b738..a5b4b5fc6 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -430,24 +430,21 @@ h1.big_text { #group ul > li.selected, #group ul > li.selected a { color: white; font-weight: bold; - font-size: 18px; - text-shadow: 0 2px 0px black; } + font-size: 18px; } #group a { color: #aaaaaa; font-weight: normal; } - #group #friend_pictures .add_new { + #group #friend_pictures .add_new_description { position: relative; - display: inline-block; height: 40px; - width: 40px; - background-color: black; - text-align: center; - font-size: 40px; + display: inline-block; + background-color: #222222; + color: #999999; + top: -16px; line-height: 40px; - top: -6px; } - #group #friend_pictures .add_new:hover { - background: #999999; - color: black; } + padding: 0 1em; + margin-bottom: -20px; + font-style: italic; } #group #friend_pictures img { height: 40px; } diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 0ac9dbfce..b41a1120a 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -546,21 +546,22 @@ h1.big_text :weight normal #friend_pictures - .add_new - :position relative - :display inline-block - :height 40px - :width 40px - :background - :color #000 - :text-align center - :font-size 40px - :line-height 40px - :top -6px - &:hover - :background #999 - :color #000 + .add_new_description + :position relative + :height 40px + :display inline-block + :background + :color #222 + :color #999 + :top -16px + :line + :height 40px + :padding 0 1em + :margin + :bottom -20px + :font + :style italic img :height 40px diff --git a/spec/models/album_spec.rb b/spec/models/album_spec.rb index f5038ec1c..e31dc5e4a 100644 --- a/spec/models/album_spec.rb +++ b/spec/models/album_spec.rb @@ -88,8 +88,5 @@ describe Album do it 'should have an id' do @xml.include?(@album.id.to_s).should be true end - end - - end diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 1d0f400d5..530bcec8c 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -33,12 +33,15 @@ describe Group do group.people.include?(@friend_2).should be true group.people.size.should == 2 end - end describe 'querying' do before do - @group = @user.group(:name => 'losers', :people => [@friend]) + @group = @user.group(:name => 'losers') + @user.activate_friend(@friend, @group) + @group2 = @user2.group(:name => 'failures') + friend_users(@user, @group, @user2, @group2) + @group.reload end it 'belong to a user' do @@ -49,7 +52,43 @@ describe Group do it 'should have people' do @group.people.all.include?(@friend).should be true - @group.people.size.should == 1 + @group.people.size.should == 2 + end + + it 'should be accessible through the user' do + groups = @user.groups_with_person(@friend) + groups.size.should == 1 + groups.first.id.should == @group.id + groups.first.people.size.should == 2 + groups.first.people.include?(@friend).should be true + groups.first.people.include?(@user2.person).should be true end end + + describe 'posting' do + + it 'should add post to group via post method' do + @group = @user.group(:name => 'losers', :people => [@friend]) + + status_message = @user.post( :status_message, :message => "hey", :group_id => @group.id ) + + @group.reload + @group.posts.include?(status_message).should be true + end + + it 'should add post to group via receive method' do + group = @user.group(:name => 'losers') + group2 = @user2.group(:name => 'winners') + friend_users(@user, group, @user2, group2) + + message = @user2.post(:status_message, :message => "Hey Dude") + + @user.receive message.to_diaspora_xml + + group.reload + group.posts.include?(message).should be true + @user.visible_posts(:by_members_of => group).include?(message).should be true + end + + end end diff --git a/spec/models/user/receive_spec.rb b/spec/models/user/receive_spec.rb index 4919e66f4..a657f41e8 100644 --- a/spec/models/user/receive_spec.rb +++ b/spec/models/user/receive_spec.rb @@ -25,6 +25,18 @@ describe User do Post.all(:person_id => person.id).first.message.should == 'store this!' StatusMessage.all.size.should == 1 end + + it 'should not create new groups on message receive' do + num_groups = @user.groups.size + + (0..5).each{ |n| + status_message = @user2.post :status_message, :message => "store this #{n}!" + xml = status_message.to_diaspora_xml + @user.receive( xml ) + } + + @user.groups.size.should == num_groups + end describe 'post refs' do before do