Class: ActiveDocumentum::Schema

Inherits:
Object
  • Object
show all
Includes:
Support
Defined in:
lib/active_documentum/schema.rb

Constant Summary collapse

@@sc =
nil
@@schema =
nil

Instance Method Summary collapse

Methods included from Support

#camelize, #clean, #decamelize

Constructor Details

#initializeSchema

Returns a new instance of Schema.



14
15
16
17
18
# File 'lib/active_documentum/schema.rb', line 14

def initialize
  @@sc ||= ActiveDocumentum::SchemaClient.new
  @@schema ||= @@sc.schema_info
  @base_dir = "lib/active_documentum/types/" #TODO find better way of doing this
end

Instance Method Details

#loadObject



44
45
46
47
48
# File 'lib/active_documentum/schema.rb', line 44

def load
  @@schema[:types].each do |name|
    load_type(name)
  end
end

#load_type(type_name) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/active_documentum/schema.rb', line 20

def load_type(type_name)
  file_name = @base_dir + type_name + '.rb'
  unless File.exists?(file_name)
    type = @@sc.type_info(type_name)
    class_name = camelize(type_name) 
    parent_name = camelize(type[:parent_name]) unless type[:parent_name].empty?
    parent_name ||= "ActiveDocumentum::Base"
    # FIXME Needs to be cleaner
    class_def = "# Author::    Luke Chadwick  (mailto:[email protected])\n"
    class_def += "# Copyright:: Copyright (c) 2010 Luke Chadwick\n"
    class_def += "# License::   Distributes under the same terms as Ruby\n"
    class_def += "#\n"
    class_def += "# This class is an auto generated documentum object type\n"
    class_def += "class #{class_name} < #{parent_name}\n"
    type[:properties].each do |property|
      class_def += "  # #{property[:name]} => #{property.inspect}\n"
    end
    class_def += "end"
    FileUtils.mkdir_p(@base_dir)
    File.open(file_name, 'w') {|file| file.puts class_def }
  end
  autoload class_name.intern, file_name
end