tmapi 0.0.1 → 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: '018b9a91fe49e1bd5b08bcbd881f1f461ece20d0'
4
- data.tar.gz: 900a42a3678da59e534fe0e2bac78d549644a052
3
+ metadata.gz: 8ac0b0b782dc03babc7598a1e3d819886124bbf1
4
+ data.tar.gz: 7bac6a87072199331b0bd2fa469fa8cb20f180cb
5
5
  SHA512:
6
- metadata.gz: 53b5401c92659815fcc766590f1bb78dd2d43e0e0000d1f9f9b885ea548dc9ca79178aca349ad68e2f303ffe630d26a53214d3264aaa8a6951cf782ac0f24203
7
- data.tar.gz: 8ac13fa0282fa301d07838f1e4c4bca7fd2863fa032298a4c09fa72d1857bd5d1d0494d8ed51682a78b4c871e96c75c5b56cb2fe4f9f67f2910c4044246b6469
6
+ metadata.gz: 303dbc325e66689a5d7eef3919da7b53bcd4f395bbb982af8a6ab566eff0439e84f8f70daa7e54db6de144fa460a5e096f16d93fa7877533f86bf4fe136427c5
7
+ data.tar.gz: 93e1343146381d3a152e771f7d585623445950a138c7b312a010f9473de8f8a034b6792fcd98e9d23a33cc5328672bec1ed73d515c0bc89523f8d41d085ebfc9
@@ -1,14 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tmapi (0.0.1)
4
+ tmapi (0.0.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  addressable (2.5.0)
10
10
  public_suffix (~> 2.0, >= 2.0.2)
11
+ ansi (1.5.0)
11
12
  ast (2.3.0)
13
+ builder (3.2.3)
12
14
  crack (0.4.3)
13
15
  safe_yaml (~> 1.0.0)
14
16
  hashdiff (0.3.2)
@@ -16,6 +18,11 @@ GEM
16
18
  multi_xml (>= 0.5.2)
17
19
  mini_portile2 (2.1.0)
18
20
  minitest (5.10.1)
21
+ minitest-reporters (1.1.14)
22
+ ansi
23
+ builder
24
+ minitest (>= 5.0)
25
+ ruby-progressbar
19
26
  multi_xml (0.5.5)
20
27
  nokogiri (1.6.8.1)
21
28
  mini_portile2 (~> 2.1.0)
@@ -46,6 +53,7 @@ DEPENDENCIES
46
53
  bundler (~> 1.13)
47
54
  httparty
48
55
  minitest (~> 5.0)
56
+ minitest-reporters (~> 1.1)
49
57
  nokogiri
50
58
  rake (~> 10.0)
51
59
  rubocop (~> 0)
data/README.md CHANGED
@@ -1,6 +1,11 @@
1
- # TmAPI
1
+ # TMAPI
2
2
 
3
- Wrapper for TM API ([Taxi Master](http://taxi-master.com)) written in Ruby.
3
+ [![Build Status](https://travis-ci.org/rgarifullin/tmapi.svg?branch=master)](https://travis-ci.org/rgarifullin/tmapi)
4
+ [![Code Climate](https://codeclimate.com/github/rgarifullin/tmapi/badges/gpa.svg)](https://codeclimate.com/github/rgarifullin/tmapi)
5
+
6
+ Wrapper for TaxiMaster API ([Taxi Master](http://taxi-master.com)) written in Ruby.
7
+
8
+ TaxiMaster API documentation: [(Russian)](http://help.taximaster.ru/index.php/TM_API)
4
9
 
5
10
  ## Installation
6
11
 
@@ -24,13 +29,18 @@ First you should initialize a new class with API URL and unique key of customer.
24
29
 
25
30
  Example:
26
31
  ```ruby
27
- api = TMAPI('url', 'key')
32
+ api = TMAPI::Telephony.new('url', 'key')
28
33
  api.change_order_state(order_id, new_state)
34
+ # if OK
35
+ => { order_id: 1, new_state: 5 }
29
36
  ```
30
37
 
31
- Optionally you can disable SSL verification (enabled by default):
38
+ Options:
39
+ * ```ssl``` - SSL verification (```true``` by default)
40
+ * ```debug``` - output response to logger (```false``` by default)
41
+
32
42
  ```ruby
33
- api = TMAPI('url', 'key', false)
43
+ api = TMAPI::Telephony.new('url', 'key', ssl: false, debug: true)
34
44
  ```
35
45
 
36
46
  ## Contributing
@@ -0,0 +1,5 @@
1
+ module TMAPI
2
+ # TaxiMaster Common API
3
+ class Common
4
+ end
5
+ end
@@ -0,0 +1,80 @@
1
+ require 'httparty'
2
+ require 'nokogiri'
3
+ require 'logger'
4
+
5
+ module TMAPI
6
+ # TaxiMaster Telephony API
7
+ class Telephony
8
+ class Error < RuntimeError; end
9
+ class OrderNotFound < Error; end
10
+ class FailedRequirements < Error; end
11
+
12
+ def initialize(url, key, opts = {})
13
+ @url = url
14
+ @key = key
15
+ @verify_ssl = opts[:ssl] || true
16
+ @logger = TMAPI::Telephony.logger || Logger.new(STDOUT)
17
+ @debug = opts[:debug] || false
18
+ end
19
+
20
+ def change_order_state(order_id, state)
21
+ params = { order_id: order_id, need_state: state }
22
+ params[:signature] = signature(params)
23
+
24
+ opts = { body: params, verify: @verify_ssl, format: :plain }
25
+ response = HTTParty.post("#{@url}/change_order_state", opts)
26
+ @logger.debug(response) if @debug
27
+
28
+ parse_change_order_state(response, order_id)
29
+ end
30
+
31
+ private
32
+
33
+ class << self
34
+ attr_accessor :logger
35
+ end
36
+
37
+ if defined?(Rails::Railtie)
38
+ # Use Rails.logger inside Rails app
39
+ class Railtie < Rails::Railtie
40
+ initializer 'TMAPI::Telephony.logger' do
41
+ TMAPI::Telephony.logger = Rails.logger
42
+ end
43
+ end
44
+ end
45
+
46
+ def url_params(params)
47
+ URI.encode_www_form(params)
48
+ end
49
+
50
+ def signature(params)
51
+ Digest::MD5.hexdigest(url_params(params) + @key)
52
+ end
53
+
54
+ def inspect(data)
55
+ data.each_with_object({}) do |elem, hash|
56
+ hash[elem.name.downcase.to_sym] = if elem.elements.any?
57
+ inspect(elem.elements)
58
+ else
59
+ elem.text
60
+ end
61
+ end
62
+ end
63
+
64
+ def parse_change_order_state(response, order_id)
65
+ data = Nokogiri::XML(response.body).root
66
+ return {} unless data
67
+
68
+ parsed_response = inspect(data.elements)
69
+ case parsed_response[:code]
70
+ when '100'
71
+ raise OrderNotFound.new, "Order ID #{order_id} not found"
72
+ when '101'
73
+ raise FailedRequirements.new,
74
+ "Can't change state of order ID #{order_id} due to requirements"
75
+ end
76
+
77
+ parsed_response[:data]
78
+ end
79
+ end
80
+ end
@@ -4,12 +4,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'tmapi'
7
- spec.version = '0.0.1'
7
+ spec.version = '0.0.3'
8
8
  spec.authors = ['Rinat Garifullin']
9
9
  spec.email = ['ringarifullin@gmail.com']
10
10
 
11
- spec.summary = 'Wrapper for TM API'
12
- spec.description = 'Wrapper for TM HTTP API http://taxi-master.com/'
11
+ spec.summary = 'Wrapper for TaxiMaster API (TMAPI)'
12
+ spec.description = 'Wrapper for TaxiMaster HTTP API http://taxi-master.com/'
13
13
  spec.homepage = 'https://github.com/rgarifullin/tmapi'
14
14
  spec.license = 'MIT'
15
15
 
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'bundler', '~> 1.13'
24
24
  spec.add_development_dependency 'rake', '~> 10.0'
25
25
  spec.add_development_dependency 'minitest', '~> 5.0'
26
+ spec.add_development_dependency 'minitest-reporters', '~> 1.1'
26
27
  spec.add_development_dependency 'webmock', '~> 2.3'
27
28
  spec.add_development_dependency 'rubocop', '~> 0'
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rinat Garifullin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-21 00:00:00.000000000 Z
11
+ date: 2017-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: webmock
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +94,7 @@ dependencies:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
- description: Wrapper for TM HTTP API http://taxi-master.com/
97
+ description: Wrapper for TaxiMaster HTTP API http://taxi-master.com/
84
98
  email:
85
99
  - ringarifullin@gmail.com
86
100
  executables: []
@@ -98,7 +112,8 @@ files:
98
112
  - Rakefile
99
113
  - bin/console
100
114
  - bin/setup
101
- - lib/tmapi.rb
115
+ - lib/tmapi/common.rb
116
+ - lib/tmapi/telephony.rb
102
117
  - tmapi.gemspec
103
118
  homepage: https://github.com/rgarifullin/tmapi
104
119
  licenses:
@@ -123,5 +138,5 @@ rubyforge_project:
123
138
  rubygems_version: 2.5.2
124
139
  signing_key:
125
140
  specification_version: 4
126
- summary: Wrapper for TM API
141
+ summary: Wrapper for TaxiMaster API (TMAPI)
127
142
  test_files: []
@@ -1,53 +0,0 @@
1
- require 'httparty'
2
- require 'nokogiri'
3
- require 'logger'
4
-
5
- class TMAPI
6
- def initialize(url, key, ssl = true)
7
- @url = url
8
- @key = key
9
- @ssl = ssl
10
- @logger = TMAPI.logger || Logger.new(STDOUT)
11
- end
12
-
13
- def change_order_state(order_id, state)
14
- params = { order_id: order_id, need_state: state }
15
- params[:signature] = signature(params)
16
-
17
- begin
18
- response = HTTParty.post("#{@url}/change_order_state", body: params,
19
- verify: @ssl)
20
- result = Nokogiri::XML(response.body)
21
- if response.success? && result.at_css('code')&.content.to_i.zero?
22
- result.at_css('data')&.at_css('NEW_STATE')&.content.to_i == state
23
- else
24
- false
25
- end
26
- rescue Errno::ECONNREFUSED => ex
27
- @logger.fatal(ex)
28
- false
29
- end
30
- end
31
-
32
- private
33
-
34
- class << self
35
- attr_accessor :logger
36
- end
37
-
38
- def url_params(params)
39
- URI.encode_www_form(params)
40
- end
41
-
42
- def signature(params)
43
- Digest::MD5.hexdigest(url_params(params) + @key)
44
- end
45
-
46
- if defined?(Rails::Railtie)
47
- class Railtie < Rails::Railtie
48
- initializer 'TmAPI.logger' do
49
- TMAPI.logger = Rails.logger
50
- end
51
- end
52
- end
53
- end