OSDN Git Service

fix alias action
[pettanr/pettanr.git] / lib / manifest / controller / action / base.rb
1 module Manifest
2   module ControllerModule
3     module ActionModule
4       class Base < ManifestBase::TypeNameArgs
5         attr :alias, :param_id, :item_name, :action_name, :original
6         
7         def set_default
8           super
9           @args['item_name'] ||= ::Manifest.manifest.singularize(@parent.name)
10           @args['param_id'] ||= 'prefix'
11         end
12         
13         def init
14           super
15           @action_name = @name
16           @alias = @args['alias']
17           @item_name = @args['item_name']
18           @param_id = @args['param_id']
19           # source manifest of alias manifest
20           @original = @args['original']
21         end
22         
23         def a_arg_names
24           []
25         end
26         
27         def b_arg_names
28           ['item_name', 'param_id']
29         end
30         
31         def controller
32           @parent
33         end
34         
35         def alias_action
36           s = @alias.split('.')
37           c = ::Manifest.manifest.controllers[s[0]]
38           c.actions[s[1]]
39         end
40         
41         def path_name
42           ::Manifest.manifest.pluralize(@item_name)
43         end
44         
45         def encode_query params
46           q = []
47           q.push('page=' + params['page'].to_s) if params['page']
48           q.push('page_size=' + params['page_size'].to_s) if params['page_size']
49           q.push('offset=' + params['offset'].to_s) if params['offset']
50           q.push('count=' + params['count'].to_s) if params['count']
51           if q.length > 0
52             '?' + q.join('&')
53           else
54             ''
55           end
56         end
57         
58         def encode_url params = {}
59           controller_name = '/' + self.path_name
60           c = controller_name
61           a = if @name == 'index' or @name == 'show' or @name == 'destroy'
62             ''
63           else
64             '/' + @name
65           end
66           pf = params['format'] || params[:format]
67           # f = if params['format']   # json request? so bad. html request as get rest api
68           f = if pf == 'prof'
69             '.' + params['format'].to_s
70           else
71             ''
72           end
73           pid = params['id'] || params[:id]
74           i = if pid
75             '/' + params['id'].to_s
76           else
77             ''
78           end
79           q = self.encode_query(params)
80           case @param_id
81           when 'prefix'
82             c + i + a + f + q
83           when 'suffix'
84             c + a + i + f + q
85           else
86             c + a + f + q
87           end
88         end
89         
90         def url params
91           self.encode_url(params)
92         end
93         
94       end
95       
96     end
97   end
98 end