From 9a2a2e7b14976060a03e3ee9eef2ca8259ba32fa Mon Sep 17 00:00:00 2001 From: Akash Manohar J Date: Wed, 7 Mar 2012 14:56:19 +0530 Subject: [PATCH] Organises the app with libraries and settings Signed-off-by: Akash Manohar J --- app/models/activity_observer.rb | 6 ++++++ app/views/layouts/application.html.erb | 9 +++++++-- config/application.rb | 2 +- config/initializers/faye.rb | 1 - config/initializers/kandan.rb | 6 ++++++ config/kandan_settings.yml | 9 +++++++++ lib/broadcasters/faye.rb | 18 ++++++++++++++++++ lib/kandan_config.rb | 15 +++++++++++++++ 8 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 app/models/activity_observer.rb delete mode 100644 config/initializers/faye.rb create mode 100644 config/initializers/kandan.rb create mode 100644 config/kandan_settings.yml create mode 100644 lib/broadcasters/faye.rb create mode 100644 lib/kandan_config.rb diff --git a/app/models/activity_observer.rb b/app/models/activity_observer.rb new file mode 100644 index 00000000..78dc7942 --- /dev/null +++ b/app/models/activity_observer.rb @@ -0,0 +1,6 @@ +class ActivityObserver < ActiveRecord::Observer + + def after_save(activity) + Kandan::Config.broadcaster.broadcast(activity.attributes) + end +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 6e7daf47..8a2a9672 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -2,9 +2,14 @@ Kandan - <%= stylesheet_link_tag "application", :media => "all" %> + <%= stylesheet_link_tag "application", :media => "all" %> + + <%- Kandan::Config.broadcaster.assets.each do |asset| %> + <%= javascript_include_tag asset %> + <%- end %> + <%= javascript_include_tag "application" %> - <%= javascript_include_tag "#{ENV['FAYEJS']}.js" %> + <%= csrf_meta_tags %> diff --git a/config/application.rb b/config/application.rb index 771534d3..00c6be92 100644 --- a/config/application.rb +++ b/config/application.rb @@ -29,7 +29,7 @@ class Application < Rails::Application # config.plugins = [ :exception_notification, :ssl_requirement, :all ] # Activate observers that should always be running. - # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + config.active_record.observers = :activity_observer # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. diff --git a/config/initializers/faye.rb b/config/initializers/faye.rb deleted file mode 100644 index e731c722..00000000 --- a/config/initializers/faye.rb +++ /dev/null @@ -1 +0,0 @@ -ENV['FAYEJS'] ||= "/remote/faye" diff --git a/config/initializers/kandan.rb b/config/initializers/kandan.rb new file mode 100644 index 00000000..c99bd687 --- /dev/null +++ b/config/initializers/kandan.rb @@ -0,0 +1,6 @@ +Dir["#{Rails.root}/lib/broadcasters/**/*.rb"].each do |file| + require file +end + +require "#{Rails.root}/lib/kandan_config.rb" + diff --git a/config/kandan_settings.yml b/config/kandan_settings.yml new file mode 100644 index 00000000..485c2946 --- /dev/null +++ b/config/kandan_settings.yml @@ -0,0 +1,9 @@ +######################## +# Kandan settings file +######################## + + +# What should be used for broadcasting messages to browser? +# valid options: Faye +:broadcaster: + :name: "Faye" diff --git a/lib/broadcasters/faye.rb b/lib/broadcasters/faye.rb new file mode 100644 index 00000000..97deb767 --- /dev/null +++ b/lib/broadcasters/faye.rb @@ -0,0 +1,18 @@ +module Broadcasters + class Faye + class << self + def broadcast(channel, message) + # NOTE FAYE_CLIENT is set in the config.ru file due to the faye bug + if defined?(FAYE_CLIENT) + FAYE_CLIENT.publish channel, message + else + puts "OOPS! FAYE_CLIENT is not defined" + end + end + + def assets + ["/remote/faye.js"] + end + end + end +end diff --git a/lib/kandan_config.rb b/lib/kandan_config.rb new file mode 100644 index 00000000..7ab31ed1 --- /dev/null +++ b/lib/kandan_config.rb @@ -0,0 +1,15 @@ +module Kandan + class Config + + class << self + def options + @config ||= YAML.load_file "#{Rails.root}/config/kandan_settings.yml" + end + + def broadcaster + Broadcasters.const_get(Kandan::Config.options[:broadcaster][:name]) + end + end + + end +end