lib/og/store/kirby.rb in og-0.24.0 vs lib/og/store/kirby.rb in og-0.25.0

- old
+ new

@@ -1,7 +1,7 @@ begin - require 'vendor/kirbybase' + require 'og/vendor/kirbybase' rescue Object => ex Logger.error 'KirbyBase is not installed!' Logger.error ex end @@ -16,15 +16,15 @@ # for SqlStore and Store. class KirbyStore < SqlStore # Override if needed. - + def self.base_dir(options) options[:base_dir] || './kirbydb' end - + def self.destroy(options) begin FileUtils.rm_rf(base_dir(options)) super rescue Object @@ -33,11 +33,11 @@ end def initialize(options) super mode = options[:mode] || :local - + if mode == :client # Use a client/server configuration. @conn = KirbyBase.new(:client, options[:address], options[:port]) else # Use an in-process configuration. @@ -54,34 +54,34 @@ def close # Nothing to do. super end - + def enchant(klass, manager) klass.send :attr_accessor, :recno klass.send :alias_method, :oid, :recno klass.send :alias_method, :oid=, :recno= symbols = klass.properties.keys - + klass.module_eval %{ def self.kb_create(recno, #{symbols.join(', ')}) obj = self.allocate obj.recno = recno #{ symbols.map { |s| "obj.#{s} = #{s}; "} } return obj end } - + super end def get_table(klass) @conn.get_table(klass.table.to_sym) end - + # :section: Lifecycle methods. def load(pk, klass) get_table(klass)[pk.to_i] end @@ -102,55 +102,55 @@ end #-- # FIXME: optimize me! #++ - + def count(options) find(options).size end def query(options) Logger.debug "Querying with #{options.inspect}." if $DBG - + klass = options[:class] table = get_table(klass) - + objects = [] - + if condition = options[:condition] || options[:where] condition.gsub!(/=/, '==') condition.gsub!(/LIKE '(.*?)'/, '=~ /\1/') condition.gsub!(/\%/, '') condition.gsub!(/(\w*?)\s?=(.)/, 'o.\1 =\2') objects = eval("table.select { |o| #{condition} }") else objects = table.select end - + if order = options[:order] desc = (order =~ /DESC/) order = order.gsub(/DESC/, '').gsub(/ASC/, '') eval "objects.sort { |x, y| x.#{order} <=> y.#{order} }" objects.reverse! if desc end - - return objects + + return objects end - def start + def start # nop end - + # Commit a transaction. - + def commit # nop, not supported? end - + # Rollback a transaction. - + def rollback # nop, not supported? end def sql_update(sql) @@ -180,19 +180,19 @@ @conn.drop_table(klass.table) if @conn.table_exists?(klass.table) end def fields_for_class(klass) fields = [] - + klass.properties.values.each do |p| klass.index(p.symbol) if p.index - + fields << p.symbol - + type = p.klass.name.to_sym type = :Integer if type == :Fixnum - + fields << type end return fields end @@ -205,60 +205,60 @@ values << ", '#{klass}'" end klass.class_eval %{ def og_insert(store) - #{Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)} Logger.debug "Inserting \#{self}." if $DBG @#{pk} = store.get_table(#{klass}).insert(self) - #{Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)} end } end - + # Compile the og_update method for the class. def eval_og_update(klass) pk = klass.pk_symbol updates = klass.properties.keys.collect { |p| ":#{p} => @#{p}" } klass.module_eval %{ def og_update(store, options = nil) - #{Aspects.gen_advice_code(:og_update, klass.advices, :pre) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_update, klass.advices, :pre) if klass.respond_to?(:advices)} store.get_table(#{klass}).update { |r| r.recno == #{pk} }.set(#{updates.join(', ')}) - #{Aspects.gen_advice_code(:og_update, klass.advices, :post) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_update, klass.advices, :post) if klass.respond_to?(:advices)} end } end - + def eval_og_read(klass) klass.module_eval %{ def og_read(res, row = 0, offset = 0) - #{Aspects.gen_advice_code(:og_read, klass.advices, :pre) if klass.respond_to?(:advices)} - #{Aspects.gen_advice_code(:og_read, klass.advices, :post) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_read, klass.advices, :pre) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_read, klass.advices, :post) if klass.respond_to?(:advices)} end } - end + end def eval_og_delete(klass) klass.module_eval %{ def og_delete(store, pk, cascade = true) pk ||= self.pk pk = pk.to_i - #{Aspects.gen_advice_code(:og_delete, klass.advices, :pre) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_delete, klass.advices, :pre) if klass.respond_to?(:advices)} table = store.get_table(self.class) transaction do |tx| table.delete { |r| r.recno == pk } - if cascade and #{klass}.ann.this[:descendants] - #{klass}.ann.this.descendants.each do |dclass, foreign_key| + if cascade and #{klass}.ann.self[:descendants] + #{klass}.ann.self.descendants.each do |dclass, foreign_key| dtable = store.get_table(dclass) dtable.delete { |r| foreign_key == pk } end end end - #{Aspects.gen_advice_code(:og_delete, klass.advices, :post) if klass.respond_to?(:advices)} + #{Glue::Aspects.gen_advice_code(:og_delete, klass.advices, :post) if klass.respond_to?(:advices)} end - } + } end end end