action_command 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/doc/file.README.html CHANGED
@@ -96,7 +96,106 @@ by others.</p>
96
96
 
97
97
  <h2 id="label-Usage">Usage</h2>
98
98
 
99
- <p>TODO: Write usage instructions here</p>
99
+ <p><code>action_command</code> is designed to help you centralize logic which
100
+ might otherwise end up in a controller or model, and easily invoke it from
101
+ a controller, a test, or a rake command. I read placing logic in
102
+ &#39;actions&#39; rather than models in the book <a
103
+ href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222196">Rails
104
+ 4 Test Prescriptions</a> and liked it.</p>
105
+
106
+ <h3 id="label-HelloWorld">HelloWorld</h3>
107
+
108
+ <p>You can declare an action with inputs and outputs</p>
109
+
110
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>HelloWorldCommand</span> <span class='op'>&lt;</span> <span class='const'>ActionCommand</span><span class='op'>::</span><span class='const'>Executable</span>
111
+
112
+ <span class='comment'># You need to declare an attr_accessor for each named parameter
113
+ </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:name</span>
114
+
115
+ <span class='comment'># You can optional describe the input and output of the command,
116
+ </span> <span class='comment'># the text is used to provide help if you create a rake version of the command.
117
+ </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_describe_io'>describe_io</span>
118
+ <span class='comment'># the text in here is only
119
+ </span> <span class='kw'>return</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_describe_io'>describe_io</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Say hello to someone</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_io'>io</span><span class='op'>|</span>
120
+ <span class='id identifier rubyid_io'>io</span><span class='period'>.</span><span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='symbol'>:name</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Name of person to say hello to</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
121
+ <span class='id identifier rubyid_io'>io</span><span class='period'>.</span><span class='id identifier rubyid_output'>output</span><span class='lparen'>(</span><span class='symbol'>:greeting</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Greeting for the person</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
122
+ <span class='kw'>end</span>
123
+ <span class='kw'>end</span>
124
+
125
+ <span class='id identifier rubyid_protected'>protected</span>
126
+
127
+ <span class='comment'># Override the execute internal method to provide logic for your action, and
128
+ </span> <span class='comment'># assign results to the result. You can also use methods like result.fail or
129
+ </span> <span class='comment'># result.info.
130
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_execute_internal'>execute_internal</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span>
131
+ <span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='symbol'>:greeting</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Hello </span><span class='embexpr_beg'>#{</span><span class='ivar'>@name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_no_output'>no_output</span>
132
+ <span class='kw'>end</span>
133
+ <span class='kw'>end</span>
134
+ </code></pre>
135
+
136
+ <h4 id="label-HelloWorld-3A+Execute+from+Rails">HelloWorld: Execute from Rails</h4>
137
+
138
+ <p>You can execute it from rails:</p>
139
+
140
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_execute_rails'>execute_rails</span><span class='lparen'>(</span><span class='const'>HelloWorldCommand</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Chris</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span>
141
+ </code></pre>
142
+
143
+ <h4 id="label-HelloWorld-3A+Execute+from+Rake">HelloWorld: Execute from Rake</h4>
144
+
145
+ <p>When building a system, I find it useful to be able to easily run my
146
+ actions from the command-line as well. In rails, you can create a
147
+ lib/tasks/my_rake.task, and configure your actions as task with one line:</p>
148
+
149
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_namespace'>namespace</span> <span class='symbol'>:my_namespace</span> <span class='kw'>do</span>
150
+
151
+ <span class='comment'># use [:initialize] as the last parameter if you want to do things that require
152
+ </span> <span class='comment'># rails startup in your command, like connecting to your database.
153
+ </span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_install_rake'>install_rake</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='symbol'>:hello_world</span><span class='comma'>,</span> <span class='const'>HelloWorldCommand</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
154
+
155
+ <span class='kw'>end</span>
156
+ </code></pre>
157
+
158
+ <p>You can always invoke your rake task with [help] to see help on the input
159
+ and output of the action.</p>
160
+
161
+ <h4 id="label-HelloWorld-3A+Execute+from+rspec-2Fetc">HelloWorld: Execute from rspec/etc</h4>
162
+
163
+ <p>Or, you can execute it from a testing framework.</p>
164
+
165
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_it'>it</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>says hello world</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>do</span>
166
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_execute_test'>execute_test</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='const'>HelloWorldCommand</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Chris</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
167
+ <span class='id identifier rubyid_expect'>expect</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='id identifier rubyid_be_ok'>be_ok</span>
168
+ <span class='id identifier rubyid_expect'>expect</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='symbol'>:greeting</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='id identifier rubyid_eq'>eq</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Hello Chris</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
169
+ <span class='kw'>end</span>
170
+ </code></pre>
171
+
172
+ <p>If your command does a lot, you might like to do some internal
173
+ verifications during the testing process to aid debugging. Inside a
174
+ command&#39;s execute_internal method, you can use a block like this</p>
175
+
176
+ <pre class="code ruby"><code class="ruby"><span class='kw'>def</span> <span class='id identifier rubyid_execute_internal'>execute_internal</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span>
177
+ <span class='comment'># ... do some logic
178
+ </span>
179
+ <span class='comment'># t is the parameter you passed as the first argument to execute_test.
180
+ </span> <span class='comment'># so, if you are using rspec, this code block will only be executed when you are
181
+ </span> <span class='comment'># running in a testing context.
182
+ </span> <span class='id identifier rubyid_testing'>testing</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_t'>t</span><span class='op'>|</span>
183
+ <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_expect'>expect</span><span class='lparen'>(</span><span class='id identifier rubyid_my_val'>my_val</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_eq'>eq</span><span class='lparen'>(</span><span class='int'>10</span><span class='rparen'>)</span>
184
+ <span class='kw'>end</span>
185
+
186
+ <span class='kw'>end</span>
187
+
188
+ <span class='comment'>### Child Actions
189
+ </span>
190
+ <span class='const'>Actions</span> <span class='id identifier rubyid_can'>can</span> <span class='id identifier rubyid_execute'>execute</span> <span class='id identifier rubyid_their'>their</span> <span class='id identifier rubyid_own'>own</span> <span class='id identifier rubyid_child'>child</span> <span class='id identifier rubyid_actions'>actions</span><span class='period'>.</span> <span class='const'>Within</span> <span class='id identifier rubyid_an'>an</span> <span class='id identifier rubyid_action'>action</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>s execute_internal method
191
+ </span></span></code></pre>
192
+
193
+ <p>ruby def execute_internal @names.each_with_index do |name, i| # the i
194
+ parameter will cause the result of the child command to be nested # in the
195
+ result under that value. For example, here I would expect # <a
196
+ href="i">result</a>[:greeting] to contain the greeting for each subcommand
197
+ after # execution. ActionCommand.execute_child(self, HelloWorldCommand,
198
+ result, i, name: name) end end “`</p>
100
199
 
101
200
  <h2 id="label-Development">Development</h2>
102
201
 
@@ -128,7 +227,7 @@ href="http://opensource.org/licenses/MIT">MIT License</a>.</p>
128
227
  </div></div>
129
228
 
130
229
  <div id="footer">
131
- Generated on Sat Feb 13 10:16:47 2016 by
230
+ Generated on Thu Mar 3 16:34:07 2016 by
132
231
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
133
232
  0.8.7.6 (ruby-2.2.3).
134
233
  </div>
data/doc/index.html CHANGED
@@ -96,7 +96,106 @@ by others.</p>
96
96
 
97
97
  <h2 id="label-Usage">Usage</h2>
98
98
 
99
- <p>TODO: Write usage instructions here</p>
99
+ <p><code>action_command</code> is designed to help you centralize logic which
100
+ might otherwise end up in a controller or model, and easily invoke it from
101
+ a controller, a test, or a rake command. I read placing logic in
102
+ &#39;actions&#39; rather than models in the book <a
103
+ href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222196">Rails
104
+ 4 Test Prescriptions</a> and liked it.</p>
105
+
106
+ <h3 id="label-HelloWorld">HelloWorld</h3>
107
+
108
+ <p>You can declare an action with inputs and outputs</p>
109
+
110
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>HelloWorldCommand</span> <span class='op'>&lt;</span> <span class='const'>ActionCommand</span><span class='op'>::</span><span class='const'>Executable</span>
111
+
112
+ <span class='comment'># You need to declare an attr_accessor for each named parameter
113
+ </span> <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:name</span>
114
+
115
+ <span class='comment'># You can optional describe the input and output of the command,
116
+ </span> <span class='comment'># the text is used to provide help if you create a rake version of the command.
117
+ </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_describe_io'>describe_io</span>
118
+ <span class='comment'># the text in here is only
119
+ </span> <span class='kw'>return</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_describe_io'>describe_io</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Say hello to someone</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_io'>io</span><span class='op'>|</span>
120
+ <span class='id identifier rubyid_io'>io</span><span class='period'>.</span><span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='symbol'>:name</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Name of person to say hello to</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
121
+ <span class='id identifier rubyid_io'>io</span><span class='period'>.</span><span class='id identifier rubyid_output'>output</span><span class='lparen'>(</span><span class='symbol'>:greeting</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Greeting for the person</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
122
+ <span class='kw'>end</span>
123
+ <span class='kw'>end</span>
124
+
125
+ <span class='id identifier rubyid_protected'>protected</span>
126
+
127
+ <span class='comment'># Override the execute internal method to provide logic for your action, and
128
+ </span> <span class='comment'># assign results to the result. You can also use methods like result.fail or
129
+ </span> <span class='comment'># result.info.
130
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_execute_internal'>execute_internal</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span>
131
+ <span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='symbol'>:greeting</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Hello </span><span class='embexpr_beg'>#{</span><span class='ivar'>@name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_no_output'>no_output</span>
132
+ <span class='kw'>end</span>
133
+ <span class='kw'>end</span>
134
+ </code></pre>
135
+
136
+ <h4 id="label-HelloWorld-3A+Execute+from+Rails">HelloWorld: Execute from Rails</h4>
137
+
138
+ <p>You can execute it from rails:</p>
139
+
140
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_execute_rails'>execute_rails</span><span class='lparen'>(</span><span class='const'>HelloWorldCommand</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Chris</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span>
141
+ </code></pre>
142
+
143
+ <h4 id="label-HelloWorld-3A+Execute+from+Rake">HelloWorld: Execute from Rake</h4>
144
+
145
+ <p>When building a system, I find it useful to be able to easily run my
146
+ actions from the command-line as well. In rails, you can create a
147
+ lib/tasks/my_rake.task, and configure your actions as task with one line:</p>
148
+
149
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_namespace'>namespace</span> <span class='symbol'>:my_namespace</span> <span class='kw'>do</span>
150
+
151
+ <span class='comment'># use [:initialize] as the last parameter if you want to do things that require
152
+ </span> <span class='comment'># rails startup in your command, like connecting to your database.
153
+ </span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_install_rake'>install_rake</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='symbol'>:hello_world</span><span class='comma'>,</span> <span class='const'>HelloWorldCommand</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
154
+
155
+ <span class='kw'>end</span>
156
+ </code></pre>
157
+
158
+ <p>You can always invoke your rake task with [help] to see help on the input
159
+ and output of the action.</p>
160
+
161
+ <h4 id="label-HelloWorld-3A+Execute+from+rspec-2Fetc">HelloWorld: Execute from rspec/etc</h4>
162
+
163
+ <p>Or, you can execute it from a testing framework.</p>
164
+
165
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_it'>it</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>says hello world</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>do</span>
166
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_execute_test'>execute_test</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='const'>HelloWorldCommand</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Chris</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
167
+ <span class='id identifier rubyid_expect'>expect</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='id identifier rubyid_be_ok'>be_ok</span>
168
+ <span class='id identifier rubyid_expect'>expect</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='symbol'>:greeting</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='id identifier rubyid_eq'>eq</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Hello Chris</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
169
+ <span class='kw'>end</span>
170
+ </code></pre>
171
+
172
+ <p>If your command does a lot, you might like to do some internal
173
+ verifications during the testing process to aid debugging. Inside a
174
+ command&#39;s execute_internal method, you can use a block like this</p>
175
+
176
+ <pre class="code ruby"><code class="ruby"><span class='kw'>def</span> <span class='id identifier rubyid_execute_internal'>execute_internal</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span>
177
+ <span class='comment'># ... do some logic
178
+ </span>
179
+ <span class='comment'># t is the parameter you passed as the first argument to execute_test.
180
+ </span> <span class='comment'># so, if you are using rspec, this code block will only be executed when you are
181
+ </span> <span class='comment'># running in a testing context.
182
+ </span> <span class='id identifier rubyid_testing'>testing</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_t'>t</span><span class='op'>|</span>
183
+ <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_expect'>expect</span><span class='lparen'>(</span><span class='id identifier rubyid_my_val'>my_val</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_eq'>eq</span><span class='lparen'>(</span><span class='int'>10</span><span class='rparen'>)</span>
184
+ <span class='kw'>end</span>
185
+
186
+ <span class='kw'>end</span>
187
+
188
+ <span class='comment'>### Child Actions
189
+ </span>
190
+ <span class='const'>Actions</span> <span class='id identifier rubyid_can'>can</span> <span class='id identifier rubyid_execute'>execute</span> <span class='id identifier rubyid_their'>their</span> <span class='id identifier rubyid_own'>own</span> <span class='id identifier rubyid_child'>child</span> <span class='id identifier rubyid_actions'>actions</span><span class='period'>.</span> <span class='const'>Within</span> <span class='id identifier rubyid_an'>an</span> <span class='id identifier rubyid_action'>action</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>s execute_internal method
191
+ </span></span></code></pre>
192
+
193
+ <p>ruby def execute_internal @names.each_with_index do |name, i| # the i
194
+ parameter will cause the result of the child command to be nested # in the
195
+ result under that value. For example, here I would expect # <a
196
+ href="i">result</a>[:greeting] to contain the greeting for each subcommand
197
+ after # execution. ActionCommand.execute_child(self, HelloWorldCommand,
198
+ result, i, name: name) end end “`</p>
100
199
 
