mini-apivore 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f843825109df656e8ed68801085c7ffe3317f4c02e3ce23a38250e30c2c0cc2e
4
- data.tar.gz: d3a79254c76ea5828e3eda3b05cce7133c507e791ccf8699697942b00f54c2da
3
+ metadata.gz: 55d58253430c43d1c28701361502f0b394e142bb80a4fde28c297b75ca3fc6bf
4
+ data.tar.gz: 51f6e1590917fb7877956b31a5eb70f334ef433e9e8555720bc2d4fe5749ad72
5
5
  SHA512:
6
- metadata.gz: 81c79e4b78db0f76764f57603d45b790c4d4d099ae5f525bf8cb3f21167133e4cca9935a9ef4e530b6e906736352a9aa2f8d1500724af5331b6dc52339ab1907
7
- data.tar.gz: c8e3682d8be0b5d7fff793fe98b2c81e0c41ee984a7eb7c5559de7483d2ffcbc12ddecc33d5fce672ff5caaa7259ea45b782e996ad059af0c186c612988eb0a2
6
+ metadata.gz: 2c494d9d0be4b7632f4a8f4254777e98e57c6d0dc0e3b54e788b8c03ecc251f7956e9b61a918cb246c17b18feef79bc8625fcea4640a397c982f7ef6b7a94401
7
+ data.tar.gz: cd92cf48901af09e5000793cbce9016453cb8b1e633857039693bac1461c6659c0ad96765cf0c92a37bb8ce0976fdae1b2f8d37b0e6f7621ebedbd07f0f19047
@@ -1,26 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "mini_apivore/version"
2
4
 
3
- module ActiveSupport
4
- module Testing
5
- module Declarative
6
- # Helper to define a test method using a String. Under the hood, it replaces
7
- # spaces with underscores and defines the test method.
8
- #
9
- # test "verify something" do
10
- # ...
11
- # end
12
- def test(name, &block)
13
- test_name = "test_#{name.gsub(/\s+/, '_')}".to_sym
14
- defined = method_defined? test_name
15
- raise "#{test_name} is already defined in #{self}" if defined
16
- if block_given?
17
- define_method(test_name, &block)
18
- else
19
- define_method(test_name) do
20
- flunk "No implementation provided for #{name}"
5
+ unless defined?(ActiveSupport)
6
+ module ActiveSupport
7
+ module Testing
8
+ module Declarative
9
+ # Helper to define a test method using a String. Under the hood, it replaces
10
+ # spaces with underscores and defines the test method.
11
+ #
12
+ # test "verify something" do
13
+ # ...
14
+ # end
15
+ def test(name, &block)
16
+ test_name = "test_#{name.gsub(/\s+/, "_")}".to_sym
17
+ defined = method_defined?(test_name)
18
+ raise "#{test_name} is already defined in #{self}" if defined
19
+
20
+ if block_given?
21
+ define_method(test_name, &block)
22
+ else
23
+ define_method(test_name) do
24
+ flunk("No implementation provided for #{name}")
25
+ end
21
26
  end
22
27
  end
23
28
  end
24
29
  end
25
30
  end
26
- end unless defined?(ActiveSupport)
31
+ end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "mini_apivore/version"
2
4
 
3
5
  module MiniApivore
4
6
  # This is a workaround for json-schema's fragment validation which does not allow paths to contain forward slashes
5
7
  # current json-schema attempts to split('/') on a string path to produce an array.
6
8
  class Fragment < Array
7
- def split(options = nil)
9
+ def split(_options = nil)
8
10
  self
9
11
  end
10
12
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "mini_apivore/version"
2
4
 
3
5
  module MiniApivore
@@ -7,4 +9,4 @@ module MiniApivore
7
9
  UNPROCESSABLE_ENTITY = 422
8
10
  OK = 200
9
11
  NO_CONTENT = 204
10
- end
12
+ end
@@ -1,43 +1,51 @@
1
- require "mini_apivore/version"
2
- require 'hashie'
1
+ # frozen_string_literal: true
3
2
 
3
+ require "mini_apivore/version"
4
+ require "hashie"
4
5
 
5
6
  module MiniApivore
