From fa4b0928ba747cdd1e7d5a9ed27d24645987d648 Mon Sep 17 00:00:00 2001 From: "John E. Vincent" <lusis.org+github.com@gmail.com> Date: Sun, 27 Feb 2011 13:58:08 -0500 Subject: [PATCH] more notes and stubbing --- lib/noah.rb | 3 +++ lib/noah/models.rb | 11 ++++++++--- lib/noah/models/ephemerals.rb | 8 ++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/noah.rb b/lib/noah.rb index f00f952..eb5068f 100644 --- a/lib/noah.rb +++ b/lib/noah.rb @@ -1,3 +1,6 @@ +module Noah + PROTECTED_PATHS = %w[a c h s w] +end begin require 'yajl' rescue LoadError diff --git a/lib/noah/models.rb b/lib/noah/models.rb index be5c456..d58c7c7 100644 --- a/lib/noah/models.rb +++ b/lib/noah/models.rb @@ -9,8 +9,9 @@ module Noah model.send :include, Ohm::Callbacks model.send :include, Ohm::ExtraValidations - model.after :save, :notify_via_redis_save - #model.after :create, :notify_via_redis_create + # removing this as it's simply redundant + # model.after :save, :notify_via_redis_save + model.after :create, :notify_via_redis_create model.after :update, :notify_via_redis_update model.before :delete, :stash_name model.after :delete, :notify_via_redis_delete @@ -46,6 +47,7 @@ module Noah def patternize_me "//noah/#{self.class_to_lower}/#{name.gsub(/^\//,'')}" end + def stash_name @deleted_name = self.name end @@ -60,7 +62,7 @@ module Noah o[:db].nil? ? "#{o[:url].split('/').last}" : "#{o[:db]}" end - ["save", "create", "update", "delete"].each do |meth| + ["create", "update", "delete"].each do |meth| class_eval do define_method("notify_via_redis_#{meth}".to_sym) do db = self.dbnum @@ -69,6 +71,9 @@ module Noah #pub_category = "#{db}:noah.#{self.class.to_s}[#{name}].#{meth}" pub_category = "#{self.patternize_me}.#{meth}" Ohm.redis.publish(pub_category, self.to_hash.merge({"action" => meth, "pubcategory" => pub_category}).to_json) + + # The following provides a post post-action hook. It allows a class to provide it's own handling after the fact + # good example is in [Noah::Ephemeral] where it's used to check for/clean up expired ephemeral nodes entries self.send("#{meth}_hook".to_sym) unless self.protected_methods.member?("#{meth}_hook".to_sym) == false end end diff --git a/lib/noah/models/ephemerals.rb b/lib/noah/models/ephemerals.rb index 9d96add..71089f2 100644 --- a/lib/noah/models/ephemerals.rb +++ b/lib/noah/models/ephemerals.rb @@ -19,7 +19,15 @@ module Noah protected def save_hook + # called after any create,update,delete + # logic needed to expire any orphaned ephemerals end + + private + def path_protected?(path_part) + # Check for protected paths in ephemeral nodes + end + end end -- 2.22.0