orangedata 0.0.1 → 0.0.2

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: 9f3099e2e11880ab05a035b7174a3b51d4f23568
4
- data.tar.gz: c48823de2b7073f0e19c60903e3c6d574b08b2b9
3
+ metadata.gz: 2dde9cd360d680c7c81b2daa172585325a888a57
4
+ data.tar.gz: fc2569d5d679490fb5315873fd94c3e26a8fc8af
5
5
  SHA512:
6
- metadata.gz: e8449d4a55cebf3da41ec3cae035fccdd16c62a363359ee3b5cc35b2511e84b9ebed8b4147a2d3604ca47096df09a65de39cd35f7c24363cda62402c68013949
7
- data.tar.gz: bcf0803eaecc27e05bb5a34305cf3da9092c792309630147e093c084c89bfd01aaa78fd0860a290190c9b7f606c7a310b59d6c0d039909d9888f6d593a1d63a2
6
+ metadata.gz: b62936f69fd98b21c29ba5eb028206aa1ea8a8d073262acba0dc3aaef7ee86a7a49f5237d8deaed690391e4b0a541679f1b6899583e23102e7da100522531560
7
+ data.tar.gz: f1b7e6ef44e611925d8a3147b27df7b7413be86bb9c686b329d171dd25fe4ece1028b55e1aea2de59d5712541f8e034596adaf509709f758d13dca3621baace7
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /.rspec_status
10
+ /*.yml
data/.rubocop.yml ADDED
@@ -0,0 +1,71 @@
1
+ AllCops:
2
+ # DefaultFormatter: fuubar
3
+ # TargetRubyVersion: 2.1
4
+ TargetRubyVersion: 2.3
5
+ Exclude:
6
+ - 'spec/fixtures/**/*'
7
+ - 'tmp/**/*'
8
+
9
+ Gemspec/RequiredRubyVersion:
10
+ Enabled: false
11
+
12
+ Metrics/LineLength:
13
+ Max: 120
14
+
15
+ Metrics/BlockLength:
16
+ Exclude:
17
+ - 'spec/**/*'
18
+
19
+ Metrics/MethodLength:
20
+ Max: 20
21
+
22
+ Metrics/AbcSize:
23
+ Max: 50
24
+
25
+ Metrics/CyclomaticComplexity:
26
+ Max: 50
27
+
28
+ Metrics/PerceivedComplexity:
29
+ Max: 50
30
+
31
+ Style/StringLiterals:
32
+ Enabled: false
33
+ # EnforcedStyle: double_quotes
34
+
35
+ Style/RedundantReturn:
36
+ Enabled: false
37
+
38
+ Layout/SpaceBeforeBlockBraces:
39
+ EnforcedStyle: no_space
40
+
41
+ Layout/SpaceAroundEqualsInParameterDefault:
42
+ EnforcedStyle: no_space
43
+
44
+ Layout/SpaceAfterColon:
45
+ Enabled: false
46
+
47
+ Layout/SpaceAroundOperators:
48
+ Enabled: false
49
+
50
+ Layout/EndAlignment:
51
+ EnforcedStyleAlignWith: variable
52
+
53
+ Layout/SpaceInsideBlockBraces:
54
+ SpaceBeforeBlockParameters: false
55
+
56
+ Layout/EmptyLinesAroundBlockBody:
57
+ Exclude:
58
+ - 'spec/**/*'
59
+
60
+ Layout/EmptyLinesAroundModuleBody:
61
+ Enabled: false
62
+ # EnforcedStyle: empty_lines_except_namespace
63
+ Layout/EmptyLinesAroundClassBody:
64
+ Enabled: false
65
+ # EnforcedStyle: empty_lines_except_namespace
66
+
67
+ Style/AsciiComments:
68
+ Enabled: false
69
+
70
+ Style/TrailingCommaInHashLiteral:
71
+ Enabled: false
data/.travis.yml CHANGED
@@ -4,4 +4,5 @@ language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
6
  - 2.3.1
