action-hero 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +68 -11
- data/lib/action_hero.rb +6 -3
- data/lib/action_hero/action_resolver.rb +1 -1
- data/lib/action_hero/grape.rb +8 -0
- data/lib/action_hero/grape/action.rb +59 -0
- data/lib/action_hero/grape/endpoint.rb +18 -0
- data/lib/action_hero/mock_controller.rb +25 -0
- data/lib/action_hero/param_reader.rb +13 -0
- data/lib/action_hero/rails.rb +8 -0
- data/lib/action_hero/rails/action.rb +68 -0
- data/lib/action_hero/rails/controller.rb +70 -0
- data/lib/action_hero/version.rb +1 -1
- metadata +10 -4
- data/lib/action_hero/action.rb +0 -53
- data/lib/action_hero/controller.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37e67b912e6e03b11924e6a3f09d897843090e21
|
4
|
+
data.tar.gz: 723acc43431200114f1b60e8e8d449da08740724
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14d67b3b8ace6f3b69795e38749f75fdf02fb1118b30d5bc9f2f473c1950bd98a18fbf101a04e0437bf5b8f25a53c4f7f38c6323fbbb0cd3ad660c56bdf6d4fe
|
7
|
+
data.tar.gz: 6bfba48f4158314467ee2aff99aebc713a15b5de70d4d19c2f993bee07085e8fdac5fd1b933ce89bae4f586f1800dc8180e88e2944cdf82a53d5db103c2cc32c
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# ActionHero
|
2
2
|
|
3
|
-
Move actions from methods in Rails controllers to action classes.
|
3
|
+
Move actions from methods in Rails controllers and Grape endoints to action classes.
|
4
4
|
|
5
5
|
|
6
6
|
## Motiviation
|
@@ -29,15 +29,15 @@ Or install it yourself as:
|
|
29
29
|
$ gem install action-hero
|
30
30
|
|
31
31
|
|
32
|
-
## Usage
|
32
|
+
## Usage: Rails
|
33
33
|
|
34
34
|
### Simplest Case
|
35
35
|
|
36
|
-
Include the ActionHero::Controller module in a controller.
|
36
|
+
Include the ActionHero::Rails::Controller module in a controller.
|
37
37
|
|
38
38
|
# app/controllers/things_controller.rb
|
39
39
|
class ThingsController < ApplicationController
|
40
|
-
include ActionHero::Controller
|
40
|
+
include ActionHero::Rails::Controller
|
41
41
|
end
|
42
42
|
|
43
43
|
Define the action class.
|
@@ -45,7 +45,7 @@ Define the action class.
|
|
45
45
|
# app/actions/things/index.rb
|
46
46
|
module Things
|
47
47
|
class Index
|
48
|
-
include ActionHero::Action
|
48
|
+
include ActionHero::Rails::Action
|
49
49
|
|
50
50
|
def call
|
51
51
|
expose :things, Thing.all
|
@@ -100,7 +100,7 @@ Ensure an implicit controller is defined. Without configuration, the implicit c
|
|
100
100
|
|
101
101
|
# app/controllers/implicit_controller.rb
|
102
102
|
class ImplicitController < ApplicationController
|
103
|
-
include ActionHero::Controller
|
103
|
+
include ActionHero::Rails::Controller
|
104
104
|
end
|
105
105
|
|
106
106
|
|
@@ -113,12 +113,12 @@ Define the implicit controllers.
|
|
113
113
|
|
114
114
|
# app/controllers/implicit_controller.rb
|
115
115
|
class ImplicitController < ApplicationController
|
116
|
-
include ActionHero::Controller
|
116
|
+
include ActionHero::Rails::Controller
|
117
117
|
end
|
118
118
|
|
119
119
|
# app/controllers/api/v1/implicit_controller.rb
|
120
120
|
class Api::V1::ImplicitController < ApplicationController
|
121
|
-
include ActionHero::Controller
|
121
|
+
include ActionHero::Rails::Controller
|
122
122
|
end
|
123
123
|
|
124
124
|
Configure the usage. The configuration uses regexs to match against the #controller_name and will use the first one
|
@@ -136,14 +136,14 @@ matched, so order matters.
|
|
136
136
|
|
137
137
|
You can mix and match usage of ActionHero action classes and standard Rails controller action methods.
|
138
138
|
|
139
|
-
In order to unobtrusively tie in to the controller, ActionHero::Controller implements the #action_missing
|
139
|
+
In order to unobtrusively tie in to the controller, ActionHero::Rails::Controller implements the #action_missing
|
140
140
|
method. Thus, if you implement both an aciton class and an action method, the action method will win.
|
141
141
|
|
142
142
|
Define a controller with a show action method and define an action class for the index action.
|
143
143
|
|
144
144
|
# app/controllers/things_controller.rb
|
145
145
|
class ThingsController < ApplicationController
|
146
|
-
include ActionHero::Controller
|
146
|
+
include ActionHero::Rails::Controller
|
147
147
|
|
148
148
|
def show
|
149
149
|
...
|
@@ -153,7 +153,7 @@ Define a controller with a show action method and define an action class for the
|
|
153
153
|
# app/actions/things/index.rb
|
154
154
|
module Things
|
155
155
|
class Index
|
156
|
-
include ActionHero::Action
|
156
|
+
include ActionHero::Rails::Action
|
157
157
|
|
158
158
|
def call
|
159
159
|
...
|
@@ -193,3 +193,60 @@ aid in debugging, etc.
|
|
193
193
|
Started GET "/" for 127.0.0.1 at 2013-09-08 12:38:26 -0500 │
|
194
194
|
[Action Hero] No explicit DashboardController defined, using ImplicitController
|
195
195
|
Processing by ImplicitController#show as HTML
|
196
|
+
|
197
|
+
|
198
|
+
## Usage: Grape
|
199
|
+
|
200
|
+
### Simplest Case
|
201
|
+
|
202
|
+
Unlike the ActionHero::Rails::Controller module that must be included in each controller, the
|
203
|
+
ActionHero::Grape::Endpoint is automatically included in the Grape::Endpoint when the action-hero
|
204
|
+
gem is required.
|
205
|
+
|
206
|
+
Define the action class.
|
207
|
+
|
208
|
+
# app/actions/api/v1/things/index.rb
|
209
|
+
module Api
|
210
|
+
module V1
|
211
|
+
module Things
|
212
|
+
class Index
|
213
|
+
include ActionHero::Grape::Action
|
214
|
+
|
215
|
+
def call
|
216
|
+
expose Thing.all
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
Use the action class in an endpoint.
|
224
|
+
|
225
|
+
module SomeApplication
|
226
|
+
class ApiV1
|
227
|
+
class ThingsEndpoint < Grape::API
|
228
|
+
|
229
|
+
get do
|
230
|
+
::Api::V1::Things::Index.new( self ).call
|
231
|
+
end
|
232
|
+
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
|
238
|
+
### Endpoint Methods Available in Action Class
|
239
|
+
|
240
|
+
The following methods forward from the the action class to the endpoint.
|
241
|
+
|
242
|
+
* content_type
|
243
|
+
* cookies
|
244
|
+
* error!
|
245
|
+
* headers
|
246
|
+
* params
|
247
|
+
* redirect
|
248
|
+
* route
|
249
|
+
* routes
|
250
|
+
* status
|
251
|
+
* version
|
252
|
+
|
data/lib/action_hero.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
require "action_hero/version"
|
2
|
-
require "dispatcher_ext"
|
2
|
+
require "dispatcher_ext" # TODO require for Rails only
|
3
3
|
|
4
4
|
module ActionHero
|
5
5
|
|
6
6
|
class ActionNotFound < StandardError #:nodoc:
|
7
7
|
end
|
8
8
|
|
9
|
-
autoload :Action, 'action_hero/action'
|
10
9
|
autoload :ActionResolver, 'action_hero/action_resolver'
|
11
10
|
autoload :Configuration, 'action_hero/configuration'
|
12
|
-
autoload :
|
11
|
+
autoload :Grape, 'action_hero/grape'
|
13
12
|
autoload :LogSubscriber, 'action_hero/log_subscriber'
|
13
|
+
autoload :MockController, 'action_hero/mock_controller'
|
14
|
+
autoload :ParamReader, 'action_hero/param_reader'
|
15
|
+
autoload :Rails, 'action_hero/rails'
|
14
16
|
|
15
17
|
def self.configuration
|
16
18
|
@configuration ||= Configuration.new
|
@@ -22,4 +24,5 @@ module ActionHero
|
|
22
24
|
|
23
25
|
end
|
24
26
|
|
27
|
+
# TODO for Rails only
|
25
28
|
ActionHero::LogSubscriber.attach_to :action_controller
|
@@ -21,7 +21,7 @@ module ActionHero
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def action_class_file_exists?
|
24
|
-
File.exists?( Rails.root.join( 'app', 'actions', "#{action_class_name.underscore}.rb" ))
|
24
|
+
File.exists?( ::Rails.root.join( 'app', 'actions', "#{action_class_name.underscore}.rb" ))
|
25
25
|
end
|
26
26
|
|
27
27
|
protected
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'forwardable'
|
3
|
+
|
4
|
+
module ActionHero
|
5
|
+
module Grape
|
6
|
+
module Action
|
7
|
+
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
|
12
|
+
extend Forwardable
|
13
|
+
extend ActionHero::ParamReader
|
14
|
+
|
15
|
+
attr_reader :endpoint
|
16
|
+
protected :endpoint
|
17
|
+
|
18
|
+
def_delegators :endpoint, :content_type,
|
19
|
+
:cookies,
|
20
|
+
:error!,
|
21
|
+
:headers,
|
22
|
+
:params,
|
23
|
+
:redirect,
|
24
|
+
:route,
|
25
|
+
:routes,
|
26
|
+
:status,
|
27
|
+
:version
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize( endpoint )
|
32
|
+
@endpoint = endpoint
|
33
|
+
end
|
34
|
+
|
35
|
+
module ClassMethods
|
36
|
+
|
37
|
+
def endpoint_delegations( *method_names )
|
38
|
+
def_delegators :endpoint, *method_names
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def expose( *args )
|
46
|
+
value = args.last
|
47
|
+
|
48
|
+
if args.size > 1
|
49
|
+
name = args.first.is_a?( Symbol ) ? args.first : (raise NotImplementedError)
|
50
|
+
instance_variable_set "@#{name}", value
|
51
|
+
self.class.send( :define_method, name, lambda { instance_variable_get "@#{name}" } )
|
52
|
+
end
|
53
|
+
|
54
|
+
endpoint.send :expose, *args
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ActionHero
|
2
|
+
module Grape
|
3
|
+
module Endpoint
|
4
|
+
|
5
|
+
def expose( *args )
|
6
|
+
args.last.tap do |value|
|
7
|
+
if args.size > 1
|
8
|
+
name = args.first.is_a?( Symbol ) ? args.first : (raise NotImplementedError)
|
9
|
+
self.class.send( :define_method, name, lambda { value } )
|
10
|
+
end
|
11
|
+
|
12
|
+
body( value )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActionHero
|
2
|
+
module MockController
|
3
|
+
|
4
|
+
include Controller
|
5
|
+
|
6
|
+
def action_name( *args ); end
|
7
|
+
def env( *args ); end
|
8
|
+
def flash( *args ); end
|
9
|
+
def formats( *args ); end
|
10
|
+
def head( *args ); end
|
11
|
+
def headers( *args ); end
|
12
|
+
def params( *args ); end
|
13
|
+
def redirect_to( *args ); end
|
14
|
+
def render( *args ); end
|
15
|
+
def render_to_string( *args ); end
|
16
|
+
def request( *args ); end
|
17
|
+
def reset_session( *args ); end
|
18
|
+
def respond_with( *args ); end
|
19
|
+
def response( *args ); end
|
20
|
+
def session( *args ); end
|
21
|
+
def url_for( *args ); end
|
22
|
+
def url_options( *args ); end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'forwardable'
|
3
|
+
|
4
|
+
module ActionHero
|
5
|
+
module Rails
|
6
|
+
module Action
|
7
|
+
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
include ::Rails.application.routes.url_helpers
|
11
|
+
|
12
|
+
included do
|
13
|
+
|
14
|
+
extend Forwardable
|
15
|
+
extend ActionHero::ParamReader
|
16
|
+
|
17
|
+
attr_reader :controller
|
18
|
+
protected :controller
|
19
|
+
|
20
|
+
def_delegators :controller, :action_name,
|
21
|
+
:env,
|
22
|
+
:flash,
|
23
|
+
:formats,
|
24
|
+
:head,
|
25
|
+
:headers,
|
26
|
+
:params,
|
27
|
+
:redirect_to,
|
28
|
+
:render,
|
29
|
+
:render_to_string,
|
30
|
+
:request,
|
31
|
+
:reset_session,
|
32
|
+
:respond_with,
|
33
|
+
:response,
|
34
|
+
:session,
|
35
|
+
:url_for,
|
36
|
+
:url_options
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def initialize( controller )
|
41
|
+
@controller = controller
|
42
|
+
end
|
43
|
+
|
44
|
+
module ClassMethods
|
45
|
+
|
46
|
+
def controller_delegations( *method_names )
|
47
|
+
def_delegators :controller, *method_names
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def expose( *args )
|
55
|
+
name = args.first.is_a?( Symbol ) ? args.first : (raise NotImplementedError)
|
56
|
+
value = args.last
|
57
|
+
instance_variable_set "@#{name}", value
|
58
|
+
self.class.send( :define_method, name, lambda { instance_variable_get "@#{name}" } )
|
59
|
+
controller.send :expose, *args
|
60
|
+
end
|
61
|
+
|
62
|
+
def request_parameters
|
63
|
+
request.request_parameters
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module ActionHero
|
4
|
+
module Rails
|
5
|
+
module Controller
|
6
|
+
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def expose( *args )
|
12
|
+
name = args.first.is_a?( Symbol ) ? args.first : (raise NotImplementedError)
|
13
|
+
value = args.last
|
14
|
+
data.merge!( name => value )
|
15
|
+
self.class.send( :define_method, name, lambda { data[name] } )
|
16
|
+
self.class.helper_method name
|
17
|
+
value
|
18
|
+
end
|
19
|
+
|
20
|
+
def action_missing( name, *args, &block )
|
21
|
+
begin
|
22
|
+
action_class
|
23
|
+
rescue NoMethodError
|
24
|
+
# protect against misidentification due to
|
25
|
+
# NoMethodError being descendent of NameError
|
26
|
+
raise
|
27
|
+
rescue NameError => ex
|
28
|
+
raise ActionNotFound,
|
29
|
+
"The action #{action_class_name} nor #{self.class.name}##{name} could be found",
|
30
|
+
ex.backtrace
|
31
|
+
end
|
32
|
+
prepend_view_path "#{::Rails.root}/app/views/#{params[:controller]}"
|
33
|
+
execute_action
|
34
|
+
end
|
35
|
+
|
36
|
+
# override _normalize_render in order to insert implied controller's view prefix
|
37
|
+
def _normalize_render(*args, &block)
|
38
|
+
options = _normalize_args(*args, &block)
|
39
|
+
_normalize_options(options)
|
40
|
+
unless options[:prefixes].include?( params[:controller] )
|
41
|
+
options[:prefixes].insert( 0, params[:controller] )
|
42
|
+
end
|
43
|
+
options
|
44
|
+
end
|
45
|
+
|
46
|
+
def data
|
47
|
+
@data ||= {}.with_indifferent_access
|
48
|
+
end
|
49
|
+
|
50
|
+
def execute_action
|
51
|
+
action = action_class.new( self )
|
52
|
+
action.call
|
53
|
+
end
|
54
|
+
|
55
|
+
def resolver
|
56
|
+
@resolver ||= ActionResolver.new( :controller_const => "#{params[:controller].classify}Controller",
|
57
|
+
:action_name => action_name )
|
58
|
+
end
|
59
|
+
|
60
|
+
def action_class
|
61
|
+
resolver.action_class
|
62
|
+
end
|
63
|
+
|
64
|
+
def action_class_name
|
65
|
+
resolver.action_class_name
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/action_hero/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action-hero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C. Jason Harrelson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,11 +69,17 @@ files:
|
|
69
69
|
- action-hero.gemspec
|
70
70
|
- lib/action-hero.rb
|
71
71
|
- lib/action_hero.rb
|
72
|
-
- lib/action_hero/action.rb
|
73
72
|
- lib/action_hero/action_resolver.rb
|
74
73
|
- lib/action_hero/configuration.rb
|
75
|
-
- lib/action_hero/
|
74
|
+
- lib/action_hero/grape.rb
|
75
|
+
- lib/action_hero/grape/action.rb
|
76
|
+
- lib/action_hero/grape/endpoint.rb
|
76
77
|
- lib/action_hero/log_subscriber.rb
|
78
|
+
- lib/action_hero/mock_controller.rb
|
79
|
+
- lib/action_hero/param_reader.rb
|
80
|
+
- lib/action_hero/rails.rb
|
81
|
+
- lib/action_hero/rails/action.rb
|
82
|
+
- lib/action_hero/rails/controller.rb
|
77
83
|
- lib/action_hero/version.rb
|
78
84
|
- lib/dispatcher_ext.rb
|
79
85
|
homepage: ''
|
data/lib/action_hero/action.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
require 'forwardable'
|
3
|
-
|
4
|
-
module ActionHero
|
5
|
-
module Action
|
6
|
-
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
include Rails.application.routes.url_helpers
|
10
|
-
|
11
|
-
included do
|
12
|
-
|
13
|
-
extend Forwardable
|
14
|
-
|
15
|
-
attr_reader :controller
|
16
|
-
protected :controller
|
17
|
-
|
18
|
-
def_delegators :controller, :action_name,
|
19
|
-
:env,
|
20
|
-
:flash,
|
21
|
-
:formats,
|
22
|
-
:head,
|
23
|
-
:headers,
|
24
|
-
:params,
|
25
|
-
:redirect_to,
|
26
|
-
:render,
|
27
|
-
:render_to_string,
|
28
|
-
:request,
|
29
|
-
:reset_session,
|
30
|
-
:respond_with,
|
31
|
-
:response,
|
32
|
-
:session,
|
33
|
-
:url_for,
|
34
|
-
:url_options
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def initialize( controller )
|
39
|
-
@controller = controller
|
40
|
-
end
|
41
|
-
|
42
|
-
protected
|
43
|
-
|
44
|
-
def expose( *args )
|
45
|
-
name = args.first.is_a?( Symbol ) ? args.first : (raise NotImplementedError)
|
46
|
-
value = args.last
|
47
|
-
instance_variable_set "@#{name}", value
|
48
|
-
self.class.send( :define_method, name, lambda { instance_variable_get "@#{name}" } )
|
49
|
-
controller.send :expose, *args
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
|
3
|
-
module ActionHero
|
4
|
-
module Controller
|
5
|
-
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
protected
|
9
|
-
|
10
|
-
def expose( *args )
|
11
|
-
name = args.first.is_a?( Symbol ) ? args.first : (raise NotImplementedError)
|
12
|
-
value = args.last
|
13
|
-
data.merge!( name => value )
|
14
|
-
self.class.send( :define_method, name, lambda { data[name] } )
|
15
|
-
self.class.helper_method name
|
16
|
-
value
|
17
|
-
end
|
18
|
-
|
19
|
-
def action_missing( name, *args, &block )
|
20
|
-
begin
|
21
|
-
action_class
|
22
|
-
rescue NoMethodError
|
23
|
-
# protect against misidentification due to
|
24
|
-
# NoMethodError being descendent of NameError
|
25
|
-
raise
|
26
|
-
rescue NameError => ex
|
27
|
-
raise ActionNotFound,
|
28
|
-
"The action #{action_class_name} nor #{self.class.name}##{name} could be found",
|
29
|
-
ex.backtrace
|
30
|
-
end
|
31
|
-
prepend_view_path "#{Rails.root}/app/views/#{params[:controller]}"
|
32
|
-
execute_action
|
33
|
-
end
|
34
|
-
|
35
|
-
# override _normalize_render in order to insert implied controller's view prefix
|
36
|
-
def _normalize_render(*args, &block)
|
37
|
-
options = _normalize_args(*args, &block)
|
38
|
-
_normalize_options(options)
|
39
|
-
unless options[:prefixes].include?( params[:controller] )
|
40
|
-
options[:prefixes].insert( 0, params[:controller] )
|
41
|
-
end
|
42
|
-
options
|
43
|
-
end
|
44
|
-
|
45
|
-
def data
|
46
|
-
@data ||= {}.with_indifferent_access
|
47
|
-
end
|
48
|
-
|
49
|
-
def execute_action
|
50
|
-
action = action_class.new( self )
|
51
|
-
action.call
|
52
|
-
end
|
53
|
-
|
54
|
-
def resolver
|
55
|
-
@resolver ||= ActionResolver.new( :controller_const => "#{params[:controller].classify}Controller",
|
56
|
-
:action_name => action_name )
|
57
|
-
end
|
58
|
-
|
59
|
-
def action_class
|
60
|
-
resolver.action_class
|
61
|
-
end
|
62
|
-
|
63
|
-
def action_class_name
|
64
|
-
resolver.action_class_name
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|