Merge branch 'master' of github.com:diaspora/diaspora_rails

This commit is contained in:
danielvincent 2010-06-30 13:12:09 -07:00
commit f7e4f1db32
20 changed files with 119 additions and 84 deletions

View file

@ -1,6 +1,7 @@
class ApplicationController < ActionController::Base
protect_from_forgery :except => :receive
layout 'application'
before_filter :set_friends
layout :layout_by_resource

View file

@ -1,7 +1,6 @@
class BlogsController < ApplicationController
before_filter :authenticate_user!
def index
@blogs = Blog.paginate :page => params[:page], :order => 'created_at DESC'
end

View file

@ -2,7 +2,7 @@ class Comment
include MongoMapper::Document
include ROXML
xml_accessor :text
xml_accessor :person, :as => Person
key :text, String
key :target, String

View file

@ -4,7 +4,8 @@ class Person
xml_accessor :email
xml_accessor :url
xml_accessor :profile, :as => Profile
key :email, String
key :url, String

View file

@ -6,6 +6,7 @@ class Post
include Diaspora::Webhooks
xml_accessor :_id
xml_accessor :person, :as => Person
key :person_id, ObjectId

View file

@ -1,6 +1,10 @@
class Profile
include MongoMapper::Document
include ROXML
xml_accessor :first_name
xml_accessor :last_name
key :first_name, String
key :last_name, String

View file

@ -1,6 +1,6 @@
%li.comment{:id => comment.id}
%span.from
= link_to_person comment.person
= comment.text
= auto_link comment.text
%div.time
= "#{time_ago_in_words(comment.updated_at)} ago"

View file

