endo 0.2.0 → 0.3.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.
- 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
|