Sha256: 3b8ff9e1cb7d47e5fcffe790138abb81dc98d4bf0ec4ace908c5b661a24978f4

Contents?: true

Size: 1.45 KB

Versions: 21

Compression:

Stored size: 1.45 KB

Contents

module RailsConnector

  class DictStorage

    class << self

      def configure(config)
        @config = config.present? ? config.symbolize_keys : {}
        @storage = nil
      end

      def get(key)
        cache.fetch(key) { storage.get(key) }
      end

      # clears the in-memory cache.
      # does not affect a potential second level cache present in the underlying storage.
      def clear_first_level_cache
        @cache = nil
      end

      attr_reader :config

      def storage
        @storage ||=
            case config[:type]
            when "s3"
              s3_storage(config)
            when "file"
              file_storage(config)
            else
              raise "Unsupported dict storage type #{config[:type]}"
            end
      end

      private

      def cache
        @cache ||= Cache.new
      end

      def s3_storage(config)
        if config && !config.key?("s3_endpoint") && !config.key?(:s3_endpoint)
          config = config.merge(:s3_endpoint => "s3-eu-west-1.amazonaws.com")
        end

        bucket = AWS::S3.new(config).buckets[config[:bucket_name]]
        Kvom::Storage::S3Storage.new({
          :bucket => bucket,
          :bucket_prefix => "dict",
          :cache => s3_storage_cache,
          :cache_prefix => "dict.",
        })
      end

      def s3_storage_cache
        Rails.cache
      end

      def file_storage(config)
        Kvom::Storage::FileSystemStorage.new(config)
      end

    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
infopark_cloud_connector-6.8.0.322.c003f11 lib/rails_connector/dict_storage.rb