101
200
  <h2 id="label-Development">Development</h2>
102
201
 
@@ -128,7 +227,7 @@ href="http://opensource.org/licenses/MIT">MIT License</a>.</p>
128
227
  </div></div>
129
228
 
130
229
  <div id="footer">
131
- Generated on Sat Feb 13 10:16:47 2016 by
230
+ Generated on Thu Mar 3 16:34:07 2016 by
132
231
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
133
232
  0.8.7.6 (ruby-2.2.3).
134
233
  </div>
data/doc/method_list.html CHANGED
@@ -64,8 +64,8 @@
64
64
 
65
65
 
66
66
  <li class="r1 ">
67
- <span class='object_link'><a href="ActionCommand/InputOutput.html#assign_args-instance_method" title="ActionCommand::InputOutput#assign_args (method)">#assign_args</a></span>
68
- <small>ActionCommand::InputOutput</small>
67
+ <span class='object_link'><a href="ActionCommand/Executable.html#child_context%3F-instance_method" title="ActionCommand::Executable#child_context? (method)">#child_context?</a></span>
68
+ <small>ActionCommand::Executable</small>
69
69
  </li>
70
70
 
71
71
 
@@ -82,23 +82,35 @@
82
82
 
83
83
 
84
84
  <li class="r2 ">
