endo 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/endo/sample.rb +50 -0
- data/lib/endo/cli.rb +2 -2
- data/lib/endo/core.rb +39 -7
- data/lib/endo/matchers/include.rb +16 -0
- data/lib/endo/matchers.rb +5 -0
- data/lib/endo/version.rb +1 -1
- metadata +4 -3
- data/endo/sample.endo +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a6e0eb3c683feb92b2e6b18a1a76ff6354a99e3
|
4
|
+
data.tar.gz: 2f97c729f144198dc2cb4d840415c746ac19ae83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c79bbe2c0263bb186da2dfc9f603d97fae2e7db20de7a5185508fdc2dc389b393ac8da50422c71eefcac213db2da59177853aafcf6d5d1f5d39989c4d3671e82
|
7
|
+
data.tar.gz: 9c1520a0698c7191fdb64e05a0549f2fafee9d570a8639084d0048efaa16327bef551429685c156f872dd936f769b084d2844129ca389fce1975ad4b5a5b0854
|
data/endo/sample.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
set :base_url, 'http://localhost:3000'
|
2
|
+
basic_auth 'user', 'pass'
|
3
|
+
|
4
|
+
get '/articles' do
|
5
|
+
expect(header: 'Content-Type').to eq 'application/json; charset=utf-8'
|
6
|
+
end
|
7
|
+
|
8
|
+
post '/articles.json' do
|
9
|
+
param 'article[title]', 'hello'
|
10
|
+
param 'article[content]', 'Hello, world!'
|
11
|
+
end
|
12
|
+
|
13
|
+
get '/articles/:article_id' do
|
14
|
+
param :article_id do
|
15
|
+
from :post, '/articles.json', ->{ self[:id] }
|
16
|
+
end
|
17
|
+
|
18
|
+
expect(header: 'Content-Type').to eq 'application/json; charset=utf-8'
|
19
|
+
expect(body: ->{ self[:title] }).to eq 'hello'
|
20
|
+
end
|
21
|
+
|
22
|
+
patch '/articles/:article_id.json' do
|
23
|
+
param :article_id do
|
24
|
+
from :post, '/articles.json', ->{ self[:id] }
|
25
|
+
end
|
26
|
+
|
27
|
+
param 'article[title]', 'こんにちは'
|
28
|
+
end
|
29
|
+
|
30
|
+
get '/articles/:article_id' do
|
31
|
+
param :article_id do
|
32
|
+
from :post, '/articles.json', ->{ self[:id] }
|
33
|
+
end
|
34
|
+
|
35
|
+
expect(body: ->{ self[:title] }).to eq 'こんにちは'
|
36
|
+
end
|
37
|
+
|
38
|
+
put '/articles/:article_id.json' do
|
39
|
+
param :article_id do
|
40
|
+
from :post, '/articles.json', ->{ self[:id] }
|
41
|
+
end
|
42
|
+
|
43
|
+
param 'article[title]', 'bonjour'
|
44
|
+
end
|
45
|
+
|
46
|
+
delete '/articles/:article_id.json' do
|
47
|
+
param :article_id do
|
48
|
+
from :post, '/articles.json', ->{ self[:id] }
|
49
|
+
end
|
50
|
+
end
|
data/lib/endo/cli.rb
CHANGED
@@ -8,7 +8,7 @@ module Endo
|
|
8
8
|
desc "exec usage", "exec desc"
|
9
9
|
def exec(endo_file=nil)
|
10
10
|
if endo_file.nil?
|
11
|
-
Dir.glob('endo/*.
|
11
|
+
Dir.glob('endo/*.rb').each do |f|
|
12
12
|
exec_proc(f)
|
13
13
|
end
|
14
14
|
else
|
@@ -27,4 +27,4 @@ module Endo
|
|
27
27
|
executor.instance_eval File.read(file_path)
|
28
28
|
end
|
29
29
|
end
|
30
|
-
end
|
30
|
+
end
|
data/lib/endo/core.rb
CHANGED
@@ -26,6 +26,18 @@ module Endo
|
|
26
26
|
request(endpoint, :post, &block)
|
27
27
|
end
|
28
28
|
|
29
|
+
def delete(endpoint, &block)
|
30
|
+
request(endpoint, :delete, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def patch(endpoint, &block)
|
34
|
+
request(endpoint, :patch, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def put(endpoint, &block)
|
38
|
+
request(endpoint, :put, &block)
|
39
|
+
end
|
40
|
+
|
29
41
|
#TODO: 制限
|
30
42
|
def param(key, val=nil, &block)
|
31
43
|
unless (!val.nil?) ^ (!block.nil?) # Only either one
|
@@ -63,6 +75,12 @@ module Endo
|
|
63
75
|
val
|
64
76
|
end
|
65
77
|
|
78
|
+
def basic_auth(user, pass)
|
79
|
+
@basic_auth = {
|
80
|
+
user: user, pass: pass
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
66
84
|
private
|
67
85
|
def request(endpoint, method, &block)
|
68
86
|
org_endpoint = endpoint.clone
|
@@ -83,12 +101,12 @@ module Endo
|
|
83
101
|
res_data = parse_body_json(res)
|
84
102
|
@responses[build_response_key(method, endpoint)] = res_data
|
85
103
|
validate_expects(res) unless @expect_alls.empty? && @expects.empty?
|
86
|
-
message = "🍺 #{endpoint} [#{t_end-t_start}ms]"
|
104
|
+
message = "🍺 #{method.upcase} #{endpoint} [#{t_end-t_start}ms]"
|
87
105
|
rescue Error::HttpError=>e
|
88
|
-
message = "💩 #{endpoint} [code: #{e.code}]".red
|
106
|
+
message = "💩 #{method.upcase} #{endpoint} [code: #{e.code}]".red
|
89
107
|
exit 1
|
90
108
|
rescue Error::ValidationError => e
|
91
|
-
message = "👮 #{endpoint} [expected: \"#{e.expected}\" actual: \"#{e.actual}\"]".yellow
|
109
|
+
message = "👮 #{method.upcase} #{endpoint} [expected: \"#{e.expected}\" actual: \"#{e.actual}\"]".yellow
|
92
110
|
ensure
|
93
111
|
puts message
|
94
112
|
end
|
@@ -117,13 +135,27 @@ module Endo
|
|
117
135
|
def http_request(url, params, method: :get)
|
118
136
|
uri = URI.parse url
|
119
137
|
|
120
|
-
req =
|
138
|
+
req = case method
|
139
|
+
when :get
|
121
140
|
uri.query = URI.encode_www_form(params)
|
122
|
-
|
123
|
-
|
141
|
+
Net::HTTP::Get.new uri
|
142
|
+
when :post
|
124
143
|
req = Net::HTTP::Post.new uri.path
|
125
144
|
req.set_form_data(params)
|
126
145
|
req
|
146
|
+
when :delete
|
147
|
+
uri.query = URI.encode_www_form(params)
|
148
|
+
req = Net::HTTP::Delete.new uri
|
149
|
+
when :patch
|
150
|
+
uri.query = URI.encode_www_form(params)
|
151
|
+
req = Net::HTTP::Patch.new uri
|
152
|
+
when :put
|
153
|
+
uri.query = URI.encode_www_form(params)
|
154
|
+
req = Net::HTTP::Put.new uri
|
155
|
+
end
|
156
|
+
|
157
|
+
if @basic_auth
|
158
|
+
req.basic_auth @basic_auth[:user], @basic_auth[:pass]
|
127
159
|
end
|
128
160
|
|
129
161
|
res = Net::HTTP.start(uri.host, uri.port) {|http| http.request req }
|
@@ -133,7 +165,7 @@ module Endo
|
|
133
165
|
end
|
134
166
|
|
135
167
|
def parse_body_json(res)
|
136
|
-
JSON.parse(res.body, symbolize_names: true)
|
168
|
+
JSON.parse(res.body, symbolize_names: true) if res.body
|
137
169
|
end
|
138
170
|
|
139
171
|
def build_response_key(method, endpoint)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Endo
|
2
|
+
module Matchers
|
3
|
+
class Include < BaseMatcher
|
4
|
+
attr_reader :expected
|
5
|
+
|
6
|
+
private
|
7
|
+
def match(expected, actual)
|
8
|
+
if actual.respond_to? :include?
|
9
|
+
actual.include? expected
|
10
|
+
else
|
11
|
+
raise 'NotSupported'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/endo/matchers.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'endo/matchers/base_matcher'
|
2
2
|
require 'endo/matchers/eq'
|
3
|
+
require 'endo/matchers/include'
|
3
4
|
|
4
5
|
|
5
6
|
module Endo
|
@@ -7,5 +8,9 @@ module Endo
|
|
7
8
|
def eq(expected)
|
8
9
|
Matchers::Eq.new(expected)
|
9
10
|
end
|
11
|
+
|
12
|
+
def include(expected)
|
13
|
+
Matchers::Include.new(expected)
|
14
|
+
end
|
10
15
|
end
|
11
16
|
end
|
data/lib/endo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: endo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maruware
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -94,7 +94,7 @@ files:
|
|
94
94
|
- Rakefile
|
95
95
|
- bin/endo
|
96
96
|
- endo.gemspec
|
97
|
-
- endo/sample.
|
97
|
+
- endo/sample.rb
|
98
98
|
- lib/endo.rb
|
99
99
|
- lib/endo/cli.rb
|
100
100
|
- lib/endo/core.rb
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- lib/endo/matchers.rb
|
106
106
|
- lib/endo/matchers/base_matcher.rb
|
107
107
|
- lib/endo/matchers/eq.rb
|
108
|
+
- lib/endo/matchers/include.rb
|
108
109
|
- lib/endo/version.rb
|
109
110
|
homepage: https://github.com/maruware/endo
|
110
111
|
licenses: []
|
data/endo/sample.endo
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
set :base_url, 'http://endo-sample.maruware.com'
|
2
|
-
|
3
|
-
get '/articles' do
|
4
|
-
expect(body: ->{ at(0)[:title] }).to eq 'good'
|
5
|
-
end
|
6
|
-
|
7
|
-
get '/articles/:article_id' do
|
8
|
-
param :article_id do
|
9
|
-
from :get, '/articles', ->{ first[:id] }
|
10
|
-
end
|
11
|
-
|
12
|
-
expect(header: 'Content-Type').to eq 'application/json; charset=utf-8'
|
13
|
-
end
|
14
|
-
|
15
|
-
post '/articless' do
|
16
|
-
param :title, 'hello'
|
17
|
-
param :text, 'Hello, world!'
|
18
|
-
end
|