7
+ - 2.4.1
7
8
  before_install: gem install bundler -v 1.16.6
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
5
+ git_source(:github){|repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # All dependencies are in orangedata.gemspec
6
8
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- orangedata (0.0.1)
4
+ orangedata (0.0.2)
5
5
  faraday (>= 0.15)
6
6
  faraday_middleware
7
7
 
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Orangedata Client
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/orangedata.svg)](https://badge.fury.io/rb/orangedata)
4
+ [![Build Status](https://travis-ci.org/Vasfed/orangedata.svg?branch=master)](https://travis-ci.org/Vasfed/orangedata)
5
+
3
6
  A ruby client for orangedata.ru service.
4
7
  Target service is pretty local to RU, so parts of readme will be in russian.
5
8
 
@@ -28,7 +31,7 @@ gem 'orangedata'
28
31
 
29
32
  ## Использование
30
33
 
31
- Для тестового окружения ключики в комплекте - [credentials_test.yml](lib/credentials_test.yml), собрано из родного `File_for_test.zip`, доступны как `OrangeData::Credentials.default_test`
34
+ Для тестового окружения ключики в комплекте - [credentials_test.yml](lib/orange_data/credentials_test.yml), собрано из родного `File_for_test.zip`, доступны как `OrangeData::Credentials.default_test`
32
35
 
33
36
  ```ruby
34
37
  transport = OrangeData::Transport.new("https://apip.orangedata.ru:2443/api/v2/", OrangeData::Credentials.default_test)
@@ -83,28 +86,26 @@ gem 'orangedata'
83
86
  Предполагается, что всякие договоры и прочая фискализация уже успешно пройдена и у вас есть доступ
84
87
  к ЛК orangedata.
85
88
 
86
- Генерируем себе приватный ключ:
89
+ В [ЛК в разделе интеграций](https://lk.orangedata.ru/lk/integrations/direct) запрашиваем сертификат (шаг 3, первый шаг не нужен, а данные для второго получатся ниже), распаковываем полученный zip-архив и натравливаем туда генератор:
87
90
 
88
91
  ```ruby
89
- require 'yaml'
90
- c = OrangeData::Credentials.new title:'My production'
91
- c.generate_signature_key!(2048) # параметр - длина ключа
92
- #=> возвращает публичный ключ в том виде, который хочет ЛК OrangeData:
93
- # "<RSAKeyValue><Modulus>(многабукв)==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
94
-
95
- File.open("my_production.yml", "wt"){|f| f.write YAML.dump(c.to_hash) }
96
- # (на выходе - yml с приватным ключом и паролем к нему, который надо сохранить и беречь)
97
-
98
- # повторно взять публичный ключ можно так:
99
- credentials = OrangeData::Credentials.from_hash(YAML.load_file('my_production.yml'))
100
- credentials.signature_public_xml
101
- ```
92
+ c = OrangeData::Credentials.read_certs_from_pack('~/Downloads/1234567890', title:'My production', cert_key_pass:'1234') # cert_key_pass берем из readme_v2.txt, но есть подозрение что он у всех 1234
93
+ # Generated public signature key: <RSAKeyValue>...</Exponent></RSAKeyValue>
94
+ File.open("my_production.yml", "wt"){|f| f.write c.to_yaml }
102
95
 
103
- После чего публичный ключ (xml c `RSAKeyValue`) кормим в ЛК. Значение поля `Название ключа` с этого шага отправляется в `signature_key_name`.
104
- Далее там выпускаем себе сертификаты и из полученного архива вставляем содержимое `<ИНН>.crt` и `<ИНН>.key`(сертификат и ключ к нему) в yml-файлик аналогично примеру.
96
+ # опционально на маке копируем публичный ключ в буфер обмена:
97
+ system("echo '#{c.signature_public_xml}' | pbcopy")
98
+ ```
105
99
 
106
100
  Если все прошло гладко - теперь у вас есть файлик `my_production.yml` со всеми реквизитами доступа к продакшн-кассе. Обращаться с ним стоит как и с любой другой очень чувствительной информацией, например не стоит коммитить его (ну или как минимум, убрать из него поля `signature_key_pass` и `certificate_key_pass` и хранить отдельно)
107
101
 
102
+ Дальше публичный ключ с предыдущего шага отправляется в ЛК, там его сохряняем, "подключаем интеграцию", и пользуемся:
103
+
104
+ ```ruby
105
+ transport = OrangeData::Transport.new(OrangeData::Transport::DEFAULT_PRODUCTION_API_URL, OrangeData::Credentials.from_hash(YAML.load('my_production.yml')))
106
+ transport.post_document # и далее по тексту, осторожно - не пробейте лишние чеки во время проверок
107
+ ```
108
+
108
109
  ## Разработка
109
110
 
110
111
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "orange_data"
@@ -3,27 +3,26 @@
3
3
  require "openssl"
4
4
  require "base64"
5
5
  require "securerandom"
6
+ require "yaml"
6
7
 
7
- # wrapper for keys/certs used for connection auth
8
8
  module OrangeData
9
+ # wrapper for keys/certs used for connection auth
9
10
  class Credentials
10
11
 
11
12
  # nodoc
12
13
  module KeyEncoding
14
+
13
15
  refine OpenSSL::PKey::RSA do
14
16
  def to_xml
15
17
  h_params = to_hash
16
18
  h = { 'Modulus' => :n, 'Exponent' => :e }
17
- if private?
18
- h.merge!({
19
- 'P' => :p, 'Q' => :q, 'DP' => :dmp1, 'DQ' => :dmq1, 'InverseQ' => :iqmp, 'D' => :d
20
- })
21
- end
22
- "<RSAKeyValue>#{h.map{|(k,v)| "<#{k}>#{h_params[v.to_s]}</#{k}>"}.join('')}</RSAKeyValue>"
19
+ h.merge!('P' => :p, 'Q' => :q, 'DP' => :dmp1, 'DQ' => :dmq1, 'InverseQ' => :iqmp, 'D' => :d) if private?
20
+
21
+ "<RSAKeyValue>#{h.map{|(k, v)| "<#{k}>#{h_params[v.to_s]}</#{k}>" }.join('')}</RSAKeyValue>"
23
22
  end
24
23
 
25
24
  def to_hash
26
- params.map{|k,v| v != 0 && [k, Base64.strict_encode64(v.to_s(2))] || nil}.compact.to_h
25
+ params.map{|k, v| v != 0 && [k, Base64.strict_encode64(v.to_s(2))] || nil }.compact.to_h
27
26
  end
28
27
  end
29
28
 
@@ -31,7 +30,7 @@ module OrangeData
31
30
  def from_xml(xml)
32
31
  require "rexml/document"
33
32
  kv = REXML::Document.new(xml).elements['RSAKeyValue']
34
- raise ArgumentError, 'no RSAKeyValue in xml' unless kv&.name == 'RSAKeyValue'
33
+ raise ArgumentError, 'no RSAKeyValue in xml' unless kv && kv.name == 'RSAKeyValue'
35
34
 
36
35
  mapping = {
37
36
  "Modulus"=>:n, "Exponent"=>:e,
@@ -39,27 +38,28 @@ module OrangeData
39
38
  "DP"=>:dmp1, "DQ"=>:dmq1, "InverseQ"=>:iqmp
40
39
  }
41
40
  from_hash(
42
- kv.elements.each_with_object({}){|k,h| h[mapping[k.name]] = k.text if mapping[k.name] }
41
+ kv.elements.each_with_object({}){|k, h| h[mapping[k.name]] = k.text if mapping[k.name] }
43
42
  )
44
43
  end
45
44
 
46
- def from_hash hash
45
+ def from_hash(hash)
47
46
  OpenSSL::PKey::RSA.new.tap do |key|
48
- key.params.keys.each{|param|
49
- if(v = hash[param] || hash[param.to_sym])
47
+ key.params.keys.each do |param|
48
+ if (v = hash[param] || hash[param.to_sym])
50
49
  key.send(:"#{param}=", OpenSSL::BN.new(Base64.decode64(v), 2))
51
50
  end
52
- }
51
+ end
53
52
  end
54
53
  end
55
54
  end
55
+
56
56
  end
57
57
 
58
58
  using KeyEncoding
59
59
 
60
60
  attr_accessor :signature_key_name, :signature_key, :certificate, :certificate_key, :title
61
61
 
62
- def initialize signature_key_name:nil,signature_key:nil,certificate:nil,certificate_key:nil,title:nil
62
+ def initialize(signature_key_name:nil, signature_key:nil, certificate:nil, certificate_key:nil, title:nil)
63
63
  raise ArgumentError, "Signature key should be a private key" if signature_key && !signature_key.private?
64
64
  raise ArgumentError, "Certificate key should be a private key" if certificate_key && !certificate_key.private?
65
65
  @signature_key_name = signature_key_name
@@ -71,16 +71,18 @@ module OrangeData
71
71
 
72
72
  def valid?
73
73
  signature_key_name &&
74
- signature_key && signature_key.private? &&
75
- certificate && certificate_key && certificate_key.private?
74
+ signature_key && signature_key.private? &&
75
+ certificate && certificate_key && certificate_key.private?
76
76
  end
77
77
 
78
- def self.from_hash creds
78
+ def self.from_hash(creds)
79
79
  key = nil
80
80
  if creds[:signature_key]
81
- key = if creds[:signature_key].is_a?(Hash)
81
+ key = if creds[:signature_key].is_a?(OpenSSL::PKey::RSA)
82
+ creds[:signature_key]
83
+ elsif creds[:signature_key].is_a?(Hash)
82
84
  OpenSSL::PKey::RSA.from_hash(creds[:signature_key])
83
- elsif creds[:signature_key].start_with?('<')
85
+ elsif creds[:signature_key].is_a?(String) && creds[:signature_key].start_with?('<')
84
86
  OpenSSL::PKey::RSA.from_xml(creds[:signature_key])
85
87
  else
86
88
  OpenSSL::PKey::RSA.new(creds[:signature_key], creds[:signature_key_pass])
@@ -90,7 +92,8 @@ module OrangeData
90
92
  signature_key_name: creds[:signature_key_name],
91
93
  signature_key: key,
92
94
  certificate: creds[:certificate] && OpenSSL::X509::Certificate.new(creds[:certificate]),
93
- certificate_key: creds[:certificate_key] && OpenSSL::PKey::RSA.new(creds[:certificate_key], creds[:certificate_key_pass]),
95
+ certificate_key: creds[:certificate_key] &&
96
+ OpenSSL::PKey::RSA.new(creds[:certificate_key], creds[:certificate_key_pass]),
94
97
  title: creds[:title]
95
98
  )
96
99
  end
@@ -106,19 +109,19 @@ module OrangeData
106
109
  {
107
110
  title: title,
108
111
  signature_key_name: signature_key_name,
109
- signature_key: signature_key&.to_pem(OpenSSL::Cipher.new("aes-128-cbc"), key_pass),
110
- certificate: certificate&.to_pem,
111
- certificate_key: certificate_key&.to_pem(OpenSSL::Cipher.new("aes-128-cbc"), key_pass),
112
+ signature_key: signature_key && signature_key.to_pem(OpenSSL::Cipher.new("aes-128-cbc"), key_pass),
113
+ certificate: certificate && certificate.to_pem,
114
+ certificate_key: certificate_key && certificate_key.to_pem(OpenSSL::Cipher.new("aes-128-cbc"), key_pass),
112
115
  }.tap do |h|
113
116
  h.delete(:title) if !title || title == ''
114
117
  if save_pass
115
- h[:certificate_key_pass] = key_pass
116
- h[:signature_key_pass] = key_pass
118
+ h[:certificate_key_pass] = key_pass if certificate && key_pass
119
+ h[:signature_key_pass] = key_pass if signature_key && key_pass
117
120
  end
118
121
  end
119
122
  end
120
123
 
121
- def self.from_json json
124
+ def self.from_json(json)
122
125
  require 'json'
123
126
  from_hash(JSON.parse(json, symbolize_names: true))
124
127
  end
@@ -127,19 +130,51 @@ module OrangeData
127
130
  to_hash(key_pass:key_pass, save_pass:save_pass).to_json
128
131
  end
129
132
 
133
+ def to_yaml(key_pass:nil, save_pass:false)
134
+ to_hash(key_pass:key_pass, save_pass:save_pass).to_yaml
135
+ end
136
+
130
137
  def inspect
131
138
  info_fields = {
132
139
  title: (title || 'untitled').inspect,
133
140
  key_name: signature_key_name.inspect,
134
- certificate: (certificate&.subject.to_a.select{|ent| ent.first == 'O'}.dig(0, 1)).inspect,
135
- }.map{|(k,v)| "#{k}=#{v}"}.join(' ')
141
+ }
136
142
 
137
- "#<#{self.class.name}:#{object_id} #{info_fields}>"
143
+ if certificate && (subject_name = certificate.subject.to_a.select{|ent| ent.first == 'O' }.first)
144
+ info_fields[:certificate] = %Q("#{(subject_name[1] || 'unknown').gsub('"', '\"')}")
145
+ end
146
+
147
+ "#<#{self.class.name}:#{object_id} #{info_fields.map{|(k, v)| "#{k}=#{v}" }.join(' ')}>"
138
148
  end
139
149
 
140
150
  def generate_signature_key!(key_length=2048)
141
151
  self.signature_key = OpenSSL::PKey::RSA.new(key_length)
142
- signature_public_xml
152
+ end
153
+
154
+ def self.read_certs_from_pack(path, signature_key_name:nil, cert_key_pass:nil, title:nil)
155
+ path = File.expand_path(path)
156
+ client_cert = Dir.glob(path + '/*.{crt}').select{|f| File.file?(f.sub(/.crt\z/, '.key'))}
157
+ raise 'Expect to find exactly one <num>.crt with corresponding <num>.key file' unless client_cert.size == 1
158
+ client_cert = client_cert.first
159
+
160
+ # private_key_test.xml || rsa_\d+_private_key.xml
161
+ xmls = Dir.glob(path + '/*.{xml}').select{|f| f =~ /private/}
162
+ signature_key = if xmls.size == 1
163
+ File.read(xmls.first)
164
+ else
165
+ OpenSSL::PKey::RSA.new(2048).tap{|k|
166
+ puts "Generated public signature key: #{k.public_key.to_xml}"
167
+ }
168
+ end
169
+
170
+ from_hash(
171
+ title: title || "Generated from #{File.basename(path)}",
172
+ signature_key_name: signature_key_name || File.basename(client_cert).gsub(/\..*/, ''),
173
+ certificate: File.read(client_cert),
174
+ certificate_key: File.read(client_cert.sub(/.crt\z/, '.key')),
175
+ certificate_key_pass: cert_key_pass,
176
+ signature_key: signature_key,
177
+ )
143
178
  end
144
179
 
145
180
  # публичная часть ключа подписи в формате пригодном для отдачи в ЛК
@@ -149,8 +184,7 @@ module OrangeData
149
184
 
150
185
  # ключи для тествого окружения
151
186
  def self.default_test
152
- require 'yaml'
153
- from_hash(YAML.load_file(File.expand_path('../credentials_test.yml', __FILE__)))
187
+ from_hash(YAML.load_file(File.expand_path('credentials_test.yml', __dir__)))
154
188
  end
155
189
 
156
190
  end
@@ -2,22 +2,27 @@
2
2
 
3
3
  module OrangeData
4
4
 
5
+ # main class for receipt
5
6
  class Receipt
7
+
6
8
  attr_accessor :id, :inn, :group, :key_name
7
9
 
8
- def initialize id:SecureRandom.uuid, inn:, group:nil, key_name:nil
10
+ def initialize(id:SecureRandom.uuid, inn:, group:nil, key_name:nil)
9
11
  @id = id
10
12
  @inn = inn
11
13
  @group = group
12
14
  @key_name = key_name
13
15
  yield self if block_given?
14
16
  end
17
+
15
18
  end
16
19
 
20
+ # nodoc
17
21
  class ReceiptContent
18
22
 
23
+ # for agent type bit mask
19
24
  module AgentTypeSerializer
20
- AGENT_TYPE_BITS = { # 1057 (в чеках/БСО должно соответствовать отчету о (пере)регистрации ККТ)
25
+ AGENT_TYPE_BITS = { # 1057 (в чеках/БСО должно соответствовать отчету о (пере)регистрации ККТ)
21
26
  bank_payment_agent: (1 << 0), # банковский платежный агент
22
27
  bank_payment_subagent: (1 << 1), # банковский платежный субагент
23
28
  payment_agent: (1 << 2), # платежный агент
@@ -27,19 +32,18 @@ module OrangeData
27
32
  other_agent: (1 << 6), # иной агент
28
33
  }.freeze
29
34
 
30
- def self.load data
35
+ def self.load(data)
31
36
  data = data.to_i
32
- AGENT_TYPE_BITS.select{|(k,v)| (data & v) > 0}.map(&:first)
37
+ AGENT_TYPE_BITS.reject{|(_, v)| (data & v).zero? }.map(&:first)
33
38
  end
34
39
 
35
- def self.dump val
40
+ def self.dump(val)
36
41
  val = [val] unless val.is_a?(Array)
37
- val.map{|v| AGENT_TYPE_BITS[v] || raise "unknown agent_type #{v}"}.reduce(:|)
42
+ val.map{|v| AGENT_TYPE_BITS[v] || raise("unknown agent_type #{v}") }.reduce(:|)
38
43
  end
39
44
  end
40
45
 
41
-
42
- RECEIPT_TYPES = { # 1054:
46
+ RECEIPT_TYPES = { # 1054:
43
47
 
44
48
  }.freeze
45
49
 
@@ -55,11 +59,9 @@ module OrangeData
55
59
  return_expense: 4 # Возврат расхода
56
60
  }
57
61
  }
58
- }
59
-
60
-
62
+ }.freeze
61
63
 
