nova_poshta_api 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ee9af5e3f9a64d1a5b2de73e54f1e69201a324549a21625be4832915bd188866
4
+ data.tar.gz: ae26753bcb3c32673d6e05a66daaaa96efe9af4b8b6e2ed968e93e13055a43d4
5
+ SHA512:
6
+ metadata.gz: a2888a63d91276a59bc79be514888efaf69df6659907ef60310f4c5f87fa04835a51e9894ec379e4101559be94aff802af933aedd55e3751f0f07b4e11b574ed
7
+ data.tar.gz: fc04f4252863a2b70fd5e6168680fa2f0a91c542f6d2d4edc82ba0f6501f40966e7b29ddb4821298713221530d783fdadee2e4773ef391c8779c5ca0d21ae5c5
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/nova_poshta_api'
4
+
5
+ module NovaPoshtaApi
6
+ end
@@ -0,0 +1,17 @@
1
+ require 'json'
2
+ require 'active_support'
3
+ require 'nova_poshta_api/version'
4
+ require 'nova_poshta_api/base'
5
+ require 'nova_poshta_api/request'
6
+ require 'uri'
7
+ require 'net/http'
8
+
9
+ module NovaPoshtaApi
10
+ def self.configure
11
+ yield base_class
12
+ end
13
+
14
+ def self.base_class
15
+ Base
16
+ end
17
+ end
@@ -0,0 +1,66 @@
1
+ module NovaPoshtaApi
2
+ class Base
3
+ def self.class_attr_accessor(*names)
4
+ names.each do |name|
5
+ define_singleton_method("#{name.to_s}=".to_sym){ |attr| class_variable_set("@@#{name}", attr) }
6
+ define_singleton_method(name.to_sym){ class_variable_get("@@#{name}") }
7
+ end
8
+ end
9
+
10
+ class_attr_accessor :url, :api_key, :format
11
+
12
+ class << self
13
+ def post_request(body)
14
+ response = perform_request body
15
+ format_response response
16
+ rescue => e
17
+ puts e
18
+ {}
19
+ end
20
+
21
+ def make_body(model, meth, options={})
22
+ {
23
+ 'modelName' => model,
24
+ 'calledMethod' => meth,
25
+ 'methodProperties' => options,
26
+ 'apiKey' => api_key
27
+ }
28
+ end
29
+
30
+ private
31
+
32
+ def format_request!(request, body)
33
+ if format.to_sym == :json
34
+ request.content_type = 'application/json'
35
+ request.body = body.to_json
36
+ elsif format.to_sym == :xml
37
+ request.content_type = 'text/xml'
38
+ request.body = body.to_xml.gsub(/\n/, '').gsub(/>\s+</, '><')
39
+ else
40
+ raise 'Bad format'
41
+ end
42
+ end
43
+
44
+ def format_response(response)
45
+ if format.to_sym == :json
46
+ JSON.parse(response.body)
47
+ elsif format.to_sym == :xml
48
+ Nokogiri::XML(response.body)
49
+ else
50
+ raise 'Bad format'
51
+ end
52
+ end
53
+
54
+ def perform_request body
55
+ uri = URI url.gsub(/\{format\}/, "#{format}")
56
+ request = Net::HTTP::Post.new uri
57
+ format_request! request, body
58
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
59
+ http.request request
60
+ end
61
+ rescue => e
62
+ puts e
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,25 @@
1
+ module NovaPoshtaApi
2
+ class Request < Base
3
+ AVAILABLE_API_CALLS = {
4
+ cities: {model: 'Address', method: 'getCities'},
5
+ find_city: {model: 'Address', method: 'getCities', args: ['FindByString']},
6
+ settlements: {model: 'AddressGeneral', method: 'getSettlements'},
7
+ areas: {model: 'Address', method: 'getAreas'},
8
+ warehouses: {model: 'Address', method: 'getWarehouses'},
9
+ warehouse_types: {model: 'Address', method: 'getWarehouseTypes'},
10
+ street: {model: 'Address', method: 'getStreet', args: ['CityRef']},
11
+ find_street: {model: 'Address', method: 'getStreet', args: ['CityRef', 'FindByString']},
12
+ service_types: {model: 'Common', method: 'getServiceTypes'}
13
+ }
14
+
15
+ def self.method_missing meth, *args
16
+ super unless AVAILABLE_API_CALLS.key?(meth)
17
+
18
+ params = AVAILABLE_API_CALLS[meth]
19
+ arguments = (params[:args] || []).zip(args).to_h
20
+
21
+ body_of_query = make_body params[:model], params[:method], arguments
22
+ post_request body_of_query
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module NovaPoshtaApi
2
+ VERSION = '0.1.3'.freeze
3
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nova_poshta_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - woodcrust
8
+ - VitaliyAdamkov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-01-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 1.6.8.1
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '1.9'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 1.6.8.1
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ - !ruby/object:Gem::Dependency
35
+ name: bundler
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.17'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '1.2'
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.17'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '10.0'
61
+ - - "<"
62
+ - !ruby/object:Gem::Version
63
+ version: '13.0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '10.0'
71
+ - - "<"
72
+ - !ruby/object:Gem::Version
73
+ version: '13.0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rspec
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '3.0'
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ - !ruby/object:Gem::Dependency
89
+ name: byebug
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ - !ruby/object:Gem::Dependency
103
+ name: rubocop
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ type: :development
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ description: Gem API NOVA POSHTA(Новая почта, Нова пошта) for all ruby projects
117
+ email:
118
+ - emptystamp@gmail.com
119
+ - adamkov@tex.ua
120
+ executables:
121
+ - nova_poshta_api
122
+ extensions: []
123
+ extra_rdoc_files: []
124
+ files:
125
+ - bin/nova_poshta_api
126
+ - lib/nova_poshta_api.rb
127
+ - lib/nova_poshta_api/base.rb
128
+ - lib/nova_poshta_api/request.rb
129
+ - lib/nova_poshta_api/version.rb
130
+ homepage: https://github.com/VitaliyAdamkov/nova_poshta_api
131
+ licenses:
132
+ - MIT
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.7.4
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: This is gem nova poshta (Новая почта, Нова пошта)
154
+ test_files: []