Sha256: 2be86f950f4d2fbfac84a3cd2b5bdd6b8862f389f826085a62af890a32a6c9b1

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

module ActiveRecordViews
  class ChecksumCache
    def initialize(connection)
      @connection = connection
      init_state_table!
    end

    def init_state_table!
      table_exists = @connection.table_exists?('active_record_views')

      if table_exists && !@connection.column_exists?('active_record_views', 'class_name')
        @connection.execute 'DROP TABLE active_record_views;'
        table_exists = false
      end

      unless table_exists
        @connection.execute 'CREATE TABLE active_record_views(name text PRIMARY KEY, class_name text NOT NULL UNIQUE, checksum text NOT NULL);'
      end
    end

    def get(name)
      @connection.select_one("SELECT class_name, checksum FROM active_record_views WHERE name = #{@connection.quote name}").try(:symbolize_keys)
    end

    def set(name, data)
      if data
        data.assert_valid_keys :class_name, :checksum
        if @connection.update("UPDATE active_record_views SET class_name = #{@connection.quote data[:class_name]}, checksum = #{@connection.quote data[:checksum]} WHERE name = #{@connection.quote name}") == 0
          @connection.insert "INSERT INTO active_record_views (name, class_name, checksum) VALUES (#{@connection.quote name}, #{@connection.quote data[:class_name]}, #{@connection.quote data[:checksum]})"
        end
      else
        @connection.delete "DELETE FROM active_record_views WHERE name = #{@connection.quote name}"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activerecord_views-0.0.4 lib/active_record_views/checksum_cache.rb