OSDN Git Service

fix: bin tool
[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 has_param
36           @param_id != 'none'
37         end
38         
39         def has_alias_action
40           @alias and @alias.any?
41         end
42         
43         def alias_action
44           s = @alias.split('.')
45           c = ::Manifest.manifest.controllers[s[0]]
46           c.actions[s[1]]
47         end
48         
49         def path_name
50           ::Manifest.manifest.pluralize(@item_name)
51         end
52         
53         def encode_query params
54           q = []
55           q.push('page=' + params['page'].to_s) if params['page']
56           q.push('page_size=' + params['page_size'].to_s) if params['page_size']
57           q.push('offset=' + params['offset'].to_s) if params['offset']
58           q.push('count=' + params['count'].to_s) if params['count']
59           if q.length > 0
60             '?' + q.join('&')
61           else
62             ''
63           end
64         end
65         
66         def encode_url params = {}
67           controller_name = '/' + self.path_name
68           c = controller_name
69           a = if @name == 'index' or @name == 'show' or @name == 'destroy'
70             ''
71           else
72             '/' + @name
73           end
74           pf = params['format'] || params[:format]
75           # f = if params['format']   # json request? so bad. html request as get rest api
76           f = if pf == 'prof'
77             '.' + params['format'].to_s
78           else
79             ''
80           end
81           pid = params['id'] || params[:id]
82           i = if pid
83             '/' + params['id'].to_s
84           else
85             ''
86           end
87           q = self.encode_query(params)
88           case @param_id
89           when 'prefix'
90             c + i + a + f + q
91           when 'suffix'
92             c + a + i + f + q
93           else
94             c + a + f + q
95           end
96         end
97         
98         def url params
99           self.encode_url(params)
100         end
101         
102       end
103       
104     end
105   end
106 end