stackup 0.1.0 → 0.2.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +12 -12
  3. data/README.md +38 -15
  4. data/bin/stackup +76 -34
  5. data/doc/Stackup/ErrorMappingProxy.html +378 -0
  6. data/doc/Stackup/InvalidStateError.html +142 -0
  7. data/doc/Stackup/NoSuchStack.html +142 -0
  8. data/doc/Stackup/NoUpdateRequired.html +134 -0
  9. data/doc/Stackup/Service.html +399 -0
  10. data/doc/Stackup/ServiceError.html +138 -0
  11. data/doc/Stackup/Stack.html +1269 -0
  12. data/doc/Stackup/StackUpdateError.html +142 -0
  13. data/doc/Stackup/StackWatcher.html +455 -0
  14. data/doc/Stackup.html +202 -0
  15. data/doc/_index.html +199 -0
  16. data/doc/class_list.html +58 -0
  17. data/doc/css/common.css +1 -0
  18. data/doc/css/full_list.css +57 -0
  19. data/doc/css/style.css +339 -0
  20. data/doc/file.README.html +143 -0
  21. data/doc/file_list.html +60 -0
  22. data/doc/frames.html +26 -0
  23. data/doc/index.html +143 -0
  24. data/doc/js/app.js +219 -0
  25. data/doc/js/full_list.js +181 -0
  26. data/doc/js/jquery.js +4 -0
  27. data/doc/method_list.html +195 -0
  28. data/doc/top-level-namespace.html +194 -0
  29. data/lib/stackup/error_mapping_proxy.rb +37 -0
  30. data/lib/stackup/errors.rb +9 -6
  31. data/lib/stackup/service.rb +39 -0
  32. data/lib/stackup/stack.rb +52 -59
  33. data/lib/stackup/stack_watcher.rb +16 -10
  34. data/lib/stackup.rb +26 -0
  35. data/spec/spec_helper.rb +15 -1
  36. data/spec/stackup/stack_spec.rb +114 -48
  37. data/spec/stackup/stack_watcher_spec.rb +20 -15
  38. data/stackup.gemspec +1 -1
  39. data/woollyams/template.json +44 -0
  40. metadata +29 -6
  41. data/pkg/stackup-0.0.1.gem +0 -0
  42. data/pkg/stackup-0.0.8.gem +0 -0
  43. data/pkg/stackup-0.0.9.gem +0 -0
  44. data/woollyams/sample-template.json +0 -79
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 018537d107f8cc0049863b56dd604f8c881217c9
4
- data.tar.gz: b62b34f99958d38df0d44d4a46af577832eb4174
3
+ metadata.gz: a1cf0223b3b4769f8f08fb90e944721f19911105
4
+ data.tar.gz: 809c9e18e59c5a0f92b37cd43c33dd30bbda1a1e
5
5
  SHA512:
6
- metadata.gz: fe03ddbff07fbb42c2781268e131b16dfc08942bdb5b2079d6905f58b720b091d8b7c461b6413c8b1cc42e7c080d7d560a8d2d369b0a9536b033fd9ba609304d
7
- data.tar.gz: 49a82e6317772a3e32322d65bc438bdcc550b0d6f61cfdf2cc06fcfa0b258135be7247fbe6f31665a6d7b6a33b5608a54a64bcc7d7f49a479a489adf75348ad6
6
+ metadata.gz: b38f0de16a9a86c5f037dae464562c27c246556e9db6bad43a0494b8c305ef159117bac4c275627dfac0284fd0666e1dbe688500829f84836f0c5bc66076ff6a
7
+ data.tar.gz: 2a933cc8523a7e410e14b43345993157e070f0690286f9498bbe855201c17cd803ee7c98cd5169f2e6a1d8670f31d0a7dd39629f667c0ef5e3c848598fd01988
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stackup (0.1.0)
4
+ stackup (0.2.0)
5
5
  aws-sdk (~> 2.0)
6
6
  clamp (~> 1.0)
