Sha256: c18e5c0e50c6ff182f6ee1055cf71435cca3b1c7e6dd75d240c0e15f35aa3b4a

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

module Kitkat
  # Database-level operations.
  class Database
    def initialize(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 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.1 lib/kitkat/database.rb