b2b_center_api 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 694ccdd29ca008be6e32204bdc43d51da76d0cb3
4
- data.tar.gz: 68838e4d378fa1b41fe998f02bbe72f50ac99d9f
3
+ metadata.gz: c01d388e69d03c7577e73443eb76e61709674a0e
4
+ data.tar.gz: 1fe96e984765447f9d45f4db55fdd577d71f906f
5
5
  SHA512:
6
- metadata.gz: 4f58a155d2bc68c7c10f1497bdc8086ead2595c9072bd30c387bab4a6bfa662af70620b1501df97685cea545b5ff41034e923007ebba3dabd9b65f905427495d
7
- data.tar.gz: efa817d70a9f13c340d22d6197a7036fbf6a6882db9c8b4f43e721935511caa20a50f86a5173b4c5642efe37e05f7aa7044bc7ebf1c86e303538b854f0df0b2c
6
+ metadata.gz: 8259a0e35dd79ecc5d02c6ecc4145a0cdca7c2da241bee710496a43584cfa43f8ef7215237bc609f37797c15565e25b43c3b87c8719979b8e2b838c0ed147210
7
+ data.tar.gz: 48108158f4e40b675df1e6ecaa91bbc9c4d4b250fb3a53a86e5cf068fb6f3fe9090856141e0ab24e83daa5c893aaf12af375950b5f85730dad4babf245489bbb
data/.rubocop.yml CHANGED
@@ -6,3 +6,6 @@ PercentLiteralDelimiters:
6
6
 
7
7
  UnneededPercentQ:
8
8
  Enabled: false
9
+
10
+ LineLength:
11
+ Max: 119
data/README.md CHANGED
@@ -18,7 +18,35 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ```ruby
22
+ require 'b2b_center_api'
23
+
24
+ B2bCenterApi::Settings.soap_configure(
25
+ wsdl: 'http://demo.b2b-center.ru/market/remote.html?wsdl',
26
+ proxy: 'http://login:pass@address:port',
27
+ env_namespace: 'SOAP-ENV',
28
+ filters: [:password],
29
+ pretty_print_xml: true,
30
+ log: false
31
+ )
32
+
33
+ B2bCenterApi::Settings.auth_configure(
34
+ auth: { login: 'login', password: 'pass' }
35
+ )
36
+
37
+ b2b = B2bCenterApi::Client.new
38
+
39
+ ps = b2b.remote_auction.get_participants(18_501)
40
+
41
+ puts 'participants:'
42
+ puts ps
43
+ puts 'offers for first participant:'
44
+ puts ps[0].offers
45
+ ```
46
+
47
+ ## Documentation
48
+
49
+ http://www.rubydoc.info/gems/b2b_center_api
22
50
 
23
51
  ## Contributing
24
52
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['archakov@gmail.com']
11
11
  spec.description = %q{API for b2b-center.}
12
12
  spec.summary = %q{B2B Center API}
13
- spec.homepage = ''
13
+ spec.homepage = 'https://github.com/kodram/b2b_center_api'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($RS)
@@ -5,15 +5,20 @@ require 'b2b_center_api/remote_tender'
5
5
  require 'savon'
6
6
 
7
7
  module B2bCenterApi
8
- # Soap Client
8
+ # Client for API
9
9
  class Client
10
- attr_accessor :remote_auction,
11
- :remote_market,
12
- :remote_tender
10
+ # Методы класса RemoteAuction
11
+ # @return [RemoteAuction]
12
+ attr_accessor :remote_auction
13
+ # Методы класса RemoteMarket
14
+ # @return [RemoteMarket]
15
+ attr_accessor :remote_market
16
+ # Методы класса RemoteTender
17
+ # @return [RemoteTender]
18
+ attr_accessor :remote_tender
13
19
 
14
- def initialize(options = nil)
15
- options ||= Settings.soap_options
16
- @client = Savon.client(options)
20
+ def initialize
21
+ @client = Savon.client(Settings.soap_options)
17
22
  @remote_auction = RemoteAuction.new(@client)
18
23
  @remote_market = RemoteMarket.new(@client)
