From a4818bf1d60b74ae18105669239743e61bf3ae09 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Fri, 13 May 2011 11:14:21 +0200 Subject: [PATCH] fix for Model#_load to correctly initialize the current model in storage config object and some cleanups --- model.rb | 18 ++++---- storage.rb | 16 +++----- storage/config.rb | 12 +++--- tester.rb | 102 +++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 113 insertions(+), 35 deletions(-) diff --git a/model.rb b/model.rb index 468af48..1a1730a 100644 --- a/model.rb +++ b/model.rb @@ -42,21 +42,25 @@ module DsAdmin::Model initialize(_load(id)) end + ## + # used to save either new or changed models + # + # @storage is free to change an already existent storage id + # for organizational, indexing or other reasons thus it + # always has to be stored back into @id + # def save - @id = @storage.create_id(self) unless @id - @storage.write(self) + @id = @storage.write(self) end - def update - @storage.write(self) - end - - def to_sym + def config_key self.class.to_s.to_sym end protected def _load(id) + @@storage.config.model = self + data = @@storage.find {|data| data[:id] == id} throw "unknown id (#{id})" unless data data diff --git a/storage.rb b/storage.rb index dd36bb0..3de4268 100644 --- a/storage.rb +++ b/storage.rb @@ -1,9 +1,9 @@ module DsAdmin::Storage include Enumerable + DsAdmin::Storage.autoload(:Config, 'storage/config') DsAdmin::Storage.autoload(:Ldap, 'storage/ldap') DsAdmin::Storage.autoload(:Mysql, 'storage/mysql') - DsAdmin::Storage.autoload(:Config, 'storage/config') attr_accessor :config @@ -15,23 +15,19 @@ module DsAdmin::Storage read.each(&block) end - ## - # We don't need this....the 'id' is a storage id and as - # thus returned after successfully writing a new entry. - # - def create_id(model) - return "dummy id for #{model.inspect}" - end - def read throw "#{self.class}: read not implemented" end + ## + # write has to return the storage id of the written + # entry. + # def write(model) throw "#{self.class}: write not implemented" end - def to_sym + def config_key self.class.to_s.to_sym end end diff --git a/storage/config.rb b/storage/config.rb index 9fc72d6..8c28f4f 100644 --- a/storage/config.rb +++ b/storage/config.rb @@ -1,21 +1,19 @@ -require 'yaml' - class DsAdmin::Storage::Config attr_accessor :model - def initialize(yml_file) - @config = YAML.load_file(yml_file) + def initialize(conf_data) + @config = conf_data end def con(storage) - @config[storage.to_sym][:con] + @config[storage.config_key][:con] end def query(storage) - @config[storage.to_sym][@model.to_sym][:query] + @config[storage.config_key][@model.config_key][:query] end def map(storage) - @config[storage.to_sym][@model.to_sym][:map] + @config[storage.config_key][@model.config_key][:map] end end diff --git a/tester.rb b/tester.rb index a6aeae1..95277e9 100644 --- a/tester.rb +++ b/tester.rb @@ -1,7 +1,10 @@ require 'ds_admin' +require 'yaml' -config = DsAdmin::Storage::Config.new(File.dirname(__FILE__) + '/config/storage.yml') -DsAdmin::Model.storage = DsAdmin::Storage::Ldap.new(config) +DsAdmin::Model.storage = DsAdmin::Storage::Ldap.new( + DsAdmin::Storage::Config.new( + YAML.load_file(File.dirname(__FILE__) + '/config/storage.yml') +)) user = DsAdmin::Model::User.new group = DsAdmin::Model::Group.new @@ -10,31 +13,108 @@ alias_role = DsAdmin::Model::MailAliasRole.new alias_person = DsAdmin::Model::MailAliasPerson.new account = DsAdmin::Model::MailAccount.new +puts '=== base objects ===' +puts 'base: ' + user.inspect +puts 'base: ' + group.inspect +puts 'base: ' + site.inspect +puts 'base: ' + alias_role.inspect +puts 'base: ' + alias_person.inspect +puts 'base: ' + account.inspect + +puts +puts '=== Model#all ===' +puts user.all.inspect +puts 'base: ' + user.inspect +puts group.all.inspect +puts 'base: ' + group.inspect +puts site.all.inspect +puts 'base: ' + site.inspect +puts alias_role.all.inspect +puts 'base: ' + alias_role.inspect +puts alias_person.all.inspect +puts 'base: ' + alias_person.inspect +puts account.all.inspect +puts 'base: ' + account.inspect + +puts puts '=== DsAdmin each ===' -user.each {|user| puts user.inspect} +user.each {|u| puts u.inspect} +puts 'base: ' + user.inspect puts '---' -group.each {|group| puts group.inspect} +group.each {|g| puts g.inspect} +puts 'base: ' + group.inspect puts '---' -site.each {|site| puts site.inspect} +site.each {|s| puts s.inspect} +puts 'base: ' + site.inspect puts '---' -alias_role.each {|ma_role| puts ma_role.inspect} +alias_role.each {|mar| puts mar.inspect} +puts 'base: ' + alias_role.inspect puts '---' -alias_person.each {|ma_person| puts ma_person.inspect} +alias_person.each {|map| puts map.inspect} +puts 'base: ' + alias_person.inspect puts '---' account.each {|macc| puts macc.inspect} +puts 'base: ' + account.inspect puts puts '=== DsAdmin Enumerable ===' -puts user.find {|user| user.uid == '1000'}.inspect +puts user.find {|u| u.uid == '1000'}.inspect +puts 'base: ' + user.inspect puts '---' -puts group.find {|group| group.gid == '10'}.inspect +puts group.find {|g| g.gid == '10'}.inspect +puts 'base: ' + group.inspect puts '---' -puts site.find {|site| site.name == 'steffers.org'}.inspect +puts site.find {|s| s.name == 'steffers.org'}.inspect +puts 'base: ' + site.inspect puts '---' puts alias_role.find_all {|mar| mar.maildrop == 'abuse'}.inspect +puts 'base: ' + alias_role.inspect puts '---' puts alias_person.find {|map| map.mail == 'georg@steffers.org'}.inspect +puts 'base: ' + alias_person.inspect puts '---' -puts account.find {|acc| acc.mail == 'drachenfrau@steffers.org'}.inspect +puts account.find {|macc| macc.mail == 'drachenfrau@steffers.org'}.inspect +puts 'base: ' + account.inspect +puts +puts '=== Model#load ===' +puts user.load('uid=georg,ou=user,o=system,dc=weird-web-workers,dc=org').inspect +puts 'base: ' + user.inspect +puts '---' +puts group.load('cn=wheel,ou=group,o=system,dc=weird-web-workers,dc=org').inspect +puts 'base: ' + group.inspect +puts '---' +puts site.load('o=steffers.org,o=hosting,dc=weird-web-workers,dc=org').inspect +puts 'base: ' + site.inspect +puts '---' +puts alias_role.load('cn=abuse,o=weird-web-workers.org,o=hosting,dc=weird-web-workers,dc=org').inspect +puts 'base: ' + alias_role.inspect +puts '---' +puts alias_person.load('mail=georg@steffers.org,o=steffers.org,o=hosting,dc=weird-web-workers,dc=org').inspect +puts 'base: ' + alias_person.inspect +puts '---' +puts account.load('mail=drachenfrau@steffers.org,o=steffers.org,o=hosting,dc=weird-web-workers,dc=org').inspect +puts 'base: ' + account.inspect + +puts +puts '=== Model#load! ===' +user.load!('uid=georg,ou=user,o=system,dc=weird-web-workers,dc=org') +puts 'base: ' + user.inspect +puts '---' +group.load!('cn=wheel,ou=group,o=system,dc=weird-web-workers,dc=org') +puts 'base: ' + group.inspect +puts '---' +site.load!('o=steffers.org,o=hosting,dc=weird-web-workers,dc=org') +puts 'base: ' + site.inspect +puts '---' +alias_role.load!('cn=abuse,o=weird-web-workers.org,o=hosting,dc=weird-web-workers,dc=org') +puts 'base: ' + alias_role.inspect +puts '---' +alias_person.load!('mail=georg@steffers.org,o=steffers.org,o=hosting,dc=weird-web-workers,dc=org') +puts 'base: ' + alias_person.inspect +puts '---' +account.load!('mail=drachenfrau@steffers.org,o=steffers.org,o=hosting,dc=weird-web-workers,dc=org') +puts 'base: ' + account.inspect + +puts puts 'Memory useage: ' + `ps -o rss= -p #{Process.pid}`