From 5350b40e3c4d27d0c78b026c3db6e2677389f9a4 Mon Sep 17 00:00:00 2001 From: maxwell Date: Wed, 7 Jul 2010 15:27:22 -0700 Subject: [PATCH] broken autotest for rafi --- app/models/comment.rb | 4 +- app/models/post.rb | 4 +- config/initializers/inflections.rb | 2 +- config/initializers/socket.rb | 39 ++++++++++----- lib/socket_render.rb | 80 +++++++++++++++--------------- spec/lib/message_handler_spec.rb | 4 +- spec/lib/socket_renderer_spec.rb | 4 +- spec/spec_helper.rb | 4 +- 8 files changed, 79 insertions(+), 62 deletions(-) diff --git a/app/models/comment.rb b/app/models/comment.rb index 98b0300fc..33d235345 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -36,6 +36,6 @@ class Comment def send_to_view - WebSocket.update_clients(self) + WebSocket.push_to_clients(self) end -end \ No newline at end of file +end diff --git a/app/models/post.rb b/app/models/post.rb index 3598dbc34..066d768a9 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -53,11 +53,11 @@ class Post end def send_to_view - WebSocket.update_clients(self) + WebSocket.push_to_clients(self) end def remove_from_view - WebSocket.update_clients(Retraction.for(self)) + WebSocket.push_to_clients(Retraction.for(self)) end end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index dded445cc..bf760d087 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -7,5 +7,5 @@ # inflect.singular /^(ox)en/i, '\1' # inflect.irregular 'person', 'people' # inflect.uncountable %w( fish sheep ) - inflect.uncountable %w(dashboard) + inflect.uncountable %w(dashboard socket) end diff --git a/config/initializers/socket.rb b/config/initializers/socket.rb index 105314b8a..ac79810fd 100644 --- a/config/initializers/socket.rb +++ b/config/initializers/socket.rb @@ -1,31 +1,44 @@ require 'em-websocket' require 'eventmachine' -require 'lib/socket_render' + + + module WebSocket EM.next_tick { - EM.add_timer(0.1) do - @channel = EM::Channel.new - puts @channel.inspect - include SocketRenderer - - SocketRenderer.instantiate_view - end + initialize_channel 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 } + @ws = ws + sid = SocketController.new.new_subscriber(ws) - ws.onmessage { |msg| }#@channel.push msg; puts msg} + ws.onmessage { |msg| SocketController.new.incoming(msg) }#@channel.push msg; puts msg} - ws.onclose { @channel.unsubscribe(sid) } + ws.onclose { SocketController.new.delete_subscriber(sid) } } end } - def self.update_clients(object) - @channel.push(SocketRenderer.view_hash(object).to_json) if @channel + def self.initialize_channel + @channel = EM::Channel.new + puts @channel.inspect end + + def self.push_to_clients(html) + @channel.push(html) + end + + def self.unsubscribe(sid) + @channel.unsubscribe(sid) + end + + + def self.subscribe + @channel.subscribe{ |msg| puts "hello #{msg}";@ws.send msg } + end + end + diff --git a/lib/socket_render.rb b/lib/socket_render.rb index 8d77f4c6a..6f8bcbad9 100644 --- a/lib/socket_render.rb +++ b/lib/socket_render.rb @@ -1,40 +1,40 @@ -module SocketRenderer - require 'app/helpers/application_helper' - def self.instantiate_view - @view = ActionView::Base.new(ActionController::Base.view_paths, {}) - class << @view - include ApplicationHelper - include Rails.application.routes.url_helpers - include ActionController::RequestForgeryProtection::ClassMethods - def protect_against_forgery? - false - end - end - end - - def self.view_hash(object) - begin - v = view_for(object) unless object.is_a? Retraction - - rescue Exception => e - puts "in failzord " + v.inspect - puts object.inspect - puts e.message - raise e - end - - {:class =>object.class.to_s.underscore.pluralize, :html => v, :post_id => obj_id(object)} - end - - def self.view_for(object) - @view.render @view.type_partial(object), :post => object - end - - def self.obj_id(object) - if object.is_a? Post - object.id - else - object.post_id - end - end -end +# module SocketRenderer +# require 'app/helpers/application_helper' +# def self.instantiate_view +# @view = ActionView::Base.new(ActionController::Base.view_paths, {}) +# class << @view +# include ApplicationHelper +# include Rails.application.routes.url_helpers +# include ActionController::RequestForgeryProtection::ClassMethods +# def protect_against_forgery? +# false +# end +# end +# end +# +# def self.view_hash(object) +# begin +# v = view_for(object) unless object.is_a? Retraction +# +# rescue Exception => e +# puts "in failzord " + v.inspect +# puts object.inspect +# puts e.message +# raise e +# end +# +# {:class =>object.class.to_s.underscore.pluralize, :html => v, :post_id => obj_id(object)} +# end +# +# def self.view_for(object) +# @view.render @view.type_partial(object), :post => object +# end +# +# def self.obj_id(object) +# if object.is_a? Post +# object.id +# else +# object.post_id +# end +# end +# end diff --git a/spec/lib/message_handler_spec.rb b/spec/lib/message_handler_spec.rb index 3ec0a6e2c..d2ffddb6a 100644 --- a/spec/lib/message_handler_spec.rb +++ b/spec/lib/message_handler_spec.rb @@ -105,10 +105,10 @@ describe MessageHandler do @handler.add_get_request(@message_urls) @handler.size.should == 6 @handler.process - timer = EventMachine::Timer.new(1) do + #timer = EventMachine::Timer.new(1) do @handler.size.should == 0 EventMachine.stop - end + #end } end diff --git a/spec/lib/socket_renderer_spec.rb b/spec/lib/socket_renderer_spec.rb index 19144d852..8b9cfcd6d 100644 --- a/spec/lib/socket_renderer_spec.rb +++ b/spec/lib/socket_renderer_spec.rb @@ -1,4 +1,5 @@ -require File.dirname(__FILE__) + '/../spec_helper' +=begin + require File.dirname(__FILE__) + '/../spec_helper' describe SocketRenderer do before do @@ -21,3 +22,4 @@ describe SocketRenderer do end end +=end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a72af5197..8a8b09e50 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -24,7 +24,9 @@ RSpec.configure do |config| config.before(:each) do DatabaseCleaner.start - #WebSocket.stub!(:update_clients) + WebSocket.stub!(:push_to_clients).and_return("stub") + WebSocket.stub!(:unsubscribe).and_return("stub") + WebSocket.stub!(:subscribe).and_return("stub") end config.after(:each) do