Sha256: 929c411ccda7411e6a69f3218a58fa35fd92bb0176933be9790c7fc7123e59e2

Contents?: true

Size: 1.22 KB

Versions: 11

Compression:

Stored size: 1.22 KB

Contents

module AbAdmin
  module Concerns
    module Reloadable
      extend ActiveSupport::Concern

      included do
        class_attribute :reload_checker
      end

      module ClassMethods

        def has_reload_check(key=nil, logger=nil, &block)
          self.reload_checker = ::AbAdmin::Concerns::Reloadable::Reloader.new(key, logger, &block)
        end

        def check_reload
          self.reload_checker.check
        end

      end

      class Reloader

        def initialize(key=nil, logger=nil, &block)
          @key = key || "#{model_name.singular}_check_reload_key"
          @block = block
          @logger = logger || Rails.logger
          @stamp = fetch_stamp
          log "init #@key with value #@stamp"
        end

        def fetch_stamp
          Rails.cache.fetch(@key) { Time.now.to_i }
        end

        def check
          stamp = fetch_stamp
          if @stamp != stamp
            @stamp = stamp
            @block.call()
            log "#@key reloaded to #@stamp"
          end
        end

        def expire
          log "#@key expire"
          Rails.cache.delete(@key)
        end

        def log(msg)
          @logger.info "[RELOADER] (#{Process.pid}) #{msg}"
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
ab_admin-0.6.1 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.6.0 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.5.0 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.4.0 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.6 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.5 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.4 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.3 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.2 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.1 lib/ab_admin/concerns/reloadable.rb
ab_admin-0.3.0 lib/ab_admin/concerns/reloadable.rb