action_command 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +34 -6
- data/doc/ActionCommand/Executable.html +23 -25
- data/doc/ActionCommand/InputOutput.html +2 -2
- data/doc/ActionCommand/Result.html +1 -1
- data/doc/ActionCommand.html +2 -2
- data/doc/_index.html +1 -1
- data/doc/file.README.html +44 -18
- data/doc/index.html +44 -18
- data/doc/top-level-namespace.html +1 -1
- data/lib/action_command/executable.rb +0 -1
- data/lib/action_command/input_output.rb +1 -1
- data/lib/action_command/utils.rb +5 -1
- data/lib/action_command/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 879f72610d61724fbc97d332f42f5747684fcf87
|
4
|
+
data.tar.gz: 6708760e32d75083d4bf016df78879ef76e385d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aefeb76599b455594b3e07b2c8ce73615b4f34a161f0ef36d148b7a2b348bea923bab3ef7fd4d2a5e8c8b389192f098b06bcaeec2e4089e582333a1c3e308bdb
|
7
|
+
data.tar.gz: 9ff15a57e4c1f95837787dbd2574ae5d0f751c1effd340bc6bdd6798558fe927ecb23bf4b5b95c2f4fb67c0097dd6404075cf95d3fd975253dd3d006f7b8282a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -26,8 +26,8 @@ Or install it yourself as:
|
|
26
26
|
## Usage
|
27
27
|
|
28
28
|
`action_command` is designed to help you centralize logic which might otherwise end up in a controller or model, and easily invoke it from a controller, a test,
|
29
|
-
or a rake command. I
|
30
|
-
and liked it.
|
29
|
+
or a rake command. I encountered the idea in the book [Rails 4 Test Prescriptions](http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222196),
|
30
|
+
tried it and liked it.
|
31
31
|
|
32
32
|
### HelloWorld
|
33
33
|
|
@@ -55,7 +55,7 @@ class HelloWorldCommand < ActionCommand::Executable
|
|
55
55
|
# assign results to the result. You can also use methods like result.fail or
|
56
56
|
# result.info.
|
57
57
|
def execute_internal(result)
|
58
|
-
result[:greeting] = "Hello #{@name}"
|
58
|
+
result[:greeting] = "Hello #{@name}"
|
59
59
|
end
|
60
60
|
end
|
61
61
|
```
|
@@ -71,7 +71,7 @@ You can execute it from rails:
|
|
71
71
|
#### HelloWorld: Execute from Rake
|
72
72
|
|
73
73
|
When building a system, I find it useful to be able to easily run my actions from
|
74
|
-
the command-line as well. In rails, you can create a lib/tasks/
|
74
|
+
the command-line as well. In rails, you can create a lib/tasks/my_task.rake, and
|
75
75
|
configure your actions as task with one line:
|
76
76
|
|
77
77
|
```
|
@@ -85,7 +85,34 @@ end
|
|
85
85
|
```
|
86
86
|
|
87
87
|
You can always invoke your rake task with [help] to see help on the input and output
|
88
|
-
of the action.
|
88
|
+
of the action. Then
|
89
|
+
|
90
|
+
```
|
91
|
+
rake my_namespace:hello_world[help]
|
92
|
+
```
|
93
|
+
|
94
|
+
will produce:
|
95
|
+
|
96
|
+
```
|
97
|
+
HelloWorldCommand: Say hello to someone
|
98
|
+
Input:
|
99
|
+
name: Name of person to say hello to
|
100
|
+
no_output: If true, intentionally produces no output (optional)
|
101
|
+
Output:
|
102
|
+
greeting: Greeting for the person
|
103
|
+
```
|
104
|
+
|
105
|
+
and
|
106
|
+
|
107
|
+
```
|
108
|
+
rake my_namespace:hello_world[chris]
|
109
|
+
```
|
110
|
+
|
111
|
+
will produce:
|
112
|
+
|
113
|
+
```
|
114
|
+
greeting: Hello chris
|
115
|
+
```
|
89
116
|
|
90
117
|
#### HelloWorld: Execute from rspec/etc
|
91
118
|
|
@@ -100,7 +127,7 @@ Or, you can execute it from a testing framework.
|
|
100
127
|
```
|
101
128
|
|
102
129
|
If your command does a lot, you might like to do some internal verifications during the testing process to aid
|
103
|
-
debugging. Inside a command's execute_internal method, you can use a block like this
|
130
|
+
debugging. Inside a command's execute_internal method, you can use a block like this:
|
104
131
|
|
105
132
|
```ruby
|
106
133
|
def execute_internal(result)
|
@@ -114,6 +141,7 @@ debugging. Inside a command's execute_internal method, you can use a block lik
|
|
114
141
|
end
|
115
142
|
|
116
143
|
end
|
144
|
+
```
|
117
145
|
|
118
146
|
### Child Actions
|
119
147
|
|
@@ -594,12 +594,12 @@ validations within the testing context.</p>
|
|
594
594
|
<pre class="lines">
|
595
595
|
|
596
596
|
|
597
|
+
39
|
597
598
|
40
|
598
|
-
41
|
599
|
-
42</pre>
|
599
|
+
41</pre>
|
600
600
|
</td>
|
601
601
|
<td>
|
602
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
602
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 39</span>
|
603
603
|
|
604
604
|
<span class='kw'>def</span> <span class='id identifier rubyid_child_context?'>child_context?</span>
|
605
605
|
<span class='kw'>return</span> <span class='op'>!</span><span class='id identifier rubyid_parent'>parent</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Symbol</span><span class='rparen'>)</span>
|
@@ -650,14 +650,14 @@ Command implementors should override execute_internal.</p>
|
|
650
650
|
<pre class="lines">
|
651
651
|
|
652
652
|
|
653
|
+
48
|
653
654
|
49
|
654
655
|
50
|
655
656
|
51
|
656
|
-
52
|
657
|
-
53</pre>
|
657
|
+
52</pre>
|
658
658
|
</td>
|
659
659
|
<td>
|
660
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
660
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 48</span>
|
661
661
|
|
662
662
|
<span class='kw'>def</span> <span class='id identifier rubyid_execute'>execute</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span>
|
663
663
|
<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>
|
@@ -716,12 +716,12 @@ that the command failed.</p>
|
|
716
716
|
<pre class="lines">
|
717
717
|
|
718
718
|
|
719
|
+
69
|
719
720
|
70
|
720
|
-
71
|
721
|
-
72</pre>
|
721
|
+
71</pre>
|
722
722
|
</td>
|
723
723
|
<td>
|
724
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
724
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 69</span>
|
725
725
|
|
726
726
|
<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>
|
727
727
|
|
@@ -775,12 +775,12 @@ that the command failed.</p>
|
|
775
775
|
<pre class="lines">
|
776
776
|
|
777
777
|
|
778
|
+
29
|
778
779
|
30
|
779
|
-
31
|
780
|
-
32</pre>
|
780
|
+
31</pre>
|
781
781
|
</td>
|
782
782
|
<td>
|
783
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
783
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 29</span>
|
784
784
|
|
785
785
|
<span class='kw'>def</span> <span class='id identifier rubyid_rails_context?'>rails_context?</span>
|
786
786
|
<span class='kw'>return</span> <span class='id identifier rubyid_root_context'>root_context</span> <span class='op'>==</span> <span class='const'>ActionCommand</span><span class='op'>::</span><span class='const'>CONTEXT_RAILS</span>
|
@@ -834,12 +834,12 @@ that the command failed.</p>
|
|
834
834
|
<pre class="lines">
|
835
835
|
|
836
836
|
|
837
|
+
34
|
837
838
|
35
|
838
|
-
36
|
839
|
-
37</pre>
|
839
|
+
36</pre>
|
840
840
|
</td>
|
841
841
|
<td>
|
842
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
842
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 34</span>
|
843
843
|
|
844
844
|
<span class='kw'>def</span> <span class='id identifier rubyid_rake_context?'>rake_context?</span>
|
845
845
|
<span class='kw'>return</span> <span class='id identifier rubyid_root_context'>root_context</span> <span class='op'>==</span> <span class='const'>ActionCommand</span><span class='op'>::</span><span class='const'>CONTEXT_RAKE</span>
|
@@ -897,14 +897,12 @@ that the command failed.</p>
|
|
897
897
|
18
|
898
898
|
19
|
899
899
|
20
|
900
|
-
21
|
901
|
-
22</pre>
|
900
|
+
21</pre>
|
902
901
|
</td>
|
903
902
|
<td>
|
904
903
|
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 17</span>
|
905
904
|
|
906
905
|
<span class='kw'>def</span> <span class='id identifier rubyid_root_context'>root_context</span>
|
907
|
-
|
908
906
|
<span class='id identifier rubyid_context'>context</span> <span class='op'>=</span> <span class='id identifier rubyid_parent'>parent</span>
|
909
907
|
<span class='id identifier rubyid_context'>context</span> <span class='op'>=</span> <span class='id identifier rubyid_context'>context</span><span class='period'>.</span><span class='id identifier rubyid_parent'>parent</span> <span class='kw'>until</span> <span class='id identifier rubyid_context'>context</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Symbol</span>
|
910
908
|
<span class='kw'>return</span> <span class='id identifier rubyid_context'>context</span>
|
@@ -958,12 +956,12 @@ that the command failed.</p>
|
|
958
956
|
<pre class="lines">
|
959
957
|
|
960
958
|
|
959
|
+
24
|
961
960
|
25
|
962
|
-
26
|
963
|
-
27</pre>
|
961
|
+
26</pre>
|
964
962
|
</td>
|
965
963
|
<td>
|
966
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
964
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 24</span>
|
967
965
|
|
968
966
|
<span class='kw'>def</span> <span class='id identifier rubyid_test_context?'>test_context?</span>
|
969
967
|
<span class='kw'>return</span> <span class='id identifier rubyid_root_context'>root_context</span> <span class='op'>==</span> <span class='const'>ActionCommand</span><span class='op'>::</span><span class='const'>CONTEXT_TEST</span>
|
@@ -1019,12 +1017,12 @@ ActionCommand#execute_test.</p>
|
|
1019
1017
|
<pre class="lines">
|
1020
1018
|
|
1021
1019
|
|
1020
|
+
58
|
1022
1021
|
59
|
1023
|
-
60
|
1024
|
-
61</pre>
|
1022
|
+
60</pre>
|
1025
1023
|
</td>
|
1026
1024
|
<td>
|
1027
|
-
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line
|
1025
|
+
<pre class="code"><span class="info file"># File 'lib/action_command/executable.rb', line 58</span>
|
1028
1026
|
|
1029
1027
|
<span class='kw'>def</span> <span class='id identifier rubyid_testing'>testing</span>
|
1030
1028
|
<span class='kw'>yield</span> <span class='ivar'>@test</span> <span class='kw'>if</span> <span class='ivar'>@test</span>
|
@@ -1039,7 +1037,7 @@ ActionCommand#execute_test.</p>
|
|
1039
1037
|
</div>
|
1040
1038
|
|
1041
1039
|
<div id="footer">
|
1042
|
-
Generated on
|
1040
|
+
Generated on Fri Mar 4 10:20:15 2016 by
|
1043
1041
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1044
1042
|
0.8.7.6 (ruby-2.2.3).
|
1045
1043
|
</div>
|
@@ -989,7 +989,7 @@ missing</p>
|
|
989
989
|
<pre class="code"><span class="info file"># File 'lib/action_command/input_output.rb', line 67</span>
|
990
990
|
|
991
991
|
<span class='kw'>def</span> <span class='id identifier rubyid_process_output'>process_output</span><span class='lparen'>(</span><span class='id identifier rubyid_dest'>dest</span><span class='comma'>,</span> <span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span>
|
992
|
-
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_should_validate'>should_validate</span><span class='lparen'>(</span><span class='id identifier rubyid_dest'>dest</span><span class='rparen'>)</span>
|
992
|
+
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_ok?'>ok?</span> <span class='op'>&&</span> <span class='id identifier rubyid_should_validate'>should_validate</span><span class='lparen'>(</span><span class='id identifier rubyid_dest'>dest</span><span class='rparen'>)</span>
|
993
993
|
|
994
994
|
<span class='ivar'>@output</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_param'>param</span><span class='op'>|</span>
|
995
995
|
<span class='id identifier rubyid_sym'>sym</span> <span class='op'>=</span> <span class='id identifier rubyid_param'>param</span><span class='lbracket'>[</span><span class='symbol'>:symbol</span><span class='rbracket'>]</span>
|
@@ -1268,7 +1268,7 @@ description.</p>
|
|
1268
1268
|
</div>
|
1269
1269
|
|
1270
1270
|
<div id="footer">
|
1271
|
-
Generated on
|
1271
|
+
Generated on Fri Mar 4 10:20:15 2016 by
|
1272
1272
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1273
1273
|
0.8.7.6 (ruby-2.2.3).
|
1274
1274
|
</div>
|
@@ -869,7 +869,7 @@ result.</p>
|
|
869
869
|
</div>
|
870
870
|
|
871
871
|
<div id="footer">
|
872
|
-
Generated on
|
872
|
+
Generated on Fri Mar 4 10:20:15 2016 by
|
873
873
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
874
874
|
0.8.7.6 (ruby-2.2.3).
|
875
875
|
</div>
|
data/doc/ActionCommand.html
CHANGED
@@ -192,7 +192,7 @@ controller, etc)</p>
|
|
192
192
|
|
193
193
|
</div>
|
194
194
|
</dt>
|
195
|
-
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>0.1.
|
195
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>0.1.2</span><span class='tstring_end'>'</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
|
196
196
|
|
197
197
|
<dt id="logger-classvariable" class="">@@logger =
|
198
198
|
<div class="docstring">
|
@@ -1227,7 +1227,7 @@ validations. See <span class='object_link'><a href="ActionCommand/Executable.ht
|
|
1227
1227
|
</div>
|
1228
1228
|
|
1229
1229
|
<div id="footer">
|
1230
|
-
Generated on
|
1230
|
+
Generated on Fri Mar 4 10:20:15 2016 by
|
1231
1231
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1232
1232
|
0.8.7.6 (ruby-2.2.3).
|
1233
1233
|
</div>
|
data/doc/_index.html
CHANGED
@@ -161,7 +161,7 @@
|
|
161
161
|
</div>
|
162
162
|
|
163
163
|
<div id="footer">
|
164
|
-
Generated on
|
164
|
+
Generated on Fri Mar 4 10:20:14 2016 by
|
165
165
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
166
166
|
0.8.7.6 (ruby-2.2.3).
|
167
167
|
</div>
|
data/doc/file.README.html
CHANGED
@@ -98,10 +98,10 @@ by others.</p>
|
|
98
98
|
|
99
99
|
<p><code>action_command</code> is designed to help you centralize logic which
|
100
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
|
102
|
-
|
101
|
+
a controller, a test, or a rake command. I encountered the idea in the book
|
102
|
+
<a
|
103
103
|
href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222196">Rails
|
104
|
-
4 Test Prescriptions</a
|
104
|
+
4 Test Prescriptions</a>, tried it and liked it.</p>
|
105
105
|
|
106
106
|
<h3 id="label-HelloWorld">HelloWorld</h3>
|
107
107
|
|
@@ -128,7 +128,7 @@ href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222
|
|
128
128
|
</span> <span class='comment'># assign results to the result. You can also use methods like result.fail or
|
129
129
|
</span> <span class='comment'># result.info.
|
130
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'>"</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'>"</span></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'>"</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'>"</span></span>
|
132
132
|
<span class='kw'>end</span>
|
133
133
|
<span class='kw'>end</span>
|
134
134
|
</code></pre>
|
@@ -144,7 +144,7 @@ href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222
|
|
144
144
|
|
145
145
|
<p>When building a system, I find it useful to be able to easily run my
|
146
146
|
actions from the command-line as well. In rails, you can create a
|
147
|
-
lib/tasks/
|
147
|
+
lib/tasks/my_task.rake, and configure your actions as task with one line:</p>
|
148
148
|
|
149
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
150
|
|
@@ -156,7 +156,28 @@ lib/tasks/my_rake.task, and configure your actions as task with one line:</p>
|
|
156
156
|
</code></pre>
|
157
157
|
|
158
158
|
<p>You can always invoke your rake task with [help] to see help on the input
|
159
|
-
and output of the action
|
159
|
+
and output of the action. Then</p>
|
160
|
+
|
161
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='label'>my_namespace:</span><span class='id identifier rubyid_hello_world'>hello_world</span><span class='lbracket'>[</span><span class='id identifier rubyid_help'>help</span><span class='rbracket'>]</span>
|
162
|
+
</code></pre>
|
163
|
+
|
164
|
+
<p>will produce:</p>
|
165
|
+
|
166
|
+
<pre class="code ruby"><code class="ruby">HelloWorldCommand: Say hello to someone
|
167
|
+
Input:
|
168
|
+
name: Name of person to say hello to
|
169
|
+
no_output: If true, intentionally produces no output (optional)
|
170
|
+
Output:
|
171
|
+
greeting: Greeting for the person</code></pre>
|
172
|
+
|
173
|
+
<p>and</p>
|
174
|
+
|
175
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='label'>my_namespace:</span><span class='id identifier rubyid_hello_world'>hello_world</span><span class='lbracket'>[</span><span class='id identifier rubyid_chris'>chris</span><span class='rbracket'>]</span>
|
176
|
+
</code></pre>
|
177
|
+
|
178
|
+
<p>will produce:</p>
|
179
|
+
|
180
|
+
<pre class="code ruby"><code class="ruby">greeting: Hello chris</code></pre>
|
160
181
|
|
161
182
|
<h4 id="label-HelloWorld-3A+Execute+from+rspec-2Fetc">HelloWorld: Execute from rspec/etc</h4>
|
162
183
|
|
@@ -171,7 +192,7 @@ and output of the action.</p>
|
|
171
192
|
|
172
193
|
<p>If your command does a lot, you might like to do some internal
|
173
194
|
verifications during the testing process to aid debugging. Inside a
|
174
|
-
command's execute_internal method, you can use a block like this
|
195
|
+
command's execute_internal method, you can use a block like this:</p>
|
175
196
|
|
176
197
|
<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
198
|
<span class='comment'># ... do some logic
|
@@ -184,18 +205,23 @@ command's execute_internal method, you can use a block like this</p>
|
|
184
205
|
<span class='kw'>end</span>
|
185
206
|
|
186
207
|
<span class='kw'>end</span>
|
208
|
+
</code></pre>
|
209
|
+
|
210
|
+
<h3 id="label-Child+Actions">Child Actions</h3>
|
187
211
|
|
188
|
-
<
|
189
|
-
|
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'>'</span><span class='tstring_end'>s execute_internal method
|
191
|
-
</span></span></code></pre>
|
212
|
+
<p>Actions can execute their own child actions. Within an action's
|
213
|
+
execute_internal method you should call additional actions via:</p>
|
192
214
|
|
193
|
-
<
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
215
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>def</span> <span class='id identifier rubyid_execute_internal'>execute_internal</span>
|
216
|
+
<span class='ivar'>@names</span><span class='period'>.</span><span class='id identifier rubyid_each_with_index'>each_with_index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
|
217
|
+
<span class='comment'># the i parameter will cause the result of the child command to be nested
|
218
|
+
</span> <span class='comment'># in the result under that value. For example, here I would expect
|
219
|
+
</span> <span class='comment'># result[i][:greeting] to contain the greeting for each subcommand after
|
220
|
+
</span> <span class='comment'># execution.
|
221
|
+
</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_execute_child'>execute_child</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='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
222
|
+
<span class='kw'>end</span>
|
223
|
+
<span class='kw'>end</span>
|
224
|
+
</code></pre>
|
199
225
|
|
200
226
|
<h2 id="label-Development">Development</h2>
|
201
227
|
|
@@ -227,7 +253,7 @@ href="http://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
227
253
|
</div></div>
|
228
254
|
|
229
255
|
<div id="footer">
|
230
|
-
Generated on
|
256
|
+
Generated on Fri Mar 4 10:20:14 2016 by
|
231
257
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
232
258
|
0.8.7.6 (ruby-2.2.3).
|
233
259
|
</div>
|
data/doc/index.html
CHANGED
@@ -98,10 +98,10 @@ by others.</p>
|
|
98
98
|
|
99
99
|
<p><code>action_command</code> is designed to help you centralize logic which
|
100
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
|
102
|
-
|
101
|
+
a controller, a test, or a rake command. I encountered the idea in the book
|
102
|
+
<a
|
103
103
|
href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222196">Rails
|
104
|
-
4 Test Prescriptions</a
|
104
|
+
4 Test Prescriptions</a>, tried it and liked it.</p>
|
105
105
|
|
106
106
|
<h3 id="label-HelloWorld">HelloWorld</h3>
|
107
107
|
|
@@ -128,7 +128,7 @@ href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222
|
|
128
128
|
</span> <span class='comment'># assign results to the result. You can also use methods like result.fail or
|
129
129
|
</span> <span class='comment'># result.info.
|
130
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'>"</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'>"</span></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'>"</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'>"</span></span>
|
132
132
|
<span class='kw'>end</span>
|
133
133
|
<span class='kw'>end</span>
|
134
134
|
</code></pre>
|
@@ -144,7 +144,7 @@ href="http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222
|
|
144
144
|
|
145
145
|
<p>When building a system, I find it useful to be able to easily run my
|
146
146
|
actions from the command-line as well. In rails, you can create a
|
147
|
-
lib/tasks/
|
147
|
+
lib/tasks/my_task.rake, and configure your actions as task with one line:</p>
|
148
148
|
|
149
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
150
|
|
@@ -156,7 +156,28 @@ lib/tasks/my_rake.task, and configure your actions as task with one line:</p>
|
|
156
156
|
</code></pre>
|
157
157
|
|
158
158
|
<p>You can always invoke your rake task with [help] to see help on the input
|
159
|
-
and output of the action
|
159
|
+
and output of the action. Then</p>
|
160
|
+
|
161
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='label'>my_namespace:</span><span class='id identifier rubyid_hello_world'>hello_world</span><span class='lbracket'>[</span><span class='id identifier rubyid_help'>help</span><span class='rbracket'>]</span>
|
162
|
+
</code></pre>
|
163
|
+
|
164
|
+
<p>will produce:</p>
|
165
|
+
|
166
|
+
<pre class="code ruby"><code class="ruby">HelloWorldCommand: Say hello to someone
|
167
|
+
Input:
|
168
|
+
name: Name of person to say hello to
|
169
|
+
no_output: If true, intentionally produces no output (optional)
|
170
|
+
Output:
|
171
|
+
greeting: Greeting for the person</code></pre>
|
172
|
+
|
173
|
+
<p>and</p>
|
174
|
+
|
175
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='label'>my_namespace:</span><span class='id identifier rubyid_hello_world'>hello_world</span><span class='lbracket'>[</span><span class='id identifier rubyid_chris'>chris</span><span class='rbracket'>]</span>
|
176
|
+
</code></pre>
|
177
|
+
|
178
|
+
<p>will produce:</p>
|
179
|
+
|
180
|
+
<pre class="code ruby"><code class="ruby">greeting: Hello chris</code></pre>
|
160
181
|
|
161
182
|
<h4 id="label-HelloWorld-3A+Execute+from+rspec-2Fetc">HelloWorld: Execute from rspec/etc</h4>
|
162
183
|
|
@@ -171,7 +192,7 @@ and output of the action.</p>
|
|
171
192
|
|
172
193
|
<p>If your command does a lot, you might like to do some internal
|
173
194
|
verifications during the testing process to aid debugging. Inside a
|
174
|
-
command's execute_internal method, you can use a block like this
|
195
|
+
command's execute_internal method, you can use a block like this:</p>
|
175
196
|
|
176
197
|
<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
198
|
<span class='comment'># ... do some logic
|
@@ -184,18 +205,23 @@ command's execute_internal method, you can use a block like this</p>
|
|
184
205
|
<span class='kw'>end</span>
|
185
206
|
|
186
207
|
<span class='kw'>end</span>
|
208
|
+
</code></pre>
|
209
|
+
|
210
|
+
<h3 id="label-Child+Actions">Child Actions</h3>
|
187
211
|
|
188
|
-
<
|
189
|
-
|
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'>'</span><span class='tstring_end'>s execute_internal method
|
191
|
-
</span></span></code></pre>
|
212
|
+
<p>Actions can execute their own child actions. Within an action's
|
213
|
+
execute_internal method you should call additional actions via:</p>
|
192
214
|
|
193
|
-
<
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
215
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>def</span> <span class='id identifier rubyid_execute_internal'>execute_internal</span>
|
216
|
+
<span class='ivar'>@names</span><span class='period'>.</span><span class='id identifier rubyid_each_with_index'>each_with_index</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
|
217
|
+
<span class='comment'># the i parameter will cause the result of the child command to be nested
|
218
|
+
</span> <span class='comment'># in the result under that value. For example, here I would expect
|
219
|
+
</span> <span class='comment'># result[i][:greeting] to contain the greeting for each subcommand after
|
220
|
+
</span> <span class='comment'># execution.
|
221
|
+
</span> <span class='const'>ActionCommand</span><span class='period'>.</span><span class='id identifier rubyid_execute_child'>execute_child</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='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_i'>i</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
222
|
+
<span class='kw'>end</span>
|
223
|
+
<span class='kw'>end</span>
|
224
|
+
</code></pre>
|
199
225
|
|
200
226
|
<h2 id="label-Development">Development</h2>
|
201
227
|
|
@@ -227,7 +253,7 @@ href="http://opensource.org/licenses/MIT">MIT License</a>.</p>
|
|
227
253
|
</div></div>
|
228
254
|
|
229
255
|
<div id="footer">
|
230
|
-
Generated on
|
256
|
+
Generated on Fri Mar 4 10:20:14 2016 by
|
231
257
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
232
258
|
0.8.7.6 (ruby-2.2.3).
|
233
259
|
</div>
|
@@ -103,7 +103,7 @@
|
|
103
103
|
</div>
|
104
104
|
|
105
105
|
<div id="footer">
|
106
|
-
Generated on
|
106
|
+
Generated on Fri Mar 4 10:20:14 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>
|
@@ -15,7 +15,6 @@ module ActionCommand
|
|
15
15
|
# @return [Symbol] the symbol indicating what context this
|
16
16
|
# action was executed in, see the ActionCommand::CONTEXT_ constants.
|
17
17
|
def root_context
|
18
|
-
|
19
18
|
context = parent
|
20
19
|
context = context.parent until context.is_a? Symbol
|
21
20
|
return context
|
@@ -65,7 +65,7 @@ module ActionCommand
|
|
65
65
|
|
66
66
|
# Goes through, and makes sure that required output parameters exist
|
67
67
|
def process_output(dest, result)
|
68
|
-
return unless should_validate(dest)
|
68
|
+
return unless result.ok? && should_validate(dest)
|
69
69
|
|
70
70
|
@output.each do |param|
|
71
71
|
sym = param[:symbol]
|
data/lib/action_command/utils.rb
CHANGED
@@ -6,7 +6,6 @@ module ActionCommand
|
|
6
6
|
# Used for cases where you might want to pass an action a User object, or
|
7
7
|
# the integer ID of a user object, or the unique email of a user object, and
|
8
8
|
# have the command operate on the user object.
|
9
|
-
|
10
9
|
# Converts an item into an object as follows:
|
11
10
|
# 1. If item is an object of cls, then returns it
|
12
11
|
# 2. If item is an integer, then assumes its and id and returns cls.find(item)
|
@@ -16,6 +15,11 @@ module ActionCommand
|
|
16
15
|
return cls.find(item) if item.is_a? Integer
|
17
16
|
return yield(item)
|
18
17
|
end
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
19
23
|
end
|
20
24
|
|
21
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_command
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Jones
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|