sealine_insurance 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2570d0c8577ccddecace6f195f828b55fed6ccd4
4
+ data.tar.gz: 4edc40e5c7d78a39b566c283e3e26277a8454b72
5
+ SHA512:
6
+ metadata.gz: acdbb4f62702688a3646d15be8b3543990e77d48c3eb2195b6b615e1d2f287f25083c7c4c2e97e7e676534a1719745597b6e4c1070c108a775d5a6fb6fb760b7
7
+ data.tar.gz: 49102b678d43b9927e7ab66eeb014a217118ecece16ef5ad1f091fb4e281dbe2e06463776b80310d23fe78459bcb0092050b077e9e679ea6e8ad57c2761a5373
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ Gemfile.lock
data/.rubocop.yml ADDED
@@ -0,0 +1,62 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ DisplayCopNames: true
4
+ DisplayStyleGuide: true
5
+ Exclude:
6
+ - 'bin/*'
7
+
8
+ Style/AsciiComments:
9
+ Enabled: false
10
+
11
+ Style/Documentation:
12
+ Enabled: false
13
+
14
+ Style/ClassAndModuleChildren:
15
+ Enabled: false
16
+
17
+ Metrics/AbcSize:
18
+ Enabled: false
19
+
20
+ Metrics/CyclomaticComplexity:
21
+ Enabled: false
22
+
23
+ Metrics/PerceivedComplexity:
24
+ Enabled: false
25
+
26
+ Style/GuardClause:
27
+ Enabled: false
28
+
29
+ Style/IfUnlessModifier:
30
+ Enabled: false
31
+
32
+ Metrics/LineLength:
33
+ Max: 100
34
+
35
+ Metrics/MethodLength:
36
+ Max: 40
37
+
38
+ Metrics/BlockLength:
39
+ Exclude:
40
+ - 'test/**/*'
41
+
42
+ Style/NumericLiterals:
43
+ Exclude:
44
+ - 'test/**/*'
45
+
46
+ Style/TrailingCommaInArrayLiteral:
47
+ EnforcedStyleForMultiline: comma
48
+
49
+ Style/TrailingCommaInHashLiteral:
50
+ EnforcedStyleForMultiline: comma
51
+
52
+ Style/TrailingCommaInArguments:
53
+ EnforcedStyleForMultiline: comma
54
+
55
+ Layout/AlignParameters:
56
+ EnforcedStyle: with_fixed_indentation
57
+
58
+ Layout/MultilineMethodCallBraceLayout:
59
+ EnforcedStyle: new_line
60
+
61
+ Layout/MultilineMethodCallIndentation:
62
+ EnforcedStyle: indented
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.5
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3
5
+ before_install: gem install bundler -v 1.16.1
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in sealine_insurance.gemspec
8
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Roman Khrebtov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # SealineInsurance
2
+
3
+ ## Installation
4
+
5
+ Add this line to your application's Gemfile:
6
+
7
+ ```ruby
8
+ gem 'sealine_insurance'
9
+ ```
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install sealine_insurance
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## License
24
+
25
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/*_test.rb']
10
+ end
11
+
12
+ task default: :test
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'sealine_insurance'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class BaseResponse
5
+ attr_reader :raw_body
6
+ attr_reader :error_code
7
+ attr_reader :error_message
8
+
9
+ def initialize(http_response)
10
+ @raw_body = parse_response_body(http_response.body)
11
+ if @error_code
12
+ # ошибка парсинга JSON
13
+ @success = false
14
+ elsif http_response.status == 401
15
+ # ошибка авторизации
16
+ @success = false
17
+ @error_code = 'unauthorized'
18
+ @error_message = raw_body['detail']
19
+ elsif http_response.status == 400
20
+ # невалидные входные данные
21
+ @success = false
22
+ @error_code = 'invalid_params'
23
+ @error_message = fetch_validation_error(raw_body)
24
+ else
25
+ # определение ошибки по статусу в JSON
26
+ # если !error_status? - считаем ответ успешным
27
+ @success = !error_status?
28
+ @error_code = raw_body['error_code']
29
+ @error_message = raw_body['error_message']
30
+ end
31
+ end
32
+
33
+ def success?
34
+ @success
35
+ end
36
+
37
+ def error?
38
+ !success?
39
+ end
40
+
41
+ private
42
+
43
+ # Дочерние классы переопределяют этот метод.
44
+ # В общем случае статуса в raw_body может не быть, поэтому по дефолту false.
45
+ def error_status?
46
+ false
47
+ end
48
+
49
+ def parse_response_body(body)
50
+ JSON.parse(body)
51
+ rescue JSON::ParserError
52
+ @error_code = 'invalid_response'
53
+ @error_message = 'Invalid JSON'
54
+ {}
55
+ end
56
+
57
+ # Ошибки валидации возвращаются в виде хэша различной вложенности.
58
+ # Ключи хеша - поля, которые не прошли валидацию. Значение - текст ошибки.
59
+ # Метод рекурсивный, он находит первую ошибку и возвращает ее в виде строки.
60
+ # Пример возвращаемого значения:
61
+ # "data.arrival: Не может быть меньше даты trip.departure.date"
62
+ def fetch_validation_error(data, key_path = [])
63
+ if data.is_a?(Hash) && !data.empty?
64
+ key = data.keys.first
65
+ fetch_validation_error(data[key], key_path + [key])
66
+ elsif data.is_a?(Array) && !data.empty? && data.all? { |item| item.is_a?(String) }
67
+ fetch_validation_error(data.join(', '), key_path)
68
+ elsif data.is_a?(String)
69
+ "#{key_path.join('.')}: #{data}"
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class CalculateResponse < BaseResponse
5
+ STATUSES = [
6
+ 'IN_PROGRESS', # Обрабатывается
7
+ 'DONE', # Выполнено
8
+ 'DONE_WITH_ERRORS', # Выполнено с ошибками
9
+ 'ERROR', # Ошибка
10
+ ].freeze
11
+
12
+ def request_id
13
+ raw_body['id']
14
+ end
15
+
16
+ def status
17
+ raw_body['status']
18
+ end
19
+
20
+ def calculated?
21
+ status == 'DONE'
22
+ end
23
+
24
+ def price
25
+ result = raw_body['results']&.detect { |item| item['status'] == 'DONE' }
26
+ if result && result['price']
27
+ Money.new(result['price'], DEFAULT_CURRENCY)
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def error_status?
34
+ %w[DONE_WITH_ERRORS ERROR].include?(status)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class Client
5
+ attr_reader :config
6
+
7
+ def initialize(**args)
8
+ @config = Config.new(**args)
9
+ end
10
+
11
+ def product_types
12
+ classifiers(path: 'product-type')
13
+ end
14
+
15
+ def product_type(id:)
16
+ classifiers(path: "product-type/#{id}")
17
+ end
18
+
19
+ def products
20
+ classifiers(path: 'product')
21
+ end
22
+
23
+ def component_groups
24
+ classifiers(path: 'product/component-group')
25
+ end
26
+
27
+ def calculate_status_list
28
+ classifiers(path: 'status/calculate-product')
29
+ end
30
+
31
+ def order_status_list
32
+ classifiers(path: 'status/order')
33
+ end
34
+
35
+ def payment_status_list
36
+ classifiers(path: 'status/payment')
37
+ end
38
+
39
+ def classifiers(path:)
40
+ response = request.get("/classifiers/#{path}")
41
+ BaseResponse.new(response)
42
+ end
43
+
44
+ def search_products(product_type:, options: [])
45
+ response = request.post('/search',
46
+ product_type: product_type,
47
+ options: options,
48
+ )
49
+ BaseResponse.new(response)
50
+ end
51
+
52
+ def calculate(product_type:, products:, ticket_price:, options: [])
53
+ response = request.post('/calculate-product',
54
+ product_type: product_type,
55
+ products: products,
56
+ options: options,
57
+ data: {
58
+ ticket_price: ticket_price.to_i,
59
+ },
60
+ )
61
+ CalculateResponse.new(response)
62
+ end
63
+
64
+ def calculate_status(request_id:)
65
+ response = request.get("/calculate-product/#{request_id}")
66
+ CalculateResponse.new(response)
67
+ end
68
+
69
+ # rubocop:disable Metrics/ParameterLists
70
+ def create_order(
71
+ product_type:,
72
+ product:,
73
+ options: [],
74
+ ticket_number:,
75
+ ticket_price:,
76
+ departure_datetime:,
77
+ arrival_datetime:,
78
+ insured_first_name:,
79
+ insured_last_name:,
80
+ insured_birthday:,
81
+ insurer_first_name:,
82
+ insurer_last_name:
83
+ )
84
+ response = request.post('/order',
85
+ product_type: product_type,
86
+ product: product,
87
+ options: options,
88
+ data: {
89
+ ticket_number: ticket_number.to_i,
90
+ ticket_price: ticket_price.to_i,
91
+ departure: departure_datetime.strftime('%Y-%m-%dT%H:%M'),
92
+ arrival: arrival_datetime.strftime('%Y-%m-%dT%H:%M'),
93
+ insured: {
94
+ first_name: insured_first_name,
95
+ last_name: insured_last_name,
96
+ birthday: insured_birthday.strftime('%Y-%m-%d'),
97
+ },
98
+ insurer: {
99
+ first_name: insurer_first_name,
100
+ last_name: insurer_last_name,
101
+ },
102
+ },
103
+ )
104
+ OrderResponse.new(response)
105
+ end
106
+ # rubocop:enable Metrics/ParameterLists
107
+
108
+ def get_order(order_id:)
109
+ response = request.get("/order/#{order_id}")
110
+ OrderResponse.new(response)
111
+ end
112
+
113
+ private
114
+
115
+ def request
116
+ @request ||= Request.new(config: config)
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class Config
5
+ DEFAULT_HOST = 'dev.sealine.ru'
6
+
7
+ attr_reader :host
8
+ attr_reader :token
9
+ attr_reader :timeout
10
+ attr_reader :open_timeout
11
+ attr_reader :logger
12
+
13
+ def initialize(host: DEFAULT_HOST, token:, timeout: nil, open_timeout: nil, logger: nil)
14
+ @host = host
15
+ @token = token
16
+ @timeout = timeout
17
+ @open_timeout = open_timeout
18
+ @logger = logger
19
+ end
20
+
21
+ def base_url
22
+ "https://#{host}/api/v1"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class Error < StandardError
5
+ end
6
+
7
+ class RequestError < Error
8
+ end
9
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class OrderResponse < BaseResponse
5
+ STATUSES = [
6
+ 'IN_PROGRESS', # Обрабатывается
7
+ 'ERROR', # Ошибка
8
+ 'UPDATE_IN_PROGRESS', # Ожидает обновления
9
+ 'NOT_UPDATED', # Не обновлен
10
+ 'NEED_PAYMENT', # Требуется оплата
11
+ 'PAYMENT_IN_PROGRESS', # Производится подтверждение оплаты
12
+ 'WAITING_FOR_DOCUMENTS', # Загрузка электронного документа
13
+ 'DONE', # Создан
14
+ 'CANCEL_IN_PROGRESS', # Ожидает отмены
15
+ 'WAITING_CANCELLATION_APPROVAL', # Ожидает подтверждения отмены
16
+ 'REPEAT_CANCELLATION', # Требуется повтор отмены
17
+ 'NOT_CANCELLED', # Не отменен
18
+ 'CANCELLED', # Отменен
19
+ ].freeze
20
+
21
+ def order_id
22
+ raw_body['id']
23
+ end
24
+
25
+ def status
26
+ raw_body['status']
27
+ end
28
+
29
+ def created?
30
+ status == 'NEED_PAYMENT'
31
+ end
32
+
33
+ private
34
+
35
+ def error_status?
36
+ status == 'ERROR'
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ class Request
5
+ attr_reader :config
6
+
7
+ def initialize(config:)
8
+ @config = config
9
+ end
10
+
11
+ def get(url)
12
+ send_request(:get, url)
13
+ end
14
+
15
+ def post(url, data)
16
+ send_request(:post, url, data)
17
+ end
18
+
19
+ private
20
+
21
+ def send_request(method, url, body = nil)
22
+ conn = Faraday.new do |builder|
23
+ builder.adapter Faraday.default_adapter
24
+ builder.response(:logger, config.logger) if config.logger
25
+ end
26
+ conn.send(method, "#{config.base_url}#{url}.json") do |req|
27
+ req.headers['Authorization'] = "Token #{config.token}"
28
+ if body
29
+ req.headers['Content-Type'] = 'application/json'
30
+ req.body = body.to_json
31
+ config.logger&.debug(req.body)
32
+ end
33
+ req.options.timeout = config.timeout if config.timeout
34
+ req.options.open_timeout = config.open_timeout if config.open_timeout
35
+ end
36
+ rescue Faraday::Error => e
37
+ raise RequestError, "#{e.class}: #{e.message}"
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SealineInsurance
4
+ VERSION = '0.1.1'
5
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'json'
5
+ require 'money'
6
+
7
+ require 'sealine_insurance/version'
8
+ require 'sealine_insurance/errors'
9
+ require 'sealine_insurance/config'
10
+ require 'sealine_insurance/client'
11
+ require 'sealine_insurance/request'
12
+ require 'sealine_insurance/base_response'
13
+ require 'sealine_insurance/calculate_response'
14
+ require 'sealine_insurance/order_response'
15
+
16
+ module SealineInsurance
17
+ DEFAULT_CURRENCY = 'RUB'
18
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'sealine_insurance/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'sealine_insurance'
9
+ spec.version = SealineInsurance::VERSION
10
+ spec.authors = ['Roman Khrebtov']
11
+ spec.email = ['khrebtov.dev@gmail.com']
12
+
13
+ spec.summary = 'Ruby wrapper for Sealine API'
14
+ spec.description = 'Ruby wrapper for Sealine API'
15
+ spec.homepage = 'https://github.com/busfor/sealine_insurance'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(test|spec|features)/})
20
+ end
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.add_dependency 'faraday', '~> 0.9'
26
+ spec.add_dependency 'money'
27
+
28
+ spec.add_development_dependency 'bundler', '~> 1.16'
29
+ spec.add_development_dependency 'minitest', '~> 5.0'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'rubocop'
32
+ spec.add_development_dependency 'vcr'
33
+ spec.add_development_dependency 'webmock'
34
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sealine_insurance
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Roman Khrebtov
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-07-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.9'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: money
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.16'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.16'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
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'
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Ruby wrapper for Sealine API
126
+ email:
127
+ - khrebtov.dev@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - ".ruby-version"
135
+ - ".travis.yml"
136
+ - Gemfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - bin/console
141
+ - bin/setup
142
+ - lib/sealine_insurance.rb
143
+ - lib/sealine_insurance/base_response.rb
144
+ - lib/sealine_insurance/calculate_response.rb
145
+ - lib/sealine_insurance/client.rb
146
+ - lib/sealine_insurance/config.rb
147
+ - lib/sealine_insurance/errors.rb
148
+ - lib/sealine_insurance/order_response.rb
149
+ - lib/sealine_insurance/request.rb
150
+ - lib/sealine_insurance/version.rb
151
+ - sealine_insurance.gemspec
152
+ homepage: https://github.com/busfor/sealine_insurance
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.5.2.1
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Ruby wrapper for Sealine API
176
+ test_files: []