62
- def initialize type
64
+ def initialize(_type)
63
65
  @positions = []
64
66
  @payments = []
65
67
  end
@@ -68,7 +70,7 @@ module OrangeData
68
70
  AgentTypeSerializer.load(@agent_type)
69
71
  end
70
72
 
71
- def agent_type= val
73
+ def agent_type=(val)
72
74
  @agent_type = AgentTypeSerializer.dump(val)
73
75
  end
74
76
 
@@ -5,22 +5,20 @@ require 'base64'
5
5
  require 'faraday'
6
6
  require 'faraday_middleware'
7
7
 
8
- # handles low-level http requests to orangedata, including auth
9
8
  module OrangeData
9
+ # handles low-level http requests to orangedata, including auth
10
10
  class Transport
11
11
 
12
- def initialize api_url=default_api_url, credentials=Credentials.default_test
12
+ DEFAULT_TEST_API_URL = "https://apip.orangedata.ru:2443/api/v2/"
13
+ DEFAULT_PRODUCTION_API_URL = "https://api.orangedata.ru:12003/api/v2/"
14
+
15
+ def initialize(api_url=DEFAULT_TEST_API_URL, credentials=Credentials.default_test)
13
16
  raise ArgumentError, "Need full credentials for connection" unless credentials.valid?