6
- class Swagger < Hashie::Mash
7
- NONVERB_PATH_ITEMS = %q(parameters)
7
+ class Swagger < Hash
8
+ include Hashie::Extensions::MergeInitializer
9
+ include Hashie::Extensions::IndifferentAccess
10
+
11
+ NONVERB_PATH_ITEMS = "parameters"
8
12
 
9
13
  def validate
10
14
  case version
11
- when '2.0'
12
- schema = File.read(File.expand_path("../../../data/swagger_2.0_schema.json", __FILE__))
13
- else
14
- raise "Unknown/unsupported Swagger version to validate against: #{version}"
15
+ when "2.0"
16
+ schema = File.read(File.expand_path("../../data/swagger_2.0_schema.json", __dir__))
17
+ else
18
+ raise "Unknown/unsupported Swagger version to validate against: #{version}"
15
19
  end
16
20
  JSON::Validator.fully_validate(schema, self)
17
21
  end
18
22
 
19
23
  def version
20
- swagger
24
+ self["swagger"]
21
25
  end
22
26
 
23
27
  def base_path
24
- self['basePath'] || ''
28
+ self["basePath"] || ""
25
29
  end
26
30
 
27
31
  def each_response(&block)
28
- paths.each do |path, path_data|
29
- next if vendor_specific_tag? path
32
+ self["paths"].each do |path, path_data|
33
+ next if vendor_specific_tag?(path)
34
+
30
35
  path_data.each do |verb, method_data|
31
36
  next if NONVERB_PATH_ITEMS.include?(verb)
32
- next if vendor_specific_tag? verb
33
- if method_data.responses.nil?
37
+ next if vendor_specific_tag?(verb)
38
+
39
+ if method_data["responses"].nil?
34
40
  raise "No responses found in swagger for path '#{path}', " \
35
41
  "verb #{verb}: #{method_data.inspect}"
36
42
  end
37
- method_data.responses.each do |response_code, response_data|
43
+ method_data["responses"].each do |response_code, response_data|
38
44
  schema_location = nil
39
- if response_data.schema
40
- schema_location = Fragment.new ['#', 'paths', path, verb, 'responses', response_code, 'schema']
45
+ if response_data["$ref"]
46
+ schema_location = response_data["$ref"]
47
+ elsif response_data["schema"]
48
+ schema_location = Fragment.new(["#", "paths", path, verb, "responses", response_code, "schema"])
41
49
  end
42
50
  block.call(path, verb, response_code, schema_location)
43
51
  end
@@ -45,7 +53,7 @@ module MiniApivore
45
53
  end
46
54
  end
47
55
 
48
- def vendor_specific_tag? tag
56
+ def vendor_specific_tag?(tag)
49
57
  tag =~ /\Ax-.*/
50
58
  end
51
59
  end
@@ -1,23 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "English"
1
4
  require "mini_apivore/version"
2
5
 
3
6
  module MiniApivore
4
7
  class SwaggerChecker
5
8
  PATH_TO_CHECKER_MAP = {}
6
9
 
7
- def self.instance_for(path, schema = '' )
10
+ def self.instance_for(path, schema = {})
8
11
  PATH_TO_CHECKER_MAP[path] ||= new(path, schema)
9
12
  end
10
13
 
11
14
  def has_path?(path)
12
- mappings.has_key?(path)
15
+ mappings.key?(path)
13
16
  end
14
17
 
15
18
  def has_method_at_path?(path, verb)
16
- mappings[path].has_key?(verb)
19
+ mappings[path].key?(verb)
17
20
  end
18
21
 
19
22
  def has_response_code_for_path?(path, verb, code)
20
- mappings[path][verb].has_key?(code.to_s)
23
+ mappings[path][verb].key?(code.to_s)
21
24
  end
22
25
 
23
26
  def response_codes_for_path(path, verb)
@@ -32,18 +35,17 @@ module MiniApivore
32
35
 
33
36
  def fragment(path, verb, code)
34
37
  path_fragment = mappings[path][verb.to_s][code.to_s]
35
- path_fragment.dup unless path_fragment.nil?
38
+ path_fragment&.dup
36
39
  end
37
40
 
38
41
  def remove_tested_end_point_response(path, verb, code)
39
42
  return if untested_mappings[path].nil? ||
40
43
  untested_mappings[path][verb].nil?
44
+
41
45
  untested_mappings[path][verb].delete(code.to_s)
