-
-module Pettanr
- class ListManager
- class PublicList
- def initialize page, page_size, operators, item_name, conf, manifest
- @page = page
- @page_size = page_size
- @operators = operators
- @item_name = item_name
- @conf = conf
- @manifest = manifest
-
- @model = @item_name.classify.constantize
- end
-
- def items
- @model.public_list @page, @page_size
- end
-
- def paginate
- @model.list_paginate(@page, @page_size)
- end
-
- end
-
- class PrivateList
- def initialize page, page_size, operators, item_name, conf, manifest
- @page = page
- @page_size = page_size
- @operators = operators
- @item_name = item_name
- @conf = conf
- @manifest = manifest
-
- @model = @item_name.classify.constantize
- end
-
- def items
- @model.private_list @operators, @page, @page_size
- end
-
- def paginate
- @model.list_paginate(@page, @page_size)
- end
-
- end
-
- class HasManyList
- def initialize page, page_size, operators, item_name, conf, manifest
- @page = page
- @page_size = page_size
- @operators = operators
- @item_name = item_name
- @conf = conf
- @manifest = manifest
-
- @model = @item_name.classify.constantize
- @association_name = @conf['association_name']
- @has_many_conf = @manifest.model(@item_name).associations['has_many'] || {}
- @association_conf = @has_many_conf[@association_name] || {}
- @association_model_name = @association_conf['model']
- @association_model = @association_model_name.classify.constantize
- @foreign_key = @association_conf['foreign_key']
- end
-
- def items item
- method_name = 'list_by_' + item.item_name
- @association_model.__send__ @method_name, item.id, @operators, @page, @page_size
- end
-
- def paginate
- @model.list_paginate(@page, @page_size)
- end
-
- end
-
- class FilterList
- def initialize page, page_size, operators, item_name, conf, manifest
- @page = page
- @page_size = page_size
- @operators = operators
- @item_name = item_name
- @conf = conf
- @manifest = manifest
-
- @model = @item_name.classify.constantize
- @filter_key = @conf['filter_key']
- end
-
- def items filter_item
- @model.filtered_list filter_item, @filter_key, @operators, @page, @page_size
- end
-
- def paginate filter_item
- @model.list_paginate(filter_item, @filter_key, @operators, @page, @page_size)
+require_dependency "manifest/list/base"
+require_dependency "manifest/list/public"
+require_dependency "manifest/list/private"
+require_dependency "manifest/list/system_resource"
+require_dependency "manifest/list/filter"
+require_dependency "manifest/list/through_filter"
+require_dependency "manifest/list/foreign_filter"
+require_dependency "manifest/list/play"
+module Manifest
+ module ListModule
+ class ListFactory
+ @@types = {
+ 'public' => ListModule::PublicList, 'private' => PrivateList, 'system_resource' => SystemResourceList,
+ 'filter' => FilterList, 'through_filter' => ThroughFilterList, 'foreign_filter' => ForeignFilterList,
+ 'play' => PlayList
+ }
+ def self.factory manifest, item_name, my_manifests
+ lists = {}
+ my_manifests.each {|list_name, my_manifest|
+ model_manifest = manifest.models[item_name]
+ raise "undefined model for lists > #{item_name}\n" unless model_manifest
+ model_list_manifest = model_manifest.lists[list_name]
+ raise "undefined model_list for lists > #{item_name} > #{list_name}\n" unless model_list_manifest
+ type = model_list_manifest.type
+ raise "undefined type for lists > #{item_name} > #{list_name}\n" unless type
+ my_class = @@types[type]
+ raise "undefined class for lists > #{item_name} > #{list_name} > #{type}\n" unless my_class
+ lists[list_name] = my_class.new(manifest, item_name, list_name, my_manifest)
+ }
+ lists
end
end
-
- @@types = {'public' => PublicList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList}
- def initialize list_manifest
- @list_manifest = list_manifest
- @item_name = @list_manifest.item_name
- @manifest = @list_manifest.manifest
- @list_conf = @list_manifest.conf
- @lists = {}
- @list_conf.each {|list_name, conf|
- type = conf['type']
- @lists[list_name] = @@types[type]
+ end
+
+ class List
+ include ListModule
+ def self.manager manifest, my_manifests
+ lists = {}
+ my_manifests.each {|item_name, list_manifest|
+ lists[item_name] = ListModule::ListFactory.factory(manifest, item_name, list_manifest)
}
+ lists
end
-
- def open list_name, page, page_size, operators
- @lists[list_name].new page, page_size, operators, @item_name, @list_conf, @manifest
- end
-
end
+
end