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']
29 return self.alias_action.find options
31 self.finder(options).order(
32 self.order_sql(options[:order], options[:direction])
33 ).page(options[:page]).per(options[:page_size])
36 def finder options = {}
37 finder_name = options[:finder] || 'find_' + @name
38 finder = if args = options[:param]
39 args = [args] unless options[:param].is_a?(Array) # param to array
40 self.finder_model.__send__(finder_name, *args)
42 self.finder_model.__send__(finder_name)
47 Manifest.manifest.models[@item_name].classify
51 Manifest.manifest.models[@return_item_name].classify
54 def order_sql order, direction
56 direction ||= (self.direction < 0 ? :desc : :asc)
57 self.return_model.arel_table[order].__send__(direction)
66 def page_size page_size
67 page_size ||= self.default_page_size
68 page_size = -1 if page_size < 0
69 page_size = self.max_page_size if page_size > self.max_page_size
74 self.max_page_size > 0