apipie-bindings 0.2.0 → 0.4.0

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
- SHA1:
3
- metadata.gz: 6e8560165daeb6cae4d2530f42a9adc58e1511e3
4
- data.tar.gz: 9291144917dc1a6111ba60e01de1096338c47b3a
2
+ SHA256:
3
+ metadata.gz: 5c27168a737308891f84a0437f14b21247d4054651f698f888ef3a5e80dced00
4
+ data.tar.gz: 6d68349f382e9282d5674db0e175280d05952ea35004a6dc525d896b93ae46c6
5
5
  SHA512:
6
- metadata.gz: 59e41d190c6bf09379b1a2b9b7f6f56923a1f9e4adb3289e49a61c61fc23d6c6831c1e57e0273c4b6f1a5cb6f067db502016812e5c3d2c13c093f307060e7891
7
- data.tar.gz: 360e2e4781f437a0627b015acfb59de2cd291e9c66941d21c548fab65dacf164f3a5fbb88f037125be78ff1f3d7bdee640ed31e5c8c34eba6a620b5ae5317b30
6
+ metadata.gz: eeb6522be945abe8c90588ac382751e4cf0ece7b898ae233def0a73d9d621264ee5bb4494e5da4921a75cde2af8fe078be3aa4875441e54390417b9948ff75b5
7
+ data.tar.gz: 1ac904b2c5e2ea670246619fe8d1e5b3450cc7567f716692506311e0ce5a0130191862e71e9ef253fcb87437a88fa9213ab3e93b57a902f7d0f6c056c2c18f04
@@ -1,5 +1,25 @@
1
1
  Release notes
2
2
  =============