85
- <span class='object_link'><a href="ActionCommand.html#describe_io-class_method" title="ActionCommand.describe_io (method)">describe_io</a></span>
86
- <small>ActionCommand</small>
85
+ <span class='object_link'><a href="ActionCommand/Result.html#current-instance_method" title="ActionCommand::Result#current (method)">#current</a></span>
86
+ <small>ActionCommand::Result</small>
87
87
  </li>
88
88
 
89
89
 
90
90
  <li class="r1 ">
91
- <span class='object_link'><a href="ActionCommand/InputOutput.html#description-instance_method" title="ActionCommand::InputOutput#description (method)">#description</a></span>
91
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#desc-instance_method" title="ActionCommand::InputOutput#desc (method)">#desc</a></span>
92
92
  <small>ActionCommand::InputOutput</small>
93
93
  </li>
94
94
 
95
95
 
96
96
  <li class="r2 ">
97
+ <span class='object_link'><a href="ActionCommand.html#describe_io-class_method" title="ActionCommand.describe_io (method)">describe_io</a></span>
98
+ <small>ActionCommand</small>
99
+ </li>
100
+
101
+
102
+ <li class="r1 ">
97
103
  <span class='object_link'><a href="ActionCommand/Executable.html#execute-instance_method" title="ActionCommand::Executable#execute (method)">#execute</a></span>