7
7
  console_logger
@@ -10,22 +10,22 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- ast (2.0.0)
14
- astrolabe (1.3.0)
15
- parser (>= 2.2.0.pre.3, < 3.0)
16
- aws-sdk (2.1.26)
17
- aws-sdk-resources (= 2.1.26)
18
- aws-sdk-core (2.1.26)
13
+ ast (2.1.0)
14
+ astrolabe (1.3.1)
15
+ parser (~> 2.2)
16
+ aws-sdk (2.1.27)
17
+ aws-sdk-resources (= 2.1.27)
18
+ aws-sdk-core (2.1.27)
19
19
  jmespath (~> 1.0)
20
- aws-sdk-resources (2.1.26)
21
- aws-sdk-core (= 2.1.26)
20
+ aws-sdk-resources (2.1.27)
21
+ aws-sdk-core (= 2.1.27)
22
22
  byebug (6.0.2)
23
23
  clamp (1.0.0)
24
24
  console_logger (1.0.0)
25
25
  diff-lcs (1.2.5)
26
26
  jmespath (1.1.3)
27
27
  multi_json (1.11.2)
28
- parser (2.2.2.5)
28
+ parser (2.2.2.6)
29
29
  ast (>= 1.1, < 3.0)
30
30
  powerpack (0.1.1)
31
31
  rainbow (2.0.0)
@@ -43,7 +43,7 @@ GEM
43
43
  diff-lcs (>= 1.2.0, < 2.0)
44
44
  rspec-support (~> 3.3.0)
45
45
  rspec-support (3.3.0)
46
- rubocop (0.32.0)
46
+ rubocop (0.34.2)
47
47
  astrolabe (~> 1.3)
48
48
  parser (>= 2.2.2.5, < 3.0)
49
49
  powerpack (~> 0.1)
@@ -62,4 +62,4 @@ DEPENDENCIES
62
62
  stackup!
63
63
 
64
64
  BUNDLED WITH
65
- 1.10.6
65
+ 1.10.5
data/README.md CHANGED
@@ -1,40 +1,63 @@
1
1
  # stackup
2
2
 
