lurker 0.5.6 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/README.md +60 -24
- data/Rakefile +1 -1
- data/certs/razum2um.pem +21 -0
- data/features/controller_nested_schema_scaffolding.feature +5 -9
- data/features/controller_schema_scaffolding.feature +5 -9
- data/features/html_generation.feature +1 -1
- data/features/minitest.feature +140 -0
- data/features/multidomain_support.feature +1 -1
- data/features/partials.feature +3 -3
- data/features/request_nested_schema_scaffolding.feature +3 -3
- data/features/request_schema_scaffolding.feature +2 -2
- data/features/schema_suffixes.feature +4 -4
- data/features/step_definitions/additional_cli_steps.rb +9 -0
- data/features/support/env.rb +1 -1
- data/features/test_endpoint.feature +5 -5
- data/lib/lurker.rb +15 -0
- data/lib/lurker/cli.rb +2 -3
- data/lib/lurker/presenters/endpoint_presenter.rb +10 -4
- data/lib/lurker/request.rb +41 -0
- data/lib/lurker/response.rb +16 -0
- data/lib/lurker/schema.rb +0 -8
- data/lib/lurker/service.rb +2 -2
- data/lib/lurker/spec_helper.rb +2 -0
- data/lib/lurker/spec_helper/rails.rb +40 -0
- data/lib/lurker/spec_helper/rspec.rb +66 -0
- data/lib/lurker/spy.rb +88 -0
- data/lib/lurker/version.rb +1 -1
- data/lurker.gemspec +12 -9
- data/templates/generate_stuff.rb +29 -2
- data/templates/lurker_app.rb +27 -4
- data/templates/rails32_http_patch_support.rb +125 -0
- metadata +119 -57
- metadata.gz.sig +3 -0
- checksums.yaml.gz.asc +0 -12
- data.tar.gz.asc +0 -12
- data/lib/lurker/controller_spec_watcher.rb +0 -70
- data/lib/lurker/request_spec_watcher.rb +0 -80
- data/lib/lurker/spec_watcher.rb +0 -124
- metadata.gz.asc +0 -12
metadata.gz.sig
ADDED
checksums.yaml.gz.asc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN PGP SIGNATURE-----
|
2
|
-
Version: GnuPG v1
|
3
|
-
Comment: GPGTools - http://gpgtools.org
|
4
|
-
|
5
|
-
iQEcBAABCgAGBQJTccHbAAoJENcoxKfNVdjb6/IH/R1XMxCti1sKez8IUMA4eY2d
|
6
|
-
u9QxT+0Z4lEkGNPs1ycqngH7fMnrN1qYnRK6KW+8HJAteUECdEOZ1qaQSpRXBC+c
|
7
|
-
ugXow6Kei6TIO4432/AjApk00mDCsv3YosNMUOj6lXyt8K3GCh8PNt8L1bPhk3CV
|
8
|
-
6/mDw33hv9rKU0mCvzursiOxHpEsSQZ8lgi8O6q9YwouyHtEsrVMNEJPYIgU20sX
|
9
|
-
TUmNSxBFwX0/1orF64egekpT5zxcHUB8BRz4VsVD50evtYCBqLAaMZLZIf6J8rQM
|
10
|
-
cnHqMV2tS4SBKr4Tq7YKItTWGafIK3F1F6jeIgrzxWjNpVxt/wC0lCw9NHm+2Nc=
|
11
|
-
=dHhQ
|
12
|
-
-----END PGP SIGNATURE-----
|
data.tar.gz.asc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN PGP SIGNATURE-----
|
2
|
-
Version: GnuPG v1
|
3
|
-
Comment: GPGTools - http://gpgtools.org
|
4
|
-
|
5
|
-
iQEcBAABCgAGBQJTccHYAAoJENcoxKfNVdjbFuAIANv5LvoJolrzbd5jBPqb/u4u
|
6
|
-
PqveFsfu/9//EVq9sB+vZQ1av7Hrn7OYXkibhmvrvHwqO9l8Ve3/V0dQeAztk9qK
|
7
|
-
Xf9hA8hUBbP7uqbbhm+SfvL3I0oVE9nFYdG+eP853v2XqwNHcJSNb4D6vXWah1XU
|
8
|
-
6jiUSkaUZH2appqQRZfA5xLM9E+ZMq9iRktUWkKXSWUeRKOdizNSs+HtbCTiblqy
|
9
|
-
IWwpSR2yJAg4/fHAC25X7DoOSCs6ENfl2ZuhOIISLykZHsT17ni22dqdCMnUDDl6
|
10
|
-
YWsQcygfxDezC9WiIGrEJJwYv1KelMvGszHWyyqOT5R/v219KN4XjTdTuYLeNL8=
|
11
|
-
=lqHA
|
12
|
-
-----END PGP SIGNATURE-----
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'lurker'
|
3
|
-
|
4
|
-
module Lurker
|
5
|
-
module ControllerSpecWatcher
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
include SpecWatcher
|
8
|
-
|
9
|
-
included do
|
10
|
-
# _describe = self # RSpec::ExampleGroups::... # class
|
11
|
-
actions = [:get, :post, :put, :delete, :patch]
|
12
|
-
actions.each do |verb|
|
13
|
-
send(:define_method, "#{verb}_with_lurker") do |*params|
|
14
|
-
@__action, @__request_params = params
|
15
|
-
@__request_params ||= {}
|
16
|
-
|
17
|
-
send("#{verb}_without_lurker", @__action, @__request_params)
|
18
|
-
|
19
|
-
@__query_params = Hash[@__request_params.reject { |k,_| path_params.keys.include? k } .map do |k,v|
|
20
|
-
[k.to_s, v.to_s]
|
21
|
-
end]
|
22
|
-
endpoint_path = explicit_path(@__example)
|
23
|
-
|
24
|
-
return if endpoint_path.nil? # not lurker
|
25
|
-
|
26
|
-
if inside_rails_controller_spec?
|
27
|
-
if endpoint_path == true
|
28
|
-
endpoint_path = path_regexp
|
29
|
-
elsif endpoint_path.to_s.match(/^[^\/]/)
|
30
|
-
endpoint_path = "#{path_regexp}-#{endpoint_path.gsub(/[^[[:alnum:]]]/, '_')}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
if endpoint_path.blank?
|
35
|
-
raise Lurker::ValidationError.new(<<-MSG.gsub(/^ {14}/, '')
|
36
|
-
cannot determine path for .lurker, please, do it explicitly:
|
37
|
-
it "tests", lurker: 'some-lurker-file-suffix' do
|
38
|
-
...
|
39
|
-
end
|
40
|
-
MSG
|
41
|
-
)
|
42
|
-
end
|
43
|
-
|
44
|
-
verify(verb, endpoint_path)
|
45
|
-
end
|
46
|
-
|
47
|
-
begin
|
48
|
-
send :alias_method_chain, verb, :lurker
|
49
|
-
rescue NameError
|
50
|
-
if verb == :patch
|
51
|
-
alias_method :patch_without_lurker, :put_without_lurker
|
52
|
-
alias_method :patch, :patch_with_lurker
|
53
|
-
else
|
54
|
-
raise
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
around do |example|
|
60
|
-
wrapper(example)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
if defined?(RSpec)
|
67
|
-
RSpec.configure do |config|
|
68
|
-
config.include Lurker::ControllerSpecWatcher, type: :controller
|
69
|
-
end
|
70
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'lurker'
|
3
|
-
|
4
|
-
module Lurker
|
5
|
-
module RequestSpecWatcher
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
include SpecWatcher
|
8
|
-
|
9
|
-
included do
|
10
|
-
# _describe = self # RSpec::ExampleGroups::... # class
|
11
|
-
actions = [:get, :post, :put, :delete, :patch]
|
12
|
-
actions.each do |verb|
|
13
|
-
send(:define_method, "#{verb}_with_lurker") do |*params|
|
14
|
-
@__action, @__request_params, @__env = params
|
15
|
-
|
16
|
-
@__request_params ||= {}
|
17
|
-
@__query_params ||= {}
|
18
|
-
@__env ||= {}
|
19
|
-
|
20
|
-
if @__action.is_a?(Symbol)
|
21
|
-
unless @__example.metadata.described_class.is_a?(Class)
|
22
|
-
raise 'cannot determine request url: provide proper described class like: "describe MyController do"'
|
23
|
-
end
|
24
|
-
controller_name = @__example.metadata.described_class.name.tableize.gsub(/_controllers$/, '')
|
25
|
-
@__action = URI.parse(url_for({ controller: controller_name, action: @__action }.merge(@__request_params))).path
|
26
|
-
end
|
27
|
-
|
28
|
-
@__query_params.merge! ::Rack::Utils.parse_query URI.parse(@__action).query
|
29
|
-
|
30
|
-
send("#{verb}_without_lurker", @__action, @__request_params, @__env)
|
31
|
-
|
32
|
-
endpoint_path = explicit_path(@__example)
|
33
|
-
|
34
|
-
return if endpoint_path.nil? # not lurker
|
35
|
-
|
36
|
-
if inside_rails_controller_spec?
|
37
|
-
if endpoint_path == true
|
38
|
-
endpoint_path = path_regexp
|
39
|
-
elsif endpoint_path.to_s.match(/^[^\/]/)
|
40
|
-
endpoint_path = "#{path_regexp}-#{endpoint_path.gsub(/[^[[:alnum:]]]/, '_')}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
if endpoint_path.blank?
|
45
|
-
raise Lurker::ValidationError.new(<<-MSG.gsub(/^ {14}/, '')
|
46
|
-
cannot determine path for .lurker, please, do it explicitly:
|
47
|
-
it "tests", lurker: 'some-lurker-file-suffix' do
|
48
|
-
...
|
49
|
-
end
|
50
|
-
MSG
|
51
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
verify(verb, endpoint_path)
|
55
|
-
end
|
56
|
-
|
57
|
-
begin
|
58
|
-
send :alias_method_chain, verb, :lurker
|
59
|
-
rescue NameError
|
60
|
-
if verb == :patch
|
61
|
-
alias_method :patch_without_lurker, :put_without_lurker
|
62
|
-
alias_method :patch, :patch_with_lurker
|
63
|
-
else
|
64
|
-
raise
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
around do |example|
|
70
|
-
wrapper(example)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
if defined?(RSpec)
|
77
|
-
RSpec.configure do |config|
|
78
|
-
config.include Lurker::RequestSpecWatcher, type: :request
|
79
|
-
end
|
80
|
-
end
|
data/lib/lurker/spec_watcher.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
module Lurker
|
2
|
-
module SpecWatcher
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
private
|
6
|
-
|
7
|
-
def wrapper(example)
|
8
|
-
# _it = self # RSpec::ExampleGroups::... # instance
|
9
|
-
@__example = example
|
10
|
-
@__lurker_service = if defined?(Rails)
|
11
|
-
Lurker::Service.new(Rails.root.join(Lurker::DEFAULT_SERVICE_PATH).to_s, Rails.application.class.parent_name)
|
12
|
-
else
|
13
|
-
Lurker::Service.default_service
|
14
|
-
end
|
15
|
-
|
16
|
-
example.run.tap do |result|
|
17
|
-
unless result.is_a? Exception
|
18
|
-
@__lurker_service.persist! #rescue nil
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def verify(verb, endpoint_path)
|
24
|
-
if successful = Lurker.decide_success(response_params, real_response.status)
|
25
|
-
@__request_params.stringify_keys! # FIXME
|
26
|
-
@__lurker_service.verify!(
|
27
|
-
verb, endpoint_path, extensions.merge(path_params: path_params),
|
28
|
-
parsed_request_params(@__request_params), response_params,
|
29
|
-
real_response.status, successful
|
30
|
-
)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def extensions
|
35
|
-
@extensions = {
|
36
|
-
path_info: request.env['PATH_INFO'],
|
37
|
-
method: request.env['REQUEST_METHOD'],
|
38
|
-
suffix: ''
|
39
|
-
}
|
40
|
-
if (suffix = explicit_path(@__example)).is_a?(String)
|
41
|
-
@extensions[:suffix] = suffix.gsub(/[^[[:alnum:]]]/, '_')
|
42
|
-
end
|
43
|
-
if @__query_params.present?
|
44
|
-
@extensions[:query_params] = @__query_params
|
45
|
-
end
|
46
|
-
@extensions
|
47
|
-
end
|
48
|
-
|
49
|
-
def path_regexp
|
50
|
-
@__path_regexp ||= current_route_params.first.try(:path).try(:spec).to_s.sub('(.:format)', '')
|
51
|
-
end
|
52
|
-
|
53
|
-
def path_params
|
54
|
-
@__path_params ||= current_route_params.last || {}
|
55
|
-
end
|
56
|
-
|
57
|
-
# ActionDispatch::Journey::Route || nil
|
58
|
-
def current_route_params
|
59
|
-
return [@__current_route, @__path_params] if @__current_route && @__path_params
|
60
|
-
router.recognize(request) do |route, _, parameters|
|
61
|
-
return [@__current_route = route, @__path_params = parameters]
|
62
|
-
end
|
63
|
-
[] # never?
|
64
|
-
end
|
65
|
-
|
66
|
-
# ActionDispatch::Journey::Router
|
67
|
-
def router
|
68
|
-
Rails.application.routes.router
|
69
|
-
end
|
70
|
-
|
71
|
-
def parsed_request_params request_params
|
72
|
-
if request_params.kind_of?(Hash)
|
73
|
-
request_params
|
74
|
-
else
|
75
|
-
begin
|
76
|
-
JSON.parse(request_params)
|
77
|
-
rescue
|
78
|
-
{}
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def explicit_path(_example=nil)
|
84
|
-
if _example && _example.respond_to?(:metadata)
|
85
|
-
_example.metadata[:lurker]
|
86
|
-
elsif defined?(::RSpec) && ::RSpec.respond_to?(:current_example) # Rspec 3
|
87
|
-
::RSpec.current_example.metadata[:lurker]
|
88
|
-
elsif respond_to?(:example) # Rspec 2
|
89
|
-
example.metadata[:lurker]
|
90
|
-
else # Rspec 1.3.2
|
91
|
-
opts = {}
|
92
|
-
__send__(:example_group_hierarchy).each do |example|
|
93
|
-
opts.merge!(example.options)
|
94
|
-
end
|
95
|
-
opts.merge!(options)
|
96
|
-
opts[:lurker]
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def inside_rails_controller_spec?
|
101
|
-
defined?(ActionController::Base) && respond_to?(:controller) && controller.is_a?(ActionController::Base)
|
102
|
-
end
|
103
|
-
|
104
|
-
def real_response
|
105
|
-
if respond_to? :response
|
106
|
-
# we are on rails
|
107
|
-
response
|
108
|
-
else
|
109
|
-
# we are on sinatra
|
110
|
-
last_response
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def response_params
|
115
|
-
begin
|
116
|
-
JSON.parse(real_response.body)
|
117
|
-
rescue
|
118
|
-
{}
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
require 'lurker/controller_spec_watcher'
|
124
|
-
require 'lurker/request_spec_watcher'
|
metadata.gz.asc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN PGP SIGNATURE-----
|
2
|
-
Version: GnuPG v1
|
3
|
-
Comment: GPGTools - http://gpgtools.org
|
4
|
-
|
5
|
-
iQEcBAABCgAGBQJTccHSAAoJENcoxKfNVdjbi5EIALmXJQep/uEQJRyXv+ALjEk8
|
6
|
-
kkMWaIplQ4eTug39IbYdfRGjf5PstX7kAC3qXCg127FJ2qoLUqajfoN3rFfP/nsC
|
7
|
-
CNQqiTED5jew812Dcg7A7EYghiiwg0wU1zQirI22uBur2em9fCwdz4lIYguWGYFW
|
8
|
-
07EeFA80NiW+fKAG9dILZzZCCNzUFrutNoMiDiLuPXc47bAX8uK4+6M+L6R/r4vx
|
9
|
-
qgFY3Pt0BII2rcXo0RG+iVfN10qaGXw1qpkv7x0xdSGAnL+Ly7WjFeri05UdyJl2
|
10
|
-
cOSfW3LojNurm/yrB4w6kA9mB8Z0FM0tRU6wN1Jaab1SAR4UsfcizOgw0CNbukI=
|
11
|
-
=ax3i
|
12
|
-
-----END PGP SIGNATURE-----
|