42
- if untested_mappings[path][verb].size == 0
46
+ if untested_mappings[path][verb].size.zero?
43
47
  untested_mappings[path].delete(verb)
44
- if untested_mappings[path].size == 0
45
- untested_mappings.delete(path)
46
- end
48
+ untested_mappings.delete(path) if untested_mappings[path].size.zero?
47
49
  end
48
50
  end
49
51
 
@@ -51,20 +53,14 @@ module MiniApivore
51
53
  @swagger.base_path
52
54
  end
53
55
 
54
- def response=(response)
55
- @response = response
56
- end
57
-
58
- attr_reader :response, :swagger, :swagger_path
59
-
60
- def untested_mappings; @untested_mappings end
61
- def untested_mappings=( other ); @untested_mappings = other end
56
+ attr_accessor :response, :untested_mappings
57
+ attr_reader :swagger, :swagger_path
62
58
 
63
59
  private
64
60
 
65
61
  attr_reader :mappings
66
62
 
67
- def initialize(swagger_path, schema )
63
+ def initialize(swagger_path, schema)
68
64
  @swagger_path = swagger_path
69
65
  @schema = schema
70
66
  load_swagger_doc!
@@ -79,15 +75,15 @@ module MiniApivore
79
75
 
80
76
  def fetch_swagger!
81
77
  return @schema unless @schema.empty?
82
-
83
- if File.exist?( swagger_path )
84
- JSON.parse( File.read(swagger_path) )
78
+
79
+ if File.exist?(swagger_path)
80
+ JSON.parse(File.read(swagger_path))
85
81
  else
86
82
  session = ActionDispatch::Integration::Session.new(Rails.application)
87
83
  begin
88
84
  session.get(swagger_path)
89
- rescue
90
- fail "Unable to perform GET request for swagger json: #{swagger_path} - #{$!}."
85
+ rescue StandardError
86
+ raise "Unable to perform GET request for swagger json: #{swagger_path} - #{$ERROR_INFO}."
91
87
  end
92
88
  JSON.parse(session.response.body)
93
89
  end
@@ -98,7 +94,7 @@ module MiniApivore
98
94
  unless errors.empty?
99
95
  msg = "The document fails to validate as Swagger #{swagger.version}:\n"
100
96
  msg += errors.join("\n")
101
- fail msg
97
+ raise msg
102
98
  end
103
99
  end
104
100
 
@@ -108,6 +104,7 @@ module MiniApivore
108
104
  @mappings[path] ||= {}
109
105
  @mappings[path][verb] ||= {}
110
106
  raise "duplicate" unless @mappings[path][verb][response_code].nil?
107
+
111
108
  @mappings[path][verb][response_code] = fragment
112
109
  end
113
110
 
@@ -1,84 +1,98 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cgi"
2
4
 
3
- class Object
4
- # Alias of <tt>to_s</tt>.
5
- def to_param
6
- to_s
7
- end
5
+ unless Object.method_defined?(:to_param)
6
+ class Object
7
+ # Alias of <tt>to_s</tt>.
8
+ def to_param
9
+ to_s
10
+ end
8
11
 
9
- # Converts an object into a string suitable for use as a URL query string,
10
- # using the given <tt>key</tt> as the param name.
11
- def to_query(key)
12
- "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
12
+ # Converts an object into a string suitable for use as a URL query string,
13
+ # using the given <tt>key</tt> as the param name.
14
+ def to_query(key)
15
+ "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
16
+ end
13
17
  end
14
- end unless Object.method_defined?( :to_param )
18
+ end
15
19
 
16
- class NilClass
17
- # Returns +self+.
18
- def to_param
19
- self
20
+ unless NilClass.method_defined?(:to_param)
21
+ class NilClass
22
+ # Returns +self+.
23
+ def to_param
24
+ self
25
+ end
20
26
  end
21
- end unless NilClass.method_defined?( :to_param )
27
+ end
22
28
 
23
- class TrueClass
24
- # Returns +self+.
25
- def to_param
26
- self
29
+ unless TrueClass.method_defined?(:to_param)
30
+ class TrueClass
31
+ # Returns +self+.
32
+ def to_param
33
+ self
34
+ end
27
35
  end
28
- end unless TrueClass.method_defined?( :to_param )
36
+ end
29
37
 