14
17
  @credentials = credentials
15
18
  @api_url = api_url
16
19
  end
17
20
 
18
- def default_api_url
19
- # production: https://api.orangedata.ru:12003/api/v2/
20
- # test: https://apip.orangedata.ru:2443/api/v2/
21
- "https://apip.orangedata.ru:2443/api/v2/"
22
- end
23
-
21
+ # middleware for request signatures
24
22
  class RequestSignatureMiddleware < Faraday::Middleware
25
23
  def initialize(app, signature_key)
26
24
  @app = app
@@ -53,11 +51,11 @@ module OrangeData
53
51
  end
54
52
  end
55
53
 
56
- def raw_post method, data
54
+ def raw_post(method, data)
57
55
  transport.post(method, data)
58
56
  end
59
57
 
60
- def post_entity sub_url, data
58
+ def post_entity(sub_url, data)
61
59
  res = raw_post(sub_url, data)
62
60
 
63
61
  case res.status
@@ -74,7 +72,7 @@ module OrangeData
74
72
  end
75
73
  end
76
74
 
77
- def get_entity sub_url
75
+ def get_entity(sub_url)
78
76
  res = transport.get(sub_url)
79
77
 
80
78
  case res.status
@@ -90,16 +88,13 @@ module OrangeData
90
88
  # Below actual methods from api
