1 require_dependency "manifest/model/attribute"
2 require_dependency "manifest/model/association"
3 require_dependency "manifest/model/list"
4 require_dependency "manifest/model/tree"
5 require_dependency "manifest/model/peta"
10 def self.manager manifest, my_manifests
12 my_manifests.each {|model_name, model_manifest|
13 models[model_name] = self.new(manifest, model_name, model_manifest)
18 attr :model_name, :model_manifest,
19 :attributes, :associations, :tree, :list, :peta, :extend_column_name
20 def initialize manifest, model_name, model_manifest
22 @model_name = model_name
23 @model_manifest = model_manifest
29 @model_manifest['attributes'] ||= {}
30 @model_manifest['associations'] ||= {}
31 @model_manifest['tree'] ||= {}
32 @model_manifest['list'] ||= {}
33 @model_manifest['extend_column_name'] ||= 'classname'
34 @model_manifest['peta'] ||= {}
35 @model_manifest['attributes']['id'] = {
42 @model_manifest['attributes']['created_at'] = {
45 @model_manifest['attributes']['updated_at'] = {
52 @model_manifest['attributes'].each {|attribute_name, attribute_manifest|
53 @attributes[attribute_name] = Attribute.new(self, attribute_name, attribute_manifest)
55 @associations = Association.new(self, @model_manifest['associations'])
57 @model_manifest['tree'].each {|tree_name, parent_model_name|
58 @tree[tree_name] = Tree.new(self, tree_name, parent_model_name)
60 @peta = PetaFactory.factory(self, @model_manifest['peta'])
61 @extend_column_name = @model_manifest['extend_column_name']
62 @list = List.new(self, @model_manifest['list'])
66 ::Manifest.item_name_to_model @model_name
70 self.classify.table_name
73 def valid_encode_columns
75 @attributes.each {|attribute_name, attribute|
76 next unless attribute.type == 'text'
83 return :author if @attributes['author_id']
84 return :artist if @attributes['artist_id']
89 return true if self.owner_type
93 def child_model_manifests tree_name
95 ::Manifest.manifest.models.each {|child_model_name, child_model_manifest|
96 next unless child_model_manifest.tree[tree_name]
97 next unless child_model_manifest.tree[tree_name].parent_model_name == @model_name
98 r << child_model_manifest
103 def child_models tree_name
104 self.child_model_manifests(tree_name).map {|child_model_manifest|
105 child_model_manifest.classify
109 def child_element_names tree_name
110 self.child_models(tree_name).map {|child_model|
111 self.associations.child_element_name(child_model)
115 def child_element_name item_name
116 self.associations.child_element_name(child_model_manifest)