chimps-cli 0.0.1
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.
- data/Gemfile +8 -0
- data/Gemfile.lock +32 -0
- data/LICENSE +20 -0
- data/README.rdoc +322 -0
- data/Rakefile +24 -0
- data/VERSION +1 -0
- data/bin/chimps +4 -0
- data/lib/chimps-cli.rb +46 -0
- data/lib/chimps-cli/commands.rb +179 -0
- data/lib/chimps-cli/commands/base.rb +65 -0
- data/lib/chimps-cli/commands/create.rb +38 -0
- data/lib/chimps-cli/commands/delete.rb +29 -0
- data/lib/chimps-cli/commands/destroy.rb +36 -0
- data/lib/chimps-cli/commands/download.rb +40 -0
- data/lib/chimps-cli/commands/get.rb +30 -0
- data/lib/chimps-cli/commands/help.rb +100 -0
- data/lib/chimps-cli/commands/list.rb +48 -0
- data/lib/chimps-cli/commands/me.rb +30 -0
- data/lib/chimps-cli/commands/post.rb +33 -0
- data/lib/chimps-cli/commands/put.rb +33 -0
- data/lib/chimps-cli/commands/query.rb +58 -0
- data/lib/chimps-cli/commands/search.rb +54 -0
- data/lib/chimps-cli/commands/show.rb +40 -0
- data/lib/chimps-cli/commands/test.rb +37 -0
- data/lib/chimps-cli/commands/update.rb +38 -0
- data/lib/chimps-cli/commands/upload.rb +86 -0
- data/lib/chimps-cli/utils.rb +13 -0
- data/lib/chimps-cli/utils/acts_on_resource.rb +93 -0
- data/lib/chimps-cli/utils/explicit_path.rb +30 -0
- data/lib/chimps-cli/utils/http_format.rb +51 -0
- data/lib/chimps-cli/utils/uses_param_value_data.rb +90 -0
- data/spec/chimps-cli/commands/delete_spec.rb +9 -0
- data/spec/chimps-cli/commands/get_spec.rb +8 -0
- data/spec/chimps-cli/commands/help_spec.rb +18 -0
- data/spec/chimps-cli/commands/list_spec.rb +7 -0
- data/spec/chimps-cli/commands/post_spec.rb +10 -0
- data/spec/chimps-cli/commands/put_spec.rb +10 -0
- data/spec/chimps-cli/commands/show_spec.rb +7 -0
- data/spec/spec_helper.rb +52 -0
- data/spec/support/acts_on_resource.rb +22 -0
- data/spec/support/explicit_path.rb +42 -0
- data/spec/support/http_format.rb +23 -0
- data/spec/support/uses_param_value_data.rb +88 -0
- metadata +166 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
addressable (2.2.4)
|
5
|
+
chimps (0.3.1)
|
6
|
+
addressable
|
7
|
+
configliere (>= 0.3.2)
|
8
|
+
json
|
9
|
+
rest-client (>= 1.6.1)
|
10
|
+
configliere (0.3.2)
|
11
|
+
diff-lcs (1.1.2)
|
12
|
+
json (1.5.1)
|
13
|
+
mime-types (1.16)
|
14
|
+
rest-client (1.6.1)
|
15
|
+
mime-types (>= 1.16)
|
16
|
+
rspec (2.5.0)
|
17
|
+
rspec-core (~> 2.5.0)
|
18
|
+
rspec-expectations (~> 2.5.0)
|
19
|
+
rspec-mocks (~> 2.5.0)
|
20
|
+
rspec-core (2.5.1)
|
21
|
+
rspec-expectations (2.5.0)
|
22
|
+
diff-lcs (~> 1.1.2)
|
23
|
+
rspec-mocks (2.5.0)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
chimps (>= 0.3.1)
|
30
|
+
configliere (>= 0.3.2)
|
31
|
+
json
|
32
|
+
rspec
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Dhruv Bansal
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,322 @@
|
|
1
|
+
= Chimps on the Command Line
|
2
|
+
|
3
|
+
Infochimps[http://www.infochimps.com] is an online data marketplace
|
4
|
+
and repository where anyone can find, share, and sell data.
|
5
|
+
|
6
|
+
Infochimps offers two APIs for users to access and modify data
|
7
|
+
|
8
|
+
- a {Dataset API}[http://www.infochimps.com/apis] to list, show, create, update, and destroy datasets and associated resources on Infochimps[http://www.infochimps.com]
|
9
|
+
- a {Query API}[http://www.infochimps.com/apis] to query data from particular rows of these datasets
|
10
|
+
|
11
|
+
Chimps[http://github.com/infochimps/chimps-cli] is a Ruby wrapper for
|
12
|
+
these APIs that makes interacting with them simple. You can embed
|
13
|
+
Chimps inside your web application or any other software you write.
|
14
|
+
|
15
|
+
But if you finding yourself wishing that you could make queries,
|
16
|
+
create datasets, &c. from your command line, where you already live,
|
17
|
+
where you already keep your data...then Chimps CLI is for you:
|
18
|
+
|
19
|
+
# See your datasets
|
20
|
+
$ chimps list --my
|
21
|
+
...
|
22
|
+
|
23
|
+
# Create a new dataset
|
24
|
+
$ chimps create title="A Brand New Dataset" description="That I created in 2 minutes. But that doesn't mean it's not awesome."
|
25
|
+
...
|
26
|
+
|
27
|
+
# Take a look
|
28
|
+
$ chimps show a-brand-new-dataset
|
29
|
+
|
30
|
+
# Check out your competition
|
31
|
+
$ chimps search awesome data
|
32
|
+
...
|
33
|
+
|
34
|
+
# Hmmm. Better do some more work.
|
35
|
+
$ chimps update a-brand-new-dataset tag_list="awesome,new,data"
|
36
|
+
|
37
|
+
= First Steps
|
38
|
+
|
39
|
+
== Installing Chimps CLI
|
40
|
+
|
41
|
+
Assuming you've already set up your Gem sources, just run
|
42
|
+
|
43
|
+
gem install chimps-cli
|
44
|
+
|
45
|
+
This will also install Chimps[http://github.com/infochimps/chimps] if
|
46
|
+
it's not already present on your system.
|
47
|
+
|
48
|
+
== Configuring Chimps
|
49
|
+
|
50
|
+
Chimps CLI is just a command-line wrapper for the Chimps library. If
|
51
|
+
Chimps is already properly configured with your API credentials then
|
52
|
+
Chimps CLI will read them just fine without you having to do anything.
|
53
|
+
|
54
|
+
If you need to obtain API keys for either the Dataset API or the Query
|
55
|
+
API then {sign up at Infochimps}[http://www.infochimps.com/signup].
|
56
|
+
|
57
|
+
You'll need to put your API keys into one of two files, either
|
58
|
+
<tt>/etc/chimps/chimps.yaml</tt> or <tt>~/.chimps</tt>. See the
|
59
|
+
README for Chimps[http://github.com/infochimps/chimps] for more
|
60
|
+
details on how to set up these configuration files.
|
61
|
+
|
62
|
+
= Usage
|
63
|
+
|
64
|
+
Try running
|
65
|
+
|
66
|
+
$ chimps help
|
67
|
+
|
68
|
+
to make sure you can run the +chimps+ command and to see an overview
|
69
|
+
of what subcommands are available. You can get more detailed help as
|
70
|
+
well as example usage on COMMAND by running
|
71
|
+
|
72
|
+
$ chimps help COMMAND
|
73
|
+
|
74
|
+
You can test and see whether your credentials are valid using the
|
75
|
+
+test+ command:
|
76
|
+
|
77
|
+
$ chimps test
|
78
|
+
Authenticated as user 'Infochimps' for Infochimps Dataset API at http://www.infochimps.com
|
79
|
+
Authenticated for Infochimps Query API at http://api.infochimps.com
|
80
|
+
|
81
|
+
If you get messages about missing keys and so on go back and read the
|
82
|
+
{Chimps installation
|
83
|
+
instructions}[http://github.com/infochimps/chimps].
|
84
|
+
|
85
|
+
If you get messages about not being able to authenticate, double-check
|
86
|
+
that the API keys in your configuration file (either
|
87
|
+
<tt>~/.chimps</tt> or <tt>/etc/chimps/chimps.yaml</tt>) match the
|
88
|
+
credentials listed in your profile[http://www.infochimps.com/me].
|
89
|
+
|
90
|
+
== Options
|
91
|
+
|
92
|
+
Commands to +chimps+ accept arguments as well as options. Options
|
93
|
+
always begin with two dashes and some options have single-letter flags
|
94
|
+
as well.
|
95
|
+
|
96
|
+
Some options work for every +chimps+ command. <tt>--verbose</tt>
|
97
|
+
(<tt>-v</tt>), for example, is a great way to see what underlying HTTP
|
98
|
+
request(s) a given command is making.
|
99
|
+
|
100
|
+
== Operating on a Dataset, Source, License, &c.
|
101
|
+
|
102
|
+
Many requests can operate on a particular resource. The +show+
|
103
|
+
command, for example, can be used to show a dataset (the default
|
104
|
+
choice), a license, a source, or a user.
|
105
|
+
|
106
|
+
You can see what resources +COMMAND+ can operate on with <tt>chimps
|
107
|
+
help COMMAND</tt>. Two examples
|
108
|
+
|
109
|
+
# Will attempt to show the Dataset 'an-example'
|
110
|
+
$ chimps show an-example
|
111
|
+
|
112
|
+
# Will attempt to show the Source 'an-example'
|
113
|
+
$ chimps show source an-example
|
114
|
+
|
115
|
+
# Will search datasets for 'stocks'
|
116
|
+
$ chimps search stocks
|
117
|
+
|
118
|
+
# Will list all licenses
|
119
|
+
$ chimps list licenses
|
120
|
+
|
121
|
+
== Providing Data to a Command
|
122
|
+
|
123
|
+
Some commands (typically those that result in HTTP +GET+ and +DELETE+
|
124
|
+
requests) don't require you to pass any data to Infochimps.
|
125
|
+
|
126
|
+
Other commands (typically those that result in HTTP +POST+ and +PUT+
|
127
|
+
requests) do. These commands usually create or modify a dataset or
|
128
|
+
other resource at Infochimps.
|
129
|
+
|
130
|
+
Say you wanted to create a new dataset on Infochimps with the title
|
131
|
+
"List of hottest Salsas" and with description "All salsas were tried
|
132
|
+
personally by me."
|
133
|
+
|
134
|
+
There are two methods you can use to pass this data to a Chimps CLI
|
135
|
+
command:
|
136
|
+
|
137
|
+
1) You can put the data you need to pass into a file on disk. Chimps
|
138
|
+
understands YAML and JSON files formats and will automatically parse
|
139
|
+
and serialize them properly when making a request. You could create
|
140
|
+
the following file
|
141
|
+
|
142
|
+
# in salsa_dataset.yml
|
143
|
+
---
|
144
|
+
title: "List of hottest Salsas"
|
145
|
+
description: |-
|
146
|
+
|
147
|
+
All salsas were tried personally by me.
|
148
|
+
|
149
|
+
and you can create the dataset with
|
150
|
+
|
151
|
+
$ chimps create --data=salsa_dataset.yml
|
152
|
+
|
153
|
+
2) You can pass parameters and values directly on the command line.
|
154
|
+
You could create the same dataset as above with
|
155
|
+
|
156
|
+
$ chimps create title="List of hottest Salsas" description="All salsas were tried personally by me."
|
157
|
+
|
158
|
+
This will only work for a flat collection of parameters and values, as
|
159
|
+
in this example. If you need to pass a nested data structure you
|
160
|
+
should use a file and the <tt>--data</tt> option above.
|
161
|
+
|
162
|
+
Another example, which makes a query to the Query API and returns
|
163
|
+
demographics on an IP address
|
164
|
+
|
165
|
+
$ chimps query web/an/ip_census ip=67.78.118.7
|
166
|
+
|
167
|
+
= Basic HTTP Verbs
|
168
|
+
|
169
|
+
Infochimps' Dataset API is RESTful so it respects the semantics of
|
170
|
+
{HTTP
|
171
|
+
verbs}[http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods].
|
172
|
+
You can use this "lower-level" interface to make simple +GET+, +POST+,
|
173
|
+
+PUT+, and +DELETE+ requests.
|
174
|
+
|
175
|
+
Here's how to return information on a Yahoo! Stocks dataset
|
176
|
+
|
177
|
+
$ chimps get /datasets/yahoo-stock-search
|
178
|
+
|
179
|
+
The default response will be in JSON but you can change the response
|
180
|
+
format by explicitly passing a different one of +xml+, +json+, or
|
181
|
+
+yaml+. This works for (almost) all Dataset API requests.
|
182
|
+
|
183
|
+
$ chimps get /datasets/yahoo-stock-search --response_format=yaml
|
184
|
+
|
185
|
+
Try running <tt>chimps help</tt> for the +get+ command (<tt>chimps
|
186
|
+
help get</tt>) as well as for the +post+, +put+, and +delete+
|
187
|
+
commands.
|
188
|
+
|
189
|
+
== Signed vs. Unsigned Requests
|
190
|
+
|
191
|
+
Some requests, like the +GET+ request above, don't need to be signed
|
192
|
+
in any way: using +chimps+ to make a simple unsigned +GET+ request
|
193
|
+
isn't anything different than just doing it with +curl+.
|
194
|
+
|
195
|
+
All +POST+, +PUT+, and +DELETE+ requests, however, need to be signed
|
196
|
+
and using Chimps to do it makes it easy. Here's how you might create
|
197
|
+
a dataset
|
198
|
+
|
199
|
+
$ chimps post --sign /datasets title="My dataset" description="Some text..."
|
200
|
+
|
201
|
+
If you leave out the <tt>--sign</tt> option then the request will fail
|
202
|
+
with a 401 Authentication error.
|
203
|
+
|
204
|
+
The above request is really just the same as
|
205
|
+
|
206
|
+
$ chimps create title="My dataset" description="Some text..."
|
207
|
+
|
208
|
+
which is a little simple because +create+ understands what you're
|
209
|
+
trying to do and internally constructs the appropriate +POST+ request.
|
210
|
+
|
211
|
+
You can find a list of all available requests, the correct HTTP verb
|
212
|
+
to use, whether the request needs to be signed, and what parameters it
|
213
|
+
accepts at http://www.infochimps.com/apis.
|
214
|
+
|
215
|
+
To round out this section, here's an example of a +PUT+ request and a
|
216
|
+
+DELETE+ request (both of which must be signed):
|
217
|
+
|
218
|
+
# Update your existing dataset
|
219
|
+
$ chimps put --sign /datasets/my-dataset title="A New Title"
|
220
|
+
|
221
|
+
# Let's delete this dataset now because we're fickle little monkeys...
|
222
|
+
$ chimps delete --sign /datasets/my-dataset
|
223
|
+
|
224
|
+
Most things you might want to do with this "low-level" HTTP verb
|
225
|
+
interface can be done with specialized +chimps+ commands. Read on.
|
226
|
+
|
227
|
+
= Core REST Actions
|
228
|
+
|
229
|
+
Since the Infochimps Dataset API is
|
230
|
+
RESTful[http://en.wikipedia.org/wiki/Representational_State_Transfer],
|
231
|
+
it implements list, show, create, update, and destroy actions for all
|
232
|
+
resources. Each of these actions has a corresponding Chimps command.
|
233
|
+
|
234
|
+
Here's how to +list+ datasets:
|
235
|
+
|
236
|
+
$ chimps list
|
237
|
+
|
238
|
+
The +list+ command is one of a few (+search+ being another) that
|
239
|
+
accepts the <tt>--my</tt> (<tt>-m</tt>) option. This will restrict
|
240
|
+
the output to only datasets (or whatever resource you're listing) that
|
241
|
+
are owned by you.
|
242
|
+
|
243
|
+
$ chimps list --my
|
244
|
+
$ chimps list --my licenses
|
245
|
+
|
246
|
+
Here's how to +show+ a dataset:
|
247
|
+
|
248
|
+
$ chimps show my-dataset
|
249
|
+
|
250
|
+
this returns YAML by default but you can specify a different response
|
251
|
+
format by passing the <tt>--response_format</tt> option
|
252
|
+
|
253
|
+
$ chimps show my-dataset --response_format=json
|
254
|
+
|
255
|
+
You've already seen +create+ in action a few times so here's +update+
|
256
|
+
instead
|
257
|
+
|
258
|
+
$ chimps update my-dataset title="A new title"
|
259
|
+
|
260
|
+
And of course +destroy+
|
261
|
+
|
262
|
+
$ chimps destroy my-dataset
|
263
|
+
|
264
|
+
If you're curious about the underlying HTTP requests being sent, try
|
265
|
+
running these commands with the <tt>--verbose</tt> (<tt>-v</tt>) flag.
|
266
|
+
|
267
|
+
= Special Requests
|
268
|
+
|
269
|
+
Chimps CLI has a few special commands which aren't HTTP verbs or core
|
270
|
+
REST actions.
|
271
|
+
|
272
|
+
== Search
|
273
|
+
|
274
|
+
Here's how to search Infochimps for datasets about music:
|
275
|
+
|
276
|
+
$ chimps search music
|
277
|
+
|
278
|
+
Here's the same search restricted to only datasets you own and
|
279
|
+
pretty-printed:
|
280
|
+
|
281
|
+
$ chimps search --my music --pretty
|
282
|
+
|
283
|
+
== Download
|
284
|
+
|
285
|
+
If a dataset on Infochimps has a downloadable package then the
|
286
|
+
+download+ command can be used to download the data:
|
287
|
+
|
288
|
+
$ chimps download daily-1970-2010-open-close-hi-low-and-volume-nyse-exchange
|
289
|
+
|
290
|
+
The dataset must be free, you must own it, or you must have purchased
|
291
|
+
it (through the website) before you can +download+ it with Chimps.
|
292
|
+
|
293
|
+
You may want to include the <tt>--verbose</tt> (<tt>-v</tt>) flag so
|
294
|
+
that you can see the progress of the download, especially if it is a
|
295
|
+
large file.
|
296
|
+
|
297
|
+
== Upload
|
298
|
+
|
299
|
+
Infochimps does not presently allow you to upload data by using an
|
300
|
+
API. Please create a dataset first (you can do this with Chimps) and
|
301
|
+
then go to that dataset's page in a browser and upload any data you
|
302
|
+
wish.
|
303
|
+
|
304
|
+
This feature will be coming very, very soon!
|
305
|
+
|
306
|
+
== Help/Test
|
307
|
+
|
308
|
+
<tt>chimps help</tt> and <tt>chimps help COMMAND</tt> should carry you
|
309
|
+
a good ways with the examples and usage they output.
|
310
|
+
|
311
|
+
<tt>chimps test</tt> should confirm that your API keys are properly
|
312
|
+
configured.
|
313
|
+
|
314
|
+
= Contributing
|
315
|
+
|
316
|
+
Chimps CLI is an open source project created by the Infochimps team to
|
317
|
+
encourage adoption of the Infochimps APIs. The official repository is
|
318
|
+
hosted on GitHub
|
319
|
+
|
320
|
+
http://github.com/infochimps/chimps-cli
|
321
|
+
|
322
|
+
Feel free to clone it and send pull requests.
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
# http://github.com/technicalpickles/jeweler
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |gem|
|
8
|
+
gem.name = "chimps-cli"
|
9
|
+
gem.summary = "Chimps CLI is command-line interface for the Chimps gem (http://www.infochimps.com/labs)"
|
10
|
+
gem.description = "Chimps CLI provides the command line program 'chimps' which allows you to easily make API calls against Infochimps web services."
|
11
|
+
gem.email = "coders@infochimps.com"
|
12
|
+
gem.homepage = "http://github.com/infochimps/chimps-cli"
|
13
|
+
gem.authors = ["Dhruv Bansal"]
|
14
|
+
end
|
15
|
+
Jeweler::GemcutterTasks.new
|
16
|
+
rescue LoadError
|
17
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Build tags"
|
21
|
+
task :tags do
|
22
|
+
system "etags -R README.rdoc bin lib spec"
|
23
|
+
end
|
24
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/bin/chimps
ADDED
data/lib/chimps-cli.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path('../Gemfile', File.dirname(__FILE__))
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'chimps'
|
5
|
+
require 'chimps-cli/utils'
|
6
|
+
require 'chimps-cli/commands'
|
7
|
+
|
8
|
+
# FIXME add bundler once new chimps is published
|
9
|
+
|
10
|
+
module Chimps
|
11
|
+
|
12
|
+
autoload :Command, 'chimps-cli/commands/base'
|
13
|
+
|
14
|
+
# Defines methods for choosing which Chimps::Command class should be
|
15
|
+
# instantiated from the ARGV passed in on the command line.
|
16
|
+
module CLI
|
17
|
+
|
18
|
+
include Chimps::Commands
|
19
|
+
|
20
|
+
# Execute the Chimps command specified on the command line.
|
21
|
+
#
|
22
|
+
# Will exit the Ruby process with 0 on success or 1 on an error.
|
23
|
+
def self.execute!
|
24
|
+
begin
|
25
|
+
Chimps.boot!
|
26
|
+
if command
|
27
|
+
Chimps.config.command_settings.resolve!
|
28
|
+
command.execute!
|
29
|
+
return 0
|
30
|
+
else
|
31
|
+
$stderr.puts Chimps.config.usage
|
32
|
+
Chimps.config.dump_help
|
33
|
+
return 1
|
34
|
+
end
|
35
|
+
rescue Chimps::Error, Configliere::Error => e
|
36
|
+
$stderr.puts e.message
|
37
|
+
return 1
|
38
|
+
rescue => e
|
39
|
+
$stderr.puts("#{e.message} (#{e.class})")
|
40
|
+
$stderr.puts(e.backtrace.join("\n"))
|
41
|
+
return 2
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|