98
104
  <small>ActionCommand::Executable</small>
99
105
  </li>
100
106
 
101
107
 
108
+ <li class="r2 ">
109
+ <span class='object_link'><a href="ActionCommand.html#execute_child-class_method" title="ActionCommand.execute_child (method)">execute_child</a></span>
110
+ <small>ActionCommand</small>
111
+ </li>
112
+
113
+
102
114
  <li class="r1 ">
103
115
  <span class='object_link'><a href="ActionCommand/Executable.html#execute_internal-instance_method" title="ActionCommand::Executable#execute_internal (method)">#execute_internal</a></span>
104
116
  <small>ActionCommand::Executable</small>
@@ -130,65 +142,149 @@
130
142
 
131
143
 
132
144
  <li class="r2 ">
145
+ <span class='object_link'><a href="ActionCommand/Utils.html#find_object-class_method" title="ActionCommand::Utils.find_object (method)">find_object</a></span>
146
+ <small>ActionCommand::Utils</small>
147
+ </li>
148
+
149
+
150
+ <li class="r1 ">
133
151
  <span class='object_link'><a href="ActionCommand/InputOutput.html#help%3F-instance_method" title="ActionCommand::InputOutput#help? (method)">#help?</a></span>
134
152
  <small>ActionCommand::InputOutput</small>