19
24
  @remote_tender = RemoteTender.new(@client)
@@ -1,15 +1,32 @@
1
1
  require 'b2b_center_api/web_service'
2
2
 
3
3
  module B2bCenterApi
4
+ # Методы класса RemoteAuction
4
5
  class RemoteAuction
5
6
  def initialize(client)
6
7
  @client = client
7
8
  @client_web = WebService::RemoteAuction.new(client)
8
9
  end
9
10
 
11
+ # Получить список участников
12
+ # @param auction_id [Integer] Номер аукциона/объявления
13
+ # @return [WebService::Types::AuctionParticipant[]]
10
14
  def get_participants(auction_id)
11
15
  response = @client_web.command :get_participants, auction_id: auction_id
12
- WebService::Types::AuctionParticipant.from_response(response, @client)
16
+ WebService::Types::AuctionParticipant.from_response(response, @client, auction_id)
17
+ end
18
+
19
+ # Получить предложение участника
20
+ # Метод возвращает информацию о предложении (альтернативном предложении) участника:
21
+ # последней ставке, имя файла с описанием предложения, информацию о том признан ли участник победителем.
22
+ # Возвращаемый методом файл доступен для скачивания из корневой FTP-папки организации.
23
+ # @param auction_id [Integer] Номер аукциона/объявления
24
+ # @param firm_id [Integer] ID организации (участник торговой процедуры)
25
+ # @param offer_num [Integer] = 0 — основное предложение = целое_число — альтернативное предложение №
26
+ # @return [WebService::Types::AuctionOffer]
27
+ def get_offer(auction_id, firm_id, offer_num)
28
+ response = @client_web.command :get_offer, auction_id: auction_id, firm_id: firm_id, offer_num: offer_num
29
+ WebService::Types::AuctionOffer.from_response(response, @client, auction_id, firm_id, offer_num)
13
30
  end
14
31
  end
15
32
  end
@@ -8,9 +8,12 @@ module B2bCenterApi
8
8
  @client_web = WebService::RemoteMarket.new(client)
9
9
  end
10
10
 
11
+ # Получить информацию об организации
12
+ # @param firm_id [Integer] ID организации
13
+ # @return [WebService::Types::FirmInfo]
11
14
  def get_firm_info(firm_id)
12
15
  response = @client_web.command :get_firm_info, firm_id: firm_id
13
- WebService::Types::FirmInfo.from_response(response, @client)
16
+ WebService::Types::FirmInfo.from_response(response, @client, firm_id)
14
17
  end
15
18
  end
16
19
  end
@@ -1,6 +1,7 @@
1
1
  require 'b2b_center_api/web_service'
2
2
 
3
3
  module B2bCenterApi
4
+ # Методы класса RemoteTender
4
5
  class RemoteTender
5
6
  def initialize(client)
6
7
  @client = client
@@ -1,3 +1,3 @@
1
1
  module B2bCenterApi
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -9,7 +9,8 @@ module B2bCenterApi
9
9
  return obj if obj.nil?
10
10
  case obj_type
11
11
  when :string then obj
12
- when :integer then obj.to_s
12
+ when :integer then obj.to_i
13
+ when :float then obj.to_f
13
14
  when :date then Date.parse(obj)
14
15
  when :time then Time.parse(obj)
15
16
  when :boolean then to_boolean(obj)
@@ -1,2 +1,5 @@
1
1
  require 'b2b_center_api/web_service/types/auction_participant'
2
2
  require 'b2b_center_api/web_service/types/firm_info'
