diff --git a/lib/diaspora/federation.rb b/lib/diaspora/federation.rb index e84d8348b..b575f39f8 100644 --- a/lib/diaspora/federation.rb +++ b/lib/diaspora/federation.rb @@ -15,5 +15,6 @@ module Diaspora end end +require "diaspora/federation/dispatcher" require "diaspora/federation/entities" require "diaspora/federation/receive" diff --git a/lib/diaspora/federation/dispatcher.rb b/lib/diaspora/federation/dispatcher.rb index f0ffea4f7..35d1dcfc5 100644 --- a/lib/diaspora/federation/dispatcher.rb +++ b/lib/diaspora/federation/dispatcher.rb @@ -10,7 +10,11 @@ module Diaspora end def self.build(sender, object, opts={}) - new(sender, object, opts) + if object.try(:public?) + Public.new(sender, object, opts) + else + Private.new(sender, object, opts) + end end def self.defer_dispatch(sender, object, opts={}) @@ -27,7 +31,6 @@ module Diaspora attr_reader :sender, :object, :opts def deliver_to_services - # TODO: pubsubhubbub, relay deliver_to_user_services end @@ -44,8 +47,8 @@ module Diaspora Workers::ReceiveLocal.perform_async(obj.class.to_s, obj.id, people.map(&:owner_id)) end - def deliver_to_remote(people) - # TODO: send to remote hosts + def deliver_to_remote(_people) + raise NotImplementedError, "This is an abstract base method. Implement in your subclass." end def deliver_to_user_services @@ -71,3 +74,6 @@ module Diaspora end end end + +require "diaspora/federation/dispatcher/private" +require "diaspora/federation/dispatcher/public" diff --git a/lib/diaspora/federation/dispatcher/private.rb b/lib/diaspora/federation/dispatcher/private.rb new file mode 100644 index 000000000..091ed7ff8 --- /dev/null +++ b/lib/diaspora/federation/dispatcher/private.rb @@ -0,0 +1,11 @@ +module Diaspora + module Federation + class Dispatcher + class Private < Dispatcher + def deliver_to_remote(people) + # TODO + end + end + end + end +end diff --git a/lib/diaspora/federation/dispatcher/public.rb b/lib/diaspora/federation/dispatcher/public.rb new file mode 100644 index 000000000..f6ceea0b6 --- /dev/null +++ b/lib/diaspora/federation/dispatcher/public.rb @@ -0,0 +1,16 @@ +module Diaspora + module Federation + class Dispatcher + class Public < Dispatcher + def deliver_to_services + # TODO: pubsubhubbub, relay + super + end + + def deliver_to_remote(people) + # TODO + end + end + end + end +end