30
- class FalseClass
31
- # Returns +self+.
32
- def to_param
33
- self
38
+ unless FalseClass.method_defined?(:to_param)
39
+ class FalseClass
40
+ # Returns +self+.
41
+ def to_param
42
+ self
43
+ end
34
44
  end
35
- end unless FalseClass.method_defined?( :to_param )
45
+ end
36
46
 
37
- class Array
38
- # Calls <tt>to_param</tt> on all its elements and joins the result with
39
- # slashes. This is used by <tt>url_for</tt> in Action Pack.
40
- def to_param
41
- collect(&:to_param).join "/"
42
- end
47
+ unless Array.method_defined?(:to_param)
48
+ class Array
49
+ # Calls <tt>to_param</tt> on all its elements and joins the result with
50
+ # slashes. This is used by <tt>url_for</tt> in Action Pack.
51
+ def to_param
52
+ collect(&:to_param).join("/")
53
+ end
43
54
 
44
- # Converts an array into a string suitable for use as a URL query string,
45
- # using the given +key+ as the param name.
46
- #
47
- # ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
48
- def to_query(key)
49
- prefix = "#{key}[]"
55
+ # Converts an array into a string suitable for use as a URL query string,
56
+ # using the given +key+ as the param name.
57
+ #
58
+ # ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
59
+ def to_query(key)
60
+ prefix = "#{key}[]"
50
61
 
51
- if empty?
52
- nil.to_query(prefix)
53
- else
54
- collect { |value| value.to_query(prefix) }.join "&"
62
+ if empty?
63
+ nil.to_query(prefix)
64
+ else
65
+ collect { |value| value.to_query(prefix) }.join("&")
66
+ end
55
67
  end
56
68
  end
57
- end unless Array.method_defined?( :to_param )
69
+ end
58
70
 
59
- class Hash
60
- # Returns a string representation of the receiver suitable for use as a URL
61
- # query string:
62
- #
63
- # {name: 'David', nationality: 'Danish'}.to_query
64
- # # => "name=David&nationality=Danish"
65
- #
66
- # An optional namespace can be passed to enclose key names:
67
- #
68
- # {name: 'David', nationality: 'Danish'}.to_query('user')
69
- # # => "user%5Bname%5D=David&user%5Bnationality%5D=Danish"
70
- #
71
- # The string pairs "key=value" that conform the query string
72
- # are sorted lexicographically in ascending order.
73
- #
74
- # This method is also aliased as +to_param+.
75
- def to_query(namespace = nil)
76
- collect do |key, value|
77
- unless (value.is_a?(Hash) || value.is_a?(Array)) && value.empty?
78
- value.to_query(namespace ? "#{namespace}[#{key}]" : key)
79
- end
80
- end.compact.sort! * "&"
81
- end
71
+ unless Hash.method_defined?(:to_param)
72
+ class Hash
73
+ # Returns a string representation of the receiver suitable for use as a URL
74
+ # query string:
75
+ #
76
+ # {name: 'David', nationality: 'Danish'}.to_query
77
+ # # => "name=David&nationality=Danish"
78
+ #
79
+ # An optional namespace can be passed to enclose key names:
80
+ #
81
+ # {name: 'David', nationality: 'Danish'}.to_query('user')
82
+ # # => "user%5Bname%5D=David&user%5Bnationality%5D=Danish"
83
+ #
84
+ # The string pairs "key=value" that conform the query string
85
+ # are sorted lexicographically in ascending order.
86
+ #
87
+ # This method is also aliased as +to_param+.
88
+ def to_query(namespace = nil)
89
+ collect do |key, value|
90
+ unless (value.is_a?(Hash) || value.is_a?(Array)) && value.empty?
91
+ value.to_query(namespace ? "#{namespace}[#{key}]" : key)
92
+ end
93
+ end.compact.sort! * "&"
94
+ end
82
95
 
83
- alias_method :to_param, :to_query
84
- end unless Hash.method_defined?( :to_param )
96
+ alias_method :to_param, :to_query
97
+ end
98
+ end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "mini_apivore/version"
2
4
 
3
5
  module MiniApivore
4
- module Validation # former Validator
5
-
6
+ # former Validator
7
+ module Validation
6
8
  class IndHash < Hash
7
9
  include Hashie::Extensions::MergeInitializer
8
10
  include Hashie::Extensions::IndifferentAccess
9
11
  end
10
12
 
