1 ManifestBase.require_modules "manifest/model/",
2 %w|attribute association list tree|
5 class Model < ManifestBase::Base
8 attr :attributes, :associations, :tree, :list, :extend_column_name
12 @json['attributes'] ||= {}
13 @json['associations'] ||= {}
16 @json['extend_column_name'] ||= 'classname'
18 @json['attributes']['id'] = {
25 @json['attributes']['created_at'] = {
28 @json['attributes']['updated_at'] = {
35 @attributes = ManifestBase.load_name_values self, @json, 'attributes', Attribute
36 @associations = ManifestBase.load_value self, @json, 'associations', Association
38 @json['tree'].each {|tree_name, parent_model_name|
39 @tree[tree_name] = Tree.new(self, tree_name, parent_model_name)
41 @extend_column_name = @json['extend_column_name']
42 @list = ManifestBase.load_value self, @json, 'list', List
50 ::Manifest.item_name_to_model @name
54 self.classify.table_name
57 def valid_encode_columns
59 @attributes.each {|attribute_name, attribute|
60 next unless attribute.type == 'text'
67 return :author if @attributes['author_id']
68 return :artist if @attributes['artist_id']
73 return true if self.owner_type
77 def child_model_manifests tree_name
79 ::Manifest.manifest.models.each {|child_model_name, child_model_manifest|
80 next unless child_model_manifest.tree[tree_name]
81 next unless child_model_manifest.tree[tree_name].parent_model_name == @model_name
82 r << child_model_manifest
87 def child_models tree_name
88 self.child_model_manifests(tree_name).map {|child_model_manifest|
89 child_model_manifest.classify
93 def child_element_names tree_name
94 self.child_models(tree_name).map {|child_model|
95 self.associations.child_element_name(child_model)
99 def child_element_name item_name
100 self.associations.child_element_name(child_model_manifest)