+require_dependency "manifest/list/where"
+require_dependency "manifest/list/includes"
module Manifest
module ListModule
class Base
end
attr :manifest, :item_name, :list_name, :list_manifest,
- :default_page_size, :max_page_size
+ :model, :model_manifest, :model_list_manifest,
+ :where, :includes
def initialize manifest, item_name, list_name, list_manifest
@manifest = manifest
@item_name = item_name
def set_default
@model_manifest = @manifest.models[@item_name]
@model_list_manifest = @model_manifest.lists[@list_name]
- @list_manifest['default_page_size'] ||= @model_list_manifest.default_page_size
- @list_manifest['max_page_size'] ||= @model_list_manifest.max_page_size
+ @list_manifest['where'] ||= {}
+ @list_manifest['includes'] ||= {}
end
def init
- @default_page_size = @list_manifest['default_page_size']
- @max_page_size = @list_manifest['max_page_size']
-
@model = ::Manifest.item_name_to_model @item_name
@table_name = @model.table_name
- if @model.content?
- @owner_model = @model.owner_model
- @owner_table_name = @owner_model.table_name if @owner_model
- end
+ @where = WhereFactory.factory self, @list_manifest['where']
+ @includes = IncludeFactory.factory self, @list_manifest['includes']
+ end
+
+ def default_page_size
+ @model_list_manifest.default_page_size
+ end
+
+ def max_page_size
+ @model_list_manifest.max_page_size
end
def page_number prm = nil
def page_size prm
page_size = prm.to_i
- page_size = @max_page_size if page_size > @max_page_size
- page_size = @default_page_size if page_size < 1
+ page_size = self.max_page_size if page_size > self.max_page_size
+ page_size = self.default_page_size if page_size < 1
page_size
end
- def where
- @model.list_where
+ def base_where_condition
+ method_name = @where.conditions do |name|
+ name
+ end
+ @model.__send__ method_name
end
- def includes
- if @owner_model
- if @owner_model.owner_model
- {@owner_model.item_name => {@owner_model.owner_model.item_name => {}}}
- else
- {@owner_model.item_name => {}}
- end
- else
- {}
- end
+ def where_condition
+ base_where_condition
+ end
+
+ def include_hash
+ @includes.includes
end
def order
end
def items operators, options, offset, page_size
- @model.where(self.where).includes(self.includes).order(self.order).offset(offset).limit(page_size)
+ @model.where(self.where_condition).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
end
def count operators, options
- @model.where(self.where).includes(self.includes).count
+ @model.where(self.where_condition).includes(self.include_hash).count
end
def paginate count, offset, page_size