nabortu 0.0.1 → 0.1.0
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
- data/lib/nabortu.rb +28 -2
- data/lib/nabortu/api.rb +9 -0
- data/lib/nabortu/client.rb +24 -0
- data/lib/nabortu/configuration.rb +11 -0
- data/lib/nabortu/errors.rb +16 -0
- data/lib/nabortu/methods/base.rb +67 -0
- data/lib/nabortu/methods/calculate_variant.rb +21 -0
- data/lib/nabortu/methods/cancel.rb +10 -0
- data/lib/nabortu/methods/check_email.rb +10 -0
- data/lib/nabortu/methods/check_variant.rb +17 -0
- data/lib/nabortu/methods/create_avia_reserve.rb +53 -0
- data/lib/nabortu/methods/get_citizenships.rb +9 -0
- data/lib/nabortu/methods/get_document_types.rb +9 -0
- data/lib/nabortu/methods/get_reserve_details.rb +15 -0
- data/lib/nabortu/methods/get_variants.rb +48 -0
- data/lib/nabortu/methods/register.rb +17 -0
- data/lib/nabortu/methods/save_person.rb +53 -0
- data/lib/nabortu/methods/try_auth.rb +15 -0
- data/lib/nabortu/version.rb +1 -1
- data/lib/support/hash.rb +22 -0
- data/nabortu.gemspec +1 -0
- metadata +34 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a4b650d553b36c833edcfc3b4adc0c7e821f6d2
|
4
|
+
data.tar.gz: 7d31b716632024bb083b27136bd74a2173c59dd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 850d80f8592e99966d908f050eadf7c6c118e0f63584999595729532a2c0b89d9b6fa66842dad52c92852570fce866652b9216b714e1337241aaced87e9375f4
|
7
|
+
data.tar.gz: 1263a5b89d5cc25d337e81b083793954914cc6c3552b83b5e7d8aea6afc523cba101ab409d72144ce1f7a5fa45594fe608dd171ce2819a283b49ac3a2693dcbe
|
data/lib/nabortu.rb
CHANGED
@@ -1,5 +1,31 @@
|
|
1
|
-
require
|
1
|
+
require 'nabortu/version'
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/all'
|
5
|
+
require 'support/hash'
|
6
|
+
|
7
|
+
require 'nabortu/client'
|
8
|
+
require 'nabortu/errors'
|
9
|
+
require 'nabortu/configuration'
|
2
10
|
|
3
11
|
module Nabortu
|
4
|
-
#
|
12
|
+
# Constants
|
13
|
+
STATE_RESERVE_ACTUAL = 5
|
14
|
+
|
15
|
+
# Class methods
|
16
|
+
class << self
|
17
|
+
attr_writer :config
|
18
|
+
|
19
|
+
def config
|
20
|
+
@config ||= Configuration.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def configure
|
24
|
+
yield(config)
|
25
|
+
end
|
26
|
+
|
27
|
+
def client
|
28
|
+
Nabortu::Client.new
|
29
|
+
end
|
30
|
+
end
|
5
31
|
end
|
data/lib/nabortu/api.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Dir[File.dirname(__FILE__) + '/methods/*.rb'].each { |file| require file }
|
2
|
+
|
3
|
+
module Nabortu
|
4
|
+
class Client
|
5
|
+
def send_payment(reserve_id)
|
6
|
+
url = URI.parse(Nabortu.config.payment_url)
|
7
|
+
http = Net::HTTP.new(url.host, url.port)
|
8
|
+
request = Net::HTTP::Post.new(url.path, {'Content-Type' =>'application/json'})
|
9
|
+
request.body = {orderId: reserve_id.to_s}.to_json
|
10
|
+
|
11
|
+
http.request(request)
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(name, params, args = {})
|
15
|
+
klass = ['Nabortu', 'Methods', name.to_s.camelize].join('::')
|
16
|
+
|
17
|
+
if Object.const_defined? klass
|
18
|
+
klass.constantize.do_request(name, params)
|
19
|
+
else
|
20
|
+
raise Nabortu::Errors::WrongMethod.new("Nabortu API does not have '#{name}' method or it\'s not implemented")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Nabortu
|
2
|
+
class Configuration
|
3
|
+
OPTIONS = [:url, :payment_url, :login, :password, :partner_id, :ns, :reserve_comment]
|
4
|
+
attr_accessor *OPTIONS
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@ns = 'http://www.nabortu.ru/'
|
8
|
+
@url = 'http://new.nabortu.ru/WebServices/Service.asmx?WSDL'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Errors
|
3
|
+
|
4
|
+
# Raised when required param does not pass
|
5
|
+
class NoParam < StandardError
|
6
|
+
def initialize(name, message = '')
|
7
|
+
msg = message.empty? ? "You must set param '#{name}' for request" : message
|
8
|
+
super(msg)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Raised when you try call non-existed API method
|
13
|
+
class WrongMethod < StandardError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class Base
|
4
|
+
|
5
|
+
attr_accessor :params, :response
|
6
|
+
|
7
|
+
def self.do_request(method_name, params = {})
|
8
|
+
new(method_name, params).do_request
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(method_name, params = {})
|
12
|
+
@method_name, @params, @response = method_name, params, nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def do_request
|
16
|
+
prepare_result soap_client.call(@method_name, message: request(@params))
|
17
|
+
rescue => error # Catch all exceptions
|
18
|
+
fail_callback(error)
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def soap_client
|
24
|
+
params = {
|
25
|
+
wsdl: Nabortu.config.url,
|
26
|
+
open_timeout: 3000,
|
27
|
+
read_timeout: 3000,
|
28
|
+
element_form_default: 'unqualified',
|
29
|
+
soap_header: {
|
30
|
+
'AuthentificationHeader' => {
|
31
|
+
'Login' => Nabortu.config.login,
|
32
|
+
'Password' => Nabortu.config.password,
|
33
|
+
'PartnerId' => Nabortu.config.partner_id
|
34
|
+
},
|
35
|
+
attributes!: { 'AuthentificationHeader' => { 'xmlns' => 'http://www.nabortu.ru/'} }
|
36
|
+
},
|
37
|
+
logger: Rails.logger,
|
38
|
+
log: true,
|
39
|
+
log_level: :info
|
40
|
+
}
|
41
|
+
|
42
|
+
Savon.client(params) { convert_request_keys_to :camelcase }
|
43
|
+
end
|
44
|
+
|
45
|
+
def request(params = {})
|
46
|
+
raise StandardError.new("You try execute abstract method 'request' of Nabortu::Methods::Base")
|
47
|
+
end
|
48
|
+
|
49
|
+
def fail_callback(error)
|
50
|
+
raise error
|
51
|
+
end
|
52
|
+
|
53
|
+
def prepare_result(response)
|
54
|
+
@response = response.to_hash[:"#{@method_name}_response"][:"#{@method_name}_result"]
|
55
|
+
do_prepare
|
56
|
+
rescue
|
57
|
+
@response = false
|
58
|
+
ensure
|
59
|
+
@response
|
60
|
+
end
|
61
|
+
|
62
|
+
def do_prepare
|
63
|
+
@response
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class CalculateVariant < Base
|
4
|
+
def request(params = {})
|
5
|
+
offer = params[:offer] || raise(Nabortu::Errors::NoParam.new :offer)
|
6
|
+
request = params[:request] || raise(Nabortu::Errors::NoParam.new :request)
|
7
|
+
|
8
|
+
{'tns:offer' => {'Item' => offer.deep_symbolize_keys.camelize_keys}, 'tns:Request' => request}
|
9
|
+
end
|
10
|
+
|
11
|
+
def do_prepare
|
12
|
+
@response[:calculation_result]
|
13
|
+
end
|
14
|
+
|
15
|
+
def fail_callback(error)
|
16
|
+
return false if error.is_a?(Savon::SOAPFault)
|
17
|
+
raise error
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class CheckVariant < Base
|
4
|
+
def request(params = {})
|
5
|
+
offer = params[:offer] || raise(Nabortu::Errors::NoParam.new :offer)
|
6
|
+
request = params[:request] || raise(Nabortu::Errors::NoParam.new :request)
|
7
|
+
|
8
|
+
{'tns:offer' => {'Item' => offer.camelize_keys}, 'tns:Request' => request}
|
9
|
+
end
|
10
|
+
|
11
|
+
def fail_callback(error)
|
12
|
+
return false if error.is_a?(Savon::SOAPFault)
|
13
|
+
raise error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class CreateAviaReserve < Base
|
4
|
+
def request(params = {})
|
5
|
+
persons = params[:persons] || raise(Nabortu::Errors::NoParam.new :persons)
|
6
|
+
request = params[:request] || raise(Nabortu::Errors::NoParam.new :request)
|
7
|
+
client_id = params[:client_id] || raise(Nabortu::Errors::NoParam.new :client_id)
|
8
|
+
|
9
|
+
persons_xml = persons.map { |p| build_person(p) }
|
10
|
+
|
11
|
+
<<-REQUEST
|
12
|
+
<tns:Request>#{request}</tns:Request>
|
13
|
+
<tns:Passengers>#{persons_xml.join('')}</tns:Passengers>
|
14
|
+
<tns:Comment>#{Nabortu.config.reserve_comment}</tns:Comment>
|
15
|
+
<tns:id_OnlinePaymentType>26</tns:id_OnlinePaymentType>
|
16
|
+
<tns:id_client>#{client_id}</tns:id_client>
|
17
|
+
<tns:PartnerMarker>nabortu</tns:PartnerMarker>
|
18
|
+
<tns:BonusProgram></tns:BonusProgram>
|
19
|
+
REQUEST
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def build_person(person)
|
25
|
+
person = Nokogiri::XML::Builder.new do |xml|
|
26
|
+
xml.root('xmlns:tns' => Nabortu.config.ns){
|
27
|
+
xml[:tns].Person{
|
28
|
+
xml[:tns].id_Person person.id
|
29
|
+
xml[:tns].FirstName person.first_name
|
30
|
+
xml[:tns].LastName person.last_name
|
31
|
+
xml[:tns].Phone person.phone
|
32
|
+
xml[:tns].DateBirth person.birth_date
|
33
|
+
xml[:tns].id_Country person.id_country
|
34
|
+
xml[:tns].Gender person.gender
|
35
|
+
xml[:tns].FirstNameLatin person.first_name_latin
|
36
|
+
xml[:tns].LastNameLatin person.last_name_latin
|
37
|
+
xml[:tns].deleted 'false'
|
38
|
+
xml[:tns].ExtraBags '0'
|
39
|
+
xml[:tns].Documents{
|
40
|
+
xml[:tns].id_Document person.document.id
|
41
|
+
xml[:tns].DateGiven person.document.date
|
42
|
+
xml[:tns].DateExpire person.document.expires
|
43
|
+
xml[:tns].Number person.document.number
|
44
|
+
xml[:tns].id_DocumentType person.document.id_type
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
end
|
49
|
+
person.doc.root.children.to_xml
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class GetReserveDetails < Base
|
4
|
+
def request(params = {})
|
5
|
+
reserve_id = params[:reserve_id] || raise(Nabortu::Errors::NoParam.new :reserve_id)
|
6
|
+
|
7
|
+
{'tns:id_Reserve' => reserve_id.to_s}
|
8
|
+
end
|
9
|
+
|
10
|
+
def do_prepare
|
11
|
+
@response[:get_reserve_details_result]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class GetVariants < Base
|
4
|
+
def request(params = {})
|
5
|
+
date_to = params[:date_to] || raise(Nabortu::Errors::NoParam.new :date_to)
|
6
|
+
date_from = params[:date_from] || raise(Nabortu::Errors::NoParam.new :date_from)
|
7
|
+
|
8
|
+
origin = params[:origin] || 'MOW'
|
9
|
+
destination = params[:destination] || raise(Nabortu::Errors::NoParam.new :destination)
|
10
|
+
|
11
|
+
{ 'tns:requestParameters' => {
|
12
|
+
'AviaSearchRequest' => {
|
13
|
+
'Adults' => params[:adults] || 2,
|
14
|
+
'Children' => params[:children] || 0,
|
15
|
+
'Infants' => params[:infants] || 0,
|
16
|
+
'Segments' => {
|
17
|
+
'ModifiedSegment' => [
|
18
|
+
{ 'OriginCode' => params[:origin] || 'MOW',
|
19
|
+
'DestinationCode' => destination,
|
20
|
+
'Date' => date_to,
|
21
|
+
'Fare' => 'Economy'
|
22
|
+
},
|
23
|
+
{ 'OriginCode' => destination,
|
24
|
+
'DestinationCode' => origin,
|
25
|
+
'Date' => date_from,
|
26
|
+
'Fare' => 'Economy'
|
27
|
+
}]
|
28
|
+
},
|
29
|
+
'PartnerId' => Nabortu.config.partner_id,
|
30
|
+
'Fare' => 'Economy',
|
31
|
+
'FlexibleDates' => params[:flexible_dates] || 'false',
|
32
|
+
'OnlyDirect' => params[:only_direct] || 'true',
|
33
|
+
'IsOnePassSearch' => params[:one_pass_search] || 'true',
|
34
|
+
'AllowLowcost' => params[:allow_lowcost] || 'false',
|
35
|
+
'Nabortu' => params[:nabortu] || 'true'
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def do_prepare
|
42
|
+
{offers: @response[:search_result][:offers][:item], request: @response[:search_result][:request]}
|
43
|
+
rescue
|
44
|
+
false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class Register < Base
|
4
|
+
def request(params = {})
|
5
|
+
email = params[:email] || raise(Nabortu::Errors::NoParam.new :email)
|
6
|
+
phone = params[:phone] || raise(Nabortu::Errors::NoParam.new :phone)
|
7
|
+
password = params[:password] || raise(Nabortu::Errors::NoParam.new :password)
|
8
|
+
|
9
|
+
{'tns:Email' => email, 'tns:Password' => password, 'tns:MobilePhone' => phone }
|
10
|
+
end
|
11
|
+
|
12
|
+
def do_prepare
|
13
|
+
@response[:auth_result]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class SavePerson < Base
|
4
|
+
def request(params = {})
|
5
|
+
person = params[:person] || raise(Nabortu::Errors::NoParam.new :person)
|
6
|
+
client_id = params[:client_id] || raise(Nabortu::Errors::NoParam.new :person)
|
7
|
+
build_person(person) + build_document(person.document) + "<tns:id_client>#{client_id}</tns:id_client>"
|
8
|
+
end
|
9
|
+
|
10
|
+
def do_prepare
|
11
|
+
@response[:save_person_result]
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def build_person(person)
|
17
|
+
person = Nokogiri::XML::Builder.new do |xml|
|
18
|
+
xml.root("xmlns:tns" => 'http://nabortu.ru/'){
|
19
|
+
xml[:tns].p{
|
20
|
+
xml[:tns].FirstName person.first_name
|
21
|
+
xml[:tns].LastName person.last_name
|
22
|
+
xml[:tns].Phone person.phone
|
23
|
+
xml[:tns].SurName person.surname
|
24
|
+
xml[:tns].DateBirth person.birth_date
|
25
|
+
xml[:tns].id_Country person.id_country
|
26
|
+
xml[:tns].Gender person.gender
|
27
|
+
xml[:tns].FirstNameLatin person.first_name_latin
|
28
|
+
xml[:tns].LastNameLatin person.last_name_latin
|
29
|
+
xml[:tns].deleted 'false'
|
30
|
+
xml[:tns].ExtraBags '0'
|
31
|
+
}
|
32
|
+
}
|
33
|
+
end
|
34
|
+
person.doc.root.children.to_xml
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_document(document)
|
38
|
+
doc = Nokogiri::XML::Builder.new do |xml|
|
39
|
+
xml.root('xmlns:tns' => 'http://www.nabortu.ru/'){
|
40
|
+
xml[:tns].Document{
|
41
|
+
xml[:tns].DateGiven document.date
|
42
|
+
xml[:tns].DateExpire document.expires
|
43
|
+
xml[:tns].Number document.number
|
44
|
+
xml[:tns].id_DocumentType document.id_type
|
45
|
+
xml[:tns].deleted 'false'
|
46
|
+
}
|
47
|
+
}
|
48
|
+
end
|
49
|
+
doc.doc.root.children.to_xml
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Nabortu
|
2
|
+
module Methods
|
3
|
+
class TryAuth < Base
|
4
|
+
def request(params = {})
|
5
|
+
email = params[:email] || raise(Nabortu::Errors::NoParam.new :email)
|
6
|
+
password = params[:password] || raise(Nabortu::Errors::NoParam.new :password)
|
7
|
+
|
8
|
+
{ 'tns:Login' => email, 'tns:Password' => password }
|
9
|
+
end
|
10
|
+
def do_prepare
|
11
|
+
@response[:auth_result]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/nabortu/version.rb
CHANGED
data/lib/support/hash.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
class Hash
|
2
|
+
def camelize_keys
|
3
|
+
input, output = self.dup, self.dup
|
4
|
+
|
5
|
+
input.each do |key, _|
|
6
|
+
case input[key]
|
7
|
+
when String
|
8
|
+
if key.to_s.include? '@'
|
9
|
+
_key = ['@', key.to_s.gsub('@', '').camelize].join.to_sym
|
10
|
+
output.delete(key)
|
11
|
+
output[_key] = input[key]
|
12
|
+
end
|
13
|
+
when Hash
|
14
|
+
output[key] = input[key].camelize_keys
|
15
|
+
when Array
|
16
|
+
output[key] = input.delete(key).map{ |item| item.camelize_keys }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
output
|
21
|
+
end
|
22
|
+
end
|
data/nabortu.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
+
spec.add_dependency 'activesupport', '>= 3.0'
|
21
22
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
23
|
spec.add_development_dependency 'rake'
|
23
24
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nabortu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fc_arny
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,7 +65,25 @@ files:
|
|
51
65
|
- README.md
|
52
66
|
- Rakefile
|
53
67
|
- lib/nabortu.rb
|
68
|
+
- lib/nabortu/api.rb
|
69
|
+
- lib/nabortu/client.rb
|
70
|
+
- lib/nabortu/configuration.rb
|
71
|
+
- lib/nabortu/errors.rb
|
72
|
+
- lib/nabortu/methods/base.rb
|
73
|
+
- lib/nabortu/methods/calculate_variant.rb
|
74
|
+
- lib/nabortu/methods/cancel.rb
|
75
|
+
- lib/nabortu/methods/check_email.rb
|
76
|
+
- lib/nabortu/methods/check_variant.rb
|
77
|
+
- lib/nabortu/methods/create_avia_reserve.rb
|
78
|
+
- lib/nabortu/methods/get_citizenships.rb
|
79
|
+
- lib/nabortu/methods/get_document_types.rb
|
80
|
+
- lib/nabortu/methods/get_reserve_details.rb
|
81
|
+
- lib/nabortu/methods/get_variants.rb
|
82
|
+
- lib/nabortu/methods/register.rb
|
83
|
+
- lib/nabortu/methods/save_person.rb
|
84
|
+
- lib/nabortu/methods/try_auth.rb
|
54
85
|
- lib/nabortu/version.rb
|
86
|
+
- lib/support/hash.rb
|
55
87
|
- nabortu.gemspec
|
56
88
|
homepage: http://martsoft.ru/lab/nabortu
|
57
89
|
licenses:
|