Sha256: 51d1c85e8370cf6a8ced348ffcbf497491e35c4b915857b10f531f2c337b9788

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module Kitkat
  # Database-level operations.
  class Database
    def initialize(path)
      ensure_dir_exists(path)

      @connection = SQLite3::Database.new(path)

      load_schema

      freeze
    end

    def insert(file_info)
      connection.execute(
        sql_statement,
        file_info.relative_path,
        file_info.mime_type,
        file_info.mime_subtype,
        file_info.bytesize,
        file_info.last_modified_at.to_s,
        file_info.digest,
        Time.now.utc.to_s
      )

      self
    end

    private

    attr_reader :connection

    def ensure_dir_exists(path)
      dir = File.dirname(path)

      FileUtils.mkdir_p(dir) unless File.exist?(dir)
    end

    def sql_statement
      'INSERT OR IGNORE INTO files VALUES (?, ?, ?, ?, ?, ?, ?)'
    end

    def load_schema
      connection.execute <<-SQL
        CREATE TABLE IF NOT EXISTS files (
          path varchar NOT NULL,
          mime_type varchar NOT NULL,
          mime_subtype varchar NOT NULL,
          bytesize integer NOT NULL,
          last_modified_at datetime,
          digest varchar NOT NULL,
          created_at datetime NOT NULL
        );
      SQL

      connection.execute <<-SQL
        CREATE UNIQUE INDEX IF NOT EXISTS idx_files_path ON files (path);
      SQL
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kitkat-0.0.2 lib/kitkat/database.rb