Sha256: efd21c56423973f4cea8dd8f3f2b87ef211c8ca3dfd24842338d8005bf65e65a

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

require File.dirname(__FILE__) + '/simple_property'
require File.dirname(__FILE__) + '/belongs_to_property'
require File.dirname(__FILE__) + '/inline_has_many_property'
require File.dirname(__FILE__) + '/external_has_many_property'

module CouchPotato
  module Persistence
    module Properties
      def self.included(base)
        base.extend ClassMethods
        base.class_eval do
          def self.properties
            @@properties ||= {}
            @@properties[self.name] ||= []
          end
        end
      end
      
      module ClassMethods
        def property_names
          properties.map(&:name)
        end
        
        def property(name, options = {})
          clazz = options.delete(:class)
          properties << (clazz || SimpleProperty).new(self, name, options)
        end

        def belongs_to(name)
          property name, :class => BelongsToProperty
        end

        def has_many(name, options = {})
          stored = options.delete(:stored)
          property name, options.merge(:class => (stored == :inline ? InlineHasManyProperty : ExternalHasManyProperty))
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
langalex-couch_potato-0.1.1 lib/couch_potato/persistence/properties.rb
langalex-couch_potato-0.1 lib/couch_potato/persistence/properties.rb