135
153
  </li>
136
154
 
137
155
 
138
- <li class="r1 ">
156
+ <li class="r2 ">
139
157
  <span class='object_link'><a href="ActionCommand/Result.html#info-instance_method" title="ActionCommand::Result#info (method)">#info</a></span>
140
158
  <small>ActionCommand::Result</small>
141
159
  </li>
142
160
 
143
161
 
162
+ <li class="r1 ">
163
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#initialize-instance_method" title="ActionCommand::InputOutput#initialize (method)">#initialize</a></span>
164
+ <small>ActionCommand::InputOutput</small>
165
+ </li>
166
+
167
+
144
168
  <li class="r2 ">
169
+ <span class='object_link'><a href="ActionCommand/Result.html#initialize-instance_method" title="ActionCommand::Result#initialize (method)">#initialize</a></span>
170
+ <small>ActionCommand::Result</small>
171
+ </li>
172
+
173
+
174
+ <li class="r1 ">
145
175
  <span class='object_link'><a href="ActionCommand/Executable.html#initialize-instance_method" title="ActionCommand::Executable#initialize (method)">#initialize</a></span>
146
176
  <small>ActionCommand::Executable</small>
147
177
  </li>
148
178
 
149
179
 
180
+ <li class="r2 ">
181
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#input-instance_method" title="ActionCommand::InputOutput#input (method)">#input</a></span>
182
+ <small>ActionCommand::InputOutput</small>
183
+ </li>
184
+
185
+
150
186
  <li class="r1 ">
151
- <span class='object_link'><a href="ActionCommand/Result.html#initialize-instance_method" title="ActionCommand::Result#initialize (method)">#initialize</a></span>
187
+ <span class='object_link'><a href="ActionCommand.html#install_rake-class_method" title="ActionCommand.install_rake (method)">install_rake</a></span>
188
+ <small>ActionCommand</small>
189
+ </li>
190
+
191
+
192
+ <li class="r2 ">
193
+ <span class='object_link'><a href="ActionCommand/Result.html#key%3F-instance_method" title="ActionCommand::Result#key? (method)">#key?</a></span>
152
194
  <small>ActionCommand::Result</small>
153
195
  </li>
154
196
 
155
197
 
198
+ <li class="r1 ">
199
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#keys-instance_method" title="ActionCommand::InputOutput#keys (method)">#keys</a></span>
200
+ <small>ActionCommand::InputOutput</small>
201
+ </li>
202
+
203
+
156
204
  <li class="r2 ">
157
- <span class='object_link'><a href="ActionCommand/InputOutput.html#initialize-instance_method" title="ActionCommand::InputOutput#initialize (method)">#initialize</a></span>
205
+ <span class='object_link'><a href="ActionCommand.html#logger%3D-class_method" title="ActionCommand.logger= (method)">logger=</a></span>
206
+ <small>ActionCommand</small>
207
+ </li>
208
+
209
+
210
+ <li class="r1 ">
211
+ <span class='object_link'><a href="ActionCommand/Result.html#ok%3F-instance_method" title="ActionCommand::Result#ok? (method)">#ok?</a></span>
212
+ <small>ActionCommand::Result</small>
213
+ </li>
214
+
215
+
216
+ <li class="r2 ">
217
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#output-instance_method" title="ActionCommand::InputOutput#output (method)">#output</a></span>
158
218
  <small>ActionCommand::InputOutput</small>