3
+ require 'b2b_center_api/web_service/types/auction_offer'
4
+ require 'b2b_center_api/web_service/types/b2b_file'
5
+ require 'b2b_center_api/web_service/types/array_of_ids'
@@ -0,0 +1,16 @@
1
+ require 'b2b_center_api/web_service/types/base'
2
+
3
+ module B2bCenterApi
4
+ module WebService
5
+ module Types
6
+ # Массив ID или других строк
7
+ class ArrayOfIds < Base
8
+ # @return [String[]]
9
+ def self.from_part_response(response)
10
+ return if response.nil?
11
+ to_array(response).map { |n| convert(n[:string], :string) }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,47 @@
1
+ require 'b2b_center_api/web_service/types/base'
2
+
3
+ module B2bCenterApi
4
+ module WebService
5
+ module Types
6
+ # Предложение
7
+ class AuctionOffer < Base
8
+ # @return [Integer] Номер аукциона/объявления
9
+ attr_accessor :auction_id
10
+ # @return [Integer] ID организации (участник торговой процедуры)
11
+ attr_accessor :firm_id
12
+ # @return [Integer] = 0 — основное предложение = целое_число — альтернативное предложение №
13
+ attr_accessor :offer_num
14
+ # @return [Float] Последняя ставка. Формат значения DECIMAL(15,2)
15
+ attr_accessor :final_price
16
+ # @return [Float] Последняя ставка без НДС. Формат значения DECIMAL(15,2)
17
+ attr_accessor :final_price_notax
18
+ # @return [Time] Дата последней ставки.
19
+ attr_accessor :final_bet_date
20
+ # @return [Boolean] 1 — победитель, 0 — не победитель. Формат значения INT(1)
21
+ attr_accessor :winner
22
+ # @return [Integer] Количество ставок
23
+ attr_accessor :bets
24
+ # Файлы предложения. Поле содержит список записей типа file, в случае если у текущего
25
+ # пользователя нет доступа к файлу, то поле file.name — не заполняется.
26
+ # @return [B2bCenterApi::WebService::Types::File[]]
27
+ attr_accessor :files
28
+
29
+ # @return [AuctionOffer]
30
+ def self.from_response(response, client, auction_id, firm_id, offer_num)
31
+ return if response.result.nil?
32
+ r = response.result
33
+ t = AuctionOffer.new
34
+ t.soap_client = client
35
+ t.final_price = convert(r[:final_price], :float)
36
+ t.final_price_notax = convert(r[:final_price_notax], :float)
37
+ t.final_bet_date = convert(r[:final_bet_date], :time)
38
+ t.winner = convert(r[:winner], :boolean)
39
+ t.bets = convert(r[:bets], :integer)
40
+ t.files = B2bFile.from_part_response(r[:files])
41
+
42
+ t
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -3,25 +3,45 @@ require 'b2b_center_api/web_service/types/base'
3
3
  module B2bCenterApi
4
4
  module WebService
5
5
  module Types
6
+ # Участник аукциона
6
7
  class AuctionParticipant < Base
7
- attr_accessor :firm_id, :offers_nums
8
+ # @return [Integer] Номер аукциона/объявления
9
+ attr_accessor :auction_id
10
+ # @return [String] ID организации участника, если имена участников доступны,
11
+ # либо строка вида "Participant N", где N — номер участника в списке участников, в противном случае.
12
+ attr_accessor :firm_id
13
+ # @return [Integer[]] Список отправленных заявок участником.
14
+ # Возможные значения:
15
+ # 0 — основное предложение
16
+ # целое_число — альтернативное предложение №
17
+ attr_accessor :offers_nums
8
18
 
9
- def self.from_response(response, client)
19
+ # @return [Array] Массив {AuctionParticipant}
20
+ def self.from_response(response, client, auction_id)
21
+ return if response.result.nil?
10
22
  r = response.result
11
- mas = r[:participant].map do |p|
23
+ mas = to_array(r[:participant]).map do |p|
12
24
  ap = AuctionParticipant.new
13
25
  ap.soap_client = client
14
- ap.firm_id = convert(p[:firm_id], :integer)
15
- ap.offers_nums = convert(p[:offers_nums][:string], :integer)
26
+ ap.auction_id = auction_id
27
+ ap.firm_id = convert(p[:firm_id], :string)
28
+ ap.offers_nums = ArrayOfIds.from_part_response(p[:offers_nums]).map(&:to_i)
16
29
  ap
17
30
  end
18
31
 
19
32
  mas
20
33
  end
21
34
 
35
+ # @return [FirmInfo] Информация об организации
22
36
  def firm