91
89
 
92
90
  def ping
93
- res = transport.get(''){|r|
94
- r.headers['Accept'] = 'text/plain'
95
- }
96
-
97
- return res.status == 200 && res.body == "Nebula.Api v2"
98
- rescue StandardError => e
91
+ res = transport.get(''){|r| r.headers['Accept'] = 'text/plain' }
92
+ res.status == 200 && res.body == "Nebula.Api v2"
93
+ rescue StandardError => _e
99
94
  return false
100
95
  end
101
96
 
102
- def post_document_validate data
97
+ def post_document_validate(data)
103
98
  res = raw_post 'validateDocument', data
104
99
 
105
100
  case res.status
@@ -114,19 +109,19 @@ module OrangeData
114
109
  end
115
110
  end
116
111
 
117
- def post_document data
112
+ def post_document(data)
118
113
  post_entity 'documents', data
119
114
  end
120
115
 
121
- def get_document inn, document_id
116
+ def get_document(inn, document_id)
122
117
  get_entity "documents/#{inn}/status/#{document_id}"
123
118
  end
124
119
 
125
- def post_correction data
120
+ def post_correction(data)
126
121
  post_entity 'corrections', data
127
122
  end
128
123
 
129
- def get_correction inn, document_id
124
+ def get_correction(inn, document_id)
130
125
  get_entity "corrections/#{inn}/status/#{document_id}"