11
- def prepare_action_env(verb, path, expected_response_code, params = {})
13
+ def prepare_action_env(verb, path, expected_response_code, **params)
12
14
  @errors = []
13
15
  @verb = verb.to_s
14
16
  @path = path.to_s
@@ -16,41 +18,45 @@ module MiniApivore
16
18
  @expected_response_code = expected_response_code.to_i
17
19
  end
18
20
 
19
- def swagger_checker; self.class.swagger_checker end
21
+ def swagger_checker
22
+ self.class.swagger_checker
23
+ end
20
24
 
21
- def check_route( verb, path, expected_response_code, params = {} )
22
- prepare_action_env( verb, path, expected_response_code, params )
23
- assert( match?, <<FAIL )
25
+ def check_route(verb, path, expected_response_code, **params)
26
+ prepare_action_env(verb, path, expected_response_code, **params)
27
+ assert(match?, <<FAIL)
24
28
  Failed at: #{prepare_error_backtrace}\n
25
- Failure message: #{failure_message},\n
26
- fullpath: #{full_path}, \n
29
+ Failure message: #{failure_message},\n#{" "}
30
+ fullpath: #{full_path}, \n#{" "}
27
31
  params causing failure:#{params}
28
32
  FAIL
29
33
  end
30
34
 
31
-
35
+ def prepare_error_backtrace
36
+ # it will deliver something like this:
37
+ # "/app/test/helpers/base_routes_helpers.rb:57:in `__create_card'",
38
+ # "/app/test/integration/cards_api_test.rb:71:in `block (2 levels) in <class:CommentsApiTest>'",
39
+ Thread.current.backtrace[2..].slice_after { |trc| trc[/check_route/] }.to_a.last[0..1]
40
+ end
32
41
 
33
42
  def match?
34
- #pre_checks
43
+ # pre_checks
35
44
  check_request_path
36
45
 
37
46
  # request
38
47
  unless has_errors?
39
- send(
48
+ action_dispatch_request(
40
49
  @verb,
41
- *action_dispatch_request_args(
42
- full_path,
43
- params: @params['_data'] || {},
44
- headers: @params['_headers'] || {}
45
- )
50
+ full_path,
51
+ params: @params["_data"] || {},
52
+ headers: @params["_headers"] || {}
46
53
  )
47
54
 
48
- #post_checks
55
+ # post_checks
49
56
  check_status_code
50
57
  check_response_is_valid unless has_errors?
51
58
 
52
-
53
- if has_errors? && response.body.length > 0
59
+ if has_errors? && response.body.length.positive?
54
60
  @errors << "\nResponse body:\n #{JSON.pretty_generate(JSON.parse(response.body))}"
55
61
  end
56
62
 
@@ -64,19 +70,19 @@ FAIL
64
70
  def check_request_path
65
71
  if !swagger_checker.has_path?(@path)
66
72
  @errors << "Swagger doc: #{swagger_checker.swagger_path} does not have"\
67
- " a documented @path for #{@path}"
73
+ " a documented @path for #{@path}"
68
74
  elsif !swagger_checker.has_method_at_path?(@path, @verb)
69
75
  @errors << "Swagger doc: #{swagger_checker.swagger_path} does not have"\
70
- " a documented @path for #{@verb} #{@path}"
76
+ " a documented @path for #{@verb} #{@path}"
71
77
  elsif !swagger_checker.has_response_code_for_path?(@path, @verb, @expected_response_code)
72
78
  @errors << "Swagger doc: #{swagger_checker.swagger_path} does not have"\
73
- " a documented response code of #{@expected_response_code} at @path"\
74
- " #{@verb} #{@path}. "\
75
- "\n Available response codes: #{swagger_checker.response_codes_for_path(@path, @verb)}"
79
+ " a documented response code of #{@expected_response_code} at @path"\
80
+ " #{@verb} #{@path}. "\
81
+ "\n Available response codes: #{swagger_checker.response_codes_for_path(@path, @verb)}"
76
82
  elsif @verb == "get" && swagger_checker.fragment(@path, @verb, @expected_response_code).nil?
77
83
  @errors << "Swagger doc: #{swagger_checker.swagger_path} missing"\
78
- " response model for get request with #{@path} for code"\
79
- " #{@expected_response_code}"
84
+ " response model for get request with #{@path} for code"\
85
+ " #{@expected_response_code}"
80
86
  end
81
87
  end
82
88
 
@@ -85,56 +91,59 @@ FAIL
85
91
  end
86
92
 
87
93
  def apivore_build_path(path, data)
88
- path.scan(/\{([^\}]*)\}/).each do |param|
94
+ path.scan(/\{([^}]*)\}/).each do |param|
89
95
  key = param.first