37
+ return firm_id if firm_id.include? 'Participant'
23
38
  remote_market.get_firm_info(firm_id)
24
39
  end
40
+
41
+ # @return [AuctionOffer[]] Массив предложений
42
+ def offers
43
+ offers_nums.map { |offer_num| remote_auction.get_offer(auction_id, firm_id, offer_num) }
44
+ end
25
45
  end
26
46
  end
27
47
  end
@@ -0,0 +1,34 @@
1
+ require 'b2b_center_api/web_service/types/base'
2
+
3
+ module B2bCenterApi
4
+ module WebService
5
+ module Types
6
+ # Файл
7
+ class B2bFile < Base
8
+ # @return [String] Наименование файла. Формат значения VARCHAR(255)
9
+ attr_accessor :title
10
+ # @return [String] Описание файла
11
+ attr_accessor :description
12
+ # Имя файла, например zayavka.doc.
13
+ # Файл расположен в корневой папке пользователя (доступ по FTP).
14
+ # Если пользователь не имеет прав для скачивания файла, то поле отсутствует.
15
+ # Формат значения VARCHAR(255)
16
+ # @return [String]
17
+ attr_accessor :name
18
+
19
+ # @return [B2bFile[]]
20
+ def self.from_part_response(response)
21
+ return if response.nil?
22
+ files = to_array(response[:file]).map do |f|
23
+ file = B2bFile.new
24
+ file.title = convert(f[:title], :string)
25
+ file.description = convert(f[:description], :string)
26
+ file.name = convert(f[:name], :string)
27
+ file
28
+ end
29
+ files
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -34,6 +34,10 @@ module B2bCenterApi
34
34
  def remote_tender
35
35
  B2bCenterApi::RemoteTender.new(@soap_client)
36
36
  end
37
+
38
+ def self.to_array(obj)
39
+ obj.is_a?(Hash) ? [obj] : obj
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -3,36 +3,64 @@ require 'b2b_center_api/web_service/types/base'
3
3
  module B2bCenterApi
4
4
  module WebService
5
5
  module Types
6
+ # Информация об организации
6
7
  class FirmInfo < Base
7
- attr_accessor :date_lastedit,
8
- :org_name,
9
- :org_name_short,
10
- :code_okpo,
11
- :bank_name,
12
- :bank_inn,
13
- :ogrn,
14
- :ogrn_given,
15
- :ogrn_date_given,
16
- :bank_kpp,
17
- :bank_bik,
18
- :bank_r_account,
19
- :bank_c_account,
20
- :bank_comments,
21
- :jury_address,
22
- :post_address,
23
- :fact_address,
24
- :site_url,
25
- :certification,
26
- :org_details,
27
- :bank_details,
28
- :country,
29
- # :bosses,
30
- :is_smb
8
+ # @return [Integer] ID организации
9
+ attr_accessor :firm_id
10
+ # @return [Time] Дата последнего изменения
11
+ attr_accessor :date_lastedit
12
+ # @return [String] Полное наименование организации. Формат значения VARCHAR(255)
13
+ attr_accessor :org_name
14
+ # @return [String] Краткое наименование организации. Формат значения VARCHAR(255)
15
+ attr_accessor :org_name_short
16
+ # @return [String] Код ОКПО. Формат значения VARCHAR (10)
17
+ attr_accessor :code_okpo
18
+ # @return [String] Название банка. Формат значения VARCHAR(255)
19
+ attr_accessor :bank_name
20
+ # @return [String] ИНН организации. Формат значения VARCHAR(30)
21
+ attr_accessor :bank_inn
22
+ # @return [String] ОГРН. Формат значения VARCHAR(15)
23
+ attr_accessor :ogrn
24
+ # @return [String] Кем выдан ОГРН. Формат значения VARCHAR(128)
25
+ attr_accessor :ogrn_given
26
+ # @return [Date] Дата выдачи ОГРН. Формат значения dd.mm.YYYY
27
+ attr_accessor :ogrn_date_given
28
+ # @return [String] КПП организации. Формат значения VARCHAR(12)
29
+ attr_accessor :bank_kpp
30
+ # @return [String] БИК. Формат значения VARCHAR(30)
31
+ attr_accessor :bank_bik
32
+ # @return [String] Расчетный счет. Формат значения VARCHAR(30)
33
+ attr_accessor :bank_r_account
34
+ # @return [String] Корреспондентский счет. Формат значения VARCHAR(30)
35
+ attr_accessor :bank_c_account
36
+ # @return [String] Комментарии к банковским реквизитам. Формат значения VARCHAR(255)
37
+ attr_accessor :bank_comments
38
+ # @return [String] Юридический адрес. Формат значения VARCHAR(255)
39
+ attr_accessor :jury_address
40
+ # @return [String] Почтовый адрес. Формат значения VARCHAR(255)
41
+ attr_accessor :post_address
42
+ # @return [String] Фактический адрес. Формат значения VARCHAR(255)
43
+ attr_accessor :fact_address
44
+ # @return [String] Адрес веб-сайта. Формат значения VARCHAR(255)
45
+ attr_accessor :site_url
46
+ # @return [String] Информация о сертификации продукции, работ и услуг
47
+ attr_accessor :certification
48
+ # @return [String] Регистрационные данные. Поле заполняется только для иностранных организаций.
49
+ attr_accessor :org_details
50
+ # @return [String] Банковские реквизиты. Поле заполняется только для иностранных организаций.
51
+ attr_accessor :bank_details
52
+ # @return [Integer] Код страны. Пример: код России = 643
53
+ attr_accessor :country
54
+ # @return [Boolean] Соответствует ли участник критериям СМП (среднего или малого предпринимательства)
55
+ attr_accessor :is_smb
31
56
 
