tmapi 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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