3
+ [![Build Status](https://travis-ci.org/realestate-com-au/stackup.svg?branch=master)](https://travis-ci.org/realestate-com-au/stackup)
4
+
3
5
  Stackup attempts to simplify AWS Cloudformation stack creation process in
4
6
  ruby projects by providing executable to perform common operations such
5
7
  as apply(create/update), delete, recreate on stack along with validations on
6
- templates. Task executions which enforce a stack change will wait until
7
- ROLLBACK/COMPLETE or DELETE is signalled on the stack (useful in continuous
8
- deployment environments to wait until deployment is successful).
8
+ templates. Operations which enforce a stack change will wait until
9
+ the change is complete.
9
10
 
10
11
  ## Installation
11
12
 
12
13
  $ gem install stackup
13
14
 
14
- ## Usage
15
+ ## Command-line usage
15
16
 
16
17
  The entry-point is the "stackup" command.
17
18
 
18
- The "stack" subcommand lists stacks:
19
+ Most commands operate in the context of a named stack:
20
+
21
+ $ stackup STACK-NAME ...
19
22
 
20
- $ stackup stacks
23
+ Called without stack-name, it will list stacks:
21
24
 
22
- Most other commands operate in the context of a named stack:
25
+ $ stackup
26
+ foo-bar-test
27
+ zzz-production
23
28
 
24
- $ stackup stack STACK-NAME ...
29
+ ### Stack create/update
25
30
 
26
- To create or update a stack, based on a template, use "apply":
31
+ Use sub-command "up" to create or update a stack, as appropriate:
27
32
 
28
- $ stackup stack myapp-test apply
33
+ $ stackup myapp-test up template.json
29
34
 
30
35
  This will:
31
36
 
32
37
  * update (or create) the named CloudFormation stack, using the specified template
33
38
  * monitor events until the stack update is complete
34
- * print any stack "outputs"
35
39
 
36
- Other stack subcommands include:
40
+ ### Stack deletion
41
+
42
+ Sub-command "delete" deletes the stack.
43
+
44
+ ### Stack inspection
45
+
46
+ Inspect details of a stack with:
47
+
48
+ $ stackup myapp-test status
49
+ $ stackup myapp-test resources
50
+ $ stackup myapp-test outputs
51
+
52
+ ## Programmatic usage
53
+
54
+ Get a handle to a `Stack` object as follows:
55
+
56
+ stack = Stackup.stack("my-stack")
57
+
58
+ You can pass an `Aws::CloudFormation::Client`, or client config,
59
+ to `Stackup`, e.g.
60
+
61
+ stack = Stackup(credentials).stack("my-stack")
37
62
 
38
- $ stackup stack myapp-test outputs
39
- $ stackup stack myapp-test resources
40
- $ stackup stack myapp-test delete
63
+ See {Stackup::Stack} for more details.
data/bin/stackup CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH << File.expand_path("../../lib", __FILE__)
4
4
 
5
5
  require "clamp"
6
6
  require "console_logger"
7
- require "stackup/stack"
7
+ require "stackup"
8
8
  require "multi_json"
9
9
  require "yaml"
10
10
 
@@ -14,7 +14,24 @@ Clamp do
14
14
 
15
15
  option ["-f", "--format"], "FORMAT", "output format", :default => "yaml"
16
16
 
17
- protected
17
+ option ["-L", "--list"], :flag, "list stacks" do
18
+ list_stacks
19
+ exit 0
20
+ end
21
+
22
+ parameter "NAME", "Name of stack", :attribute_name => :stack_name
23
+
24
+ def run(arguments)
25
+ super(arguments)
26
+ rescue Stackup::ServiceError => e
27
+ signal_error e.message
28
+ rescue Aws::Errors::MissingCredentialsError
29
+ signal_error "no credentials provided"
30
+ rescue Aws::CloudFormation::Errors::ExpiredToken => e
31
+ signal_error e.message
32
+ end
33
+
34
+ private
18
35
 
19
36
  def logger
20
37
  @logger ||= ConsoleLogger.new($stdout, debug?)
@@ -33,62 +50,87 @@ Clamp do
33
50
  puts format_data(data)
34
51
  end
35
52
 
36
- subcommand "stack", "Manage a stack." do
53
+ def stackup
54
+ Stackup(:logger => logger, :log_level => :debug)
55
+ end
37
56
 
38
- parameter "NAME", "Name of stack", :attribute_name => :stack_name
57
+ def stack
58
+ stackup.stack(stack_name)
59
+ end
39
60
 
40
- def run(*args)
41
- super(*args)
42
- rescue Stackup::NoSuchStack => e
43
- signal_error "stack '#{stack_name}' does not exist"
44
- rescue Stackup::StackUpdateError => e
45
- signal_error e.message
61
+ def list_stacks
62
+ stackup.stack_names.each do |name|
63
+ puts name
46
64
  end
65
+ end
47
66
 
48
- private
67
+ def report_change
68
+ change = yield
69
+ puts "Stack #{change}" unless change.nil?
70
+ end
49
71
 
50
- def stack
51
- Stackup::Stack.new(stack_name, :logger => logger, :log_level => :debug)
52
- end
72
+ subcommand "status", "Print stack status." do
53
73
 
54
- def report_change
55
- change = yield
56
- puts "Stack #{change}" unless change.nil?
74
+ def execute
75
+ puts stack.status
57
76
  end
58
77
 
59
- subcommand "status", "Print stack status." do
78
+ end
60
79
 
61
- def execute
62
- puts stack.status
63
- end
80
+ subcommand "up", "Create/update the stack" do
64
81
 
65
- end
82
+ option "--disable-rollback", :flag, "disable stack rollback"
66
83
 
67
- subcommand "up", "Create/update the stack" do
84
+ parameter "TEMPLATE", "CloudFormation template file",
85
+ :attribute_name => :template_file
68
86
 
69
- parameter "TEMPLATE", "CloudFormation template (.json)", :attribute_name => :template_file
87
+ parameter "[PARAMETERS]", "CloudFormation parameters file",
88
+ :attribute_name => :parameters_file
70
89
 
71
- def execute
72
- template = File.read(template_file)
73
- report_change { stack.create_or_update(template) }
90
+ def execute
91
+ options = {}
92
+ options[:template_body] = load_file(template_file)
93
+ options[:parameters_file] = load_file(parameters_file) if parameters_file
94
+ options[:disable_rollback] = disable_rollback?
95
+ report_change do
96
+ stack.create_or_update(options)
74
97
  end
98
+ end
99
+
100
+ private
75
101
 
102
+ def load_file(file)
103
+ File.read(file)
104
+ rescue Errno::ENOENT
105
+ signal_error "no such file: #{file.inspect}"
76
106
  end
77
107
 
78
- subcommand ["down", "delete"], "Remove the stack." do
108
+ end
79
109
 
80
- def execute
81
- report_change { stack.delete }
82
- end
110
+ subcommand ["down", "delete"], "Remove the stack." do
83
111
 
112
+ def execute
113
+ report_change do
114
+ stack.delete
115
+ end
84
116
  end
85
117
 
86
- subcommand "outputs", "Stack outputs." do
118
+ end
119
+
120
+ subcommand "cancel-update", "Cancel the update in-progress" do
87
121
 
88
- def execute
89
- display_data(stack.outputs)
122
+ def execute
123
+ report_change do
124
+ stack.cancel_update
90
125
  end
126
+ end
127
+
128
+ end
129
+
130
+ subcommand "outputs", "Stack outputs." do
91
131
 
132
+ def execute
133
+ display_data(stack.outputs)
92
134
  end
93
135
 
94
136
  end
@@ -0,0 +1,378 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Class: Stackup::ErrorMappingProxy
8
+
9
+ &mdash; Documentation by YARD 0.8.7.6
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ hasFrames = window.top.frames.main ? true : false;
19
+ relpath = '../';
20
+ framesUrl = "../frames.html#!Stackup/ErrorMappingProxy.html";
21
+ </script>
22
+
23
+
24
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
25
+
26
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
27
+
28
+
29
+ </head>
30
+ <body>
31
+ <div id="header">
32
+ <div id="menu">
33
+
34
+ <a href="../_index.html">Index (E)</a> &raquo;
35
+ <span class='title'><span class='object_link'><a href="../Stackup.html" title="Stackup (module)">Stackup</a></span></span>
36
+ &raquo;
37
+ <span class="title">ErrorMappingProxy</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a class="full_list_link" id="class_list_link"
46
+ href="../class_list.html">
47
+ Class List
48
+ </a>
49
+
50
+ <a class="full_list_link" id="method_list_link"
51
+ href="../method_list.html">
52
+ Method List
53
+ </a>
54
+
55
+ <a class="full_list_link" id="file_list_link"
56
+ href="../file_list.html">
57
+ File List
58
+ </a>
59
+
60
+ </div>
61
+ <div class="clear"></div>
62
+ </div>
63
+
64
+ <iframe id="search_frame"></iframe>
65
+
66
+ <div id="content"><h1>Class: Stackup::ErrorMappingProxy
67
+
68
+
69
+
70
+ </h1>
71
+
72
+ <dl class="box">
73
+
74
+ <dt class="r1">Inherits:</dt>
75
+ <dd class="r1">
76
+ <span class="inheritName">Object</span>
77
+
78
+ <ul class="fullTree">
79
+ <li>Object</li>
80
+
81
+ <li class="next">Stackup::ErrorMappingProxy</li>
82
+
83
+ </ul>
84
+ <a href="#" class="inheritanceTree">show all</a>
85
+
86
+ </dd>
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+ <dt class="r2 last">Defined in:</dt>
97
+ <dd class="r2 last">lib/stackup/error_mapping_proxy.rb</dd>
98
+
99
+ </dl>
100
+ <div class="clear"></div>
101
+
102
+ <h2>Overview</h2><div class="docstring">
103
+ <div class="discussion">
104
+
105
+ <p>An error-mapping proxy for Aws::CloudFormation models.</p>
106
+
107
+ <p>It exists to convert certain types of `ValidationError`, where useful
108
+ information is hidden inside the “message”, to Stackup exceptions.</p>
109
+
110
+
111
+ </div>
112
+ </div>
113
+ <div class="tags">
114
+
115
+
116
+ </div>
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+ <h2>
125
+ Instance Method Summary
126
+ <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
127
+ </h2>
128
+
129
+ <ul class="summary">
130
+
131
+ <li class="public ">
132
+ <span class="summary_signature">
133
+
134
+ <a href="#initialize-instance_method" title="#initialize (instance method)">- (ErrorMappingProxy) <strong>initialize</strong>(delegate) </a>
135
+
136
+
137
+
138
+ </span>
139
+
140
+
141
+ <span class="note title constructor">constructor</span>
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+ <span class="summary_desc"><div class='inline'>
151
+ <p>A new instance of ErrorMappingProxy.</p>
152
+ </div></span>
153
+
154
+ </li>
155
+
156
+
157
+ <li class="public ">
158
+ <span class="summary_signature">
159
+
160
+ <a href="#method_missing-instance_method" title="#method_missing (instance method)">- (Object) <strong>method_missing</strong>(*args) </a>
161
+
162
+
163
+
164
+ </span>
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+ <span class="summary_desc"><div class='inline'></div></span>
175
+
176
+ </li>
177
+
178
+
179
+ <li class="public ">
180
+ <span class="summary_signature">
181
+
182
+ <a href="#respond_to%3F-instance_method" title="#respond_to? (instance method)">- (Boolean) <strong>respond_to?</strong>(method) </a>
183
+
184
+
185
+
186
+ </span>
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+ <span class="summary_desc"><div class='inline'></div></span>
197
+
198
+ </li>
199
+
200
+
201
+ </ul>
202
+
203
+
204
+ <div id="constructor_details" class="method_details_list">
205
+ <h2>Constructor Details</h2>
206
+
207
+ <div class="method_details first">
208
+ <h3 class="signature first" id="initialize-instance_method">
209
+
210
+ - (<tt><span class='object_link'><a href="" title="Stackup::ErrorMappingProxy (class)">ErrorMappingProxy</a></span></tt>) <strong>initialize</strong>(delegate)
211
+
212
+
213
+
214
+
215
+
216
+ </h3><div class="docstring">
217
+ <div class="discussion">
218
+
219
+ <p>Returns a new instance of ErrorMappingProxy</p>
220
+
221
+
222
+ </div>
223
+ </div>
224
+ <div class="tags">
225
+
226
+
227
+ </div><table class="source_code">
228
+ <tr>
229
+ <td>
230
+ <pre class="lines">
231
+
232
+
233
+ 12
234
+ 13
235
+ 14</pre>
236
+ </td>
237
+ <td>
238
+ <pre class="code"><span class="info file"># File 'lib/stackup/error_mapping_proxy.rb', line 12</span>
239
+
240
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_delegate'>delegate</span><span class='rparen'>)</span>
241
+ <span class='ivar'>@delegate</span> <span class='op'>=</span> <span class='id identifier rubyid_delegate'>delegate</span>
242
+ <span class='kw'>end</span></pre>
243
+ </td>
244
+ </tr>
245
+ </table>
246
+ </div>
247
+
248
+ </div>
249
+ <div id="method_missing_details" class="method_details_list">
250
+ <h2>Dynamic Method Handling</h2>
251
+ <p class="notice this">
252
+ This class handles dynamic methods through the <tt>method_missing</tt> method
253
+
254
+ </p>
255
+
256
+ <div class="method_details first">
257
+ <h3 class="signature first" id="method_missing-instance_method">
258
+
259
+ - (<tt>Object</tt>) <strong>method_missing</strong>(*args)
260
+
261
+
262
+
263
+
264
+
265
+ </h3><table class="source_code">
266
+ <tr>
267
+ <td>
268
+ <pre class="lines">
269
+
270
+
271
+ 16
272
+ 17
273
+ 18
274
+ 19
275
+ 20
276
+ 21
277
+ 22
278
+ 23
279
+ 24
280
+ 25
281
+ 26
282
+ 27
283
+ 28
284
+ 29</pre>
285
+ </td>
286
+ <td>
287
+ <pre class="code"><span class="info file"># File 'lib/stackup/error_mapping_proxy.rb', line 16</span>
288
+
289
+ <span class='kw'>def</span> <span class='id identifier rubyid_method_missing'>method_missing</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
290
+ <span class='ivar'>@delegate</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
291
+ <span class='kw'>rescue</span> <span class='const'>Aws</span><span class='op'>::</span><span class='const'>CloudFormation</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>ValidationError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
292
+ <span class='kw'>case</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span>
293
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No updates are to be performed.</span><span class='tstring_end'>&quot;</span></span>
294
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>NoUpdateRequired</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>no updates are required</span><span class='tstring_end'>&quot;</span></span>
295
+ <span class='kw'>when</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Stack .* does not exist$</span><span class='regexp_end'>/</span></span>
296
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>NoSuchStack</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>no such stack</span><span class='tstring_end'>&quot;</span></span>
297
+ <span class='kw'>when</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'> can ?not be </span><span class='regexp_end'>/</span></span>
298
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>InvalidStateError</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span>
299
+ <span class='kw'>else</span>
300
+ <span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_e'>e</span>
301
+ <span class='kw'>end</span>
302
+ <span class='kw'>end</span></pre>
303
+ </td>
304
+ </tr>
305
+ </table>
306
+ </div>
307
+
308
+ </div>
309
+
310
+
311
+ <div id="instance_method_details" class="method_details_list">
312
+ <h2>Instance Method Details</h2>
313
+
314
+
315
+ <div class="method_details first">
316
+ <h3 class="signature first" id="respond_to?-instance_method">
317
+
318
+ - (<tt>Boolean</tt>) <strong>respond_to?</strong>(method)
319
+
320
+
321
+
322
+
323
+
324
+ </h3><div class="docstring">
325
+ <div class="discussion">
326
+
327
+
328
+ </div>
329
+ </div>
330
+ <div class="tags">
331
+
332
+ <p class="tag_title">Returns:</p>
333
+ <ul class="return">
334
+
335
+ <li>
336
+
337
+
338
+ <span class='type'>(<tt>Boolean</tt>)</span>
339
+
340
+
341
+
342
+ </li>
343
+
344
+ </ul>
345
+
346
+ </div><table class="source_code">
347
+ <tr>
348
+ <td>
349
+ <pre class="lines">
350
+
351
+
352
+ 31
353
+ 32
354
+ 33</pre>
355
+ </td>
356
+ <td>
357
+ <pre class="code"><span class="info file"># File 'lib/stackup/error_mapping_proxy.rb', line 31</span>
358
+
359
+ <span class='kw'>def</span> <span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
360
+ <span class='ivar'>@delegate</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
361
+ <span class='kw'>end</span></pre>
362
+ </td>
363
+ </tr>
364
+ </table>
365
+ </div>
366
+
367
+ </div>
368
+
369
+ </div>
370
+
371
+ <div id="footer">
372
+ Generated on Fri Oct 9 11:23:11 2015 by
373
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
374
+ 0.8.7.6 (ruby-2.2.2).
375
+ </div>
376
+
377
+ </body>
378
+ </html>