OSDN Git Service

v07 first
[pettanr/pettanr.git] / lib / manifest / model.rb
1 ManifestBase.require_modules "manifest/model/", 
2   %w|attribute association|
3
4 module Manifest
5   class Model < ManifestBase::Base
6     include ModelModule
7     
8     attr :attributes, :associations, :table_name
9     
10     def set_default
11       super
12       @json['table_name'] ||= ::Manifest.manifest.pluralize(@name)
13       @json['attributes'] ||= {}
14       @json['associations'] ||= {}
15       @json['attributes']['id'] = {
16         'type' => 'number',
17         'primary_key' => 1,
18         'rules' => {
19           'number' => true
20         }
21       }
22       @json['attributes']['created_at'] = {
23         'type' => 'datetime',
24       }
25       @json['attributes']['updated_at'] = {
26         'type' => 'datetime',
27       }
28     end
29     
30     def init
31       super
32       @table_name = @json['table_name']
33       @attributes = ManifestBase.load_name_values self, @json, 'attributes', Attribute
34       @associations = ManifestBase.load_value self, @json, 'associations', Association
35     end
36     
37     def item_name
38       @name
39     end
40     
41     def classify
42       ::Manifest.item_name_to_model @name
43     end
44     
45     def valid_encode_columns
46       r = []
47       @attributes.each {|attribute_name, attribute|
48         next unless attribute.type == 'text'
49         r << attribute_name
50       }
51       r
52     end
53     
54     def owner_type
55       return :author if @attributes['author_id']
56       return :artist if @attributes['artist_id']
57       false
58     end
59     
60     def content_model?
61       return true if self.owner_type
62       false
63     end
64     
65     def child_model_manifests
66       r = []
67       ::Manifest.manifest.items.each {|peta_name, peta_manifest|
68         next unless peta_manifest.element?
69         next unless peta_manifest.parent_item_name == @name
70         r << ::Manifest.manifest.models[peta_name]
71       }
72       r
73     end
74     
75     def child_models
76       self.child_model_manifests.map {|child_model_manifest|
77         child_model_manifest.classify
78       }
79     end
80     
81     def child_element_names
82       self.child_models.map {|child_model|
83         self.associations.child_element_name(child_model)
84       }
85     end
86     
87     def child_element_name item_name
88       self.associations.child_element_name(child_model_manifest)
89     end
90     
91   end
92 end
93