Sha256: 1a338f5d6c77d93d6898bd94106f9bd46314907660f3a76fd204c337a1a3a97b

Contents?: true

Size: 844 Bytes

Versions: 1

Compression:

Stored size: 844 Bytes

Contents

module Services
  class Base
    module UniquenessChecker
      def self.prepended(mod)
        mod.const_set :NotUniqueError, Class.new(mod::Error)
      end

      def call(*args)
        key = unique_key(args)
        if Services.configuration.redis.exists(key)
          raise self.class::NotUniqueError
        else
          Services.configuration.redis.setex key, 60 * 60, Time.now
          begin
            super
          ensure
            Services.configuration.redis.del key
          end
        end
      end

      private

      def unique_key(args)
        # TODO: symbolize keys in hashes in args and sort hashes by key
        args = args.dup
        key = [
          'services',
          'uniqueness',
          self.class.to_s,
          Digest::MD5.hexdigest(args.to_s)
        ].join(':')
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
services-0.0.1 lib/services/base/uniqueness_checker.rb