1 ManifestBase.require_modules "manifest/model/",
2 %w|attribute association list tree peta|
5 class Model < ManifestBase::Base
8 attr :attributes, :associations, :tree, :list, :peta, :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 @peta = ManifestBase.load_type_args(self, @json, 'peta', PetaFactory)
42 @extend_column_name = @json['extend_column_name']
43 @list = ManifestBase.load_value self, @json, 'list', List
51 ::Manifest.item_name_to_model @name
55 self.classify.table_name
58 def valid_encode_columns
60 @attributes.each {|attribute_name, attribute|
61 next unless attribute.type == 'text'
68 return :author if @attributes['author_id']
69 return :artist if @attributes['artist_id']
74 return true if self.owner_type
78 def child_model_manifests tree_name
80 ::Manifest.manifest.models.each {|child_model_name, child_model_manifest|
81 next unless child_model_manifest.tree[tree_name]
82 next unless child_model_manifest.tree[tree_name].parent_model_name == @model_name
83 r << child_model_manifest
88 def child_models tree_name
89 self.child_model_manifests(tree_name).map {|child_model_manifest|
90 child_model_manifest.classify
94 def child_element_names tree_name
95 self.child_models(tree_name).map {|child_model|
96 self.associations.child_element_name(child_model)
100 def child_element_name item_name
101 self.associations.child_element_name(child_model_manifest)