Sha256: 580e2d220ccbac06784fa3153fd29f8ecaa783f91c5ee45d9d858217fabd543a

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

require "sdbm"
require "securerandom"
require "date"
require "csv"
require "ostruct"
require "fileutils"
require "oj"
require "msgpack"
require "thread"
require_relative "dddr/sdbm"
require_relative "dddr/sequel"
require_relative "dddr/version"

module Dddr
  ENTITIES = []

  def self.configuration
    @configuration ||= OpenStruct.new
  end

  class MessagePack
    def self.load(obj)
      ::MessagePack.unpack(obj)
    end

    def self.dump(obj)
      obj.to_msgpack
    end
  end

  class Serializer
    def initialize(engine)
      @engine = engine
    end

    def dump(obj)
        @engine.dump(obj)
    end

    def load(obj)
        @engine.load(obj)
    end
  end

  def self.configure
    configuration.env = ENV["DDDR_ENV"] || "development"
    configuration.data_dir = "/var/dddr"
    configuration.engine = :sdbm
    configuration.serializer = MessagePack
    configuration.container = nil
    yield(configuration) if block_given?
  end

  class Error < StandardError; end

  module Entity
    def self.create_properties(*names)
      names.each do |name|
        attr_accessor name
      end
    end

    def self.included(base)
      if Dddr.configuration.engine == :sdbm
        Dddr::ENTITIES << base
        include Dddr::Sdbm
        base.extend(Dddr::Sdbm::ClassMethods)
      end

      if Dddr.configuration.engine == :sequel
        include Dddr::Sequel
        base.extend(Dddr::Sequel::ClassMethods)
      end

    end
    
    def to_hash
      instance_variables.each_with_object({}) do |var, hash|
        hash[var.to_s.delete("@").to_sym] = instance_variable_get(var)
      end
    end

    def from_hash(uid, data_hash)
      self.uid = uid
      data_hash.each do |attribute, value|
        send(:"#{attribute}=", value) if respond_to?(:"#{attribute}=")
      end
    end


    attr_accessor :uid, :created_at, :last_updated_at, :deleted, :deleted_at

    def new?
      created_at.nil?
    end
  end
end

Dddr.configure

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dddr-2.6.0 lib/dddr.rb