alexvollmer-httparty 0.1.5 → 0.2.6
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/History +74 -0
- data/{License.txt → MIT-LICENSE} +0 -0
- data/{Manifest.txt → Manifest} +17 -16
- data/README +36 -0
- data/Rakefile +37 -5
- data/bin/httparty +103 -0
- data/examples/aaws.rb +3 -0
- data/examples/basic.rb +6 -0
- data/examples/delicious.rb +0 -1
- data/examples/rubyurl.rb +14 -0
- data/examples/twitter.rb +1 -1
- data/examples/whoismyrep.rb +2 -1
- data/httparty.gemspec +16 -14
- data/lib/core_extensions.rb +349 -0
- data/lib/httparty/exceptions.rb +4 -0
- data/lib/httparty/request.rb +76 -26
- data/lib/httparty/version.rb +1 -7
- data/lib/httparty.rb +49 -44
- data/lib/module_level_inheritable_attributes.rb +25 -0
- data/spec/as_buggery_spec.rb +16 -0
- data/spec/fixtures/delicious.xml +23 -0
- data/spec/fixtures/google.html +3 -0
- data/spec/fixtures/twitter.json +1 -0
- data/spec/fixtures/twitter.xml +403 -0
- data/spec/httparty/request_spec.rb +45 -35
- data/spec/httparty_spec.rb +77 -49
- data/spec/spec_helper.rb +22 -7
- data/website/index.html +2 -11
- metadata +42 -35
- data/History.txt +0 -32
- data/PostInstall.txt +0 -1
- data/README.txt +0 -66
- data/config/hoe.rb +0 -73
- data/config/requirements.rb +0 -15
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/script/txt2html +0 -82
- data/tasks/deployment.rake +0 -43
- data/tasks/environment.rake +0 -7
- data/tasks/website.rake +0 -17
data/History
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
== 0.2.6 2009-01-05
|
|
2
|
+
* 1 minor bug fix
|
|
3
|
+
* added explicit require of time as Time#parse failed outside of rails (willcodeforfoo)
|
|
4
|
+
|
|
5
|
+
== 0.2.5 2009-01-05
|
|
6
|
+
* 1 major enhancement
|
|
7
|
+
* Add command line interface to HTTParty (Alex Vollmer)
|
|
8
|
+
|
|
9
|
+
== 0.2.4 2008-12-23
|
|
10
|
+
* 1 bug fix
|
|
11
|
+
* Fixed that mimetype detection was failing if no mimetype was returned from service (skippy)
|
|
12
|
+
== 0.2.3 2008-12-23
|
|
13
|
+
* 1 bug fix
|
|
14
|
+
* Fixed typecasting class variable naming issue
|
|
15
|
+
|
|
16
|
+
== 0.2.2 2008-12-08
|
|
17
|
+
* 1 bug fix
|
|
18
|
+
* Added the missing core extension hash method to_xml_attributes
|
|
19
|
+
|
|
20
|
+
== 0.2.1 2008-12-08
|
|
21
|
+
* 1 bug fix
|
|
22
|
+
* Fixed that HTTParty was borking ActiveSupport and as such Rails (thanks to Rob Sanheim)
|
|
23
|
+
|
|
24
|
+
== 0.2.0 2008-12-07
|
|
25
|
+
* 1 major enhancement
|
|
26
|
+
* Removed ActiveSupport as a dependency. Now requires json gem for json deserialization and uses an included class to do the xml parsing.
|
|
27
|
+
|
|
28
|
+
== 0.1.8 2008-11-30
|
|
29
|
+
* 3 major enhancements
|
|
30
|
+
* Moved base_uri normalization into request class and out of httparty module, fixing
|
|
31
|
+
the problem where base_uri was not always being normalized.
|
|
32
|
+
* Stupid simple support for HTTParty.get/post/put/delete. (jqr)
|
|
33
|
+
* Switched gem management to Echoe from newgem.
|
|
34
|
+
|
|
35
|
+
== 0.1.7 2008-11-30
|
|
36
|
+
* 1 major enhancement
|
|
37
|
+
* fixed multiple class definitions overriding each others options
|
|
38
|
+
|
|
39
|
+
== 0.1.6 2008-11-26
|
|
40
|
+
* 1 major enhancement
|
|
41
|
+
* now passing :query to set_form_data if post request to avoid content length errors
|
|
42
|
+
|
|
43
|
+
== 0.1.5 2008-11-14
|
|
44
|
+
* 2 major enhancements
|
|
45
|
+
* Refactored send request method out into its own object.
|
|
46
|
+
* Added :html format if you just want to do that.
|
|
47
|
+
|
|
48
|
+
== 0.1.4 2008-11-08
|
|
49
|
+
* 3 major enhancements:
|
|
50
|
+
* Removed some cruft
|
|
51
|
+
* Added ability to follow redirects automatically and turn that off (Alex Vollmer)
|
|
52
|
+
|
|
53
|
+
== 0.1.3 2008-08-22
|
|
54
|
+
|
|
55
|
+
* 3 major enhancements:
|
|
56
|
+
* Added http_proxy key for setting proxy server and port (francxk@gmail.com)
|
|
57
|
+
* Now raises exception when http error occurs (francxk@gmail.com)
|
|
58
|
+
* Changed auto format detection from file extension to response content type (Jay Pignata)
|
|
59
|
+
|
|
60
|
+
== 0.1.2 2008-08-09
|
|
61
|
+
|
|
62
|
+
* 1 major enhancement:
|
|
63
|
+
* default_params were not being appended to query string if option[:query] was blank
|
|
64
|
+
|
|
65
|
+
== 0.1.1 2008-07-30
|
|
66
|
+
|
|
67
|
+
* 2 major enhancement:
|
|
68
|
+
* Added :basic_auth key for options when making a request
|
|
69
|
+
* :query and :body both now work with query string or hash
|
|
70
|
+
|
|
71
|
+
== 0.1.0 2008-07-27
|
|
72
|
+
|
|
73
|
+
* 1 major enhancement:
|
|
74
|
+
* Initial release
|
data/{License.txt → MIT-LICENSE}
RENAMED
|
File without changes
|
data/{Manifest.txt → Manifest}
RENAMED
|
@@ -1,31 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
License.txt
|
|
3
|
-
Manifest.txt
|
|
4
|
-
PostInstall.txt
|
|
5
|
-
README.txt
|
|
6
|
-
Rakefile
|
|
7
|
-
config/hoe.rb
|
|
8
|
-
config/requirements.rb
|
|
1
|
+
bin/httparty
|
|
9
2
|
examples/aaws.rb
|
|
3
|
+
examples/basic.rb
|
|
10
4
|
examples/delicious.rb
|
|
11
5
|
examples/google.rb
|
|
6
|
+
examples/rubyurl.rb
|
|
12
7
|
examples/twitter.rb
|
|
13
8
|
examples/whoismyrep.rb
|
|
9
|
+
History
|
|
14
10
|
httparty.gemspec
|
|
15
|
-
lib/
|
|
11
|
+
lib/core_extensions.rb
|
|
12
|
+
lib/httparty/exceptions.rb
|
|
16
13
|
lib/httparty/request.rb
|
|
17
14
|
lib/httparty/version.rb
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
lib/httparty.rb
|
|
16
|
+
lib/module_level_inheritable_attributes.rb
|
|
17
|
+
Manifest
|
|
18
|
+
MIT-LICENSE
|
|
19
|
+
Rakefile
|
|
20
|
+
README
|
|
22
21
|
setup.rb
|
|
22
|
+
spec/as_buggery_spec.rb
|
|
23
|
+
spec/fixtures/delicious.xml
|
|
24
|
+
spec/fixtures/google.html
|
|
25
|
+
spec/fixtures/twitter.json
|
|
26
|
+
spec/fixtures/twitter.xml
|
|
23
27
|
spec/httparty/request_spec.rb
|
|
24
28
|
spec/httparty_spec.rb
|
|
25
29
|
spec/spec.opts
|
|
26
30
|
spec/spec_helper.rb
|
|
27
|
-
tasks/deployment.rake
|
|
28
|
-
tasks/environment.rake
|
|
29
|
-
tasks/website.rake
|
|
30
31
|
website/css/common.css
|
|
31
32
|
website/index.html
|
data/README
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
= httparty
|
|
2
|
+
|
|
3
|
+
== DESCRIPTION:
|
|
4
|
+
|
|
5
|
+
Makes http fun again!
|
|
6
|
+
|
|
7
|
+
== FEATURES:
|
|
8
|
+
|
|
9
|
+
* Easy get, post requests
|
|
10
|
+
* Basic http authentication
|
|
11
|
+
* Default request query string parameters (ie: for api keys that are needed on each request)
|
|
12
|
+
* Automatic parsing of JSON and XML into ruby hashes based on response content-type
|
|
13
|
+
|
|
14
|
+
== EXAMPLES:
|
|
15
|
+
|
|
16
|
+
See http://github.com/jnunemaker/httparty/tree/master/examples
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
== COMMAND LINE INTERFACE
|
|
20
|
+
|
|
21
|
+
httparty also includes the executable <tt>httparty</tt> which can be
|
|
22
|
+
used to query web services and examine the resulting output. By default
|
|
23
|
+
it will output the response as a pretty-printed Ruby object (useful for
|
|
24
|
+
grokking the structure of output). This can also be overridden to output
|
|
25
|
+
formatted XML or JSON. Execute <tt>httparty --help</tt> for all the
|
|
26
|
+
options. Below is an example of how easy it is.
|
|
27
|
+
|
|
28
|
+
httparty "http://twitter.com/statuses/public_timeline.json" -f json
|
|
29
|
+
|
|
30
|
+
== REQUIREMENTS:
|
|
31
|
+
|
|
32
|
+
* JSON ~> 1.1
|
|
33
|
+
|
|
34
|
+
== INSTALL:
|
|
35
|
+
|
|
36
|
+
* sudo gem install httparty
|
data/Rakefile
CHANGED
|
@@ -1,11 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require "spec/rake/spectask"
|
|
1
|
+
ProjectName = 'httparty'
|
|
2
|
+
WebsitePath = "jnunemaker@rubyforge.org:/var/www/gforge-projects/#{ProjectName}"
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require 'rake'
|
|
6
|
+
require 'echoe'
|
|
7
|
+
require 'spec/rake/spectask'
|
|
8
|
+
require "lib/#{ProjectName}/version"
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
Echoe.new(ProjectName, HTTParty::Version) do |p|
|
|
11
|
+
p.description = "Makes http fun! Also, makes consuming restful web services dead easy."
|
|
12
|
+
p.install_message = "When you HTTParty, you must party hard!"
|
|
13
|
+
p.url = "http://#{ProjectName}.rubyforge.org"
|
|
14
|
+
p.author = "John Nunemaker"
|
|
15
|
+
p.email = "nunemaker@gmail.com"
|
|
16
|
+
p.extra_deps = [['json', '~> 1.1']]
|
|
17
|
+
p.need_tar_gz = false
|
|
18
|
+
p.docs_host = WebsitePath
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc 'Upload website files to rubyforge'
|
|
22
|
+
task :website do
|
|
23
|
+
sh %{rsync -av website/ #{WebsitePath}}
|
|
24
|
+
Rake::Task['website_docs'].invoke
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
task :website_docs do
|
|
28
|
+
Rake::Task['redocs'].invoke
|
|
29
|
+
sh %{rsync -av doc/ #{WebsitePath}/docs}
|
|
30
|
+
end
|
|
8
31
|
|
|
32
|
+
desc 'Preps the gem for a new release'
|
|
33
|
+
task :prepare do
|
|
34
|
+
%w[manifest build_gemspec].each do |task|
|
|
35
|
+
Rake::Task[task].invoke
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Rake::Task[:default].prerequisites.clear
|
|
40
|
+
task :default => :spec
|
|
9
41
|
Spec::Rake::SpecTask.new do |t|
|
|
10
42
|
t.spec_files = FileList["spec/**/*_spec.rb"]
|
|
11
43
|
end
|
data/bin/httparty
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "optparse"
|
|
4
|
+
require "pp"
|
|
5
|
+
require "rexml/document"
|
|
6
|
+
|
|
7
|
+
$:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
|
|
8
|
+
require "httparty"
|
|
9
|
+
|
|
10
|
+
opts = {
|
|
11
|
+
:action => :get,
|
|
12
|
+
:headers => {},
|
|
13
|
+
:keep_body => true,
|
|
14
|
+
:verbose => false,
|
|
15
|
+
:pretty_print => false
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
OptionParser.new do |o|
|
|
19
|
+
o.banner = "USAGE: #{$0} [options] [url]"
|
|
20
|
+
o.on("-f",
|
|
21
|
+
"--format [FORMAT]",
|
|
22
|
+
"Body format: plain, json or xml") do |f|
|
|
23
|
+
opts[:format] = f.downcase.to_sym
|
|
24
|
+
end
|
|
25
|
+
o.on("-r", "--ruby", "Dump output in Ruby pretty-print format") do |r|
|
|
26
|
+
opts[:pretty_print] = true
|
|
27
|
+
end
|
|
28
|
+
o.on("-a",
|
|
29
|
+
"--action [ACTION]",
|
|
30
|
+
"HTTP action: get (default), post, put or delete") do |a|
|
|
31
|
+
opts[:action] = a.downcase.to_sym
|
|
32
|
+
end
|
|
33
|
+
o.on("-d",
|
|
34
|
+
"--data [BODY]",
|
|
35
|
+
"Data to put in request body (prefix with '@' for file)") do |d|
|
|
36
|
+
if d =~ /^@/
|
|
37
|
+
opts[:data] = open(d).read
|
|
38
|
+
else
|
|
39
|
+
opts[:data] = d
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
o.on("-H", "--header [NAME=VALUE]", "Additional HTTP headers in NAME=VALUE form") do |h|
|
|
43
|
+
name, value = h.split('=')
|
|
44
|
+
opts[:headers][name] = value
|
|
45
|
+
end
|
|
46
|
+
o.on("-v", "--verbose", "If set, print verbose output") do |v|
|
|
47
|
+
opts[:verbose] = true
|
|
48
|
+
end
|
|
49
|
+
o.on("-h", "--help", "Show help documentation") do |h|
|
|
50
|
+
puts o
|
|
51
|
+
exit
|
|
52
|
+
end
|
|
53
|
+
end.parse!
|
|
54
|
+
|
|
55
|
+
puts "Querying #{ARGV.first} with options: #{opts.inspect}" if opts[:verbose]
|
|
56
|
+
|
|
57
|
+
if ARGV.empty?
|
|
58
|
+
STDERR.puts "You need to provide a URL"
|
|
59
|
+
STDERR.puts "USAGE: #{$0} [options] [url]"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# 1.8.6 has mistyping of transitive in if statement
|
|
63
|
+
module REXML
|
|
64
|
+
class Document < Element
|
|
65
|
+
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
|
66
|
+
if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output)
|
|
67
|
+
output = Output.new( output, xml_decl.encoding )
|
|
68
|
+
end
|
|
69
|
+
formatter = if indent > -1
|
|
70
|
+
if transitive
|
|
71
|
+
REXML::Formatters::Transitive.new( indent, ie_hack )
|
|
72
|
+
else
|
|
73
|
+
REXML::Formatters::Pretty.new( indent, ie_hack )
|
|
74
|
+
end
|
|
75
|
+
else
|
|
76
|
+
REXML::Formatters::Default.new( ie_hack )
|
|
77
|
+
end
|
|
78
|
+
formatter.write( self, output )
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if opts[:pretty_print] || opts[:format].nil?
|
|
84
|
+
pp HTTParty.send(opts[:action], ARGV.first, opts)
|
|
85
|
+
else
|
|
86
|
+
print_format = opts[:format]
|
|
87
|
+
opts.merge!(:format => :plain) if opts[:format]
|
|
88
|
+
response = HTTParty.send(opts[:action], ARGV.first, opts)
|
|
89
|
+
|
|
90
|
+
if print_format.nil?
|
|
91
|
+
pp response
|
|
92
|
+
else
|
|
93
|
+
case print_format
|
|
94
|
+
when :json
|
|
95
|
+
puts JSON.pretty_generate(response.original_body)
|
|
96
|
+
when :xml
|
|
97
|
+
REXML::Document.new(response.original_body).write(STDOUT, 2)
|
|
98
|
+
puts
|
|
99
|
+
else
|
|
100
|
+
puts response
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
data/examples/aaws.rb
CHANGED
data/examples/basic.rb
ADDED
data/examples/delicious.rb
CHANGED
|
@@ -18,7 +18,6 @@ class Delicious
|
|
|
18
18
|
# ie: posts(:query => {:tag => 'ruby'})
|
|
19
19
|
def posts(options={})
|
|
20
20
|
options.merge!({:basic_auth => @auth})
|
|
21
|
-
# get posts and convert to structs so we can do .key instead of ['key'] with results
|
|
22
21
|
self.class.get('/posts/get', options)
|
|
23
22
|
end
|
|
24
23
|
|
data/examples/rubyurl.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
|
+
require File.join(dir, 'httparty')
|
|
3
|
+
require 'pp'
|
|
4
|
+
|
|
5
|
+
class Rubyurl
|
|
6
|
+
include HTTParty
|
|
7
|
+
base_uri 'rubyurl.com'
|
|
8
|
+
|
|
9
|
+
def self.shorten( website_url )
|
|
10
|
+
post( '/api/links.json', :query => { :link => { :website_url => website_url } } )
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
pp Rubyurl.shorten( 'http://istwitterdown.com/' )
|
data/examples/twitter.rb
CHANGED
|
@@ -28,4 +28,4 @@ twitter = Twitter.new(config['email'], config['password'])
|
|
|
28
28
|
pp twitter.timeline
|
|
29
29
|
# pp twitter.timeline(:friends, :query => {:since_id => 868482746})
|
|
30
30
|
# pp twitter.timeline(:friends, :query => 'since_id=868482746')
|
|
31
|
-
# pp twitter.post('this is a test')
|
|
31
|
+
# pp twitter.post('this is a test of 0.2.0')
|
data/examples/whoismyrep.rb
CHANGED
|
@@ -6,4 +6,5 @@ class Rep
|
|
|
6
6
|
include HTTParty
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
pp Rep.get('http://whoismyrepresentative.com/whoismyrep.php?zip=46544')
|
|
10
|
+
pp Rep.get('http://whoismyrepresentative.com/whoismyrep.php', :query => {:zip => 46544})
|
data/httparty.gemspec
CHANGED
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{httparty}
|
|
5
|
-
s.version = "0.
|
|
5
|
+
s.version = "0.2.6"
|
|
6
6
|
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">=
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["John Nunemaker"]
|
|
9
|
-
s.date = %q{
|
|
9
|
+
s.date = %q{2009-01-05}
|
|
10
|
+
s.default_executable = %q{httparty}
|
|
10
11
|
s.description = %q{Makes http fun! Also, makes consuming restful web services dead easy.}
|
|
11
|
-
s.email =
|
|
12
|
-
s.
|
|
13
|
-
s.
|
|
12
|
+
s.email = %q{nunemaker@gmail.com}
|
|
13
|
+
s.executables = ["httparty"]
|
|
14
|
+
s.extra_rdoc_files = ["bin/httparty", "lib/core_extensions.rb", "lib/httparty/exceptions.rb", "lib/httparty/request.rb", "lib/httparty/version.rb", "lib/httparty.rb", "lib/module_level_inheritable_attributes.rb", "README"]
|
|
15
|
+
s.files = ["bin/httparty", "examples/aaws.rb", "examples/basic.rb", "examples/delicious.rb", "examples/google.rb", "examples/rubyurl.rb", "examples/twitter.rb", "examples/whoismyrep.rb", "History", "httparty.gemspec", "lib/core_extensions.rb", "lib/httparty/exceptions.rb", "lib/httparty/request.rb", "lib/httparty/version.rb", "lib/httparty.rb", "lib/module_level_inheritable_attributes.rb", "Manifest", "MIT-LICENSE", "Rakefile", "README", "setup.rb", "spec/as_buggery_spec.rb", "spec/fixtures/delicious.xml", "spec/fixtures/google.html", "spec/fixtures/twitter.json", "spec/fixtures/twitter.xml", "spec/httparty/request_spec.rb", "spec/httparty_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "website/css/common.css", "website/index.html"]
|
|
14
16
|
s.has_rdoc = true
|
|
15
17
|
s.homepage = %q{http://httparty.rubyforge.org}
|
|
16
18
|
s.post_install_message = %q{When you HTTParty, you must party hard!}
|
|
17
|
-
s.rdoc_options = ["--main", "README
|
|
19
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Httparty", "--main", "README"]
|
|
18
20
|
s.require_paths = ["lib"]
|
|
19
21
|
s.rubyforge_project = %q{httparty}
|
|
20
22
|
s.rubygems_version = %q{1.3.1}
|
|
@@ -25,14 +27,14 @@ Gem::Specification.new do |s|
|
|
|
25
27
|
s.specification_version = 2
|
|
26
28
|
|
|
27
29
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
28
|
-
s.add_runtime_dependency(%q<
|
|
29
|
-
s.add_development_dependency(%q<
|
|
30
|
+
s.add_runtime_dependency(%q<json>, ["~> 1.1"])
|
|
31
|
+
s.add_development_dependency(%q<echoe>, [">= 0"])
|
|
30
32
|
else
|
|
31
|
-
s.add_dependency(%q<
|
|
32
|
-
s.add_dependency(%q<
|
|
33
|
+
s.add_dependency(%q<json>, ["~> 1.1"])
|
|
34
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
|
33
35
|
end
|
|
34
36
|
else
|
|
35
|
-
s.add_dependency(%q<
|
|
36
|
-
s.add_dependency(%q<
|
|
37
|
+
s.add_dependency(%q<json>, ["~> 1.1"])
|
|
38
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
|
37
39
|
end
|
|
38
|
-
end
|
|
40
|
+
end
|