swagger_hub_api_pusher 1.0.3 → 1.0.4

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
  SHA1:
3
- metadata.gz: e37418a4d0c124179ae99b8b03bc1ff6a0cf46c5
4
- data.tar.gz: 43c7d7b6bf3f8261f3701185b42c0cbbd7976eff
3
+ metadata.gz: e18a807f363126d056e5866772a2dce3b3c07ff2
4
+ data.tar.gz: abe42036b6fa32a60c383b4b8725c982e76f869e
5
5
  SHA512:
6
- metadata.gz: c5ad856465360d4717d1fd733e85a025885273de51d6a85f6feb9bb769e3aefc387c18cc15e4e03f0a5733aceaa6f6bc2a019e8cbf9cc08b69a42237c91384b0
7
- data.tar.gz: 939bd0e4fe8471e68eed3dc7947f03920f6da363e769f81f82167fa5a583e7664a0a58882cafaf899962e6245ad94cc21c3d55d28beed608d88e9e9e1d5a5ccf
6
+ metadata.gz: 1e0df65508e8210c213804fe3970553eb8a60b6de226672bf199f073e47cf56872333404a89ac64119c2f459124a2162a4f9f15e2661c625e528304e619ccc52
7
+ data.tar.gz: 362979324edb51ffcb62843e7c0bf072e303bb36dbf1eaf38a5ee3b4a28294c488d4e79fd4df6b73bfdc043cec7c724282dad5125f09802274bd106c34fc9637
@@ -1,33 +1,76 @@
1
1
  require 'uri'
2
2
  require 'net/https'
3
+ require 'json'
3
4
 
4
5
  module SwaggerHubApiPusher
5
6
  class Pusher
6
7
  SUCCESS_STATUSES = [200, 201].freeze
7
8
  BASE_URL = 'https://api.swaggerhub.com/apis'.freeze
9
+ VERSION_REGEX = /(\d+\.)?(\d+\.)?(\*|\d+)/
8
10
 
9
11
  def execute
10
12
  raise ArgumentError, config.errors_messages unless config.valid?
11
13
 
12
- uri = URI.parse(url)
13
- request = Net::HTTP::Post.new(uri)
14
- request['Content-Type'] = 'application/json'
15
- request['Authorization'] = config.api_key
16
- request.body = File.read(config.swagger_file)
14
+ return if published_api_is_actual?
17
15
 
18
- response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
19
- http.request(request)
20
- end
16
+ response = push_swagger_file
21
17
 
22
18
  unless SUCCESS_STATUSES.include?(response.code.to_i)
23
19
  JSON.parse(response.body)['message']
24
20
  end
25
21
  end
26
22
 
27
- private def url
23
+ private def published_api_is_actual?
24
+ response = perform_request Net::HTTP::Get, get_api_url
25
+ return unless SUCCESS_STATUSES.include?(response.code.to_i)
26
+
27
+ apis = JSON.parse(response.body)['apis']
28
+ last_published_api = apis.reverse.find do |api|
29
+ api['properties'].find do |pr|
30
+ pr['type'] == 'X-Published' && pr['value'] == 'true'
31
+ end
32
+ end
33
+ return unless last_published_api
34
+
35
+ last_published_version = last_published_api['properties'].find { |pr| pr['type'] == 'X-Version' }['value']
36
+ version(config.version) <= version(last_published_version)
37
+ end
38
+
39
+ private def version(version_str)
40
+ matched = VERSION_REGEX.match(version_str)
41
+ Gem::Version.new(matched ? matched[0] : nil)
42
+ end
43
+
44
+ private def push_swagger_file
45
+ perform_request Net::HTTP::Post, post_api_url, swagger_file
46
+ end
47
+
48
+ private def perform_request(request_class, url, body = nil)
49
+ uri = URI.parse(url)
50
+
51
+ http = Net::HTTP.new(uri.host, uri.port)
52
+ http.use_ssl = true
53
+
54
+ request = request_class.new(uri.request_uri)
55
+ request['Content-Type'] = 'application/json'
56
+ request['Authorization'] = config.api_key
57
+ request.body = body unless body.nil?
58
+
59
+ http.request(request)
60
+ end
61
+
62
+ private def get_api_url
63
+ "#{BASE_URL}/#{config.owner}/#{config.api_name}"
64
+ end
65
+
66
+ private def post_api_url
28
67
  "#{BASE_URL}/#{config.owner}/#{config.api_name}?version=#{config.version}"
29
68
  end
30
69
 
70
+ private def swagger_file
71
+ @swagger_file ||= File.read(config.swagger_file)
72
+ end
73
+
31
74
  private def config
32
75
  @config ||= SwaggerHubApiPusher.config
33
76
  end
@@ -1,3 +1,3 @@
1
1
  module SwaggerHubApiPusher
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
@@ -5,6 +5,6 @@ namespace :swagger do
5
5
  desc 'Push swagger json to SwaggerHub API'
6
6
  task push: :environment do
7
7
  response = SwaggerHubApiPusher::Pusher.new.execute
8
- puts response unless response.nil?
8
+ abort response unless response.nil?
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_hub_api_pusher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markov Alexey
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-29 00:00:00.000000000 Z
11
+ date: 2017-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler