2 module ControllerModule
4 class ActionList < Base
5 attr :order, :direction, :default_page_size, :max_page_size, :return_item_name
9 @args['direction'] ||= -1
10 @args['default_page_size'] ||= 25
11 @args['max_page_size'] ||= 100
16 @order = @args['order'] || 'updated_at'
17 @direction = @args['direction'].to_i
18 @default_page_size = @args['default_page_size']
19 @max_page_size = @args['max_page_size']
20 @return_item_name = @args['return_item_name'] || @item_name
24 super + ['order', 'direction', 'default_page_size', 'max_page_size']
28 self.finder(options).order(
29 self.order_sql(options[:order], options[:direction])
30 ).page(options[:page]).per(options[:page_size])
33 def finder options = {}
34 finder_name = options[:finder] || 'find_' + @name
35 finder = if args = options[:param]
36 args = [args] unless options[:param].is_a?(Array) # param to array
37 self.finder_model.__send__(finder_name, *args)
39 self.finder_model.__send__(finder_name)
44 Manifest.manifest.models[@item_name].classify
48 Manifest.manifest.models[@return_item_name].classify
51 def order_sql order, direction
53 direction ||= (self.direction < 0 ? :desc : :asc)
54 self.return_model.arel_table[order].__send__(direction)
63 def page_size page_size
64 page_size ||= self.default_page_size
65 page_size = -1 if page_size < 0
66 page_size = self.max_page_size if page_size > self.max_page_size
71 self.max_page_size > 0