90
- dkey = data && ( data[key] || data[key.to_sym] )
96
+ dkey = data && (data[key] || data[key.to_sym])
91
97
  if dkey
92
- path = path.gsub "{#{key}}", dkey.to_param.to_s
98
+ path = path.gsub("{#{key}}", dkey.to_param.to_s)
93
99
  else
94
100
  raise URI::InvalidURIError, "No substitution data found for {#{key}}"\
95
- " to test the path #{path}.", caller
101
+ " to test the path #{path}.", caller
96
102
  end
97
103
  end
98
- path + (data['_query_string'] ? "?#{data['_query_string'].to_param}" : '')
104
+ path + (data["_query_string"] ? "?#{data["_query_string"].to_param}" : "")
99
105
  end
100
106
 
101
- def has_errors?; !@errors.empty? end
107
+ def has_errors?
108
+ !@errors.empty?
109
+ end
102
110
 
103
- def failure_message; @errors.join(" ") end
111
+ def failure_message
112
+ @errors.join(" ")
113
+ end
104
114
 
105
115
  def check_status_code
106
116
  if response.status != @expected_response_code
107
117
  @errors << "Path #{@path} did not respond with expected status code."\
108
- " Expected #{@expected_response_code} got #{response.status}"\
109
- end
118
+ " Expected #{@expected_response_code} got #{response.status}"\
119
+ end
110
120
  end
111
121
 
112
122
  def check_response_is_valid
113
123
  swagger_errors = swagger_checker.has_matching_document_for(
114
124
  @path, @verb, response.status, response_body
115
125
  )
116
- unless swagger_errors.empty?
117
- @errors.concat(
118
- swagger_errors.map do |e|
119
- e.sub("'#", "'#{full_path}#").gsub(
120
- /^The property|in schema.*$/,''
121
- )
122
- end
123
- )
124
- end
126
+ return if swagger_errors.empty?
127
+
128
+ @errors.concat(
129
+ swagger_errors.map do |e|
130
+ e.sub("'#", "'#{full_path}#").gsub(
131
+ /^The property|in schema.*$/, ""
132
+ )
133
+ end
134
+ )
125
135
  end
126
136
 
127
137
  def response_body
128
138
  JSON.parse(response.body) if response.body && !response.body.empty?
129
139
  end
130
140
 
131
- def action_dispatch_request_args(path, params: {}, headers: {})
141
+ def action_dispatch_request(verb, path, params: {}, headers: {})
132
142
  if defined?(ActionPack) && ActionPack::VERSION::MAJOR >= 5
133
- [path, params: params, headers: headers]
143
+ send(verb, path, params: params, headers: headers)
134
144
  else
135
- [path, params, headers]
145
+ send(verb, path, params, headers)
136
146
  end
137
147
  end
138
148
  end
139
-
140
- end
149
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mini
2
4
  module Apivore
3
- VERSION = "0.2.0"
5
+ VERSION = "0.3.1"
4
6
  end
5
7
  end
data/lib/mini_apivore.rb CHANGED
@@ -1,17 +1,24 @@
1
- require 'json-schema'
2
- require 'mini_apivore/version'
3
- require 'mini_apivore/fragment'
4
- require 'mini_apivore/swagger'
5
- require 'mini_apivore/swagger_checker'
6
- require 'mini_apivore/validation'
7
- require 'mini_apivore/http_codes'
8
- require 'mini_apivore/to_param'
1
+ # frozen_string_literal: true
2
+
3
+ require "json-schema"
4
+ require "mini_apivore/version"
5
+ require "mini_apivore/fragment"
6
+ require "mini_apivore/swagger"
7
+ require "mini_apivore/swagger_checker"
8
+ require "mini_apivore/validation"
9
+ require "mini_apivore/http_codes"
10
+ require "mini_apivore/to_param"
9
11
 
10
12
  module MiniApivore
11
13
  SWAGGER_CHECKERS = {}
