OSDN Git Service

Merge branch 'v06' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06
[pettanr/pettanr.git] / app / assets / javascripts / manifest / model.js.coffee
1 class Manifest.Model extends ManifestBase.Base\r
2   \r
3   set_default: () ->\r
4     super\r
5     @json.attributes ||= {}\r
6     @json.associations ||= {}\r
7     @json.table_name ||= Manifest.manifest().pluralize(@name)\r
8     @json.attributes.id = {\r
9       'type': 'number',\r
10       'primary_key': 1,\r
11       'rules': {\r
12         'number': true\r
13       }\r
14     }\r
15     @json.attributes.created_at = {\r
16       'type': 'datetime',\r
17     }\r
18     @json.attributes.updated_at = {\r
19       'type': 'datetime',\r
20     }\r
21   \r
22   init: () ->\r
23     super\r
24     @table_name = @json.table_name\r
25     @attributes = ManifestBase.load_name_values this, @json, 'attributes', Manifest.ModelModule.Attribute\r
26     @associations = ManifestBase.load_value this, @json, 'associations', Manifest.ModelModule.Association\r
27   \r
28   item_name: () ->\r
29     @name\r
30   \r
31   classify: () ->\r
32     Manifest.item_name_to_model @name\r
33   \r
34   valid_encode_columns: () ->\r
35     r = []\r
36     _.each @attributes, (attribute, attribute_name) ->\r
37       next if not attribute.type == 'text'\r
38       r.push attribute_name\r
39     r\r
40   \r
41   owner_type: () ->\r
42     return 'author' if @attributes.author_id\r
43     return 'artist' if @attributes.artist_id\r
44     false\r
45   \r
46   content_model: () ->\r
47     return true if @owner_type\r
48     false\r
49   \r
50   child_model_manifests: () ->\r
51     r = []\r
52     _.each Manifest.manifest().items, (peta_manifest, peta_name) =>\r
53       return if not peta_manifest.is_element()\r
54       return if peta_manifest.parent_item_name != @name\r
55       r.push Manifest.manifest().models[peta_name]\r
56     r\r
57   \r
58   child_models: () ->\r
59     _.map @child_model_manifests(), (child_model_manifest) ->\r
60       child_model_manifest.classify()\r
61   \r
62   child_element_names: () ->\r
63     _.map @child_models(), (child_model) ->\r
64       @associations.child_element_name(child_model)\r
65   \r
66   child_element_name: (item_name) ->\r
67     @associations.child_element_name(@child_model_manifest())\r
68   \r
69 class Manifest.ModelModule\r