159
219
  </li>
160
220
 
161
221
 
162
222
  <li class="r1 ">
163
- <span class='object_link'><a href="ActionCommand/InputOutput.html#input-instance_method" title="ActionCommand::InputOutput#input (method)">#input</a></span>
223
+ <span class='object_link'><a href="ActionCommand/Executable.html#parent-instance_method" title="ActionCommand::Executable#parent (method)">#parent</a></span>
224
+ <small>ActionCommand::Executable</small>
225
+ </li>
226
+
227
+
228
+ <li class="r2 ">
229
+ <span class='object_link'><a href="ActionCommand/Result.html#pop-instance_method" title="ActionCommand::Result#pop (method)">#pop</a></span>
230
+ <small>ActionCommand::Result</small>
231
+ </li>
232
+
233
+
234
+ <li class="r1 ">
235
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#print_output-instance_method" title="ActionCommand::InputOutput#print_output (method)">#print_output</a></span>
164
236
  <small>ActionCommand::InputOutput</small>
165
237
  </li>
166
238
 
167
239
 
168
240
  <li class="r2 ">
169
- <span class='object_link'><a href="ActionCommand/InputOutput.html#keys-instance_method" title="ActionCommand::InputOutput#keys (method)">#keys</a></span>
241
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#process_input-instance_method" title="ActionCommand::InputOutput#process_input (method)">#process_input</a></span>
170
242
  <small>ActionCommand::InputOutput</small>
171
243
  </li>
172
244
 
173
245
 
174
246
  <li class="r1 ">
175
- <span class='object_link'><a href="ActionCommand.html#logger%3D-class_method" title="ActionCommand.logger= (method)">logger=</a></span>
176
- <small>ActionCommand</small>
247
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#process_output-instance_method" title="ActionCommand::InputOutput#process_output (method)">#process_output</a></span>
248
+ <small>ActionCommand::InputOutput</small>
177
249
  </li>
178
250
 
179
251
 
180
252
  <li class="r2 ">
181
- <span class='object_link'><a href="ActionCommand/Result.html#ok%3F-instance_method" title="ActionCommand::Result#ok? (method)">#ok?</a></span>
253
+ <span class='object_link'><a href="ActionCommand/Result.html#push-instance_method" title="ActionCommand::Result#push (method)">#push</a></span>
182
254
  <small>ActionCommand::Result</small>
183
255
  </li>
184
256
 
185
257
 
186
258
  <li class="r1 ">
187
- <span class='object_link'><a href="ActionCommand/Executable.html#parent-instance_method" title="ActionCommand::Executable#parent (method)">#parent</a></span>
259
+ <span class='object_link'><a href="ActionCommand/Executable.html#rails_context%3F-instance_method" title="ActionCommand::Executable#rails_context? (method)">#rails_context?</a></span>
188
260
  <small>ActionCommand::Executable</small>
189
261
  </li>
190
262
 
191
263
 
264
+ <li class="r2 ">
265
+ <span class='object_link'><a href="ActionCommand/Executable.html#rake_context%3F-instance_method" title="ActionCommand::Executable#rake_context? (method)">#rake_context?</a></span>
266
+ <small>ActionCommand::Executable</small>
267
+ </li>
268
+
269
+
270
+ <li class="r1 ">
271
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#rake_input-instance_method" title="ActionCommand::InputOutput#rake_input (method)">#rake_input</a></span>
272
+ <small>ActionCommand::InputOutput</small>
273
+ </li>
274
+
275
+
276
+ <li class="r2 ">
277
+ <span class='object_link'><a href="ActionCommand/Executable.html#root_context-instance_method" title="ActionCommand::Executable#root_context (method)">#root_context</a></span>
278
+ <small>ActionCommand::Executable</small>
279
+ </li>
280
+
281
+
282
+ <li class="r1 ">
283
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#should_validate-instance_method" title="ActionCommand::InputOutput#should_validate (method)">#should_validate</a></span>
284
+ <small>ActionCommand::InputOutput</small>
285
+ </li>
286
+
287
+
192
288
  <li class="r2 ">
193
289
  <span class='object_link'><a href="ActionCommand/InputOutput.html#show_help-instance_method" title="ActionCommand::InputOutput#show_help (method)">#show_help</a></span>
