Sha256: db910820ec1e4d5f67a4708347c5821a84a75b538efaffa191cc563d19fdc694

Contents?: true

Size: 1.18 KB

Versions: 4

Compression:

Stored size: 1.18 KB

Contents

module Repobahn
  module Repository
    extend ActiveSupport::Concern

    included do
      include Hooks
      define_hook :after_conversion
    end

    module ClassMethods

      def db_class(*args)
        @db_class = args.first unless args.empty?
        @db_class || default_db_class
      end

      def entity_class(*args)
        @entity_class = args.first unless args.empty?
        @entity_class || default_entity_class
      end

      private

      def default_db_class
        parts = default_entity_class.to_s.split('::')
        parts.insert -2, 'DB'
        parts.join('::').constantize
      end

      def default_entity_class
        name.singularize.constantize
      end

    end

    def db_class
      self.class.db_class
    end

    def entity_class
      self.class.entity_class
    end

    def db_instances_to_entities(db_instances)
      entities = Array(db_instances).map { |db_instance| db_instance_to_entity(db_instance) }
      entities.length > 1 ? entities : entities.first
    end

    def db_instance_to_entity(db_instance)
      entity = entity_class.new(db_instance.attributes)
      run_hook :after_conversion, entity, db_instance
      entity
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gummi-0.3.3 lib/repobahn/repository.rb
gummi-0.3.2 lib/repobahn/repository.rb
gummi-0.3.1 lib/repobahn/repository.rb
gummi-0.3.0 lib/repobahn/repository.rb