lurker 0.6.0 → 0.6.1
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.hound.yml +15 -0
- data/.rubocop.yml +15 -0
- data/README.md +19 -4
- data/Rakefile +1 -1
- data/certs/razum2um.pem +21 -0
- data/features/atom_persistent_within_the_same_type.feature +138 -0
- data/features/controller_schema_scaffolding.feature +5 -1
- data/features/multitype_request_support.feature +139 -0
- data/features/request_schema_scaffolding.feature +6 -4
- data/features/schema_updating_within_test_suite.feature +138 -0
- data/features/test_endpoint.feature +6 -3
- data/lib/lurker.rb +20 -4
- data/lib/lurker/cli.rb +2 -3
- data/lib/lurker/endpoint.rb +63 -28
- data/lib/lurker/presenters/endpoint_presenter.rb +10 -4
- data/lib/lurker/schema.rb +14 -16
- data/lib/lurker/schema_modifier.rb +46 -0
- data/lib/lurker/schema_modifier/array.rb +28 -0
- data/lib/lurker/schema_modifier/atom.rb +88 -0
- data/lib/lurker/schema_modifier/hash.rb +30 -0
- data/lib/lurker/service.rb +2 -6
- data/lib/lurker/spy.rb +1 -1
- data/lib/lurker/templates/layouts/application.html.erb +1 -0
- data/lib/lurker/version.rb +1 -1
- data/lurker.gemspec +13 -10
- data/templates/generate_stuff.rb +25 -3
- data/templates/lurker_app.rb +17 -2
- metadata +135 -68
- metadata.gz.sig +2 -0
- checksums.yaml.gz.asc +0 -12
- data.tar.gz.asc +0 -12
- data/lib/lurker/endpoint_scaffold.rb +0 -135
- metadata.gz.asc +0 -12
@@ -0,0 +1,46 @@
|
|
1
|
+
module Lurker
|
2
|
+
class SchemaModifier
|
3
|
+
class << self
|
4
|
+
def merge!(schema, data)
|
5
|
+
new(schema, data).merge!
|
6
|
+
end
|
7
|
+
|
8
|
+
def append!(schema, data)
|
9
|
+
new(schema, data).append!
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(schema, data)
|
14
|
+
@schema = schema
|
15
|
+
@data = data
|
16
|
+
end
|
17
|
+
|
18
|
+
def merge!
|
19
|
+
modifier_klass.new(@schema).merge!(@data)
|
20
|
+
end
|
21
|
+
|
22
|
+
def append!
|
23
|
+
schema_klass.new(@schema).append!(@data)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def schema_klass
|
29
|
+
klass_from_type(@schema)
|
30
|
+
end
|
31
|
+
|
32
|
+
def modifier_klass
|
33
|
+
klass_from_type(@data)
|
34
|
+
end
|
35
|
+
|
36
|
+
def klass_from_type(anything)
|
37
|
+
if anything.kind_of?(::Hash)
|
38
|
+
Lurker::SchemaModifier::Hash
|
39
|
+
elsif anything.kind_of?(::Array)
|
40
|
+
Lurker::SchemaModifier::Array
|
41
|
+
else
|
42
|
+
Lurker::SchemaModifier::Atom
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Lurker
|
2
|
+
class SchemaModifier
|
3
|
+
class Array
|
4
|
+
def initialize(json_schema_hash)
|
5
|
+
@array = json_schema_hash
|
6
|
+
end
|
7
|
+
|
8
|
+
def merge!(data)
|
9
|
+
build_array
|
10
|
+
|
11
|
+
data.each do |value|
|
12
|
+
Lurker::SchemaModifier.merge!(@array["items"], value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def append!(data)
|
17
|
+
@array << data
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def build_array
|
23
|
+
@array["type"] ||= "array"
|
24
|
+
@array["items"] ||= {}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Lurker
|
2
|
+
class SchemaModifier
|
3
|
+
class Atom
|
4
|
+
TYPE_MAP = {
|
5
|
+
"Fixnum" => "integer",
|
6
|
+
"Float" => "number",
|
7
|
+
"Hash" => "object",
|
8
|
+
"Time" => "string",
|
9
|
+
"TrueClass" => "boolean",
|
10
|
+
"FalseClass" => "boolean",
|
11
|
+
"NilClass" => "null"
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
DATE_TIME_FORMAT = "date-time".freeze
|
15
|
+
COLOR_FORMAT = "color".freeze
|
16
|
+
URI_FORMAT = "uri".freeze
|
17
|
+
|
18
|
+
def initialize(json_schema_hash)
|
19
|
+
@atom = json_schema_hash
|
20
|
+
end
|
21
|
+
|
22
|
+
def merge!(data)
|
23
|
+
atom = build_atom(data)
|
24
|
+
combined? ? append_new(atom) : combine_with(atom)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def combine_with(atom)
|
30
|
+
return @atom.clear.merge!(atom) unless @atom.key?("type")
|
31
|
+
|
32
|
+
if @atom["type"] != atom["type"]
|
33
|
+
existing_atom = @atom.dup
|
34
|
+
@atom.clear
|
35
|
+
@atom["anyOf"] = [existing_atom, atom]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def append_new(atom)
|
40
|
+
# TODO : If example empty - fill from duplicate
|
41
|
+
return if !!@atom["anyOf"].detect { |atm| atm["type"] == atom["type"] }
|
42
|
+
|
43
|
+
@atom["anyOf"] << atom
|
44
|
+
end
|
45
|
+
|
46
|
+
def combined?
|
47
|
+
!!@atom["anyOf"]
|
48
|
+
end
|
49
|
+
|
50
|
+
def build_atom(data)
|
51
|
+
atom = {
|
52
|
+
"description" => "",
|
53
|
+
"type" => guess_type(data),
|
54
|
+
"example" => data
|
55
|
+
}
|
56
|
+
|
57
|
+
if format = guess_format(data)
|
58
|
+
atom["format"] = format
|
59
|
+
end
|
60
|
+
|
61
|
+
atom
|
62
|
+
end
|
63
|
+
|
64
|
+
def guess_type(data)
|
65
|
+
in_type = data.class.to_s
|
66
|
+
TYPE_MAP[in_type] || in_type.downcase
|
67
|
+
end
|
68
|
+
|
69
|
+
def guess_format(data)
|
70
|
+
if data.kind_of?(Time)
|
71
|
+
DATE_TIME_FORMAT
|
72
|
+
elsif data.kind_of?(String)
|
73
|
+
if data.start_with? "http://"
|
74
|
+
URI_FORMAT
|
75
|
+
elsif data.match(/\#[0-9a-fA-F]{3}(?:[0-9a-fA-F]{3})?\b/)
|
76
|
+
COLOR_FORMAT
|
77
|
+
else
|
78
|
+
begin
|
79
|
+
DATE_TIME_FORMAT if Time.iso8601(data)
|
80
|
+
rescue
|
81
|
+
nil
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end # class Atom
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Lurker
|
2
|
+
class SchemaModifier
|
3
|
+
class Hash
|
4
|
+
def initialize(json_schema_hash)
|
5
|
+
@hash = json_schema_hash
|
6
|
+
end
|
7
|
+
|
8
|
+
def merge!(data)
|
9
|
+
build_hash
|
10
|
+
|
11
|
+
data.each do |name, value|
|
12
|
+
unless @hash[name]
|
13
|
+
@hash["properties"][name] ||= {}
|
14
|
+
Lurker::SchemaModifier.merge!(@hash["properties"][name], value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def build_hash
|
22
|
+
@hash["description"] ||= ""
|
23
|
+
@hash["type"] ||= "object"
|
24
|
+
@hash["additionalProperties"] = false if @hash["additionalProperties"].nil?
|
25
|
+
@hash["required"] ||= []
|
26
|
+
@hash["properties"] ||= {}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/lurker/service.rb
CHANGED
@@ -57,13 +57,9 @@ class Lurker::Service
|
|
57
57
|
endpoint_path = path_for(verb, path)
|
58
58
|
endpoint_fname = Dir["#{endpoint_path}*"].first
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
else
|
63
|
-
Lurker::EndpointScaffold.new(endpoint_path, path_params, self)
|
60
|
+
Lurker::Endpoint.new(endpoint_fname || endpoint_path, path_params, self).tap do |ep|
|
61
|
+
@opened_endpoints << ep
|
64
62
|
end
|
65
|
-
@opened_endpoints << endpoint
|
66
|
-
endpoint
|
67
63
|
end
|
68
64
|
|
69
65
|
def endpoint_paths
|
data/lib/lurker/spy.rb
CHANGED
@@ -72,7 +72,7 @@ module Lurker
|
|
72
72
|
|
73
73
|
def self.on(options={}, &block)
|
74
74
|
require 'lurker/spec_helper' unless defined? Lurker::SpecHelper
|
75
|
-
(Thread.current[:lurker_spy]
|
75
|
+
(Thread.current[:lurker_spy] = new(options, &block)).tap do |spy|
|
76
76
|
spy.call
|
77
77
|
end
|
78
78
|
end
|
data/lib/lurker/version.rb
CHANGED
data/lurker.gemspec
CHANGED
@@ -7,11 +7,13 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "lurker"
|
8
8
|
spec.version = Lurker::VERSION
|
9
9
|
spec.authors = ["Vlad Bokov"]
|
10
|
-
spec.email = ["
|
11
|
-
spec.summary = %q{
|
12
|
-
spec.description = %q{
|
10
|
+
spec.email = ["bokov.vlad@gmail.com"]
|
11
|
+
spec.summary = %q{Get pretty, documented and visible API}
|
12
|
+
spec.description = %q{The new de-facto for API testing your Rails application}
|
13
13
|
spec.homepage = "http://github.com/razum2um/lurker"
|
14
14
|
spec.license = "MIT"
|
15
|
+
spec.cert_chain = ['certs/razum2um.pem']
|
16
|
+
spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
|
15
17
|
|
16
18
|
spec.files = `git ls-files`.split($/)
|
17
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
@@ -20,15 +22,10 @@ Gem::Specification.new do |spec|
|
|
20
22
|
|
21
23
|
spec.add_dependency("json", "~> 1.7")
|
22
24
|
spec.add_dependency("json-schema", "~> 2.2")
|
23
|
-
spec.add_dependency("kramdown", "~> 1.3")
|
24
25
|
spec.add_dependency("thor", "~> 0.19")
|
25
|
-
spec.add_dependency("diffy", "~> 3.0")
|
26
26
|
spec.add_dependency("sinatra", "~> 1.4")
|
27
|
-
spec.add_dependency("
|
28
|
-
spec.add_dependency("
|
29
|
-
spec.add_dependency("wkhtmltopdf-binary", "~> 0.9")
|
30
|
-
# spec.add_dependency("coderay", "~> 1.0")
|
31
|
-
spec.add_dependency("hashie", "~> 2.1")
|
27
|
+
spec.add_dependency("hashie", "~> 2.0")
|
28
|
+
spec.add_dependency("activesupport", ">= 3.2", "< 4.2")
|
32
29
|
|
33
30
|
# testing
|
34
31
|
spec.add_development_dependency("psych", "~> 2.0")
|
@@ -46,9 +43,15 @@ Gem::Specification.new do |spec|
|
|
46
43
|
|
47
44
|
spec.add_development_dependency("simplecov", "~> 0.7")
|
48
45
|
spec.add_development_dependency("coveralls", "~> 0.7")
|
46
|
+
spec.add_development_dependency("rubocop", "~> 0.21")
|
49
47
|
|
50
48
|
# FIXME: these gems are needed while cucumber runs
|
51
49
|
# inner Gemfile isn"t getting used, but lib"s one
|
52
50
|
spec.add_development_dependency("rspec-rails", "~> 2.14")
|
53
51
|
spec.add_development_dependency("pg", "~> 0.16")
|
52
|
+
spec.add_development_dependency("kramdown", "~> 1.3")
|
53
|
+
spec.add_development_dependency("diffy", "~> 3.0")
|
54
|
+
spec.add_development_dependency("execjs", "~> 2.0")
|
55
|
+
spec.add_development_dependency("pdfkit", "~> 0.6")
|
56
|
+
spec.add_development_dependency("wkhtmltopdf-binary", "~> 0.9")
|
54
57
|
end
|
data/templates/generate_stuff.rb
CHANGED
@@ -53,6 +53,12 @@ route <<-ROUTE
|
|
53
53
|
resources :repos
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
namespace :v2 do
|
58
|
+
resources :users do
|
59
|
+
resources :repos
|
60
|
+
end
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
get '/robots.txt', to: proc { |env| [
|
@@ -66,7 +72,7 @@ ROUTE
|
|
66
72
|
|
67
73
|
remove_file 'public/robots.txt'
|
68
74
|
|
69
|
-
generate 'model User name:string --no-timestamps --no-test-framework --no-migration'
|
75
|
+
generate 'model User name:string surname:string --no-timestamps --no-test-framework --no-migration'
|
70
76
|
generate 'model Repo user:references name:string --no-timestamps --no-test-framework --no-migration'
|
71
77
|
|
72
78
|
file 'config/initializers/serializer.rb', force: true do
|
@@ -99,6 +105,10 @@ inject_into_class 'app/models/user.rb', 'User' do
|
|
99
105
|
include ExactOrderAsJson
|
100
106
|
has_many :repos
|
101
107
|
validates :name, presence: true
|
108
|
+
|
109
|
+
def surname
|
110
|
+
read_attribute(:surname).to_s
|
111
|
+
end
|
102
112
|
CODE
|
103
113
|
end
|
104
114
|
|
@@ -178,7 +188,7 @@ file 'app/controllers/api/v1/users_controller.rb', 'Api::V1::UsersController', f
|
|
178
188
|
def user_params
|
179
189
|
@user_params = params[:user]
|
180
190
|
if @user_params.respond_to? :permit
|
181
|
-
@user_params.permit(:name)
|
191
|
+
@user_params.permit(:name, :surname)
|
182
192
|
else
|
183
193
|
@user_params
|
184
194
|
end
|
@@ -249,6 +259,18 @@ file 'app/controllers/api/v1/repos_controller.rb', 'Api::V1::ReposController', f
|
|
249
259
|
CODE
|
250
260
|
end
|
251
261
|
|
262
|
+
file 'app/controllers/api/v2/users_controller.rb', 'Api::V2::UsersController', force: true do
|
263
|
+
<<-CODE
|
264
|
+
class Api::V2::UsersController < Api::V1::UsersController;end
|
265
|
+
CODE
|
266
|
+
end
|
267
|
+
|
268
|
+
file 'app/controllers/api/v2/repos_controller.rb', 'Api::V2::ReposController', force: true do
|
269
|
+
<<-CODE
|
270
|
+
class Api::V2::ReposController < Api::V1::ReposController; end
|
271
|
+
CODE
|
272
|
+
end
|
273
|
+
|
252
274
|
# FIXME: uninitialized constant User (NameError) in last creation line
|
253
275
|
append_to_file 'config/environment.rb' do
|
254
276
|
<<-CODE
|
@@ -373,8 +395,8 @@ file 'db/schema.rb', force: true do
|
|
373
395
|
|
374
396
|
create_table "users", :force => true do |t|
|
375
397
|
t.string "name"
|
398
|
+
t.string "surname"
|
376
399
|
end
|
377
400
|
end
|
378
401
|
CODE
|
379
402
|
end
|
380
|
-
|
data/templates/lurker_app.rb
CHANGED
@@ -3,6 +3,11 @@ gem 'rspec-rails'
|
|
3
3
|
gem 'spring-commands-rspec'
|
4
4
|
gem 'database_cleaner'
|
5
5
|
gem 'simplecov', '~> 0.7.1', require: false
|
6
|
+
gem 'kramdown', '~> 1.3'
|
7
|
+
gem 'pdfkit', '~> 0.5'
|
8
|
+
gem 'wkhtmltopdf-binary', '~> 0.9'
|
9
|
+
gem 'execjs'
|
10
|
+
gem 'coderay'
|
6
11
|
|
7
12
|
unless ENV['TRAVIS']
|
8
13
|
if RUBY_VERSION > '2.0.0'
|
@@ -17,10 +22,20 @@ gem 'unicorn', group: :production
|
|
17
22
|
gem 'therubyracer', group: :production
|
18
23
|
|
19
24
|
append_to_file 'Gemfile' do
|
25
|
+
gem = if ENV['TRAVIS']
|
26
|
+
"gem 'lurker', github: 'razum2um/lurker', branch: 'master'"
|
27
|
+
else
|
28
|
+
origin = `cd ../.. && git config --get remote.origin.url`.scan(/github\.com.(.*).git/).flatten.first.strip rescue 'razum2um/lurker'
|
29
|
+
branch = `cd ../.. && git rev-parse --abbrev-ref HEAD`.strip rescue 'master'
|
30
|
+
"gem 'lurker', github: '#{origin}', branch: '#{branch}'"
|
31
|
+
end
|
32
|
+
|
20
33
|
<<-CODE
|
21
34
|
|
22
|
-
# new line above is important
|
23
|
-
|
35
|
+
# new line above is important, branch is also important
|
36
|
+
# please, dont commit here: "gem 'lurker', path: '../../'"
|
37
|
+
# as I deploy this app instantly with this Gemfile
|
38
|
+
#{gem}
|
24
39
|
CODE
|
25
40
|
end
|
26
41
|
|
metadata
CHANGED
@@ -1,14 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lurker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vlad Bokov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApib2tv
|
14
|
+
di52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
|
15
|
+
b20wHhcNMTQwNTIwMjAyOTAyWhcNMTUwNTIwMjAyOTAyWjBBMRMwEQYDVQQDDApi
|
16
|
+
b2tvdi52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
|
17
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCibrb/aiZX3kWo
|
18
|
+
Fmzo3gvGBFS9N18Q5rp9UTJRc4KxZQOay2WcgLjy1oU61r2Urjz3VDT4sg/yw3N3
|
19
|
+
YXIPqSTRl+OPIaafe45TVpF4mtMSsc1Gm/O3Sfoz6URiMd9iDtc2sTpaMgatL4pV
|
20
|
+
EExER9emjrmElRFknJD65E3gVDX7KXvrZYYAScJR33DADIGUgpuyHm29S7G/4WAy
|
21
|
+
ol6XfmPx+x5rM49QytGSNCQDYQ3SMMCo9wKkEm3Zcx0O4qhO8INevl/mvkAWLhOA
|
22
|
+
+0qldtuUx9wbBQ0D0wVR8LTafqWrIUHQjWXqrhWBqXhYeR3jj5aehBhpPFclHuKU
|
23
|
+
5GeILZrFAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
24
|
+
BBSiidH2CEJmkza+NBBJNLcnzQX57TAfBgNVHREEGDAWgRRib2tvdi52bGFkQGdt
|
25
|
+
YWlsLmNvbTAfBgNVHRIEGDAWgRRib2tvdi52bGFkQGdtYWlsLmNvbTANBgkqhkiG
|
26
|
+
9w0BAQUFAAOCAQEAVEyF63kQT9HKm3YIw1WzLvuOMvEUThzBomMMsTp9CGXWvem6
|
27
|
+
wZdMhxykwk1lga0OwsCn+wr1tWZ/cNeWqGSY00vTfLWdriK60xuRW7zT1Z5tmxbD
|
28
|
+
dq2ULdhII/qCFQlzDB/+IptO1rJLzfxTckoArmeYtkBV6LaVd7wpaRZnw0Apm93e
|
29
|
+
ph03YddPDbB34xTivvu4d6BBbKGxj/YN+1NLD9rMi6FspgcA4P1UlmKqyCluTbZj
|
30
|
+
vzKbYclpJ7gENr/xiTjGqA/Md3zJMzmsFrzUXt4RVmo5SaCyZjC6gFfhSr+PODc7
|
31
|
+
ZaSbckvH/+m4boAsg0JkGGFcS3j5fgNmdwgA1A==
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
date: 2014-05-26 00:00:00.000000000 Z
|
12
34
|
dependencies:
|
13
35
|
- !ruby/object:Gem::Dependency
|
14
36
|
name: json
|
@@ -38,20 +60,6 @@ dependencies:
|
|
38
60
|
- - "~>"
|
39
61
|
- !ruby/object:Gem::Version
|
40
62
|
version: '2.2'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: kramdown
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.3'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.3'
|
55
63
|
- !ruby/object:Gem::Dependency
|
56
64
|
name: thor
|
57
65
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +74,6 @@ dependencies:
|
|
66
74
|
- - "~>"
|
67
75
|
- !ruby/object:Gem::Version
|
68
76
|
version: '0.19'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: diffy
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '3.0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '3.0'
|
83
77
|
- !ruby/object:Gem::Dependency
|
84
78
|
name: sinatra
|
85
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +89,7 @@ dependencies:
|
|
95
89
|
- !ruby/object:Gem::Version
|
96
90
|
version: '1.4'
|
97
91
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
92
|
+
name: hashie
|
99
93
|
requirement: !ruby/object:Gem::Requirement
|
100
94
|
requirements:
|
101
95
|
- - "~>"
|
@@ -109,47 +103,25 @@ dependencies:
|
|
109
103
|
- !ruby/object:Gem::Version
|
110
104
|
version: '2.0'
|
111
105
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
106
|
+
name: activesupport
|
113
107
|
requirement: !ruby/object:Gem::Requirement
|
114
108
|
requirements:
|
115
|
-
- - "
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0.6'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
109
|
+
- - ">="
|
123
110
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
125
|
-
-
|
126
|
-
name: wkhtmltopdf-binary
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
111
|
+
version: '3.2'
|
112
|
+
- - "<"
|
130
113
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
114
|
+
version: '4.2'
|
132
115
|
type: :runtime
|
133
116
|
prerelease: false
|
134
117
|
version_requirements: !ruby/object:Gem::Requirement
|
135
118
|
requirements:
|
136
|
-
- - "
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.9'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: hashie
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
119
|
+
- - ">="
|
144
120
|
- !ruby/object:Gem::Version
|
145
|
-
version: '2
|
146
|
-
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
121
|
+
version: '3.2'
|
122
|
+
- - "<"
|
151
123
|
- !ruby/object:Gem::Version
|
152
|
-
version: '2
|
124
|
+
version: '4.2'
|
153
125
|
- !ruby/object:Gem::Dependency
|
154
126
|
name: psych
|
155
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -352,6 +324,20 @@ dependencies:
|
|
352
324
|
- - "~>"
|
353
325
|
- !ruby/object:Gem::Version
|
354
326
|
version: '0.7'
|
327
|
+
- !ruby/object:Gem::Dependency
|
328
|
+
name: rubocop
|
329
|
+
requirement: !ruby/object:Gem::Requirement
|
330
|
+
requirements:
|
331
|
+
- - "~>"
|
332
|
+
- !ruby/object:Gem::Version
|
333
|
+
version: '0.21'
|
334
|
+
type: :development
|
335
|
+
prerelease: false
|
336
|
+
version_requirements: !ruby/object:Gem::Requirement
|
337
|
+
requirements:
|
338
|
+
- - "~>"
|
339
|
+
- !ruby/object:Gem::Version
|
340
|
+
version: '0.21'
|
355
341
|
- !ruby/object:Gem::Dependency
|
356
342
|
name: rspec-rails
|
357
343
|
requirement: !ruby/object:Gem::Requirement
|
@@ -380,10 +366,79 @@ dependencies:
|
|
380
366
|
- - "~>"
|
381
367
|
- !ruby/object:Gem::Version
|
382
368
|
version: '0.16'
|
383
|
-
|
384
|
-
|
369
|
+
- !ruby/object:Gem::Dependency
|
370
|
+
name: kramdown
|
371
|
+
requirement: !ruby/object:Gem::Requirement
|
372
|
+
requirements:
|
373
|
+
- - "~>"
|
374
|
+
- !ruby/object:Gem::Version
|
375
|
+
version: '1.3'
|
376
|
+
type: :development
|
377
|
+
prerelease: false
|
378
|
+
version_requirements: !ruby/object:Gem::Requirement
|
379
|
+
requirements:
|
380
|
+
- - "~>"
|
381
|
+
- !ruby/object:Gem::Version
|
382
|
+
version: '1.3'
|
383
|
+
- !ruby/object:Gem::Dependency
|
384
|
+
name: diffy
|
385
|
+
requirement: !ruby/object:Gem::Requirement
|
386
|
+
requirements:
|
387
|
+
- - "~>"
|
388
|
+
- !ruby/object:Gem::Version
|
389
|
+
version: '3.0'
|
390
|
+
type: :development
|
391
|
+
prerelease: false
|
392
|
+
version_requirements: !ruby/object:Gem::Requirement
|
393
|
+
requirements:
|
394
|
+
- - "~>"
|
395
|
+
- !ruby/object:Gem::Version
|
396
|
+
version: '3.0'
|
397
|
+
- !ruby/object:Gem::Dependency
|
398
|
+
name: execjs
|
399
|
+
requirement: !ruby/object:Gem::Requirement
|
400
|
+
requirements:
|
401
|
+
- - "~>"
|
402
|
+
- !ruby/object:Gem::Version
|
403
|
+
version: '2.0'
|
404
|
+
type: :development
|
405
|
+
prerelease: false
|
406
|
+
version_requirements: !ruby/object:Gem::Requirement
|
407
|
+
requirements:
|
408
|
+
- - "~>"
|
409
|
+
- !ruby/object:Gem::Version
|
410
|
+
version: '2.0'
|
411
|
+
- !ruby/object:Gem::Dependency
|
412
|
+
name: pdfkit
|
413
|
+
requirement: !ruby/object:Gem::Requirement
|
414
|
+
requirements:
|
415
|
+
- - "~>"
|
416
|
+
- !ruby/object:Gem::Version
|
417
|
+
version: '0.6'
|
418
|
+
type: :development
|
419
|
+
prerelease: false
|
420
|
+
version_requirements: !ruby/object:Gem::Requirement
|
421
|
+
requirements:
|
422
|
+
- - "~>"
|
423
|
+
- !ruby/object:Gem::Version
|
424
|
+
version: '0.6'
|
425
|
+
- !ruby/object:Gem::Dependency
|
426
|
+
name: wkhtmltopdf-binary
|
427
|
+
requirement: !ruby/object:Gem::Requirement
|
428
|
+
requirements:
|
429
|
+
- - "~>"
|
430
|
+
- !ruby/object:Gem::Version
|
431
|
+
version: '0.9'
|
432
|
+
type: :development
|
433
|
+
prerelease: false
|
434
|
+
version_requirements: !ruby/object:Gem::Requirement
|
435
|
+
requirements:
|
436
|
+
- - "~>"
|
437
|
+
- !ruby/object:Gem::Version
|
438
|
+
version: '0.9'
|
439
|
+
description: The new de-facto for API testing your Rails application
|
385
440
|
email:
|
386
|
-
-
|
441
|
+
- bokov.vlad@gmail.com
|
387
442
|
executables:
|
388
443
|
- lurker
|
389
444
|
extensions: []
|
@@ -391,24 +446,30 @@ extra_rdoc_files: []
|
|
391
446
|
files:
|
392
447
|
- ".gitignore"
|
393
448
|
- ".gitmodules"
|
449
|
+
- ".hound.yml"
|
394
450
|
- ".rspec"
|
451
|
+
- ".rubocop.yml"
|
395
452
|
- ".travis.yml"
|
396
453
|
- Gemfile
|
397
454
|
- LICENSE.txt
|
398
455
|
- README.md
|
399
456
|
- Rakefile
|
400
457
|
- bin/lurker
|
458
|
+
- certs/razum2um.pem
|
401
459
|
- cucumber.yml
|
402
460
|
- features/README.md
|
461
|
+
- features/atom_persistent_within_the_same_type.feature
|
403
462
|
- features/controller_nested_schema_scaffolding.feature
|
404
463
|
- features/controller_schema_scaffolding.feature
|
405
464
|
- features/html_generation.feature
|
406
465
|
- features/minitest.feature
|
407
466
|
- features/multidomain_support.feature
|
467
|
+
- features/multitype_request_support.feature
|
408
468
|
- features/partials.feature
|
409
469
|
- features/request_nested_schema_scaffolding.feature
|
410
470
|
- features/request_schema_scaffolding.feature
|
411
471
|
- features/schema_suffixes.feature
|
472
|
+
- features/schema_updating_within_test_suite.feature
|
412
473
|
- features/step_definitions/additional_cli_steps.rb
|
413
474
|
- features/support/env.rb
|
414
475
|
- features/test_endpoint.feature
|
@@ -420,7 +481,6 @@ files:
|
|
420
481
|
- lib/lurker/capistrano.rb
|
421
482
|
- lib/lurker/cli.rb
|
422
483
|
- lib/lurker/endpoint.rb
|
423
|
-
- lib/lurker/endpoint_scaffold.rb
|
424
484
|
- lib/lurker/engine.rb
|
425
485
|
- lib/lurker/erb_schema_context.rb
|
426
486
|
- lib/lurker/form_builder.rb
|
@@ -437,6 +497,10 @@ files:
|
|
437
497
|
- lib/lurker/response.rb
|
438
498
|
- lib/lurker/sandbox.rb
|
439
499
|
- lib/lurker/schema.rb
|
500
|
+
- lib/lurker/schema_modifier.rb
|
501
|
+
- lib/lurker/schema_modifier/array.rb
|
502
|
+
- lib/lurker/schema_modifier/atom.rb
|
503
|
+
- lib/lurker/schema_modifier/hash.rb
|
440
504
|
- lib/lurker/server.rb
|
441
505
|
- lib/lurker/service.rb
|
442
506
|
- lib/lurker/spec_helper.rb
|
@@ -520,18 +584,21 @@ rubyforge_project:
|
|
520
584
|
rubygems_version: 2.2.2
|
521
585
|
signing_key:
|
522
586
|
specification_version: 4
|
523
|
-
summary:
|
587
|
+
summary: Get pretty, documented and visible API
|
524
588
|
test_files:
|
525
589
|
- features/README.md
|
590
|
+
- features/atom_persistent_within_the_same_type.feature
|
526
591
|
- features/controller_nested_schema_scaffolding.feature
|
527
592
|
- features/controller_schema_scaffolding.feature
|
528
593
|
- features/html_generation.feature
|
529
594
|
- features/minitest.feature
|
530
595
|
- features/multidomain_support.feature
|
596
|
+
- features/multitype_request_support.feature
|
531
597
|
- features/partials.feature
|
532
598
|
- features/request_nested_schema_scaffolding.feature
|
533
599
|
- features/request_schema_scaffolding.feature
|
534
600
|
- features/schema_suffixes.feature
|
601
|
+
- features/schema_updating_within_test_suite.feature
|
535
602
|
- features/step_definitions/additional_cli_steps.rb
|
536
603
|
- features/support/env.rb
|
537
604
|
- features/test_endpoint.feature
|