32
- def self.from_response(response, client)
57
+ # @return [FirmInfo]
58
+ def self.from_response(response, client, firm_id)
59
+ return if response.result.nil?
33
60
  r = response.result
34
61
  fi = FirmInfo.new
35
62
  fi.soap_client = client
63
+ fi.firm_id = firm_id
36
64
  fi.date_lastedit = convert(r[:date_lastedit], :time)
37
65
  fi.org_name = convert(r[:org_name], :string)
38
66
  fi.org_name_short = convert(r[:org_name_short], :string)
@@ -41,7 +69,7 @@ module B2bCenterApi
41
69
  fi.bank_inn = convert(r[:bank_inn], :string)
42
70
  fi.ogrn = convert(r[:ogrn], :string)
43
71
  fi.ogrn_given = convert(r[:ogrn_given], :string)
44
- fi.ogrn_date_given = convert(r[:ogrn_date_given], :string)
72
+ fi.ogrn_date_given = convert(r[:ogrn_date_given], :date)
45
73
  fi.bank_kpp = convert(r[:bank_kpp], :string)
46
74
  fi.bank_bik = convert(r[:bank_bik], :string)
47
75
  fi.bank_r_account = convert(r[:bank_r_account], :string)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: b2b_center_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Archakov Aleksandr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-06 00:00:00.000000000 Z
11
+ date: 2015-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,13 +95,16 @@ files:
95
95
  - lib/b2b_center_api/web_service/response.rb
96
96
  - lib/b2b_center_api/web_service/type_cast.rb
97
97
  - lib/b2b_center_api/web_service/types.rb
98
+ - lib/b2b_center_api/web_service/types/array_of_ids.rb
99
+ - lib/b2b_center_api/web_service/types/auction_offer.rb
98
100
  - lib/b2b_center_api/web_service/types/auction_participant.rb
101
+ - lib/b2b_center_api/web_service/types/b2b_file.rb
99
102
  - lib/b2b_center_api/web_service/types/base.rb
100
103
  - lib/b2b_center_api/web_service/types/firm_info.rb
101
104
  - spec/b2b_center_api_spec.rb
102
105
  - spec/spec_helper.rb
103
106
  - wsdl/demo.remote.xml
104
- homepage: ''
107
+ homepage: https://github.com/kodram/b2b_center_api
105
108
  licenses:
106
109
  - MIT
107
110
  metadata: {}