194
290
  <small>ActionCommand::InputOutput</small>
@@ -202,13 +298,19 @@
202
298
 
203
299
 
204
300
  <li class="r2 ">
205
- <span class='object_link'><a href="ActionCommand/Executable.html#testing-instance_method" title="ActionCommand::Executable#testing (method)">#testing</a></span>
301
+ <span class='object_link'><a href="ActionCommand/Executable.html#test_context%3F-instance_method" title="ActionCommand::Executable#test_context? (method)">#test_context?</a></span>
206
302
  <small>ActionCommand::Executable</small>
207
303
  </li>
208
304
 
209
305
 
210
306
  <li class="r1 ">
211
- <span class='object_link'><a href="ActionCommand/InputOutput.html#validate-instance_method" title="ActionCommand::InputOutput#validate (method)">#validate</a></span>
307
+ <span class='object_link'><a href="ActionCommand/Executable.html#testing-instance_method" title="ActionCommand::Executable#testing (method)">#testing</a></span>
308
+ <small>ActionCommand::Executable</small>
309
+ </li>
310
+
311
+
312
+ <li class="r2 ">
313
+ <span class='object_link'><a href="ActionCommand/InputOutput.html#validate_input-instance_method" title="ActionCommand::InputOutput#validate_input (method)">#validate_input</a></span>
212
314
  <small>ActionCommand::InputOutput</small>
213
315
  </li>
214
316
 
@@ -103,7 +103,7 @@
103
103
  </div>
104
104
 
105
105
  <div id="footer">
106
- Generated on Sat Feb 13 10:16:47 2016 by
106
+ Generated on Thu Mar 3 16:34:07 2016 by
107
107
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
108
108
  0.8.7.6 (ruby-2.2.3).
109
109
  </div>
@@ -0,0 +1,75 @@
1
+
2
+ module ActionCommand
3
+ # Root class for action commands that can be executed by this library.
4
+ # Override execute_internal to implement one, call one of the variants
5
+ # of ActionCommand.execute_... to execute one.
6
+ class Executable
7
+
8
+ attr_accessor :parent, :test
9
+
10
+ # Do not call new directly, instead use ActionCommand#execute_... variants.
11
+ def initialize(args)
12
+ self.class.describe_io.process_input(self, args)
13
+ end
14
+
15
+ # @return [Symbol] the symbol indicating what context this
16
+ # action was executed in, see the ActionCommand::CONTEXT_ constants.
17
+ def root_context
18
+
19
+ context = parent
20
+ context = context.parent until context.is_a? Symbol
21
+ return context
22
+ end
23
+
24
+ # @return true if this command was executed using ActionCommand.execute_test
25
+ def test_context?
26
+ return root_context == ActionCommand::CONTEXT_TEST
27
+ end
28
+
29
+ # @return true if this command was executed using ActionCommand.execute_rails
30
+ def rails_context?
31
+ return root_context == ActionCommand::CONTEXT_RAILS
32
+ end
33
+
34
+ # @return true if this command was executed using ActionCommand.execute_rake
35
+ def rake_context?
36
+ return root_context == ActionCommand::CONTEXT_RAKE
37
+ end
38
+
39
+ # @return true if this command is a child of another command
40
+ def child_context?
41
+ return !parent.is_a?(Symbol)
42
+ end
43
+
44
+ # Execute the logic of a command. Should not usually be called
45
+ # directly. Command executors should call one of the ActionCommand.execute_...
46
+ # variants. Command implementors should override
47
+ # execute_internal.
48
+ # @return [ActionCommand::Result]
49
+ def execute(result)
50
+ execute_internal(result)
51
+ self.class.describe_io.process_output(self, result)
52
+ return result
53
+ end
54
+
55
+ # Call this within a commands execution if you'd like to perform validations
56
+ # within the testing context.
57
+ # @yield [context] Yields back the testing context that you
58
+ # passed in to ActionCommand#execute_test.
59
+ def testing
60
+ yield @test if @test
61
+ end
62
+
63
+ protected
64
+
65
+
66
+ # @!visibility public
67
+ # Override this method to implement the logic of your command
68
+ # @param result [ActionCommand::Result] a result object where you can store
69
+ # the results of your logic, or indicate that the command failed.
70
+ def execute_internal(result)
71
+
72
+ end
73
+
74
+ end
75
+ end