ruby-resty 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.
- data/README.md +26 -8
- data/Rakefile +7 -0
- data/lib/resty/cli.rb +21 -13
- data/lib/resty/commands/method_command.rb +27 -12
- data/lib/resty/{cli_options.rb → options.rb} +20 -12
- data/lib/resty/override_pry_help.rb +17 -0
- data/lib/resty/pretty_printer.rb +59 -0
- data/lib/resty/repl.rb +6 -4
- data/lib/resty/request.rb +18 -10
- data/lib/resty.rb +6 -3
- data/lib/version.rb +1 -1
- data/ruby-resty.gemspec +5 -1
- data/spec/lib/resty/commands/method_command_spec.rb +22 -14
- data/spec/lib/resty/options_spec.rb +111 -0
- data/spec/lib/resty/pretty_printer_spec.rb +110 -0
- data/spec/lib/resty/request_spec.rb +69 -45
- data/spec/requests/commands/method_command_request_spec.rb +150 -0
- data/spec/server.rb +34 -0
- data/spec/spec_helper.rb +48 -0
- data/spec/vcr/method_command/delete_returns_200.yml +79 -0
- data/spec/vcr/method_command/delete_sends_headers.yml +46 -0
- data/spec/vcr/method_command/get_non_json_response_returns_200.yml +89 -0
- data/spec/vcr/method_command/get_non_json_response_returns_response.yml +89 -0
- data/spec/vcr/method_command/get_non_json_response_sends_headers.yml +89 -0
- data/spec/vcr/method_command/get_returns_200.yml +79 -0
- data/spec/vcr/method_command/get_returns_response.yml +79 -0
- data/spec/vcr/method_command/get_sends_headers.yml +44 -0
- data/spec/vcr/method_command/get_with_per_request_headers_returns_200.yml +46 -0
- data/spec/vcr/method_command/get_with_per_request_headers_returns_response.yml +46 -0
- data/spec/vcr/method_command/get_with_per_request_headers_sends_headers.yml +46 -0
- data/spec/vcr/method_command/get_without_per_request_headers_returns_200.yml +46 -0
- data/spec/vcr/method_command/get_without_per_request_headers_returns_response.yml +46 -0
- data/spec/vcr/method_command/get_without_per_request_headers_sends_headers.yml +46 -0
- data/spec/vcr/method_command/head_returns_200.yml +79 -0
- data/spec/vcr/method_command/head_sends_headers.yml +46 -0
- data/spec/vcr/method_command/options_returns_200.yml +79 -0
- data/spec/vcr/method_command/options_sends_headers.yml +46 -0
- data/spec/vcr/method_command/patch_returns_204.yml +87 -0
- data/spec/vcr/method_command/patch_sends_headers.yml +50 -0
- data/spec/vcr/method_command/post_returns_200.yml +87 -0
- data/spec/vcr/method_command/post_returns_created_object.yml +87 -0
- data/spec/vcr/method_command/post_sends_headers.yml +50 -0
- data/spec/vcr/method_command/put_returns_204.yml +79 -0
- data/spec/vcr/method_command/put_sends_headers.yml +42 -0
- metadata +135 -16
- data/lib/resty/commands/method_output.rb +0 -43
- data/spec/lib/resty/cli_options_spec.rb +0 -103
- data/spec/lib/resty/commands/method_output_spec.rb +0 -58
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
Ruby-Resty is a ruby port of [Resty][1], which provides a simple way to interact with RESTful services. Ruby-Resty was
|
6
6
|
ported to be shell agnostic and for easier community development.
|
7
7
|
|
8
|
-
The resty REPL is built on top of [Pry][2]
|
8
|
+
The resty REPL is built on top of [Pry][2] to leverage [Custom Commands][3], history management, an interactive
|
9
9
|
help system, and most importantly, using plain old Ruby.
|
10
10
|
|
11
11
|
# Installation
|
@@ -27,13 +27,18 @@ To get started, you can enter the REPL by providing the `host` option.
|
|
27
27
|
|
28
28
|
```
|
29
29
|
ruby-resty --host http://nyan.cat
|
30
|
-
resty>
|
31
30
|
```
|
32
31
|
|
33
32
|
If you would like headers to be attached with every request, you can do so:
|
34
33
|
|
35
34
|
```
|
36
|
-
ruby-resty --host http://nyan.cat --headers X-NYAN-CAT-SECRET-KEY
|
35
|
+
ruby-resty --host http://nyan.cat --headers X-NYAN-CAT-SECRET-KEY:nyan_nyan X-NYAN-TYPE:octo
|
36
|
+
```
|
37
|
+
|
38
|
+
HTTP Basic Authentication can be attached to the hostname
|
39
|
+
|
40
|
+
```
|
41
|
+
ruby-resty --host http://nyan.cat --username Leeroy --password Jenkins
|
37
42
|
```
|
38
43
|
|
39
44
|
### Options
|
@@ -42,11 +47,14 @@ The REPL accepts the following options that are attached to each request. This p
|
|
42
47
|
requests without having to specify headers everytime.
|
43
48
|
|
44
49
|
```
|
45
|
-
--alias, -a
|
46
|
-
--
|
47
|
-
--
|
48
|
-
--
|
49
|
-
--
|
50
|
+
--alias, -a : The per-host entry to use in ~/.ruby_resty.yml
|
51
|
+
--headers, -H : The headers attached to each request. Ex: X-NYAN-CAT-SECRET-KEY:nyan_nyan
|
52
|
+
--host, -h : The hostname of the REST service. Ex: http://nyan.cat
|
53
|
+
--username, -u : HTTP basic authentication username
|
54
|
+
--password, -p : HTTP basic authentication password
|
55
|
+
--verbose, -v : Verbose mode
|
56
|
+
--version, -e : Print verison and exit
|
57
|
+
--config, -c : Use host information from ~/.ruby_resty.yml
|
50
58
|
```
|
51
59
|
|
52
60
|
### Requests
|
@@ -100,6 +108,14 @@ resty> data = {nyan_cat: {name: "oliver", color: "blue"} }
|
|
100
108
|
resty> POST /api/cats data
|
101
109
|
```
|
102
110
|
|
111
|
+
#### Per-request headers
|
112
|
+
|
113
|
+
Headers sent with individual requests are supported:
|
114
|
+
|
115
|
+
```
|
116
|
+
resty> GET /api/cats/1 -H filter:tail-length -H filter:name
|
117
|
+
```
|
118
|
+
|
103
119
|
### Responses
|
104
120
|
|
105
121
|
After a request is returned, the resulting JSON response is parsed into a ruby hash and stored in `response`:
|
@@ -148,6 +164,8 @@ nyan:
|
|
148
164
|
headers:
|
149
165
|
header_name: header_value
|
150
166
|
header_name2: header_value2
|
167
|
+
username: (optional)
|
168
|
+
password: (optional)
|
151
169
|
```
|
152
170
|
|
153
171
|
Now instead of starting the REPL like:
|
data/Rakefile
CHANGED
data/lib/resty/cli.rb
CHANGED
@@ -4,29 +4,37 @@ module Resty
|
|
4
4
|
class Cli
|
5
5
|
|
6
6
|
def run
|
7
|
-
|
7
|
+
options = Trollop::options do
|
8
|
+
version "Version: #{Resty::VERSION}\n"
|
8
9
|
opt :alias, "The per-host entry to use in ~/.ruby_resty.yml", type: :string, short: "-a"
|
10
|
+
opt :headers, "The headers sent with each request. Ex: X-NYAN-CAT-SECRET-KEY:nyan_nyan",
|
11
|
+
type: :strings, short: "-H"
|
9
12
|
opt :host, "The hostname of the REST service. Ex: http://nyan.cat", type: :string, short: "-h"
|
10
|
-
opt :
|
11
|
-
|
13
|
+
opt :username, "HTTP basic authentication username", type: :string, short: "-u"
|
14
|
+
opt :password, "HTTP basic authentication password", type: :string, short: "-p"
|
12
15
|
opt :verbose, "Verbose mode", short: "-v"
|
13
16
|
end
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
raise Trollop::HelpNeeded
|
21
|
-
elsif options.empty?
|
22
|
-
raise Trollop::HelpNeeded
|
23
|
-
end
|
24
|
-
|
18
|
+
if missing_host_or_alias?(options)
|
19
|
+
puts "Please specify an alias OR a host. Use --help for more info."
|
20
|
+
elsif basic_auth_invalid?(options)
|
21
|
+
puts "Please specify a username and password. Use --help for more info."
|
22
|
+
else
|
25
23
|
Resty::Repl.start(options)
|
26
24
|
end
|
27
25
|
|
28
26
|
rescue ConfigFileError => e
|
29
27
|
puts e.message
|
30
28
|
end
|
29
|
+
|
30
|
+
def missing_host_or_alias?(options)
|
31
|
+
(options[:alias] && options[:host]) || (options[:alias].nil? && options[:host].nil?)
|
32
|
+
end
|
33
|
+
|
34
|
+
def basic_auth_invalid?(options)
|
35
|
+
username = options[:username]
|
36
|
+
password = options[:password]
|
37
|
+
(username && password.nil?) || (username.nil? && password)
|
38
|
+
end
|
31
39
|
end
|
32
40
|
end
|
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
require 'hashie'
|
2
|
+
|
3
|
+
Pry::Commands.create_command /(get|put|post|delete|head|options|patch)/i,
|
4
|
+
listing: "method-command", :keep_retval => true do
|
5
|
+
|
2
6
|
description "Performs an HTTP request to the specified path: METHOD PATH [DATA]"
|
3
7
|
|
4
8
|
banner <<-BANNER
|
@@ -7,6 +11,7 @@ Pry::Commands.create_command /(get|put|post|delete|head|option|patch|trace)/i, l
|
|
7
11
|
Examples:
|
8
12
|
---------
|
9
13
|
GET /api/nyan
|
14
|
+
GET /api/nyan -H filter:color -H type:space
|
10
15
|
DELETE /api/nyan
|
11
16
|
PUT /api/nyan {"name": "Jan"}
|
12
17
|
POST /api/nyan {"name": "Jeff"}
|
@@ -26,24 +31,30 @@ Pry::Commands.create_command /(get|put|post|delete|head|option|patch|trace)/i, l
|
|
26
31
|
shellwords: false
|
27
32
|
)
|
28
33
|
|
34
|
+
def setup
|
35
|
+
@user_auth = nil
|
36
|
+
end
|
37
|
+
|
29
38
|
def process
|
30
39
|
if path_missing?
|
31
|
-
|
32
|
-
run("help method-command")
|
40
|
+
"Missing path. Type 'method-command -h' for more info."
|
33
41
|
elsif data_invalid?
|
34
|
-
|
35
|
-
run("help method-command")
|
42
|
+
"Invalid data. Type 'method-command -h' for more info."
|
36
43
|
else
|
37
44
|
params = { method: http_method, path: path, data: data }
|
38
|
-
request = Resty::Request.new(
|
39
|
-
request.send_request do |response, request|
|
40
|
-
method_output = Resty::Commands::MethodOutput.new(cli_options.verbose?, response, request)
|
41
|
-
output.puts(method_output.generate)
|
45
|
+
request = Resty::Request.new(global_options, params)
|
46
|
+
request.send_request({headers: request_headers}) do |response, request|
|
42
47
|
eval_response(response)
|
48
|
+
return Hashie::Mash.new(response: response, request: request)
|
43
49
|
end
|
44
50
|
end
|
45
51
|
end
|
46
52
|
|
53
|
+
def options(opt)
|
54
|
+
opt.on "H=", :headers, "Headers sent per-request. Ex: -H header:value -H header:value",
|
55
|
+
as: Array
|
56
|
+
end
|
57
|
+
|
47
58
|
private
|
48
59
|
|
49
60
|
def path_missing?
|
@@ -57,7 +68,7 @@ Pry::Commands.create_command /(get|put|post|delete|head|option|patch|trace)/i, l
|
|
57
68
|
def eval_response(response)
|
58
69
|
target.eval("response = #{JSON.parse(response)}")
|
59
70
|
rescue
|
60
|
-
target.eval("response =
|
71
|
+
target.eval("response = '#{response}'")
|
61
72
|
end
|
62
73
|
|
63
74
|
def build_data
|
@@ -81,8 +92,8 @@ Pry::Commands.create_command /(get|put|post|delete|head|option|patch|trace)/i, l
|
|
81
92
|
JSON.parse(input) rescue nil
|
82
93
|
end
|
83
94
|
|
84
|
-
def
|
85
|
-
@
|
95
|
+
def global_options
|
96
|
+
@global_options ||= eval "self", target
|
86
97
|
end
|
87
98
|
|
88
99
|
def http_method
|
@@ -96,4 +107,8 @@ Pry::Commands.create_command /(get|put|post|delete|head|option|patch|trace)/i, l
|
|
96
107
|
def data
|
97
108
|
@data ||= build_data
|
98
109
|
end
|
110
|
+
|
111
|
+
def request_headers
|
112
|
+
opts[:headers] ? Resty::Options.parse_headers(opts[:headers]) : {}
|
113
|
+
end
|
99
114
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
3
|
module Resty
|
4
|
-
class
|
4
|
+
class Options
|
5
5
|
attr_reader :options
|
6
6
|
|
7
7
|
CONFIG_FILE = "#{Dir.home}/.ruby_resty.yml"
|
@@ -10,7 +10,7 @@ module Resty
|
|
10
10
|
@options = options
|
11
11
|
|
12
12
|
if options[:headers]
|
13
|
-
|
13
|
+
options[:headers] = Options.parse_headers(options[:headers])
|
14
14
|
elsif host_alias
|
15
15
|
load_config_file
|
16
16
|
end
|
@@ -32,18 +32,31 @@ module Resty
|
|
32
32
|
options[:headers] || {}
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
def username
|
36
|
+
options[:username]
|
37
|
+
end
|
36
38
|
|
37
|
-
def
|
38
|
-
options[:
|
39
|
-
hash.merge(build_pair(header))
|
40
|
-
end
|
39
|
+
def password
|
40
|
+
options[:password]
|
41
41
|
end
|
42
42
|
|
43
|
+
def self.parse_headers(headers)
|
44
|
+
headers.inject({}) { |hash, header| hash.merge(build_pair(header)) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.build_pair(header)
|
48
|
+
pair = header.split(":")
|
49
|
+
{ pair.first.to_sym => pair.last }
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
43
54
|
def load_config_file
|
44
55
|
read_config_file.tap do |config|
|
45
56
|
options[:host] = config[host_alias]["host"]
|
46
57
|
options[:headers] = config[host_alias]["headers"]
|
58
|
+
options[:username] = config[host_alias]["username"]
|
59
|
+
options[:password] = config[host_alias]["password"]
|
47
60
|
end
|
48
61
|
end
|
49
62
|
|
@@ -64,11 +77,6 @@ module Resty
|
|
64
77
|
raise ConfigFileError, "Alias missing from #{CONFIG_FILE}: #{host_alias}"
|
65
78
|
end
|
66
79
|
end
|
67
|
-
|
68
|
-
def build_pair(header)
|
69
|
-
pair = header.split("=")
|
70
|
-
{ pair.first.to_sym => pair.last }
|
71
|
-
end
|
72
80
|
end
|
73
81
|
|
74
82
|
class ConfigFileError < StandardError; end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Help < Pry::ClassCommand
|
3
|
+
COMMANDS = %w{method-command}
|
4
|
+
|
5
|
+
def visible_commands
|
6
|
+
visible = {}
|
7
|
+
commands.each do |key, command|
|
8
|
+
visible[key] = command if COMMANDS.include?(command.options[:listing])
|
9
|
+
end
|
10
|
+
visible
|
11
|
+
end
|
12
|
+
|
13
|
+
def help_text_for_commands(name, commands)
|
14
|
+
commands.first.banner
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
module Resty
|
3
|
+
class PrettyPrinter
|
4
|
+
attr_accessor :options, :params
|
5
|
+
|
6
|
+
def initialize(options, params)
|
7
|
+
@options = options
|
8
|
+
@params = params
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate
|
12
|
+
if params.is_a? Hashie::Mash
|
13
|
+
output = ""
|
14
|
+
if verbose?
|
15
|
+
output += build_line("#{request.method.upcase} #{request.url}")
|
16
|
+
request.processed_headers.each { |key, value| output += build_line("#{key}: #{value}") }
|
17
|
+
output += "\n"
|
18
|
+
|
19
|
+
output += build_line("Response Code: #{response.code}")
|
20
|
+
response.headers.each { |key, value| output += build_line("#{key}: #{value}") }
|
21
|
+
else
|
22
|
+
output += build_line("Response Code: #{response.code}")
|
23
|
+
end
|
24
|
+
|
25
|
+
output += pretty_print_response(response)
|
26
|
+
else
|
27
|
+
params
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def build_line(line)
|
34
|
+
"> #{line}\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
def pretty_print_response(response)
|
38
|
+
return response if response == ""
|
39
|
+
parsed_response = JSON.parse(response)
|
40
|
+
MultiJson.dump(parsed_response, { pretty: true }) || ""
|
41
|
+
rescue => e
|
42
|
+
response
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def verbose?
|
48
|
+
options.verbose?
|
49
|
+
end
|
50
|
+
|
51
|
+
def request
|
52
|
+
params[:request]
|
53
|
+
end
|
54
|
+
|
55
|
+
def response
|
56
|
+
params[:response]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/resty/repl.rb
CHANGED
@@ -1,23 +1,25 @@
|
|
1
1
|
require 'readline'
|
2
|
-
require 'pry'
|
3
2
|
|
4
3
|
module Resty
|
5
4
|
class Repl
|
6
5
|
include Readline
|
7
6
|
|
8
|
-
attr_accessor :
|
7
|
+
attr_accessor :options, :interrupted
|
9
8
|
|
10
9
|
def initialize(resty_options)
|
11
|
-
@
|
10
|
+
@options = Resty::Options.new(resty_options)
|
12
11
|
|
13
12
|
Pry.config.prompt = [ proc { "resty> " }, proc { "*>" }]
|
14
13
|
Pry.config.history.file = "~/.ruby_resty_history"
|
14
|
+
Pry.config.print = proc do |output, value|
|
15
|
+
output.puts(Resty::PrettyPrinter.new(options, value).generate)
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
17
19
|
def self.start(resty_options)
|
18
20
|
new(resty_options).tap do |repl|
|
19
21
|
Pry.config.input = repl
|
20
|
-
repl.
|
22
|
+
repl.options.pry
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
data/lib/resty/request.rb
CHANGED
@@ -3,19 +3,16 @@ require 'json'
|
|
3
3
|
module Resty
|
4
4
|
class Request
|
5
5
|
|
6
|
-
attr_reader :params, :
|
6
|
+
attr_reader :params, :global_options
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
8
|
+
def initialize(global_options, params)
|
9
|
+
@global_options = global_options
|
10
10
|
@params = params
|
11
11
|
end
|
12
12
|
|
13
|
-
def send_request
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
RestClient.send(method, url, cli_options.headers) { |*params| yield params }
|
18
|
-
end
|
13
|
+
def send_request(options = {})
|
14
|
+
request_options[:headers].merge!(options[:headers]) if options[:headers]
|
15
|
+
RestClient::Request.new(request_options).execute { |*params| yield params }
|
19
16
|
end
|
20
17
|
|
21
18
|
def self.data_required?(method)
|
@@ -24,8 +21,19 @@ module Resty
|
|
24
21
|
|
25
22
|
private
|
26
23
|
|
24
|
+
def request_options
|
25
|
+
@request_options ||= {}.tap do |options|
|
26
|
+
options[:method] = method
|
27
|
+
options[:headers] = global_options.headers
|
28
|
+
options[:url] = url
|
29
|
+
options[:user] = global_options.username if global_options.username
|
30
|
+
options[:password] = global_options.password if global_options.password
|
31
|
+
options[:payload] = data if Resty::Request.data_required?(method)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
27
35
|
def url
|
28
|
-
"#{
|
36
|
+
"#{global_options.host}#{path}"
|
29
37
|
end
|
30
38
|
|
31
39
|
def method
|
data/lib/resty.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
|
-
require 'rest_client'
|
2
1
|
require 'active_support'
|
3
2
|
require 'multi_json'
|
3
|
+
require 'pry'
|
4
|
+
require 'rest_client'
|
4
5
|
|
5
6
|
module Resty
|
6
7
|
end
|
7
8
|
|
9
|
+
require_relative "version"
|
8
10
|
require_relative "resty/cli"
|
9
|
-
require_relative "resty/
|
11
|
+
require_relative "resty/options"
|
12
|
+
require_relative "resty/override_pry_help"
|
13
|
+
require_relative "resty/pretty_printer"
|
10
14
|
require_relative "resty/repl"
|
11
15
|
require_relative "resty/request"
|
12
16
|
require_relative "resty/commands/method_command"
|
13
|
-
require_relative "resty/commands/method_output"
|
data/lib/version.rb
CHANGED
data/ruby-resty.gemspec
CHANGED
@@ -16,10 +16,11 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables << 'ruby-resty'
|
17
17
|
|
18
18
|
gem.add_dependency 'active_support'
|
19
|
+
gem.add_dependency 'hashie'
|
20
|
+
gem.add_dependency 'multi_json'
|
19
21
|
gem.add_dependency 'pry'
|
20
22
|
gem.add_dependency 'rest-client', '1.6.7'
|
21
23
|
gem.add_dependency 'trollop'
|
22
|
-
gem.add_dependency 'multi_json'
|
23
24
|
|
24
25
|
gem.add_development_dependency 'bourne', "1.4.0"
|
25
26
|
gem.add_development_dependency 'guard'
|
@@ -28,4 +29,7 @@ Gem::Specification.new do |gem|
|
|
28
29
|
gem.add_development_dependency 'pry'
|
29
30
|
gem.add_development_dependency 'rspec'
|
30
31
|
gem.add_development_dependency 'rake'
|
32
|
+
gem.add_development_dependency 'sinatra'
|
33
|
+
gem.add_development_dependency 'vcr'
|
34
|
+
gem.add_development_dependency 'webmock'
|
31
35
|
end
|
@@ -17,13 +17,13 @@ describe "MethodCommand" do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "responds lower case method" do
|
20
|
-
%w{get put post delete head
|
20
|
+
%w{get put post delete head options patch}.each do |method|
|
21
21
|
pry_eval("#{method}").start_with?("Missing").should be_true
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
it "responds to case-insentivity" do
|
26
|
-
%w{GET Put PoSt delete head
|
26
|
+
%w{GET Put PoSt delete head options patch}.each do |method|
|
27
27
|
pry_eval("#{method}").start_with?("Missing").should be_true
|
28
28
|
end
|
29
29
|
end
|
@@ -49,7 +49,6 @@ describe "MethodCommand" do
|
|
49
49
|
|
50
50
|
context "request doesn't require data" do
|
51
51
|
before(:each) do
|
52
|
-
Resty::Commands::MethodOutput.stubs(:new).returns(stub(:generate))
|
53
52
|
Resty::Request.stubs(:new).returns(request)
|
54
53
|
request.stubs(:send_request).yields(response, request)
|
55
54
|
pry_eval("get /api/nyan")
|
@@ -66,7 +65,6 @@ describe "MethodCommand" do
|
|
66
65
|
let(:method_output) { stub(generate: "")}
|
67
66
|
|
68
67
|
before(:each) do
|
69
|
-
Resty::Commands::MethodOutput.stubs(:new).returns(method_output)
|
70
68
|
request.stubs(:send_request).yields(response, request)
|
71
69
|
end
|
72
70
|
|
@@ -82,8 +80,7 @@ describe "MethodCommand" do
|
|
82
80
|
end
|
83
81
|
|
84
82
|
it "sends request" do
|
85
|
-
|
86
|
-
method_output.should have_received(:generate)
|
83
|
+
request.should have_received(:send_request)
|
87
84
|
end
|
88
85
|
end
|
89
86
|
end
|
@@ -99,8 +96,7 @@ describe "MethodCommand" do
|
|
99
96
|
end
|
100
97
|
|
101
98
|
it "sends request" do
|
102
|
-
|
103
|
-
method_output.should have_received(:generate)
|
99
|
+
request.should have_received(:send_request)
|
104
100
|
end
|
105
101
|
end
|
106
102
|
|
@@ -117,8 +113,7 @@ describe "MethodCommand" do
|
|
117
113
|
end
|
118
114
|
|
119
115
|
it "sends request" do
|
120
|
-
|
121
|
-
method_output.should have_received(:generate)
|
116
|
+
request.should have_received(:send_request)
|
122
117
|
end
|
123
118
|
end
|
124
119
|
|
@@ -134,8 +129,7 @@ describe "MethodCommand" do
|
|
134
129
|
end
|
135
130
|
|
136
131
|
it "sends request" do
|
137
|
-
|
138
|
-
method_output.should have_received(:generate)
|
132
|
+
request.should have_received(:send_request)
|
139
133
|
end
|
140
134
|
end
|
141
135
|
end
|
@@ -151,8 +145,22 @@ describe "MethodCommand" do
|
|
151
145
|
end
|
152
146
|
|
153
147
|
it "sends request" do
|
154
|
-
|
155
|
-
|
148
|
+
request.should have_received(:send_request)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context "with request options" do
|
153
|
+
before(:each) do
|
154
|
+
pry_eval("get /api/nyan -H name:nyaa -H address:space")
|
155
|
+
end
|
156
|
+
|
157
|
+
it "creates request" do
|
158
|
+
params = { method: "get", path: "/api/nyan", data: nil }
|
159
|
+
Resty::Request.should have_received(:new).with(anything, params)
|
160
|
+
end
|
161
|
+
|
162
|
+
it "sends request" do
|
163
|
+
request.should have_received(:send_request).with(headers: { name: "nyaa", address: "space" })
|
156
164
|
end
|
157
165
|
end
|
158
166
|
end
|