Sha256: 77c40e272824c0fdde1d0598cb9e42d5293a5bb08e23b4a5213f75aaf91104f7

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

module Husky

  module Repo

    class ActiveRecord

      def all
        entity.wrap(data_source.all)
      end

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

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

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

      def save(item)
        item.save
      end

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

      def update(item, attributes)
        entity.new(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.new(data_source.new(attributes))
      end

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

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

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

      def update(item, attributes)
        entity.new(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

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
husky-0.1.8 lib/husky/repo.rb
husky-0.1.7 lib/husky/repo.rb