Browse Source

fix for Model#_load to correctly initialize the current model in storage config object and some cleanups

master
Georg Hopp 15 years ago
committed by Georg Hopp
parent
commit
a4818bf1d6
  1. 18
      model.rb
  2. 16
      storage.rb
  3. 12
      storage/config.rb
  4. 102
      tester.rb

18
model.rb

@ -42,21 +42,25 @@ module DsAdmin::Model
initialize(_load(id)) initialize(_load(id))
end 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 def save
@id = @storage.create_id(self) unless @id
@storage.write(self)
@id = @storage.write(self)
end end
def update
@storage.write(self)
end
def to_sym
def config_key
self.class.to_s.to_sym self.class.to_s.to_sym
end end
protected protected
def _load(id) def _load(id)
@@storage.config.model = self
data = @@storage.find {|data| data[:id] == id} data = @@storage.find {|data| data[:id] == id}
throw "unknown id (#{id})" unless data throw "unknown id (#{id})" unless data
data data

16
storage.rb

@ -1,9 +1,9 @@
module DsAdmin::Storage module DsAdmin::Storage
include Enumerable include Enumerable
DsAdmin::Storage.autoload(:Config, 'storage/config')
DsAdmin::Storage.autoload(:Ldap, 'storage/ldap') DsAdmin::Storage.autoload(:Ldap, 'storage/ldap')
DsAdmin::Storage.autoload(:Mysql, 'storage/mysql') DsAdmin::Storage.autoload(:Mysql, 'storage/mysql')
DsAdmin::Storage.autoload(:Config, 'storage/config')
attr_accessor :config attr_accessor :config
@ -15,23 +15,19 @@ module DsAdmin::Storage
read.each(&block) read.each(&block)
end 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 def read
throw "#{self.class}: read not implemented" throw "#{self.class}: read not implemented"
end end
##
# write has to return the storage id of the written
# entry.
#
def write(model) def write(model)
throw "#{self.class}: write not implemented" throw "#{self.class}: write not implemented"
end end
def to_sym
def config_key
self.class.to_s.to_sym self.class.to_s.to_sym
end end
end end

12
storage/config.rb

@ -1,21 +1,19 @@
require 'yaml'
class DsAdmin::Storage::Config class DsAdmin::Storage::Config
attr_accessor :model attr_accessor :model
def initialize(yml_file)
@config = YAML.load_file(yml_file)
def initialize(conf_data)
@config = conf_data
end end
def con(storage) def con(storage)
@config[storage.to_sym][:con]
@config[storage.config_key][:con]
end end
def query(storage) def query(storage)
@config[storage.to_sym][@model.to_sym][:query]
@config[storage.config_key][@model.config_key][:query]
end end
def map(storage) def map(storage)
@config[storage.to_sym][@model.to_sym][:map]
@config[storage.config_key][@model.config_key][:map]
end end
end end

102
tester.rb

@ -1,7 +1,10 @@
require 'ds_admin' 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 user = DsAdmin::Model::User.new
group = DsAdmin::Model::Group.new group = DsAdmin::Model::Group.new
@ -10,31 +13,108 @@ alias_role = DsAdmin::Model::MailAliasRole.new
alias_person = DsAdmin::Model::MailAliasPerson.new alias_person = DsAdmin::Model::MailAliasPerson.new
account = DsAdmin::Model::MailAccount.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 ===' puts '=== DsAdmin each ==='
user.each {|user| puts user.inspect}
user.each {|u| puts u.inspect}
puts 'base: ' + user.inspect
puts '---' puts '---'
group.each {|group| puts group.inspect}
group.each {|g| puts g.inspect}
puts 'base: ' + group.inspect
puts '---' puts '---'
site.each {|site| puts site.inspect}
site.each {|s| puts s.inspect}
puts 'base: ' + site.inspect
puts '---' puts '---'
alias_role.each {|ma_role| puts ma_role.inspect}
alias_role.each {|mar| puts mar.inspect}
puts 'base: ' + alias_role.inspect
puts '---' puts '---'
alias_person.each {|ma_person| puts ma_person.inspect}
alias_person.each {|map| puts map.inspect}
puts 'base: ' + alias_person.inspect
puts '---' puts '---'
account.each {|macc| puts macc.inspect} account.each {|macc| puts macc.inspect}
puts 'base: ' + account.inspect
puts puts
puts '=== DsAdmin Enumerable ===' 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 '---'
puts group.find {|group| group.gid == '10'}.inspect
puts group.find {|g| g.gid == '10'}.inspect
puts 'base: ' + group.inspect
puts '---' 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 '---'
puts alias_role.find_all {|mar| mar.maildrop == 'abuse'}.inspect puts alias_role.find_all {|mar| mar.maildrop == 'abuse'}.inspect
puts 'base: ' + alias_role.inspect
puts '---' puts '---'
puts alias_person.find {|map| map.mail == 'georg@steffers.org'}.inspect puts alias_person.find {|map| map.mail == 'georg@steffers.org'}.inspect
puts 'base: ' + alias_person.inspect
puts '---' 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}` puts 'Memory useage: ' + `ps -o rss= -p #{Process.pid}`
Loading…
Cancel
Save