From afa4bb5b1dcd29e3210562bcc12acf8d87f607ee Mon Sep 17 00:00:00 2001 From: yasushiito Date: Sat, 28 Jun 2014 19:15:36 +0900 Subject: [PATCH] fix js manifest --- app/assets/javascripts/admin.js | 2 - app/assets/javascripts/ap.js | 32 ++++++-- app/assets/javascripts/application.js | 5 +- .../javascripts/{ => deprecated}/content.js.coffee | 0 .../javascripts/{ => deprecated}/element.js.coffee | 0 .../javascripts/{ => deprecated}/item.js.coffee | 0 .../javascripts/{ => deprecated}/panels.js.coffee | 0 .../{ => deprecated}/pettanr_editor.js.coffee | 0 .../{ => deprecated}/pettanr_sheeter.js.coffee | 0 .../javascripts/{ => deprecated}/sheets.js.coffee | 0 .../speech_balloon_templates.js.coffee | 0 .../{ => deprecated}/writing_formats.js.coffee | 0 .../javascripts/manifest/controller.js.coffee | 29 +++++-- .../manifest/controller/action.js.coffee | 19 +++++ .../manifest/controller/action/base.js.coffee | 11 +++ .../manifest/controller/action/count.js.coffee | 10 +++ .../manifest/controller/action/create.js.coffee | 8 ++ .../manifest/controller/action/destroy.js.coffee | 8 ++ .../manifest/controller/action/edit.js.coffee | 8 ++ .../manifest/controller/action/list.js.coffee | 10 +++ .../manifest/controller/action/new.js.coffee | 8 ++ .../manifest/controller/action/show.js.coffee | 8 ++ .../manifest/controller/action/update.js.coffee | 8 ++ app/assets/javascripts/manifest/item.js.coffee | 2 +- .../javascripts/manifest/item/base.js.coffee | 2 +- app/assets/javascripts/manifest/manifest.js.coffee | 46 +++++++++-- app/assets/javascripts/manifest/model.js.coffee | 88 ++++++++++++++++++++-- .../manifest/model/association.js.coffee | 51 +++++++++++++ .../model/association/belongs_to.js.coffee | 26 +++++++ .../manifest/model/association/has_many.js.coffee | 34 +++++++++ .../manifest/model/association/has_one.js.coffee | 26 +++++++ .../javascripts/manifest/model/attribute.js.coffee | 36 +++++++++ .../manifest/model/attribute/source.js.coffee | 14 ++++ .../manifest/model/attribute/source/base.js.coffee | 13 ++++ .../model/attribute/source/filter.js.coffee | 9 +++ .../model/attribute/source/magic_number.js.coffee | 10 +++ .../model/attribute/source/model.js.coffee | 16 ++++ .../javascripts/manifest/model/list.js.coffee | 12 +++ .../javascripts/manifest/system_resource.js.coffee | 16 +++- .../javascripts/manifest_base/base.js.coffee | 34 ++++++--- .../javascripts/manifest_base/factory.js.coffee | 12 +-- .../manifest_base/manifest_base.js.coffee | 10 +-- .../manifest_base/name_values.js.coffee | 32 ++++++-- .../javascripts/manifest_base/names.js.coffee | 24 ++++-- .../javascripts/manifest_base/type_args.js.coffee | 34 ++++++--- .../manifest_base/type_name_args.coffee | 40 +++++++--- .../javascripts/manifest_base/values.js.coffee | 26 +++++-- lib/manifest_base/base.rb | 2 +- 48 files changed, 683 insertions(+), 98 deletions(-) rename app/assets/javascripts/{ => deprecated}/content.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/element.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/item.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/panels.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/pettanr_editor.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/pettanr_sheeter.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/sheets.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/speech_balloon_templates.js.coffee (100%) rename app/assets/javascripts/{ => deprecated}/writing_formats.js.coffee (100%) create mode 100644 app/assets/javascripts/manifest/controller/action.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/base.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/count.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/create.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/destroy.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/edit.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/list.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/new.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/show.js.coffee create mode 100644 app/assets/javascripts/manifest/controller/action/update.js.coffee create mode 100644 app/assets/javascripts/manifest/model/association.js.coffee create mode 100644 app/assets/javascripts/manifest/model/association/belongs_to.js.coffee create mode 100644 app/assets/javascripts/manifest/model/association/has_many.js.coffee create mode 100644 app/assets/javascripts/manifest/model/association/has_one.js.coffee create mode 100644 app/assets/javascripts/manifest/model/attribute.js.coffee create mode 100644 app/assets/javascripts/manifest/model/attribute/source.js.coffee create mode 100644 app/assets/javascripts/manifest/model/attribute/source/base.js.coffee create mode 100644 app/assets/javascripts/manifest/model/attribute/source/filter.js.coffee create mode 100644 app/assets/javascripts/manifest/model/attribute/source/magic_number.js.coffee create mode 100644 app/assets/javascripts/manifest/model/attribute/source/model.js.coffee create mode 100644 app/assets/javascripts/manifest/model/list.js.coffee diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js index e3794847..c5cb9788 100644 --- a/app/assets/javascripts/admin.js +++ b/app/assets/javascripts/admin.js @@ -4,7 +4,5 @@ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. // -//= require jquery -//= require jquery_ujs //= require_directory ./work //= require system diff --git a/app/assets/javascripts/ap.js b/app/assets/javascripts/ap.js index 04006a03..faec4d12 100644 --- a/app/assets/javascripts/ap.js +++ b/app/assets/javascripts/ap.js @@ -4,12 +4,10 @@ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. // -//= require jquery -//= require jquery_ujs //= require jquery.ui.all -//= require jquery.validate -//= require additional-methods -//= require jquery.validate.localization/messages_ja +//require jquery.validate +//require additional-methods +//require jquery.validate.localization/messages_ja //= require textchange //= require underscore //= require backbone @@ -36,5 +34,29 @@ //= require ./manifest/item/leaf //= require ./manifest/system_resource //= require ./manifest/system_resource/template +//= require ./manifest/controller +//= require ./manifest/controller/action +//= require ./manifest/controller/action/base +//= require ./manifest/controller/action/list +//= require ./manifest/controller/action/show +//= require ./manifest/controller/action/count +//= require ./manifest/controller/action/new +//= require ./manifest/controller/action/edit +//= require ./manifest/controller/action/create +//= require ./manifest/controller/action/update +//= require ./manifest/controller/action/destroy +//= require ./manifest/model +//= require ./manifest/model/attribute +//= require ./manifest/model/attribute/source +//= require ./manifest/model/attribute/source/base +//= require ./manifest/model/attribute/source/model +//= require ./manifest/model/attribute/source/filter +//= require ./manifest/model/attribute/source/magic_number +//= require ./manifest/model/association +//= require ./manifest/model/association/belongs_to +//= require ./manifest/model/association/has_many +//= require ./manifest/model/association/has_one +//= require ./manifest/model/list +//= require ./local_manifest/local_manifest //= require_directory ./views //= require main diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index bce28be7..42a9926e 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -3,5 +3,6 @@ // be included in the compiled file accessible from http://example.com/assets/application.js // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. -// -// // require_tree . +//= require jquery +//= require jquery_ujs +//// require_tree . diff --git a/app/assets/javascripts/content.js.coffee b/app/assets/javascripts/deprecated/content.js.coffee similarity index 100% rename from app/assets/javascripts/content.js.coffee rename to app/assets/javascripts/deprecated/content.js.coffee diff --git a/app/assets/javascripts/element.js.coffee b/app/assets/javascripts/deprecated/element.js.coffee similarity index 100% rename from app/assets/javascripts/element.js.coffee rename to app/assets/javascripts/deprecated/element.js.coffee diff --git a/app/assets/javascripts/item.js.coffee b/app/assets/javascripts/deprecated/item.js.coffee similarity index 100% rename from app/assets/javascripts/item.js.coffee rename to app/assets/javascripts/deprecated/item.js.coffee diff --git a/app/assets/javascripts/panels.js.coffee b/app/assets/javascripts/deprecated/panels.js.coffee similarity index 100% rename from app/assets/javascripts/panels.js.coffee rename to app/assets/javascripts/deprecated/panels.js.coffee diff --git a/app/assets/javascripts/pettanr_editor.js.coffee b/app/assets/javascripts/deprecated/pettanr_editor.js.coffee similarity index 100% rename from app/assets/javascripts/pettanr_editor.js.coffee rename to app/assets/javascripts/deprecated/pettanr_editor.js.coffee diff --git a/app/assets/javascripts/pettanr_sheeter.js.coffee b/app/assets/javascripts/deprecated/pettanr_sheeter.js.coffee similarity index 100% rename from app/assets/javascripts/pettanr_sheeter.js.coffee rename to app/assets/javascripts/deprecated/pettanr_sheeter.js.coffee diff --git a/app/assets/javascripts/sheets.js.coffee b/app/assets/javascripts/deprecated/sheets.js.coffee similarity index 100% rename from app/assets/javascripts/sheets.js.coffee rename to app/assets/javascripts/deprecated/sheets.js.coffee diff --git a/app/assets/javascripts/speech_balloon_templates.js.coffee b/app/assets/javascripts/deprecated/speech_balloon_templates.js.coffee similarity index 100% rename from app/assets/javascripts/speech_balloon_templates.js.coffee rename to app/assets/javascripts/deprecated/speech_balloon_templates.js.coffee diff --git a/app/assets/javascripts/writing_formats.js.coffee b/app/assets/javascripts/deprecated/writing_formats.js.coffee similarity index 100% rename from app/assets/javascripts/writing_formats.js.coffee rename to app/assets/javascripts/deprecated/writing_formats.js.coffee diff --git a/app/assets/javascripts/manifest/controller.js.coffee b/app/assets/javascripts/manifest/controller.js.coffee index 4e9f9054..e332a38e 100644 --- a/app/assets/javascripts/manifest/controller.js.coffee +++ b/app/assets/javascripts/manifest/controller.js.coffee @@ -1,8 +1,21 @@ -class Manifest.Controller - constructor: (item_name) -> - @item_name = item_name - - model_name: () -> - header: () -> - paginate: () -> - +class Manifest.Controller extends ManifestBase.Base + _item_name = null + _actions = null + + item_name: () -> + _item_name + + actions: () -> + _actions + + set_default: () -> + super() + @json['item_name'] ||= Manifest.singularize(@name ) + @json['actions'] ||= {} + + init: () -> + super() + _item_name = @json['item_name'] + _actions = ManifestBase.load_type_name_args this, @json, 'actions', Manifest.ControllerModule.ActionFactory + +class Manifest.ControllerModule diff --git a/app/assets/javascripts/manifest/controller/action.js.coffee b/app/assets/javascripts/manifest/controller/action.js.coffee new file mode 100644 index 00000000..17076613 --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action.js.coffee @@ -0,0 +1,19 @@ +class Manifest.ControllerModule.ActionFactory extends ManifestBase.Factory + + @types: () -> + { + 'list': Manifest.ControllerModule.ActionModule.ActionList, + 'show': Manifest.ControllerModule.ActionModule.ActionShow, + 'count': Manifest.ControllerModule.ActionModule.ActionCount, + 'new': Manifest.ControllerModule.ActionModule.ActionNew, + 'edit': Manifest.ControllerModule.ActionModule.ActionEdit, + 'create': Manifest.ControllerModule.ActionModule.ActionCreate, + 'update': Manifest.ControllerModule.ActionModule.ActionUpdate, + 'destroy': Manifest.ControllerModule.ActionModule.ActionDestroy + } + + @default_type: () -> + 'list' + +class Manifest.ControllerModule.ActionModule + diff --git a/app/assets/javascripts/manifest/controller/action/base.js.coffee b/app/assets/javascripts/manifest/controller/action/base.js.coffee new file mode 100644 index 00000000..2cb71340 --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/base.js.coffee @@ -0,0 +1,11 @@ +class Manifest.ControllerModule.ActionModule.Base extends ManifestBase.TypeNameArgs + + set_default: () -> + super() + @args['item_name'] ||= @parent.item_name # not parent.name. follow singularized name + + init: () -> + super() + @item_name = @args['item_name'] + + diff --git a/app/assets/javascripts/manifest/controller/action/count.js.coffee b/app/assets/javascripts/manifest/controller/action/count.js.coffee new file mode 100644 index 00000000..7e4b4caf --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/count.js.coffee @@ -0,0 +1,10 @@ +class Manifest.ControllerModule.ActionModule.ActionCount extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + @args['list_name'] ||= @name().replace(/^count_/, '') + + init: () -> + super() + @list_name = @args['list_name'] + diff --git a/app/assets/javascripts/manifest/controller/action/create.js.coffee b/app/assets/javascripts/manifest/controller/action/create.js.coffee new file mode 100644 index 00000000..bb85e3e7 --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/create.js.coffee @@ -0,0 +1,8 @@ +class Manifest.ControllerModule.ActionModule.ActionCreate extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + + init: () -> + super() + diff --git a/app/assets/javascripts/manifest/controller/action/destroy.js.coffee b/app/assets/javascripts/manifest/controller/action/destroy.js.coffee new file mode 100644 index 00000000..36c57743 --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/destroy.js.coffee @@ -0,0 +1,8 @@ +class Manifest.ControllerModule.ActionModule.ActionDestroy extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + + init: () -> + super() + diff --git a/app/assets/javascripts/manifest/controller/action/edit.js.coffee b/app/assets/javascripts/manifest/controller/action/edit.js.coffee new file mode 100644 index 00000000..7fd46c0a --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/edit.js.coffee @@ -0,0 +1,8 @@ +class Manifest.ControllerModule.ActionModule.ActionEdit extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + + init: () -> + super() + diff --git a/app/assets/javascripts/manifest/controller/action/list.js.coffee b/app/assets/javascripts/manifest/controller/action/list.js.coffee new file mode 100644 index 00000000..910e059f --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/list.js.coffee @@ -0,0 +1,10 @@ +class Manifest.ControllerModule.ActionModule.ActionList extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + @args['list_name'] ||= @name + + init: () -> + super() + @list_name = @args['list_name'] + diff --git a/app/assets/javascripts/manifest/controller/action/new.js.coffee b/app/assets/javascripts/manifest/controller/action/new.js.coffee new file mode 100644 index 00000000..4add23ad --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/new.js.coffee @@ -0,0 +1,8 @@ +class Manifest.ControllerModule.ActionModule.ActionNew extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + + init: () -> + super() + diff --git a/app/assets/javascripts/manifest/controller/action/show.js.coffee b/app/assets/javascripts/manifest/controller/action/show.js.coffee new file mode 100644 index 00000000..afd5253a --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/show.js.coffee @@ -0,0 +1,8 @@ +class Manifest.ControllerModule.ActionModule.ActionShow extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + + init: () -> + super() + diff --git a/app/assets/javascripts/manifest/controller/action/update.js.coffee b/app/assets/javascripts/manifest/controller/action/update.js.coffee new file mode 100644 index 00000000..3550b59c --- /dev/null +++ b/app/assets/javascripts/manifest/controller/action/update.js.coffee @@ -0,0 +1,8 @@ +class Manifest.ControllerModule.ActionModule.ActionUpdate extends Manifest.ControllerModule.ActionModule.Base + + set_default: () -> + super() + + init: () -> + super() + diff --git a/app/assets/javascripts/manifest/item.js.coffee b/app/assets/javascripts/manifest/item.js.coffee index 809aa47a..d6fb360b 100644 --- a/app/assets/javascripts/manifest/item.js.coffee +++ b/app/assets/javascripts/manifest/item.js.coffee @@ -10,7 +10,7 @@ class Manifest.ItemFactory extends ManifestBase.Factory 'root': Manifest.ItemModule.RootPeta, 'element': Manifest.ItemModule.ElementPeta, 'binder': Manifest.ItemModule.BinderPeta, - 'leaf': LeafPeta + 'leaf': Manifest.ItemModule.LeafPeta } @default_type: () -> diff --git a/app/assets/javascripts/manifest/item/base.js.coffee b/app/assets/javascripts/manifest/item/base.js.coffee index c86ee17c..ca2aeccc 100644 --- a/app/assets/javascripts/manifest/item/base.js.coffee +++ b/app/assets/javascripts/manifest/item/base.js.coffee @@ -7,7 +7,7 @@ class Manifest.ItemModule.BasePeta extends ManifestBase.TypeNameArgs init: () -> super() @parent_model_name = null # init at leaf, element - @boost = ManifestBase.load_name_values(this, @args, 'boost', Boost) + @boost = ManifestBase.load_name_values(this, @args, 'boost', Manifest.ItemModule.Boost) is_element: () -> @parent_model_name != null diff --git a/app/assets/javascripts/manifest/manifest.js.coffee b/app/assets/javascripts/manifest/manifest.js.coffee index 28014cf0..4e45bf26 100644 --- a/app/assets/javascripts/manifest/manifest.js.coffee +++ b/app/assets/javascripts/manifest/manifest.js.coffee @@ -1,16 +1,48 @@ class Manifest + _system_resources = null + _magic_numbers = null + _items = null + _controllers = null + _models = null + _module_names = null + + system_resources: () -> + _system_resources + + magic_numbers: () -> + _magic_numbers + + items: () -> + _items + + controllers: () -> + _controllers + + models: () -> + _models + + module_names: () -> + _module_names + constructor: (global_json) -> - @module_names = [] + _module_names = [] @global_json = global_json || {} - @system_resources = new Manifest.SystemResource( + _system_resources = new Manifest.SystemResource( this, Manifest.SystemResource.set_default(@global_json['system_resources']) ) - @magic_numbers = @global_json['magic_numbers'] + _magic_numbers = @global_json['magic_numbers'] init: () -> # managers can't initialize before load application.rb - @items = ManifestBase.load_type_name_args(this, @global_json, 'items', Manifest.ItemFactory) - @controllers = Manifest.Controller.load(this, @global_json, 'controllers') - @models = Manifest.Model.load(this, @global_json, 'models') - + _items = ManifestBase.load_type_name_args(this, @global_json, 'items', Manifest.ItemFactory) + _controllers = Manifest.Controller.load(this, @global_json, 'controllers', Manifest.Controller) + _models = Manifest.Model.load(this, @global_json, 'models', Manifest.Model) + true + + @singularize: (name) -> + name.replace(/es$/, '').replace(/s$/, '') + + @pluralize: (name) -> + name.pluralize + @Manifest = Manifest diff --git a/app/assets/javascripts/manifest/model.js.coffee b/app/assets/javascripts/manifest/model.js.coffee index d855c80b..35974b2d 100644 --- a/app/assets/javascripts/manifest/model.js.coffee +++ b/app/assets/javascripts/manifest/model.js.coffee @@ -1,8 +1,84 @@ -class Manifest.Model - constructor: (item_name) -> - @item_name = item_name +class Manifest.Model extends ManifestBase.Base + _attributes = null + _associations = null + _list = null + + attributes: () -> + _attributes + + associations: () -> + _associations + + list: () -> + _list + + set_default: () -> + super + @json['attributes'] ||= {} + @json['associations'] ||= {} + @json['list'] ||= {} + @json['attributes']['id'] = { + 'type': 'number', + 'primary_key': 1, + 'rules': { + 'number': true + } + } + @json['attributes']['created_at'] = { + 'type': 'datetime', + } + @json['attributes']['updated_at'] = { + 'type': 'datetime', + } + + init: () -> + super + _attributes = ManifestBase.load_name_values this, @json, 'attributes', Manifest.ModelModule.Attribute + _associations = ManifestBase.load_value this, @json, 'associations', Manifest.ModelModule.Association + _list = ManifestBase.load_value this, @json, 'list', Manifest.ModelModule.List model_name: () -> - header: () -> - paginate: () -> - + _name + + classify: () -> + Manifest.item_name_to_model _name + + table_name: () -> + @classify.table_name + + valid_encode_columns: () -> + r = [] + _.each @attributes, (attribute, attribute_name) -> + next if not attribute.type == 'text' + r.push attribute_name + r + + owner_type: () -> + return 'author' if @attributes['author_id'] + return 'artist' if @attributes['artist_id'] + false + + content_model: () -> + return true if @owner_type + false + + child_model_manifests: () -> + r = [] + _.each Manifest.items, (peta_manifest, peta_name) -> + next if not peta_manifest.is_element + next if not peta_manifest.parent_model_name == @name + r.push Manifest.models[peta_name] + r + + child_models: () -> + _.map @child_model_manifests, (child_model_manifest) -> + child_model_manifest.classify + + child_element_names: () -> + _.map @child_models, (child_model) -> + _associations.child_element_name(child_model) + + child_element_name: (item_name) -> + _associations.child_element_name(child_model_manifest) + +class Manifest.ModelModule diff --git a/app/assets/javascripts/manifest/model/association.js.coffee b/app/assets/javascripts/manifest/model/association.js.coffee new file mode 100644 index 00000000..3b636a15 --- /dev/null +++ b/app/assets/javascripts/manifest/model/association.js.coffee @@ -0,0 +1,51 @@ +class Manifest.ModelModule.Association extends ManifestBase.Values + _belongs_to = null + _has_many = null + _has_one = null + + belongs_to: () -> + _belongs_to + + has_many: () -> + _has_many + + has_one: () -> + _has_one + + set_default: () -> + super() + @values['belongs_to'] ||= {} + @values['has_many'] ||= {} + @values['has_one'] ||= {} + + init: () -> + super() + _belongs_to = ManifestBase.load_name_values this, @values, 'belongs_to', Manifest.ModelModule.AssociationModule.BelongsTo + _has_many = ManifestBase.load_name_values this, @values, 'has_many', Manifest.ModelModule.AssociationModule.HasMany + _has_one = ManifestBase.load_name_values this, @values, 'has_one', Manifest.ModelModule.AssociationModule.HasOne + + model_name: () -> + _parent.name + + each_parent_model: () -> + _.each _belongs_to, (belongs_to_manifest, name) -> + next if not _parent.classify.is_element() + if _parent.classify.my_peta.type == 'element' + next if not belongs_to_manifest.model.my_peta.type == 'root' + if _parent.classify.my_peta.type == 'leaf' + next if not belongs_to_manifest.model.my_peta.type == 'binder' + #yield belongs_to_manifest.model + + child_element_name: (child_model) -> + if is_has_one child_model + child_model.item_name + else + child_model.table_name + + is_has_one: (child_model) -> + if _has_one[child_model.item_name] + true + else + false + +class Manifest.ModelModule.AssociationModule diff --git a/app/assets/javascripts/manifest/model/association/belongs_to.js.coffee b/app/assets/javascripts/manifest/model/association/belongs_to.js.coffee new file mode 100644 index 00000000..abc6bbd7 --- /dev/null +++ b/app/assets/javascripts/manifest/model/association/belongs_to.js.coffee @@ -0,0 +1,26 @@ +class Manifest.ModelModule.AssociationModule.BelongsTo extends ManifestBase.NameValues + _model_name = null + _id_column = null + + model_name: () -> + _model_name + + id_column: () -> + _id_column + + set_default: () -> + super() + @values['model_name'] ||= @name + @values['id_column'] ||= @name + '_id' + + init: () -> + super() + _model_name = @values['model_name'] + _id_column = @values['id_column'] + + model: () -> + Manifest.item_name_to_model _model_name + + association_name: () -> + _parent.association_name + diff --git a/app/assets/javascripts/manifest/model/association/has_many.js.coffee b/app/assets/javascripts/manifest/model/association/has_many.js.coffee new file mode 100644 index 00000000..aa3de9b5 --- /dev/null +++ b/app/assets/javascripts/manifest/model/association/has_many.js.coffee @@ -0,0 +1,34 @@ +class Manifest.ModelModule.AssociationModule.HasMany extends ManifestBase.NameValues + _model_name = null + _foreign_key = null + _through = null + + model_name: () -> + _model_name + + foreign_key: () -> + _foreign_key + + through: () -> + _through + + set_default: () -> + super() + @values['model_name'] ||= Manifest.singularize @name() + @values['foreign_key'] ||= @parent.model_name + '_id' + + init: () -> + super() + _model_name = @values['model_name'] + _foreign_key = @values['foreign_key'] + _through = @values['through'] + + is_through: () -> + !_through + + model: () -> + Manifest.item_name_to_model _model_name + + association_name: () -> + _parent.association_name + diff --git a/app/assets/javascripts/manifest/model/association/has_one.js.coffee b/app/assets/javascripts/manifest/model/association/has_one.js.coffee new file mode 100644 index 00000000..a5fe34cc --- /dev/null +++ b/app/assets/javascripts/manifest/model/association/has_one.js.coffee @@ -0,0 +1,26 @@ +class Manifest.ModelModule.AssociationModule.HasOne extends ManifestBase.NameValues + _model_name = null + _foreign_key = null + + model_name: () -> + _model_name + + foreign_key: () -> + _foreign_key + + set_default: () -> + super() + @values['model_name'] ||= @name + @values['foreign_key'] ||= @parent.model_name + '_id' + + init: () -> + super() + _model_name = @values['model_name'] + _foreign_key = @values['foreign_key'] + + is_through: () -> + !_through + + model: () -> + Manifest.item_name_to_model _model_name + diff --git a/app/assets/javascripts/manifest/model/attribute.js.coffee b/app/assets/javascripts/manifest/model/attribute.js.coffee new file mode 100644 index 00000000..11898cd9 --- /dev/null +++ b/app/assets/javascripts/manifest/model/attribute.js.coffee @@ -0,0 +1,36 @@ +class Manifest.ModelModule.Attribute extends ManifestBase.NameValues + _type = null + _primary_key = null + _rules = null + _source = null + + type: () -> + _type + + primary_key: () -> + _primary_key + + rules: () -> + _rules + + source: () -> + _source + + set_default: () -> + super() + ManifestBase.alert_undefined_message 'type', @module_message() if not @values['type'] + @values['primary_key'] ||= 0 + @values['rules'] ||= {} + + init: () -> + super() + _type = @values['type'] # do not remove + _primary_key = @values['primary_key'] + _rules = @values['rules'] + if @values['source'] + _source = ManifestBase.load_type_args this, @values, 'source', Manifest.ModelModule.AttributeModule.SourceFactory + + model_name: () -> + @parent.name + +class Manifest.ModelModule.AttributeModule diff --git a/app/assets/javascripts/manifest/model/attribute/source.js.coffee b/app/assets/javascripts/manifest/model/attribute/source.js.coffee new file mode 100644 index 00000000..be441da7 --- /dev/null +++ b/app/assets/javascripts/manifest/model/attribute/source.js.coffee @@ -0,0 +1,14 @@ +class Manifest.ModelModule.AttributeModule.SourceFactory extends ManifestBase.Factory + + @types: () -> + { + 'model': Manifest.ModelModule.AttributeModule.SourceModule.ModelSource, + 'filter': Manifest.ModelModule.AttributeModule.SourceModule.FilterSource, + 'magic_number': Manifest.ModelModule.AttributeModule.SourceModule.MagicNumberSource + } + + @default_type: () -> + 'magic_number' + +class Manifest.ModelModule.AttributeModule.SourceModule + diff --git a/app/assets/javascripts/manifest/model/attribute/source/base.js.coffee b/app/assets/javascripts/manifest/model/attribute/source/base.js.coffee new file mode 100644 index 00000000..ef80ffa5 --- /dev/null +++ b/app/assets/javascripts/manifest/model/attribute/source/base.js.coffee @@ -0,0 +1,13 @@ +class Manifest.ModelModule.AttributeModule.SourceModule.Base extends ManifestBase.TypeArgs + + set_default: () -> + super() + @args['item_name'] ||= @parent.item_name # not parent.name. follow singularized name + + init: () -> + super() + @item_name = @args['item_name'] + + model_name: () -> + @parent.model_name + diff --git a/app/assets/javascripts/manifest/model/attribute/source/filter.js.coffee b/app/assets/javascripts/manifest/model/attribute/source/filter.js.coffee new file mode 100644 index 00000000..252ac268 --- /dev/null +++ b/app/assets/javascripts/manifest/model/attribute/source/filter.js.coffee @@ -0,0 +1,9 @@ +class Manifest.ModelModule.AttributeModule.SourceModule.FilterSource extends Manifest.ModelModule.AttributeModule.SourceModule.ModelSource + + set_default: () -> + super() + + init: () -> + super() + @filter_column_name = @args['filter_column_name'] + diff --git a/app/assets/javascripts/manifest/model/attribute/source/magic_number.js.coffee b/app/assets/javascripts/manifest/model/attribute/source/magic_number.js.coffee new file mode 100644 index 00000000..23a2beb2 --- /dev/null +++ b/app/assets/javascripts/manifest/model/attribute/source/magic_number.js.coffee @@ -0,0 +1,10 @@ +class Manifest.ModelModule.AttributeModule.SourceModule.MagicNumberSource extends Manifest.ModelModule.AttributeModule.SourceModule.Base + + set_default: () -> + super() + ManifestBase.alert_undefined_message 'select_item_name', @module_message if not @args['select_item_name'] + + init: () -> + super() + @select_item_name = @args['select_item_name'] + diff --git a/app/assets/javascripts/manifest/model/attribute/source/model.js.coffee b/app/assets/javascripts/manifest/model/attribute/source/model.js.coffee new file mode 100644 index 00000000..a8076d51 --- /dev/null +++ b/app/assets/javascripts/manifest/model/attribute/source/model.js.coffee @@ -0,0 +1,16 @@ +class Manifest.ModelModule.AttributeModule.SourceModule.ModelSource extends Manifest.ModelModule.AttributeModule.SourceModule.Base + + set_default: () -> + super() + @args['resource_model_name'] ||= (@parent.name.replace('_id', '')) + @args['resource_list_name'] ||= 'select_items' + @args['select_item_name'] ||= @model_name + '_' + @parent.name.replace('_id', '') + '_items' + @args['caption_name'] ||= 'caption' + + init: () -> + super() + @resource_model_name = @args['resource_model_name'] + @resource_list_name = @args['resource_list_name'] + @select_item_name = @args['select_item_name'] + @caption_name = @args['caption_name'] + diff --git a/app/assets/javascripts/manifest/model/list.js.coffee b/app/assets/javascripts/manifest/model/list.js.coffee new file mode 100644 index 00000000..b68a315d --- /dev/null +++ b/app/assets/javascripts/manifest/model/list.js.coffee @@ -0,0 +1,12 @@ +class Manifest.ModelModule.List extends ManifestBase.Values + + set_default: () -> + super() + @values['default_page_size'] ||= 25 + @values['max_page_size'] ||= 100 + + init: () -> + super() + @default_page_size = @values['default_page_size'] + @max_page_size = @values['max_page_size'] + diff --git a/app/assets/javascripts/manifest/system_resource.js.coffee b/app/assets/javascripts/manifest/system_resource.js.coffee index ba80476f..28d6aaaa 100644 --- a/app/assets/javascripts/manifest/system_resource.js.coffee +++ b/app/assets/javascripts/manifest/system_resource.js.coffee @@ -1,4 +1,12 @@ class Manifest.SystemResource + _templates = null + _select_items = null + + templates: () -> + _templates + + select_items: () -> + _select_items @set_default: (system_resource_manifest) -> system_resource_manifest['templates'] ||= {} @@ -16,8 +24,8 @@ class Manifest.SystemResource @select_items_loader select_items_loader: () -> - _.each @manifest.models, (model_name, model_manifest) -> - _.each model_manifest.attributes, (attribute_name, attribute_manifest) -> + _.each @manifest.models, (model_manifest, model_name) -> + _.each model_manifest.attributes, (attribute_manifest, attribute_name) -> source_manifest = attribute_manifest.source next if not source_manifest next if not source_manifest.type == 'model' @@ -36,6 +44,6 @@ class Manifest.SystemResource constructor: (manifest, system_resource_manifest) -> @manifest = manifest @system_resource_manifest = system_resource_manifest - @templates = Manifest.SystemResource.Template.manager(this, @system_resource_manifest['templates']) - @select_items = system_resource_manifest['select_items'] + _templates = Manifest.SystemResource.Template.manager(this, @system_resource_manifest['templates']) + _select_items = system_resource_manifest['select_items'] diff --git a/app/assets/javascripts/manifest_base/base.js.coffee b/app/assets/javascripts/manifest_base/base.js.coffee index 4aac350e..a35f22c0 100644 --- a/app/assets/javascripts/manifest_base/base.js.coffee +++ b/app/assets/javascripts/manifest_base/base.js.coffee @@ -1,28 +1,42 @@ class ManifestBase.Base - @load: (manifest, jsons, module_name) -> + _manifest = null + _name = null + _json = null + _module_name = null + + manifest: () -> + _manifest + + name: () -> + _name + + json: () -> + _json + + module_name: () -> + _module_name + + @load: (manifest, jsons, module_name, klass) -> r = {} - _.each @jsons[module_name], (name, json) -> - r[name] = new ManifestBase.Base(manifest, name, json, module_name) + _.each jsons[module_name], (json, name) -> + r[name] = new klass(manifest, name, json, module_name) r set_default: () -> - @json['args'] ||= {} - @type = @json['type'] - @args = @json['args'] - + init: () -> module_names: () -> - @parent.module_names + [@module_name, @name] + _manifest.module_names().concat([@module_name, @name]) module_message: () -> ManifestBase.module_message(@module_names) constructor: (manifest, name, json, module_name) -> - @manifest = manifest + _manifest = manifest @name = name @json = json - @module_name = module_name + _module_name = module_name @set_default() @init() diff --git a/app/assets/javascripts/manifest_base/factory.js.coffee b/app/assets/javascripts/manifest_base/factory.js.coffee index 8bc2627a..1990d2e1 100644 --- a/app/assets/javascripts/manifest_base/factory.js.coffee +++ b/app/assets/javascripts/manifest_base/factory.js.coffee @@ -5,21 +5,21 @@ class ManifestBase.Factory @default_type: () -> null - @factory: (parent, name, json, module_name) -> + @factory: (parent, name, json, module_name, klass) -> module_message = ManifestBase.module_message(parent.module_names(), [module_name, name]) - json['type'] ||= @default_type() + json['type'] ||= klass.default_type() type = json['type'] ManifestBase.alert_undefined_message('type', module_message) if not type - my_class = @types()[type] + my_class = klass.types()[type] ManifestBase.alert_undefined_message('class', module_message) if not my_class new my_class(parent, name, json, module_name) - @factory_type_args: (parent, json, module_name) -> + @factory_type_args: (parent, json, module_name, klass) -> module_message = ManifestBase.module_message(parent.module_names(), [module_name]) - json['type'] ||= @default_type() + json['type'] ||= ManifestBase.Factory.default_type() type = json['type'] ManifestBase.alert_undefined_message('type', module_message) if not type - my_class = @types()[type] + my_class = klass.types()[type] ManifestBase.alert_undefined_message('class', module_message) if not my_class new my_class(parent, json, module_name) diff --git a/app/assets/javascripts/manifest_base/manifest_base.js.coffee b/app/assets/javascripts/manifest_base/manifest_base.js.coffee index 68505c7f..3b418c98 100644 --- a/app/assets/javascripts/manifest_base/manifest_base.js.coffee +++ b/app/assets/javascripts/manifest_base/manifest_base.js.coffee @@ -5,7 +5,7 @@ class ManifestBase require_dependency path + name.to_s @module_message: (module_names, my_module_names = []) -> - (module_names + my_module_names).join(' > ') + module_names.concat(my_module_names).join(' > ') @alert_message: (message, location) -> confirm('invalid manifest?:' + message + " for " + message) @@ -18,17 +18,17 @@ class ManifestBase @load_name_values: (_self, jsons, module_name, klass) -> hash = {} - _.each jsons[module_name], (_name, _json) -> + _.each jsons[module_name], (_json, _name) -> hash[_name] = new klass(_self, _name, _json, module_name) hash @load_type_args: (_self, jsons, module_name, klass) -> - klass.factory_type_args(_self, jsons[module_name], module_name) + klass.factory_type_args(_self, jsons[module_name], module_name, klass) @load_type_name_args: (_self, jsons, module_name, klass) -> hash = {} - _.each jsons[module_name], (_name, _json) -> - hash[_name] = new klass.factory(_self, _name, _json, module_name) + _.each jsons[module_name], (_json, _name) -> + hash[_name] = new klass.factory(_self, _name, _json, module_name, klass) hash @load_names: (_self, json, module_name, klass) -> diff --git a/app/assets/javascripts/manifest_base/name_values.js.coffee b/app/assets/javascripts/manifest_base/name_values.js.coffee index af8e0a34..f58643c8 100644 --- a/app/assets/javascripts/manifest_base/name_values.js.coffee +++ b/app/assets/javascripts/manifest_base/name_values.js.coffee @@ -1,27 +1,43 @@ class ManifestBase.NameValues + _parent = null + _name = null + _json = null + _module_name = null + + parent: () -> + _parent + + name: () -> + _name + + json: () -> + _json + + module_name: () -> + _module_name set_default: () -> - @values = @json + @values = _json init: () -> module_names: () -> - @parent.module_names + [@module_name, @name] + @parent().module_names().concat([_module_name, _name]) module_message: () -> ManifestBase.module_message(@module_names) parent_name: () -> - @parent.name + _parent.name parent_json: () -> - @parent.json + _parent.json constructor: (parent, name, json, module_name) -> - @parent = parent - @name = name - @json = json - @module_name = module_name + _parent = parent + _name = name + _json = json + _module_name = module_name @set_default() @init() diff --git a/app/assets/javascripts/manifest_base/names.js.coffee b/app/assets/javascripts/manifest_base/names.js.coffee index 6bb00f99..1cbf2f65 100644 --- a/app/assets/javascripts/manifest_base/names.js.coffee +++ b/app/assets/javascripts/manifest_base/names.js.coffee @@ -1,25 +1,37 @@ class ManifestBase.Names + _parent = null + _name = null + _module_name = null + + parent: () -> + _parent + + name: () -> + _name + + module_name: () -> + _module_name set_default: () -> init: () -> module_names: () -> - @manifest.module_names + [@module_name, @name] + _parent.module_names + [_module_name, _name] module_message: () -> ManifestBase.module_message(@module_names) parent_name: () -> - @parent.name + _parent.name parent_json: () -> - @parent.json + _parent.json constructor: (parent, name, module_name) -> - @parent = parent - @name = name - @module_name = module_name + _parent = parent + _name = name + _module_name = module_name @set_default() @init() diff --git a/app/assets/javascripts/manifest_base/type_args.js.coffee b/app/assets/javascripts/manifest_base/type_args.js.coffee index 4e5777ed..58e355da 100644 --- a/app/assets/javascripts/manifest_base/type_args.js.coffee +++ b/app/assets/javascripts/manifest_base/type_args.js.coffee @@ -1,28 +1,44 @@ class ManifestBase.TypeArgs + _parent = null + _json = null + _module_name = null + _type = null + + parent: () -> + _parent + + json: () -> + _json + + module_name: () -> + _module_name + + type: () -> + _type set_default: () -> - @json['args'] ||= {} - @type = @json['type'] - @args = @json['args'] + _json['args'] ||= {} + _type = _json['type'] + @args = _json['args'] init: () -> module_names: () -> - @parent.module_names + [@module_name] + _parent.module_names + [_module_name] module_message: () -> ManifestBase.module_message(@module_names) parent_name: () -> - @parent.name + _parent.name parent_json: () -> - @parent.json + _parent.json constructor: (parent, json, module_name) -> - @parent = parent - @json = json - @module_name = module_name + _parent = parent + _json = json + _module_name = module_name @set_default() @init() diff --git a/app/assets/javascripts/manifest_base/type_name_args.coffee b/app/assets/javascripts/manifest_base/type_name_args.coffee index a579f4f6..4f6d9513 100644 --- a/app/assets/javascripts/manifest_base/type_name_args.coffee +++ b/app/assets/javascripts/manifest_base/type_name_args.coffee @@ -1,29 +1,49 @@ class ManifestBase.TypeNameArgs + _parent = null + _name = null + _json = null + _module_name = null + _type = null + + parent: () -> + _parent + + name: () -> + _name + + json: () -> + _json + + module_name: () -> + _module_name + + type: () -> + _type set_default: () -> - @json['args'] ||= {} - @type = @json['type'] - @args = @json['args'] + _json['args'] ||= {} + _type = _json['type'] + @args = _json['args'] init: () -> module_names: () -> - @parent.module_names + [@module_name, @name] + _parent.module_names + [_module_name, _name] module_message: () -> ManifestBase.module_message(@module_names) parent_name: () -> - @parent.name + _parent.name parent_json: () -> - @parent.json + _parent.json constructor: (parent, name, json, module_name) -> - @parent = parent - @name = name - @json = json - @module_name = module_name + _parent = parent + _name = name + _json = json + _module_name = module_name @set_default() @init() diff --git a/app/assets/javascripts/manifest_base/values.js.coffee b/app/assets/javascripts/manifest_base/values.js.coffee index d2a7e372..9c622ce3 100644 --- a/app/assets/javascripts/manifest_base/values.js.coffee +++ b/app/assets/javascripts/manifest_base/values.js.coffee @@ -1,26 +1,38 @@ class ManifestBase.Values + _parent = null + _json = null + _module_name = null + + parent: () -> + _parent + + json: () -> + _json + + module_name: () -> + _module_name set_default: () -> - @values = @json + @values = _json init: () -> module_names: () -> - @parent.module_names + [@module_name] + _parent.module_names + [_module_name] module_message: () -> ManifestBase.module_message(@module_names) parent_name: () -> - @parent.name + _parent.name parent_json: () -> - @parent.json + _parent.json constructor: (parent, json, module_name) -> - @parent = parent - @json = json - @module_name = module_name + _parent = parent + _json = json + _module_name = module_name @set_default() @init() diff --git a/lib/manifest_base/base.rb b/lib/manifest_base/base.rb index d49b0771..8c9f3ddb 100644 --- a/lib/manifest_base/base.rb +++ b/lib/manifest_base/base.rb @@ -6,7 +6,7 @@ module ManifestBase }] end - attr :manifest, :name, :name, :module_name + attr :manifest, :name, :json, :module_name def initialize manifest, name, json, module_name @manifest = manifest -- 2.11.0