@ -0,0 +1,11 @@
:javascript
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-17207587-1']);
_gaq.push(['_setDomainName', '#{root_url}']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

View file

@ -0,0 +1,27 @@
- if user_signed_in?
- unless request.user_agent.include? "Safari" ||"Chrome"
= javascript_include_tag 'FABridge', 'swfobject', 'web_socket'
:javascript
WebSocket.__swfLocation = "/javascripts/WebSocketMain.swf";
:javascript
$(document).ready(function(){
function debug(str){ $("#debug").append("<p>" + str); };
ws = new WebSocket("ws://#{request.host}:8080/");
ws.onmessage = function(evt) {
var obj = jQuery.parseJSON(evt.data);
debug("got a " + obj['class']);
if((location.href.indexOf(obj['class']) != -1 ) || (location.pathname == '/')) {
$("#stream").prepend(
$(obj['html']).fadeIn("fast", function(){
$("#stream label:first").inFieldLabels();
}
)
);
};
};
ws.onclose = function() { debug("socket closed"); };
ws.onopen = function() {
ws.send(location.pathname);
debug("connected...");
};});

View file

@ -2,7 +2,8 @@
%html
%head
%title
= "diaspora"
= "diaspora "
= "- #{User.first.real_name}" if User.first
%meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
%meta{"http-equiv"=> "X-UA-Compatible", :content =>"chrome=1" }
@ -11,73 +12,12 @@
/= javascript_include_tag"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
= javascript_include_tag 'jquery142', 'rails', 'view', 'publisher'
= javascript_include_tag 'tiny_mce/tiny_mce.js','jquery.infieldlabel'
:javascript
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-17207587-1']);
_gaq.push(['_setDomainName', '#{root_url}']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
- unless request.user_agent.include? "Safari" ||"Chrome"
= javascript_include_tag 'FABridge', 'swfobject', 'web_socket'
:javascript
WebSocket.__swfLocation = "/javascripts/WebSocketMain.swf";
= render "js/google_a_js"
= render "js/websocket_js"
= csrf_meta_tag
= yield(:head)
- if user_signed_in?
:javascript
$(document).ready(function(){
function debug(str){ $("#debug").append("<p>" + str); };
ws = new WebSocket("ws://#{request.host}:8080/");
ws.onmessage = function(evt) {
var obj = jQuery.parseJSON(evt.data);
debug("got a " + obj['class']);
if((location.href.indexOf(obj['class']) != -1 ) || (location.pathname == '/')) {
$("#stream").prepend(
$(obj['html']).fadeIn("fast", function(){
$("#stream label:first").inFieldLabels();
}
)
);
};
};
ws.onclose = function() { debug("socket closed"); };
ws.onopen = function() {
ws.send(location.pathname);
debug("connected...");
};
$("#stream li").hover(function() {
$(this).children(".destroy_link").fadeIn(0);
}, function() {
$(this).children(".destroy_link").fadeOut(0);
});
// in field label plugin
$(".show_post_comments").click( function() {
if( $(this).hasClass( "visible" )) {
$(this).html($(this).html().replace("hide", "show"));
$(this).parents("li").children(".comments").fadeOut(100);
} else {
$(this).html($(this).html().replace("show", "hide"));
$(this).parents("li").children(".comments").fadeIn(100);
}
$(this).toggleClass( "visible" );
});
});
= javascript_include_tag 'satisfaction' , 'satisfaction-display'
%body

View file

@ -18,10 +18,13 @@
.container
- flash.each do |name, msg|
= content_tag :div, msg, :id => "flash_#{name}"
%div#huge_text
welcome back,
%span
= User.first.real_name.downcase
- if User.first
%div#huge_text
welcome back,
%span
= User.first.real_name.downcase
-else
%div#huge_text
you need to add a user first!
= yield

View file

@ -1,7 +1,7 @@
%li.message{:id => post.id, :class => ("mine" if mine?(post))}
%span.from
= link_to_person post.person
= post.message
= auto_link post.message
%div.time
= link_to(how_long_ago(post), status_message_path(post))

11
config/app_config.yml Normal file
View file

@ -0,0 +1,11 @@
development:
debug: true
socket_port: 8080
test:
debug: false
socket_port: 8081
production:
debug: false
socket_port: 8080

View file

@ -0,0 +1,2 @@
raw_config = File.read("#{Rails.root}/config/app_config.yml")
APP_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys

View file

@ -11,7 +11,10 @@ module WebSocket
SocketRenderer.instantiate_view
end
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080, :debug =>true) do |ws|
EventMachine::WebSocket.start(
:host => "0.0.0.0",
:port => APP_CONFIG[:socket_port],
:debug =>APP_CONFIG[:debug]) do |ws|
ws.onopen {
sid = @channel.subscribe { |msg| ws.send msg }
@ -25,6 +28,4 @@ module WebSocket
def self.update_clients(object)
@channel.push(SocketRenderer.view_hash(object).to_json) if @channel
end
end

View file

@ -53,4 +53,23 @@ $(document).ready(function(){
$('#flash_notice, #flash_error, #flash_alert').delay(1500).slideUp(130);
$("#stream li").hover(function() {
$(this).children(".destroy_link").fadeIn(0);
}, function() {
$(this).children(".destroy_link").fadeOut(0);
});
// in field label plugin
$(".show_post_comments").live('click', function() {
if( $(this).hasClass( "visible" )) {
$(this).html($(this).html().replace("hide", "show"));
$(this).parents("li").children(".comments").fadeOut(100);
} else {
$(this).html($(this).html().replace("show", "hide"));
$(this).parents("li").children(".comments").fadeIn(100);
}
$(this).toggleClass( "visible" );
});
});//end document ready

View file

@ -64,10 +64,10 @@ header {
border: none;
top: 10px; }
header #session_action {
position: absolute;
right: 300px;
float: right;
font-size: 110%;
top: 7px; }
top: 7px;
padding-right: 10px; }
header #session_action a {
color: #cccccc;
border: none; }

View file

@ -71,14 +71,14 @@ header
:top 10px
#session_action
:position absolute
:right 300px
:float right
:font
:size 110%
:top 7px
a
:color #ccc
:border none
:padding-right 10px
#show_filters
:z-index 100

View file

@ -13,4 +13,14 @@ describe Person do
friend.valid?.should == false
end
it 'should serialize to xml' do
friend_one = Factory.create(:friend)
xml = friend_one.to_xml.to_s
(xml.include? "friend").should == true
end
it 'should have a profile in its xml' do
user = Factory.create(:user)
xml = user.to_xml.to_s
(xml.include? "first_name").should == true
end
end

View file

@ -77,6 +77,11 @@ describe Post do
friend_posts.count.should == 2
end
end
describe 'xml' do
it 'should serialize to xml with its person' do
message = Factory.create(:status_message, :person => @user)
(message.to_xml.to_s.include? @user.email).should == true
end
end
end