Module: Filebase::Model::Mixins::ClassMethods

Defined in:
lib/filebase/model.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#dbObject

Returns the value of attribute db.



25
26
27
# File 'lib/filebase/model.rb', line 25

def db
  @db
end

Instance Method Details

#[](key) ⇒ Object



29
# File 'lib/filebase/model.rb', line 29

def []( key ) ; find( key ) ; end

#allObject



27
# File 'lib/filebase/model.rb', line 27

def all ; db.all.map { |attrs| new( attrs ) } ; end

#create(assigns) ⇒ Object



26
# File 'lib/filebase/model.rb', line 26

def create( assigns ) ; save( new( assigns ) ) ; end

#delete(object) ⇒ Object

Raises:



34
35
36
37
# File 'lib/filebase/model.rb', line 34

def delete( object )
  raise( Filebase::Error.new, 'attempted to delete an object with nil key' ) if object.key.nil? or object.key.empty?
  db.delete( object.key )
end

#find(key) ⇒ Object



28
# File 'lib/filebase/model.rb', line 28

def find( key ) ; attrs = db.find( key ); new( attrs ) if attrs ; end

#has_many(name, options = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/filebase/model.rb', line 51

def has_many( name, options = {} )
  module_eval do
    define_method( name ) do
      @has_many ||= {}
      options[:class] ||= Object.module_eval( name.to_s.camel_case )
      @has_many[name] ||= ( get( name ) || [] ).uniq.map { |key| options[:class].find( key ) } 
    end
      # when we save, make sure to pick up any changes to the array
      (class<<self;self;end).module_eval do
        old_save = instance_method(:save)
        define_method :save do |object|
        object.set( name, object.send( name ).map{ |x| x.key }.uniq )
          old_save.bind(self).call(object)
        end
      end
    end
end

#has_one(name, options = {}) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/filebase/model.rb', line 38

def has_one( name, options = {} )
  module_eval do
    define_method name do
      @has_one ||= {}
      options[:class] ||= Object.module_eval( name.to_s.gsub(/(_)(\w)/) { $2.upcase }.gsub(/^([a-z])/) { $1.upcase } )
      @has_one[name] ||= options[:class].find( get( name ) ) 
    end
    define_method( name.to_s + '=' ) do | val |
      @has_one ||= {}; @has_one[name] = nil
      set( name, String === val ? val : val.key )
    end
  end
end

#save(object) ⇒ Object

Raises:



30
31
32
33
# File 'lib/filebase/model.rb', line 30

def save( object )
  raise( Filebase::Error.new, 'attempted to save an object with nil key' ) if object.key.nil? or object.key.empty?
    db.save( object.key, object.to_h ) and object
end