Sha256: 0d59ca9b278cd91623b0b86699836b1a46b56f19fa292475a3e941991c80367e

Contents?: true

Size: 1.05 KB

Versions: 14

Compression:

Stored size: 1.05 KB

Contents

begin
  require "batch"
rescue LoadError => e
  e.message << "\nTry `gem install batch`."
end

module Ohm
  module Utils
    class Upgrade
      def redis
        Ohm.redis
      end

      attr :models
      attr :types

      def initialize(models)
        @models = models
        @types = Hash.new { |hash, model| hash[model] = {} }
      end

      def run
        models.each do |model|
          ns = Ohm::Key.new(model, redis)

          puts "Upgrading #{model}..."

          Batch.each(ns[:all].smembers) do |id|
            instance = ns[id]

            attrs = []
            deletes = []

            redis.keys(instance["*"]).each do |key|
              field = key[instance.size.succ..-1]

              type = (types[model][field] ||= redis.type(key).to_sym)

              if type == :string
                attrs << field
                attrs << redis.get(key)
                deletes << key
              end
            end

            redis.hmset(instance, *attrs)
            redis.del(*deletes)
          end
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
ohm-1.0.0.rc4 lib/ohm/utils/upgrade.rb
ohm-1.0.0.rc3 lib/ohm/utils/upgrade.rb
ohm-1.0.0.rc2 lib/ohm/utils/upgrade.rb
ohm-1.0.0.rc1 lib/ohm/utils/upgrade.rb
ohm-1.0.0.alpha2 lib/ohm/utils/upgrade.rb
ohm-1.0.0.alpha1 lib/ohm/utils/upgrade.rb
ohm-0.1.5 lib/ohm/utils/upgrade.rb
ohm-0.1.4 lib/ohm/utils/upgrade.rb
ohm-0.1.3 lib/ohm/utils/upgrade.rb
ohm-0.1.2 lib/ohm/utils/upgrade.rb
ohm-0.1.1 lib/ohm/utils/upgrade.rb
ohm-0.1.0 lib/ohm/utils/upgrade.rb
ohm-0.1.0.rc6 lib/ohm/utils/upgrade.rb
ohm-0.1.0.rc5 lib/ohm/utils/upgrade.rb