12
14
  #----- Module globals -----------------
13
- def self.runnable_list; @@runnable_list ||= [] end
14
- def self.all_test_ran?; runnable_list.empty? end
15
+ def self.runnable_list
16
+ @@runnable_list ||= [] # rubocop:disable Style/ClassVars
17
+ end
18
+
19
+ def self.all_test_ran?
20
+ runnable_list.empty?
21
+ end
15
22
 
16
23
  def self.prepare_untested_errors
17
24
  errors = []
@@ -19,7 +26,7 @@ module MiniApivore
19
26
  chkr.untested_mappings.each do |path, methods|
20
27
  methods.each do |method, codes|
21
28
  codes.each do |code, _|
22
- errors << "#{method} #{path} is untested for response code #{code} in test class #{cls.to_s}"
29
+ errors << "#{method} #{path} is untested for response code #{code} in test class #{cls}"
23
30
  end
24
31
  end
25
32
  end
@@ -28,26 +35,25 @@ module MiniApivore
28
35
  end
29
36
 
30
37
  def self.included(base)
31
- base.extend ClassMethods
32
- base.include MiniApivore::Validation
38
+ base.extend(ClassMethods)
39
+ base.include(MiniApivore::Validation)
33
40
  end
34
41
 
35
42
  #---- class methods -----------
36
43
  module ClassMethods
37
-
38
- def init_swagger( swagger_path, schema= '' )
44
+ def init_swagger(swagger_path, schema = "")
39
45
  SWAGGER_CHECKERS[self] ||= MiniApivore::SwaggerChecker.instance_for(swagger_path, schema)
40
46
  end
41
47
 
42
48
  def runnable_methods
43
- super | ['final_test']
49
+ super | ["final_test"]
44
50
  end
45
51
 
46
- def test(name, &block )
47
- super( name, &block ).tap{ |sym| MiniApivore.runnable_list << "#{to_s}::#{sym}" }
52
+ def test(name, &block)
53
+ super(name, &block).tap { |sym| MiniApivore.runnable_list << "#{self}::#{sym}" }
48
54
  end
49
55
 
50
- def swagger_checker;
56
+ def swagger_checker
51
57
  SWAGGER_CHECKERS[self]
52
58
  end
53
59
  end
@@ -55,7 +61,7 @@ module MiniApivore
55
61
  #----- Minitest callback -----------
56
62
  def teardown
57
63
  super
58
- MiniApivore.runnable_list.delete( "#{self.class.to_s}::#{@NAME}" )
64
+ MiniApivore.runnable_list.delete("#{self.class}::#{@NAME}")
59
65
  end
60
66
 
61
67
  #----- test for untested routes ---------
@@ -63,13 +69,9 @@ module MiniApivore
63
69
  return unless MiniApivore.all_test_ran?
64
70
 
65
71
  @errors = MiniApivore.prepare_untested_errors
66
- assert( @errors.empty?, @errors.join("\n") )
72
+ assert(@errors.empty?, @errors.join("\n"))
67
73
 
68
74
  # preventing duplicate execution
69
- MiniApivore.runnable_list << "#{self.class.to_s}::#{__method__}_runned"
75
+ MiniApivore.runnable_list << "#{self.class}::#{__method__}_runned"
70
76
  end
71
-
72
-
73
77
  end
74
-
75
-
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini-apivore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - alekseyl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-22 00:00:00.000000000 Z
11
+ date: 2022-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: json-schema
14
+ name: hashie
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.5'
19
+ version: '3.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.5'
26
+ version: '3.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: minitest
28
+ name: json-schema
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.0'
33
+ version: '2.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '5.0'
40
+ version: '2.5'
41
41
  - !ruby/object:Gem::Dependency
42
- name: hashie
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.3'
47
+ version: '5.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.3'
54
+ version: '5.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 12.3.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-shopify
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: " Minitest adaptation of apivore gem,\n Provides
84
98
  a tool for testing your application api against your swagger schema "
85
99
  email:
@@ -120,8 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
134
  - !ruby/object:Gem::Version
121
135
  version: '0'
122
136
  requirements: []
123
- rubyforge_project:
124
- rubygems_version: 2.7.6
137
+ rubygems_version: 3.2.15
125
138
  signing_key:
126
139
  specification_version: 4
127
140
  summary: Minitest adaptation of an apivore gem