lib/og/store.rb in og-0.20.0 vs lib/og/store.rb in og-0.21.0

- old
+ new

@@ -1,225 +1,228 @@ module Og # A Store is responsible for the peristance of the ObjectGraph. class Store - - # Options. - - attr_accessor :options - - # Transaction nesting. - - attr_accessor :transaction_nesting + + # Options. + + attr_accessor :options + + # Transaction nesting. + + attr_accessor :transaction_nesting - # :section: Store methods. + # :section: Store methods. - # Return the store for the given name. + # Return the store for the given name. - def self.for_name(name) - # gmosx: to keep RDoc happy. + def self.for_name(name) + # gmosx: to keep RDoc happy. eval %{ - require 'og/store/#{name}' - return #{name.to_s.capitalize}Store - } - end - - # Creates a store. + require 'og/store/#{name}' + return #{name.to_s.capitalize}Store + } + end + + # Creates a store. - def self.create(options) - end + def self.create(options) + end - # Destroys a store. + # Destroys a store. - def self.destroy(options) - end + def self.destroy(options) + end - # :section: Misc methods. + # :section: Misc methods. - # Create a session to the store. + # Create a session to the store. - def initialize(options) - @options = options - @transaction_nesting = 0 - end + def initialize(options) + @options = options + @transaction_nesting = 0 + end - # Close the session to the store. - - def close - end + # Close the session to the store. + + def close + end - # Enchants a class. + # Enchants a class. - def enchant(klass, manager) - klass.class.send(:define_method, :index) do |arg| - meta :index, arg - end + def enchant(klass, manager) + klass.class.send(:define_method, :index) do |arg| + meta :index, arg + end - pk = klass.primary_key.first + pk = klass.primary_key.first - klass.module_eval %{ - def saved? - return @#{klass.primary_key.first} - end + klass.module_eval %{ + def saved? + return @#{klass.primary_key.first} + end - def unsaved? - return !@#{klass.primary_key.first} - end + def unsaved? + return !@#{klass.primary_key.first} + end - # Evaluate an alias for the primary key. - - alias_method :pk, :#{pk} - alias_method :pk=, :#{pk}= - - def self.pk_symbol - :#{klass.primary_key.first} - end - } - - # Generate finder methods. - - code = '' - - for p in klass.properties - # gmosx: :uniq does NOT set a unique constrain in the - # database. - finder = p.meta[:uniq] || p.meta[:unique] ? 'find_one' : 'find' - - code << %{ - def self.find_by_#{p.symbol}(val, operator = '=', options = {}) - options.update( - :class => #{klass}, - :condition => "#{p.symbol}\#{operator}\#{ogmanager.store.quote(val)}" - ) - ogmanager.store.#{finder}(options) - end; - } - end - - klass.module_eval(code) - end + # Evaluate an alias for the primary key. + + alias_method :pk, :#{pk} + alias_method :pk=, :#{pk}= + + def self.pk_symbol + :#{klass.primary_key.first} + end + } + + # Generate finder methods. + + code = '' + + for p in klass.properties + # gmosx: :uniq does NOT set a unique constrain in the + # database. + finder = p.meta[:uniq] || p.meta[:unique] ? 'find_one' : 'find' + + code << %{ + def self.find_by_#{p.symbol}(val, operator = '=', options = {}) + options.update( + :class => #{klass}, + :condition => "#{p.symbol}\#{operator}\#{ogmanager.store.quote(val)}" + ) + ogmanager.store.#{finder}(options) + end; + } + end + + klass.module_eval(code) + end - # :section: Lifecycle methods. + # :section: Lifecycle methods. - # Loads an object from the store using the primary key. + # Loads an object from the store using the primary key. - def load(pk, klass) - end + def load(pk, klass) + end - # Reloads an object from the store. + # Reloads an object from the store. - def reload(obj) - end + def reload(obj) + end - # Save an object to store. Insert if this is a new object or - # update if this is already inserted in the database. - - def save(obj, options = nil) - if obj.saved? - obj.og_update(self, options) - else - obj.og_insert(self) - end - end - alias_method :<<, :save + # Save an object to store. Insert if this is a new object or + # update if this is already inserted in the database. + + def save(obj, options = nil) + if obj.saved? + obj.og_update(self, options) + else + obj.og_insert(self) + end + end + alias_method :<<, :save - # Insert an object in the store. + # Insert an object in the store. - def insert(obj) - obj.og_insert(self) - end + def insert(obj) + obj.og_insert(self) + end - # Update an object in the store. + # Update an object in the store. - def update(obj, options = nil) - obj.og_update(self, options) - end + def update(obj, options = nil) + obj.og_update(self, options) + end - # Update selected properties of an object or class of - # objects. - - def update_properties(obj_or_class, props, options = nil) - end - alias_method :pupdate, :update_properties - alias_method :update_property, :update_properties - - # Permanently delete an object from the store. - - def delete(obj_or_pk, klass = nil, cascade = true) - unless obj_or_pk.is_a?(EntityMixin) - # create a dummy instance to keep the og_delete - # method as an instance method like the other lifecycle - # methods. - klass.allocate.og_delete(self, obj_or_pk, cascade) - else - obj_or_pk.og_delete(self, nil, cascade) - end - end + # Update selected properties of an object or class of + # objects. + + def update_properties(obj_or_class, props, options = nil) + end + alias_method :pupdate, :update_properties + alias_method :update_property, :update_properties + + # Permanently delete an object from the store. + + def delete(obj_or_pk, klass = nil, cascade = true) + unless obj_or_pk.is_a?(EntityMixin) + # create a dummy instance to keep the og_delete + # method as an instance method like the other lifecycle + # methods. + klass.allocate.og_delete(self, obj_or_pk, cascade) + else + obj_or_pk.og_delete(self, nil, cascade) + end + end - # Perform a query. - - def find(klass, options) - end + # Perform a query. + + def find(klass, options) + end - # Count the results returned by the query. - - def count(options) - end - - # :section: Transaction methods. - - # Start a new transaction. - - def start - raise 'Not implemented' - true if @transaction_nesting < 1 - @transaction_nesting += 1 - end - - # Commit a transaction. - - def commit - raise 'Not implemented' - @transaction_nesting -= 1 - true if @transaction_nesting < 1 - end - - # Rollback a transaction. - - def rollback - @transaction_nesting -= 1 - true if @transaction_nesting < 1 - end + # Count the results returned by the query. + + def count(options) + end + + # :section: Transaction methods. + + # Start a new transaction. + + def start + raise 'Not implemented' + true if @transaction_nesting < 1 + @transaction_nesting += 1 + end + + # Commit a transaction. + + def commit + raise 'Not implemented' + @transaction_nesting -= 1 + true if @transaction_nesting < 1 + end + + # Rollback a transaction. + + def rollback + @transaction_nesting -= 1 + true if @transaction_nesting < 1 + end - # Transaction helper. In the transaction block use - # the db pointer to the backend. - - def transaction(&block) - begin - start - yield(self) - commit - rescue => ex - Logger.error 'Error in transaction' - Logger.error ex - Logger.error ex.backtrace - rollback - end - end + # Transaction helper. In the transaction block use + # the db pointer to the backend. + + def transaction(&block) + begin + start + yield(self) + commit + rescue => ex + Logger.error 'Error in transaction' + Logger.error ex + Logger.error ex.backtrace + rollback + end + end private - def eval_og_insert(klass) - end + def eval_og_insert(klass) + end - def eval_og_update(klass) - end + def eval_og_update(klass) + end - def eval_og_read(klass) - end + def eval_og_read(klass) + end - def eval_og_delete(klass) - end + def eval_og_delete(klass) + end + + def eval_og_create_schema(klass) + end end end