Sha256: ba073b4965b060400c28d10b8326d846eb7ff625c6dcc5b85f9e35719bd27772

Contents?: true

Size: 1.92 KB

Versions: 2

Compression:

Stored size: 1.92 KB

Contents

module Husky

  module Repo

    class ActiveRecord

      def all
        entity.wrap(data_source.all)
      end

      def find(id)
        entity.build(data_source.find(id))
      end

      def new(attributes = {})
        entity.build(data_source.new(attributes))
      end

      # DEPRECATE
      def build(attributes)
        entity.build(data_source.build(attributes))
      end

      def save(item)
        item.save
      end

      def create(attributes)
        entity.build(data_source.create(attributes))
      end

      def update(item, attributes)
        entity.build(item.update_attributes(attributes))
      end

      def destroy(item)
        item.destroy
      end

      private

      def data_source
        raise NotImplementedError
      end

      def entity
        raise NotImplementedError
      end

    end

    class InMemory

      def initialize
        @records = {}
        @id      = 1
      end

      def all
        @records
      end

      def new(attributes = {})
        entity.build(data_source.new(attributes))
      end

      def find(id)
        entity.build(@records[id.to_i])
      end

      def save(object)
        object.id = @id
        @records[@id] = object
        @id += 1
        entity.build(object)
      end

      def create(attributes = {})
        save(new(attributes))
      end

      def update(item, attributes)
        entity.build(item.update_attributes(attributes))
      end

      def destroy(object)
        @records.delete(object.id)
      end

      private

      def data_source
        raise NotImplementedError
      end

      def entity
        raise NotImplementedError
      end

    end

    class Registry

      class << self

        def register(type, repo)
          repositories[type] = repo
        end

        def repositories
          @repositories ||= {}
        end

        def for(type)
          repositories[type]
        end

      end

    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
husky-0.5.6 lib/husky/repo.rb
husky-0.5.5 lib/husky/repo.rb