Class: AlController
- Inherits:
-
Object
- Object
- AlController
- Defined in:
- lib/al_controller.rb,
lib/al_mif.rb
Overview
Aloneコントローラクラス
コントローラ名、ステート名、アクション名、この3つのパラメータにより、 全体を駆動する。 コントローラは、パラメータ ctrl= で、アクションは、action= で指定される。 ただし、これらパラメータのパースはメインモジュールにて行い、ここでは、 その値のエイリアスをもらっている。 併せて、(ちょっとした工夫により)コントローラごとに名前空間分離した 専用セッション変数を持たせる機能もインプリメントしてある。
Defined Under Namespace
Classes: AlControllerSession
Constant Summary
- CTRL =
コントローラ名(メインモジュールの値のエイリアス)
Alone::ctrl
- @@state =
ステート
AlSession["AL_STATE_#{CTRL}"].to_s
- @@action =
アクション名(メインモジュールの値のエイリアス)
Alone::action
- @@respond_to =
動作選出されたメソッド名
""
- @@session =
コントローラローカルのセッション変数
AlControllerSession.new
- @@flag_raise_state_error =
ステートエラー時に、ランタイムエラーを起こすかのフラグ
false
Class Method Summary (collapse)
-
+ (String) debug_dump
デバグ用:各パラメータの表示用文字列を返す.
Instance Method Summary (collapse)
-
- (Object) _exec
アプリケーション実行開始(内部メソッド).
-
- (Object) action_create
(MIF) 新規登録 フォーム表示アクション.
-
- (Object) action_create_submit
(MIF) 新規登録 確定アクション.
-
- (Object) action_delete
(MIF) 削除 確認画面表示アクション.
-
- (Object) action_delete_submit
(MIF) 削除 確定アクション.
-
- (Object) action_list
(MIF) 一覧表示アクション.
-
- (Object) action_update
(MIF) 更新 フォーム表示アクション.
-
- (Object) action_update_submit
(MIF) 更新 確定アクション.
-
- (String) make_uri_key(persist, arg = {})
(MIF) リンク用のURIをキーを含めて生成する.
-
- (Object) no_method_error
メソッドエラーの場合のエラーハンドラ.
-
- (Object) raise_state_error(flag = true)
ステートエラー発生の制御.
-
- (AlControllerSession) session
getter: session.
-
- (Object) set_state(state)
(also: #state=)
現在のステートを宣言する.
Class Method Details
+ (String) debug_dump
デバグ用:各パラメータの表示用文字列を返す
185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/al_controller.rb', line 185 def self.debug_dump() r = "CTRL: #{CTRL}, STATE: #{@@state}, ACTION: #{@@action}, RESPOND TO: #{@@respond_to}\n" r << "SESSION VAR:\n" prefix = "AL_#{CTRL}_" AlSession::keys().each do |k| if k.to_s.index( prefix ) == 0 r << " #{k.to_s[prefix.size,100]}: #{AlSession[k]}\n" end end return r end |
Instance Method Details
- (Object) _exec
各パラメータによりユーザコードを選択し、実行する。
アプリケーション実行開始(内部メソッド)
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/al_controller.rb', line 115 def _exec() if @@action == "" @@action = 'index' end @@respond_to = "from_#{@@state}_action_#{@@action}" if respond_to?( @@respond_to ) return __send__( @@respond_to ) end @@respond_to = "state_#{@@state}_action_#{@@action}" if respond_to?( @@respond_to ) return __send__( @@respond_to ) end @@respond_to = "action_#{@@action}" if respond_to?( @@respond_to ) return __send__( @@respond_to ) end @@respond_to = "state_#{@@state}" if respond_to?( @@respond_to ) return __send__( @@respond_to ) end # 実行すべきメソッドが見つからない場合 @@respond_to = "" no_method_error() end |
- (Object) action_create
(MIF) 新規登録 フォーム表示アクション
80 81 82 83 84 85 |
# File 'lib/al_mif.rb', line 80 def action_create() () @form.action = Alone::make_uri( :action=>'create_submit' ) AlTemplate.run( @template_create || "#{AL_BASEDIR}/templates/form.rhtml" ) end |
- (Object) action_create_submit
(MIF) 新規登録 確定アクション
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/al_mif.rb', line 91 def action_create_submit() () if ! @form.validate() # バリデーションエラーならフォームへ戻す AlTemplate.run( @template_create || "#{AL_BASEDIR}/templates/form.rhtml" ) return end @result = @persist.create( @form.values ) AlTemplate.run( @template_create_submit || "#{AL_BASEDIR}/templates/form_submit.rhtml" ) if @@session[:al_search_condition] @@session[:al_search_condition].delete( :total_rows ) end end |
- (Object) action_delete
(MIF) 削除 確認画面表示アクション
147 148 149 150 151 152 153 |
# File 'lib/al_mif.rb', line 147 def action_delete() raise "Primary key is not given." if ! @form.validate( @persist.pkeys ) raise "Read error. #{@form.values}" if ! @persist.read( @form.values ) @form.values = @persist.values AlTemplate.run( @template_delete || "#{AL_BASEDIR}/templates/delete.rhtml" ) end |
- (Object) action_delete_submit
(MIF) 削除 確定アクション
159 160 161 162 163 164 165 166 167 168 |
# File 'lib/al_mif.rb', line 159 def action_delete_submit() raise "Primary key is not given." if ! @form.validate( @persist.pkeys ) @result = @persist.delete( @form.values ) AlTemplate.run( @template_delete_submit || "#{AL_BASEDIR}/templates/delete_submit.rhtml" ) if @@session[:al_search_condition] @@session[:al_search_condition].delete( :total_rows ) end end |
- (Object) action_list
(MIF) 一覧表示アクション
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/al_mif.rb', line 48 def action_list() # 検索条件の調整 sc = @@session[:al_search_condition] || {} sc.merge!( @search_condition ) if @search_condition sc[:limit] ||= 25 sc[:order_by] ||= @persist.pkeys() form = AlForm.new([ AlInteger.new( 'offset' ) ]) form.validate() sc[:offset] = form[:offset].to_i # データの取得 @datas = @persist.search( sc ) # 表示用カラム配列作成 @columns = [] @form..each do |k,w| next if w.class == AlHidden || w.class == AlSubmit || w.class == AlPassword || w. @columns << k end # 表示開始 AlTemplate.run( @template_list || "#{AL_BASEDIR}/templates/list.rhtml" ) # 検索条件を保存 @@session[:al_search_condition] = @persist.search_condition end |
- (Object) action_update
(MIF) 更新 フォーム表示アクション
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/al_mif.rb', line 112 def action_update() raise "Primary key is not given." if ! @form.validate( @persist.pkeys ) raise "Read error. #{@form.values}" if ! @persist.read( @form.values ) @form.values = @persist.values # フォームの調整 # プライマリキーとなるウィジェットを変更不可にする @persist.pkeys.each do |k| @form.[k].set_attr( :readonly=>'readonly' ) end @form.action = Alone::make_uri( :action=>'update_submit' ) # 表示開始 AlTemplate.run( @template_update || "#{AL_BASEDIR}/templates/form.rhtml" ) end |
- (Object) action_update_submit
(MIF) 更新 確定アクション
132 133 134 135 136 137 138 139 140 141 |
# File 'lib/al_mif.rb', line 132 def action_update_submit() if ! @form.validate() # バリデーションエラーならフォームへ戻す AlTemplate.run( @template_update || "#{AL_BASEDIR}/templates/form.rhtml" ) return end @result = @persist.update( @form.values ) AlTemplate.run( @template_update_submit || "#{AL_BASEDIR}/templates/form_submit.rhtml" ) end |
- (String) make_uri_key(persist, arg = {})
(MIF) リンク用のURIをキーを含めて生成する
36 37 38 39 40 41 42 |
# File 'lib/al_mif.rb', line 36 def make_uri_key( persist, arg = {} ) r = Alone::make_uri( arg ) @persist.pkeys.each do |k| r << "&#{k}=#{Alone::encode_uri_component(persist[k])}" end return r end |
- (Object) no_method_error
ステートエラーは、raise_state_error()で動作を本番時とデバッグ時を切り替えられる。 エラー表示などしたければ、当メソッドをオーバライドすることもできる。
メソッドエラーの場合のエラーハンドラ
153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/al_controller.rb', line 153 def no_method_error() if @@state.empty? Alone::add_http_header( "Status: 404 Not Found" ) raise "No action defined. CTRL: #{CTRL}, ACTION: #{@@action}" end if @@flag_raise_state_error Alone::add_http_header( "Status: 404 Not Found" ) raise "No state/action defined. CTRL: #{CTRL}, STATE: #{@@state}, ACTION: #{@@action}" end Alone::add_http_header( "Status: 204 No Content" ) end |
- (Object) raise_state_error(flag = true)
ステートエラー発生の制御
104 105 106 |
# File 'lib/al_controller.rb', line 104 def raise_state_error( flag = true ) @@flag_raise_state_error = flag end |
- (AlControllerSession) session
getter: session
96 97 98 |
# File 'lib/al_controller.rb', line 96 def session() return @@session end |
- (Object) set_state(state) Also known as: state=
現在のステートを宣言する
173 174 175 176 |
# File 'lib/al_controller.rb', line 173 def set_state( state ) @@state = state.to_s AlSession["AL_STATE_#{CTRL}"] = @@state end |