131
126
  end
132
127
 
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module OrangeData
2
- VERSION = "0.0.1"
4
+
5
+ VERSION = "0.0.2"
6
+
3
7
  end
data/lib/orange_data.rb CHANGED
@@ -4,9 +4,9 @@ require "orange_data/version"
4
4
  require "orange_data/credentials"
5
5
  require "orange_data/transport"
6
6
 
7
+ # top-level namespace
7
8
  module OrangeData
8
9
 
9
-
10
10
  # QR: t=20180518T220500&s=975.88&fn=8710000101125654&i=99456&fp=1250448795&n=1
11
11
  #
12
12
 
data/lib/orangedata.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'orange_data'
data/orangedata.gemspec CHANGED
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path("lib", __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require "orange_data/version"
5
6
 
@@ -9,25 +10,27 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ["Vasily Fedoseyev"]
10
11
  spec.email = ["vasilyfedoseyev@gmail.com"]
11
12
 
12
- spec.summary = %q{Ruby client for orangedata.ru service}
13
- spec.description = %q{Ruby client for orangedata.ru service}
13
+ spec.summary = "Ruby client for orangedata.ru service"
14
+ spec.description = "Ruby client for orangedata.ru service"
14
15
  spec.homepage = "https://github.com/Vasfed/orangedata"
15
16
  spec.license = "MIT"
16
17
 
17
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.files = Dir.chdir(File.expand_path('.', __dir__)) do
19
+ `git ls-files -z`.split("\x0").reject{|f| f.match(%r{^(test|spec|features)/}) }
19
20
  end
20
21
 
21
22
  # spec.bindir = "exe"
22
23
  # spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
24
  spec.require_paths = ["lib"]
24
25
 
26
+ # spec.required_ruby_version = ">=2.1"
27
+
25
28
  spec.add_dependency "faraday", ">=0.15"
26
29
  spec.add_dependency "faraday_middleware"
27
30
 
28
31
  spec.add_development_dependency "bundler", "~> 1.16"
29
32
  spec.add_development_dependency "rake", "~> 10.0"
30
33
  spec.add_development_dependency "rspec"
31
- spec.add_development_dependency "webmock"
32
34
  spec.add_development_dependency "rubocop"
35
+ spec.add_development_dependency "webmock"
33
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orangedata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasily Fedoseyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-22 00:00:00.000000000 Z
11
+ date: 2018-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: webmock
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: webmock
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -117,6 +117,7 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - ".gitignore"
119
119
  - ".rspec"
120
+ - ".rubocop.yml"
120
121
  - ".travis.yml"
121
122
  - Gemfile
122
123
  - Gemfile.lock