3
+ ### 0.4.0 (2020-05-29)
4
+ * support Ruby 2.7 ([PR #79](https://github.com/Apipie/apipie-bindings/pull/79))
5
+
6
+ ### 0.3.0 (2019-10-25)
7
+ * Add token based auth mechanism ([PR #77](https://github.com/Apipie/apipie-bindings/pull/77))
8
+ * Throw malformed examples ([PR #78](https://github.com/Apipie/apipie-bindings/pull/78))
9
+
10
+ ### 0.2.3 (2019-01-16)
11
+ * Remove error log output from specs ([PR #76](https://github.com/Apipie/apipie-bindings/pull/76))
12
+ * Update apidoc_cache_name apidoc ([PR #74](https://github.com/Apipie/apipie-bindings/pull/74))
13
+ * Fix typo in api docs ([PR #75](https://github.com/Apipie/apipie-bindings/pull/75))
14
+ * Fix typo in param test ([PR #73](https://github.com/Apipie/apipie-bindings/pull/73))
15
+
16
+ ### 0.2.2 (2018-01-09)
17
+ * modernize ruby versions ([PR #71](https://github.com/Apipie/apipie-bindings/pull/71))
18
+
19
+ ### 0.2.1 (2018-01-06)
20
+ * Do not allow NIL as a route parameter ([PR #70](https://github.com/Apipie/apipie-bindings/pull/70)) ([#22009](http://projects.theforeman.org/issues/22009))
21
+ * update cache on error responses ([PR #67](https://github.com/Apipie/apipie-bindings/pull/67))
22
+ * pin oauth to support ruby < 2.0.0 ([PR #69](https://github.com/Apipie/apipie-bindings/pull/69))
3
23
 
4
24
  ### 0.2.0 (2017-04-24)
5
25
  * Support for overriding exceptions from authorizers ([PR #64](https://github.com/Apipie/apipie-bindings/pull/64))
@@ -41,14 +41,14 @@ module ApipieBindings
41
41
  def examples
42
42
  apidoc[:examples].map do |example|
43
43
  ApipieBindings::Example.parse(example)
44
- end
44
+ end.compact
45
45
  end
46
46
 
47
47
  def find_route(params={})
48
48
  sorted_routes = routes.sort_by { |r| [-1 * r.params_in_path.count, r.path] }
49
49
 
50
50
  suitable_route = sorted_routes.find do |route|
51
- route.params_in_path.all? { |path_param| params.keys.map(&:to_s).include?(path_param) }
51
+ route.params_in_path.all? { |path_param| !params[path_param.to_sym].nil? || !params[path_param].nil? }
52
52
  end
53
53
 
54
54
  suitable_route ||= sorted_routes.last
@@ -29,7 +29,7 @@ module ApipieBindings
29
29
  # directory for building apidoc_cache_dir
30
30
  # @option config [String] :apidoc_cache_dir (apidoc_cache_base_dir+'/<URI>') where
31
31
  # to cache the JSON description of the API
32
- # @option config [String] :apidoc_cache_name ('default.json') name of te cache file.
32
+ # @option config [String] :apidoc_cache_name ('default') name of the cache file.
33
33
  # If there is cache in the :apidoc_cache_dir, it is used.
34
34
  # @option config [String] :apidoc_authenticated (true) whether or not does the call to
35
35
  # obtain API description use authentication. It is useful to avoid unnecessary prompts
@@ -135,7 +135,7 @@ module ApipieBindings
135
135
  end
136
136
 
137
137
  def apidoc
138
- @apidoc = @apidoc || load_apidoc || retrieve_apidoc
138
+ @apidoc ||= load_apidoc || retrieve_apidoc
139
139
  @apidoc
140
140
  end
141
141
 
@@ -160,7 +160,7 @@ module ApipieBindings
160
160
 
161
161
  # Call an action in the API.
162
162
  # It finds most fitting route based on given parameters
163
- # with other attributes neccessary to do an API call.
163
+ # with other attributes necessary to do an API call.
164
164
  # If in dry_run mode {#initialize} it finds fake response data in examples
165
165
  # or user provided data. At the end when the response format is JSON it
166
166
  # is parsed and returned as ruby objects. If server supports checksum sending
@@ -242,6 +242,9 @@ module ApipieBindings
242
242
  rescue => e
243
243
  log.error e.message
244
244
  log.debug inspect_data(e)
245
+ if e.respond_to?(:response) && e.response.respond_to?(:headers)
246
+ update_cache(e.response.headers[:apipie_checksum])
247
+ end
245
248
  override_e = @authenticator.error(e) if authenticate && @authenticator
246
249
  raise override_e.is_a?(StandardError) ? override_e : e
247
250
  end
@@ -277,7 +280,7 @@ module ApipieBindings
277
280
  end
278
281
 
279
282
  def retrieve_apidoc
280
- FileUtils.mkdir_p(@apidoc_cache_dir) unless File.exists?(@apidoc_cache_dir)
283
+ FileUtils.mkdir_p(@apidoc_cache_dir) unless File.exist?(@apidoc_cache_dir)
281
284
  if language
282
285
  response = retrieve_apidoc_call("/apidoc/v#{@api_version}.#{language}.json", :safe => true)
283
286
  language_family = language.split('_').first
@@ -1,3 +1,4 @@
1
1
  require 'apipie_bindings/authenticators/basic_auth'
2
2
  require 'apipie_bindings/authenticators/credentials_legacy'
3
3
  require 'apipie_bindings/authenticators/oauth'
4
+ require 'apipie_bindings/authenticators/token_auth'
@@ -0,0 +1,15 @@
1
+ require 'apipie_bindings/authenticators/base'
2
+
3
+ module ApipieBindings
4
+ module Authenticators
5
+ class TokenAuth < Base
6
+ def initialize(token)
7
+ @token = token
8
+ end
9
+
10
+ def authenticate(req, token)
11
+ req['Authorization'] = "Bearer #{@token}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -14,7 +14,7 @@ module ApipieBindings
14
14
 
15
15
  def self.parse(example)
16
16
  prep = /(\w+)\ ([^\n]*)\n?(.*)?\n(\d+)\n(.*)/m.match(example)
17
- new(*prep[1..5])
17
+ new(*prep[1..5]) if prep
18
18
  end
19
19
  end
20
20
 
@@ -16,7 +16,7 @@ module ApipieBindings
16
16
  end
17
17
 
18
18
  unless RestClient.before_execution_procs.include? RestClient::AUTHENTICATOR_EXTENSION
19
- RestClient.add_before_execution_proc &RestClient::AUTHENTICATOR_EXTENSION
19
+ RestClient.add_before_execution_proc(&RestClient::AUTHENTICATOR_EXTENSION)
20
20
  end
21
21
  end
22
22
  end
@@ -17,10 +17,10 @@ module ApipieBindings
17
17
  def path(params=nil)
18
18
  return @path if params.nil?
19
19
 
20
- path = params_in_path.inject(@path) do |p, param_name|
20
+ params_in_path.inject(@path) do |p, param_name|
21
21
  param_value = (params[param_name.to_sym] or params[param_name.to_s]) or
22
22
  raise ArgumentError, "missing param '#{param_name}' in parameters"
23
- p.sub(":#{param_name}", URI.escape(param_value.to_s))
23
+ p.sub(":#{param_name}", CGI.escape(param_value.to_s))
24
24
  end
25
25
  end
26
26
 
@@ -1,5 +1,5 @@
1
1
  module ApipieBindings
2
2
  def self.version
3
- @version ||= Gem::Version.new '0.2.0'
3
+ @version ||= Gem::Version.new '0.4.0'
4
4
  end
5
5
  end
@@ -1,6 +1,18 @@
1
1
  class CommentsController < ApplicationController
2
2
  include Concerns::DummyConcern
3
3
 
4
+ api!
5
+ api :GET, "archive/comments/:id/"
6
+ api :GET, "archive/users/:user_id/comments/:id/"
7
+ param :id, Integer, :required => true
8
+ param :user_id, Integer
9
+ param :post_id, Integer
10
+ def archive
11
+ params[:user_id] ||= 1
12
+ params[:post_id] ||= 1
13
+ render :json => Dummy::Store.show(base_path)
14
+ end
15
+
4
16
  protected
5
17
 
6
18
  def base_path
@@ -6,4 +6,6 @@ Rails.application.routes.draw do
6
6
  resources :comments
7
7
  end
8
8
  end
9
+ get 'archive/users/:user_id/comment/:id', :to => 'comments#show'
10
+ get 'archive/comment/:id', :to => 'comments#show'
9
11
  end
@@ -2,8 +2,9 @@ require File.join(File.dirname(__FILE__), 'test_helper')
2
2
 
3
3
  describe ApipieBindings::Action do
4
4
 
5
- let(:resource) { ApipieBindings::API.new({:apidoc_cache_dir => 'test/unit/data',
6
- :apidoc_cache_name => 'dummy'}).resource(:users) }
5
+ let(:dummy_api) { ApipieBindings::API.new({:apidoc_cache_dir => 'test/unit/data',
6
+ :apidoc_cache_name => 'dummy'}) }
7
+ let(:resource) { dummy_api.resource(:users)}
7
8
 
8
9
  it "should allow user to call the action" do
9
10
  params = { :a => 1 }
@@ -16,8 +17,21 @@ describe ApipieBindings::Action do
16
17
  resource.action(:index).routes.first.must_be_kind_of ApipieBindings::Route
17
18
  end
18
19
 
19
- it "should find suitable route" do
20
- resource.action(:index).find_route.path.must_equal "/users"
20
+ describe "#find_route" do
21
+ let(:archive_action) { dummy_api.resource(:comments).action(:archive) }
22
+
23
+ it "should find suitable route" do
24
+ resource.action(:index).find_route.path.must_equal "/users"
25
+ end
26
+
27
+ it "should find longest matching route" do
28
+ archive_action.find_route(:id => 1, :user_id => 1).path.must_equal "/archive/users/:user_id/comments/:id"
29
+ end
30
+
31
+ it "should find longest matching route ignoring nil params in the path" do
32
+ archive_action.find_route(:id => 1, :user_id => nil).path.must_equal "/archive/comments/:id"
33
+ end
34
+
21
35
  end
22
36
 
23
37
  it "should return params" do
@@ -46,7 +60,7 @@ describe ApipieBindings::Action do
46
60
  e = proc do
47
61
  resource.action(:create).validate!({ :user => { :vip => true } })
48
62
  end.must_raise(ApipieBindings::MissingArgumentsError)
49
- e.message.must_match /: user\[name\]$/
63
+ e.message.must_match(/: user\[name\]$/)
50
64
  end
51
65
 
52
66
  it "should raise on missing nested required params (hash)" do
@@ -60,7 +74,7 @@ describe ApipieBindings::Action do
60
74
  }
61
75
  })
62
76
  end.must_raise(ApipieBindings::MissingArgumentsError)
63
- e.message.must_match /: user\[address\]\[city\]$/
77
+ e.message.must_match(/: user\[address\]\[city\]$/)
64
78
  end
65
79
 
66
80
  it "should raise on missing nested required params (array)" do
@@ -74,7 +88,7 @@ describe ApipieBindings::Action do
74
88
  }
75
89
  })
76
90
  end.must_raise(ApipieBindings::MissingArgumentsError)
77
- e.message.must_match /: user\[contacts\]\[0\]\[contact\]$/
91
+ e.message.must_match(/: user\[contacts\]\[0\]\[contact\]$/)
78
92
  end
79
93
 
80
94
  it "should raise on invalid param format" do
@@ -89,8 +103,8 @@ describe ApipieBindings::Action do
89
103
  }
90
104
  })
91
105
  end.must_raise(ApipieBindings::InvalidArgumentTypesError)
92
- e.message.must_match /user\[contacts\]\[0\] - Hash was expected/
93
- e.message.must_match /user\[contacts\]\[1\] - Hash was expected/
106
+ e.message.must_match(/user\[contacts\]\[0\] - Hash was expected/)
107
+ e.message.must_match(/user\[contacts\]\[1\] - Hash was expected/)
94
108
  end
95
109
 
96
110
  it "should accept minimal correct params" do
@@ -117,7 +131,7 @@ describe ApipieBindings::Action do
117
131
  end
118
132
 
119
133
  it "should have name visible in puts" do
120
- out, err = capture_io { puts resource.action(:index) }
134
+ out, _err = capture_io { puts resource.action(:index) }
121
135
  out.must_equal "<Action users:index>\n"
122
136
  end
123
137
 
@@ -76,7 +76,7 @@ describe ApipieBindings::API do
76
76
  request_args = RestClient.version >= '1.8.0' ? args.last.args : args.last
77
77
  request_args[:method] == :post && request_args[:params] == {:file => s} && request_args[:headers] == headers
78
78
  end
79
- result = api.http_call(:post, '/api/path', {:file => s}, headers, {:response => :raw})
79
+ api.http_call(:post, '/api/path', {:file => s}, headers, {:response => :raw})
80
80
  end
81
81
 
82
82
  it "should process nil response safely" do
@@ -229,7 +229,8 @@ describe ApipieBindings::API do
229
229
  :uri => 'http://example.com',
230
230
  :api_version => 2,
231
231
  :apidoc_cache_base_dir => cache_dir,
232
- :authenticator => authenticator
232
+ :authenticator => authenticator,
233
+ :logger => Logger.new(File::NULL)
233
234
  }
234
235
  base_params.merge(params)
235
236
  end
@@ -371,7 +372,10 @@ describe ApipieBindings::API do
371
372
  it "should call clear_credentials when doing authenticated call and auth error is raised" do
372
373
  Dir.mktmpdir do |dir|
373
374
  credentials = ApipieBindings::AbstractCredentials.new
374
- api = ApipieBindings::API.new({:uri => 'http://example.com', :apidoc_cache_base_dir => dir, :api_version => 2,
375
+ api = ApipieBindings::API.new({:uri => 'http://example.com',
376
+ :logger => Logger.new(File::NULL),
377
+ :apidoc_cache_base_dir => dir,
378
+ :api_version => 2,
375
379
  :credentials => credentials})
376
380
  credentials.expects(:clear)
377
381
  api.stubs(:call_client).raises(RestClient::Unauthorized)
@@ -1 +1 @@
1
- {"docs":{"name":"Dummy","info":"Another API description","copyright":null,"doc_url":"./apipie/1.0","api_url":"/","resources":{"posts":{"doc_url":"./apipie/1.0/posts","api_url":"/","name":"Posts","short_description":null,"full_description":null,"version":"1.0","formats":null,"metadata":null,"methods":[{"doc_url":"./apipie/1.0/posts/index","name":"index","apis":[{"api_url":"/users/:user_id/posts","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/posts/show","name":"show","apis":[{"api_url":"/users/:user_id/posts/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/posts/create","name":"create","apis":[{"api_url":"/users/:user_id/posts","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/posts/update","name":"update","apis":[{"api_url":"/users/:user_id/posts/:id","http_method":"PATCH","short_description":null,"deprecated":null},{"api_url":"/users/:user_id/posts/:id","http_method":"PUT","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/posts/destroy","name":"destroy","apis":[{"api_url":"/users/:user_id/posts/:id","http_method":"DELETE","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]}]},"users":{"doc_url":"./apipie/1.0/users","api_url":"/","name":"Users","short_description":null,"full_description":null,"version":"1.0","formats":null,"metadata":null,"methods":[{"doc_url":"./apipie/1.0/users/index","name":"index","apis":[{"api_url":"/users","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":["GET /users\n200\n[ {\"user\":{\"name\":\"John Doe\" }} ]\n"],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/users/show","name":"show","apis":[{"api_url":"/users/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/users/create","name":"create","apis":[{"api_url":"/users","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[{"name":"user","full_name":"user","description":"","required":false,"allow_nil":false,"validator":"Must be a Hash","expected_type":"hash","metadata":null,"show":true,"params":[{"name":"name","full_name":"user[name]","description":"","required":true,"allow_nil":false,"validator":"Must be String","expected_type":"string","metadata":null,"show":true},{"name":"vip","full_name":"user[vip]","description":"","required":false,"allow_nil":false,"validator":"Must be 'true' or 'false'","expected_type":"boolean","metadata":null,"show":true},{"name":"address","full_name":"user[address]","description":"","required":false,"allow_nil":false,"validator":"Must be a Hash","expected_type":"hash","metadata":null,"show":true,"params":[{"name":"city","full_name":"user[address][city]","description":"","required":true,"allow_nil":false,"validator":"Must be String","expected_type":"string","metadata":null,"show":true},{"name":"street","full_name":"user[address][street]","description":"","required":false,"allow_nil":false,"validator":"Must be String","expected_type":"string","metadata":null,"show":true}]},{"name":"contacts","full_name":"user[contacts]","description":"","required":false,"allow_nil":false,"validator":"Must be an Array of nested elements","expected_type":"array","metadata":null,"show":true,"params":[{"name":"contact","full_name":"user[contacts][contact]","description":"","required":true,"allow_nil":false,"validator":"Must be String","expected_type":"string","metadata":null,"show":true},{"name":"kind","full_name":"user[contacts][kind]","description":"","required":false,"allow_nil":false,"validator":"Must be String","expected_type":"string","metadata":null,"show":true}]}]}],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/users/update","name":"update","apis":[{"api_url":"/users/:id","http_method":"PATCH","short_description":null,"deprecated":null},{"api_url":"/users/:id","http_method":"PUT","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/users/destroy","name":"destroy","apis":[{"api_url":"/users/:id","http_method":"DELETE","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/users/create_unnested","name":"create_unnested","apis":[{"api_url":"/users/create_unnested","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[{"name":"name","full_name":"name","description":"","required":true,"allow_nil":false,"validator":"Must be String","expected_type":"string","metadata":null,"show":true}],"examples":[],"metadata":null,"see":[]}]},"comments":{"doc_url":"./apipie/1.0/comments","api_url":"/","name":"Comments","short_description":null,"full_description":null,"version":"1.0","formats":null,"metadata":null,"methods":[{"doc_url":"./apipie/1.0/comments/index","name":"index","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/comments/show","name":"show","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/comments/create","name":"create","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/comments/update","name":"update","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"PATCH","short_description":null,"deprecated":null},{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"PUT","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]},{"doc_url":"./apipie/1.0/comments/destroy","name":"destroy","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"DELETE","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[]}]}},"link_extension":".html"}}
1
+ {"docs":{"name":"Dummy","info":"\n\u003cp\u003eAnother API description\u003c/p\u003e\n","copyright":null,"doc_url":"./apipie/1.0","api_url":"/","resources":{"posts":{"doc_url":"./apipie/1.0/posts","api_url":"/","name":"Posts","short_description":null,"full_description":null,"version":"1.0","formats":null,"metadata":null,"methods":[{"doc_url":"./apipie/1.0/posts/index","name":"index","apis":[{"api_url":"/users/:user_id/posts","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/posts/show","name":"show","apis":[{"api_url":"/users/:user_id/posts/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/posts/create","name":"create","apis":[{"api_url":"/users/:user_id/posts","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/posts/update","name":"update","apis":[{"api_url":"/users/:user_id/posts/:id","http_method":"PATCH","short_description":null,"deprecated":null},{"api_url":"/users/:user_id/posts/:id","http_method":"PUT","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/posts/destroy","name":"destroy","apis":[{"api_url":"/users/:user_id/posts/:id","http_method":"DELETE","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true}],"headers":null,"deprecated":null},"users":{"doc_url":"./apipie/1.0/users","api_url":"/","name":"Users","short_description":null,"full_description":null,"version":"1.0","formats":null,"metadata":null,"methods":[{"doc_url":"./apipie/1.0/users/index","name":"index","apis":[{"api_url":"/users","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":["GET /users\n200\n[ {\"user\":{\"name\":\"John Doe\" }} ]\n"],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/users/show","name":"show","apis":[{"api_url":"/users/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/users/create","name":"create","apis":[{"api_url":"/users","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[{"name":"user","full_name":"user","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be a Hash","expected_type":"hash","metadata":null,"show":true,"validations":[],"params":[{"name":"name","full_name":"user[name]","description":"","required":true,"allow_nil":false,"allow_blank":false,"validator":"Must be a String","expected_type":"string","metadata":null,"show":true,"validations":[]},{"name":"vip","full_name":"user[vip]","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be one of: \u003ccode\u003etrue\u003c/code\u003e, \u003ccode\u003efalse\u003c/code\u003e, \u003ccode\u003e1\u003c/code\u003e, \u003ccode\u003e0\u003c/code\u003e","expected_type":"boolean","metadata":null,"show":true,"validations":[]},{"name":"address","full_name":"user[address]","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be a Hash","expected_type":"hash","metadata":null,"show":true,"validations":[],"params":[{"name":"city","full_name":"user[address][city]","description":"","required":true,"allow_nil":false,"allow_blank":false,"validator":"Must be a String","expected_type":"string","metadata":null,"show":true,"validations":[]},{"name":"street","full_name":"user[address][street]","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be a String","expected_type":"string","metadata":null,"show":true,"validations":[]}]},{"name":"contacts","full_name":"user[contacts]","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be an Array of nested elements","expected_type":"array","metadata":null,"show":true,"validations":[],"params":[{"name":"contact","full_name":"user[contacts][contact]","description":"","required":true,"allow_nil":false,"allow_blank":false,"validator":"Must be a String","expected_type":"string","metadata":null,"show":true,"validations":[]},{"name":"kind","full_name":"user[contacts][kind]","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be a String","expected_type":"string","metadata":null,"show":true,"validations":[]}]}]}],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/users/update","name":"update","apis":[{"api_url":"/users/:id","http_method":"PATCH","short_description":null,"deprecated":null},{"api_url":"/users/:id","http_method":"PUT","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/users/destroy","name":"destroy","apis":[{"api_url":"/users/:id","http_method":"DELETE","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/users/create_unnested","name":"create_unnested","apis":[{"api_url":"/users/create_unnested","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[{"name":"name","full_name":"name","description":"","required":true,"allow_nil":false,"allow_blank":false,"validator":"Must be a String","expected_type":"string","metadata":null,"show":true,"validations":[]}],"examples":[],"metadata":null,"see":[],"headers":[],"show":true}],"headers":null,"deprecated":null},"comments":{"doc_url":"./apipie/1.0/comments","api_url":"/","name":"Comments","short_description":null,"full_description":null,"version":"1.0","formats":null,"metadata":null,"methods":[{"doc_url":"./apipie/1.0/comments/index","name":"index","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/comments/show","name":"show","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"GET","short_description":null,"deprecated":null},{"api_url":"/archive/users/:user_id/comment/:id","http_method":"GET","short_description":null,"deprecated":null},{"api_url":"/archive/comment/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/comments/create","name":"create","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments","http_method":"POST","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/comments/update","name":"update","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"PATCH","short_description":null,"deprecated":null},{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"PUT","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/comments/destroy","name":"destroy","apis":[{"api_url":"/users/:user_id/posts/:post_id/comments/:id","http_method":"DELETE","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[],"examples":[],"metadata":null,"see":[],"headers":[],"show":true},{"doc_url":"./apipie/1.0/comments/archive","name":"archive","apis":[{"api_url":"/archive/comments/:id","http_method":"GET","short_description":null,"deprecated":null},{"api_url":"/archive/users/:user_id/comments/:id","http_method":"GET","short_description":null,"deprecated":null}],"formats":null,"full_description":"","errors":[],"params":[{"name":"id","full_name":"id","description":"","required":true,"allow_nil":false,"allow_blank":false,"validator":"Must be a Integer","expected_type":"numeric","metadata":null,"show":true,"validations":[]},{"name":"user_id","full_name":"user_id","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be a Integer","expected_type":"numeric","metadata":null,"show":true,"validations":[]},{"name":"post_id","full_name":"post_id","description":"","required":false,"allow_nil":false,"allow_blank":false,"validator":"Must be a Integer","expected_type":"numeric","metadata":null,"show":true,"validations":[]}],"examples":[],"metadata":null,"see":[],"headers":[],"show":true}],"headers":null,"deprecated":null}},"link_extension":".html"}}
@@ -32,7 +32,7 @@ describe ApipieBindings::Param do
32
32
  param.expected_type.must_equal :hash
33
33
  end
34
34
 
35
- it "should have description taht strip html tags" do
35
+ it "should have description that strip html tags" do
36
36
  param.description.must_equal "Architecture"
37
37
  end
38
38
 
@@ -46,7 +46,7 @@ describe ApipieBindings::Param do
46
46
  end
47
47
 
48
48
  it "should have full name, type and required visible in puts" do
49
- out, err = capture_io { puts param }
49
+ out, _err = capture_io { puts param }
50
50
  out.must_equal "<Param *architecture (Hash)>\n"
51
51
  end
52
52
 
@@ -34,7 +34,7 @@ describe ApipieBindings::Resource do
34
34
  end
35
35
 
36
36
  it "should have name visible in puts" do
37
- out, err = capture_io { puts resource }
37
+ out, _err = capture_io { puts resource }
38
38
  out.must_equal "<Resource :users>\n"
39
39
  end
40
40
 
@@ -24,7 +24,7 @@ describe ApipieBindings::Route do
24
24
  end
25
25
 
26
26
  it "should have path visible in puts" do
27
- out, err = capture_io { puts route }
27
+ out, _err = capture_io { puts route }
28
28
  out.must_equal "<Route /api/architectures/:id>\n"
29
29
  end
30
30
 
@@ -12,6 +12,6 @@ SimpleCov.root Pathname.new(File.dirname(__FILE__) + "../../../")
12
12
  require 'minitest/autorun'
13
13
  require 'minitest/spec'
14
14
  require "minitest-spec-context"
15
- require "mocha/setup"
15
+ require "mocha/minitest"
16
16
 
17
17
  require 'apipie_bindings'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apipie-bindings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Bačovský
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-24 00:00:00.000000000 Z
11
+ date: 2020-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -62,16 +62,16 @@ dependencies:
62
62
  name: rake
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 10.1.0
67
+ version: 12.3.3
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 10.1.0
74
+ version: 12.3.3
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: thor
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -118,16 +118,16 @@ dependencies:
118
118
  name: simplecov
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - "<"
121
+ - - ">="
122
122
  - !ruby/object:Gem::Version
123
- version: 0.9.0
123
+ version: '0'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - "<"
128
+ - - ">="
129
129
  - !ruby/object:Gem::Version
130
- version: 0.9.0
130
+ version: '0'
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: mocha
133
133
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +185,7 @@ files:
185
185
  - lib/apipie_bindings/authenticators/basic_auth.rb
186
186
  - lib/apipie_bindings/authenticators/credentials_legacy.rb
187
187
  - lib/apipie_bindings/authenticators/oauth.rb
188
+ - lib/apipie_bindings/authenticators/token_auth.rb
188
189
  - lib/apipie_bindings/credentials.rb
189
190
  - lib/apipie_bindings/example.rb
190
191
  - lib/apipie_bindings/exceptions.rb
@@ -248,7 +249,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
248
249
  requirements:
249
250
  - - ">="
250
251
  - !ruby/object:Gem::Version
251
- version: 1.8.7
252
+ version: 2.0.0
252
253
  required_rubygems_version: !ruby/object:Gem::Requirement
253
254
  requirements:
254
255
  - - ">="
@@ -256,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
256
257
  version: '0'
257
258
  requirements: []
258
259
  rubyforge_project:
259
- rubygems_version: 2.5.2
260
+ rubygems_version: 2.7.6.2
260
261
  signing_key:
261
262
  specification_version: 4
262
263
  summary: The Ruby bindings for Apipie documented APIs