elibri_api_client 1.0.2 → 1.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.
- data/elibri_api_client.gemspec +1 -1
- data/lib/elibri_api_client/api_adapters/v1.rb +17 -17
- data/lib/elibri_api_client/api_adapters/v1_helpers.rb +7 -7
- data/lib/elibri_api_client/api_adapters.rb +2 -2
- data/lib/elibri_api_client/core_extensions.rb +1 -1
- data/lib/elibri_api_client/version.rb +1 -1
- data/lib/elibri_api_client.rb +1 -1
- metadata +3 -3
data/elibri_api_client.gemspec
CHANGED
@@ -4,8 +4,8 @@ module Elibri
|
|
4
4
|
class ApiClient
|
5
5
|
module ApiAdapters
|
6
6
|
|
7
|
-
# Adapter dla 1 wersji API.
|
8
|
-
# robimy tego
|
7
|
+
# Adapter dla 1 wersji API. Instancje odpowiedniego adaptera tworzy klasa Elibri::ApiClient - nie
|
8
|
+
# robimy tego recznie.
|
9
9
|
class V1
|
10
10
|
URI_PREFIX = '/api/v1'
|
11
11
|
|
@@ -18,15 +18,15 @@ module Elibri
|
|
18
18
|
end
|
19
19
|
|
20
20
|
|
21
|
-
#
|
22
|
-
#
|
21
|
+
# Wypelnij wszystkie kolejki oczekujace, wszystkimi dostepnymi danymi. Przydatne przy wykonywaniu
|
22
|
+
# pelnej synchronizacji pomiedzy nasza aplikacja a Elibri.
|
23
23
|
def refill_all_queues!
|
24
|
-
# Dla POST musi
|
24
|
+
# Dla POST musi byc jakies 'body' requestu, bo serwery czesto rzucaja wyjatkami (WEBrick w szczegolnosci).
|
25
25
|
post '/queues/refill_all', :body => ' '
|
26
26
|
end
|
27
27
|
|
28
28
|
|
29
|
-
#
|
29
|
+
# Zwroc liste kolejek z oczekujacymi danymi.
|
30
30
|
def pending_queues
|
31
31
|
resp = get '/queues/pending_data'
|
32
32
|
|
@@ -39,15 +39,15 @@ module Elibri
|
|
39
39
|
end
|
40
40
|
|
41
41
|
|
42
|
-
# Czy
|
42
|
+
# Czy sa jakies oczekujace dane w Elibri?
|
43
43
|
def pending_data?
|
44
44
|
!pending_queues.empty?
|
45
45
|
end
|
46
46
|
|
47
47
|
|
48
|
-
#
|
49
|
-
# Tylko z kolejek nazwanych
|
50
|
-
# lub
|
48
|
+
# Utworz z danych oczekujacych w kolejce np. 'pending_meta', kolejke nazwana.
|
49
|
+
# Tylko z kolejek nazwanych mozna pobierac dane. Jako argument przyjmuje nazwe kolejki (np. 'pending_meta')
|
50
|
+
# lub odpowiednia instancje Elibri::ApiClient::ApiAdapters::V1::Queue.
|
51
51
|
def pick_up_queue!(queue)
|
52
52
|
case queue
|
53
53
|
when Elibri::ApiClient::ApiAdapters::V1::Queue
|
@@ -78,7 +78,7 @@ module Elibri
|
|
78
78
|
end
|
79
79
|
|
80
80
|
|
81
|
-
# Trawersuj
|
81
|
+
# Trawersuj kolekcje produktow w nazwanej kolejce. Instancje nazwanej kolejki nalezy przekazac
|
82
82
|
# jako argument metody.
|
83
83
|
def each_product(queue, &block)
|
84
84
|
raise 'Need a Elibri::ApiClient::ApiAdapters::V1::Queue instance' unless queue.kind_of? Elibri::ApiClient::ApiAdapters::V1::Queue
|
@@ -93,8 +93,8 @@ module Elibri
|
|
93
93
|
end
|
94
94
|
|
95
95
|
|
96
|
-
# Ostatnio utworzone nazwane kolejki. Gdy wysypie nam
|
97
|
-
# i ponownie
|
96
|
+
# Ostatnio utworzone nazwane kolejki. Gdy wysypie nam sie aplikacja, mozna przegladac ostatnie pickupy
|
97
|
+
# i ponownie pobierac z nich dane.
|
98
98
|
def last_pickups
|
99
99
|
last_pickups = []
|
100
100
|
%w{meta stocks}.each do |queue_name|
|
@@ -102,7 +102,7 @@ module Elibri
|
|
102
102
|
response = get "/queues/#{queue_name}/last_pick_up"
|
103
103
|
queue_xml = response.parsed_response.css('queue').first
|
104
104
|
last_pickups << Elibri::ApiClient::ApiAdapters::V1::Queue.build_from_xml(self, queue_xml)
|
105
|
-
rescue NoRecentlyPickedUpQueues # Ignoruj
|
105
|
+
rescue NoRecentlyPickedUpQueues # Ignoruj bledy o braku ostatnich pickupow.
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
@@ -149,7 +149,7 @@ module Elibri
|
|
149
149
|
end
|
150
150
|
|
151
151
|
|
152
|
-
#
|
152
|
+
# Jesli Elibri zwoci jakis blad, to rzucamy odpowiednim wyjatkiem.
|
153
153
|
def raise_if_error_present_in(response)
|
154
154
|
raise Unauthorized, 'Bad login or password' if response.code == 401
|
155
155
|
|
@@ -158,11 +158,11 @@ module Elibri
|
|
158
158
|
error_id = response_xml.css('error').first['id']
|
159
159
|
error_message = response_xml.css('error message').first.text
|
160
160
|
|
161
|
-
# Rozpoznajemy ten kod
|
161
|
+
# Rozpoznajemy ten kod bledu i mozemy rzucic okreslona klasa wyjatku:
|
162
162
|
if exception_class = EXCEPTION_CLASSES[error_id.to_s]
|
163
163
|
raise exception_class, error_message
|
164
164
|
else
|
165
|
-
#
|
165
|
+
# Jakis nieznany blad - rzucamy chociaz stringiem
|
166
166
|
raise UnknownError, "ELIBRI_API ERROR #{error_id}: #{error_message}"
|
167
167
|
end
|
168
168
|
end
|
@@ -17,11 +17,11 @@ module Elibri
|
|
17
17
|
class QueueDoesNotExists < RuntimeError; end
|
18
18
|
class InvalidPageNumber < RuntimeError; end
|
19
19
|
|
20
|
-
# Klasy
|
20
|
+
# Klasy wyjatków rzucanych, gdy elibri zwróci określony blad. Np. gdy dostaniemy:
|
21
21
|
# <error id="1001">
|
22
22
|
# <message>Queue does not exist</message>
|
23
23
|
# </error>
|
24
|
-
# Biblioteka rzuca
|
24
|
+
# Biblioteka rzuca wyjatkiem QueueDoesNotExists.
|
25
25
|
EXCEPTION_CLASSES = {
|
26
26
|
'404' => NotFound,
|
27
27
|
'403' => Forbidden,
|
@@ -33,7 +33,7 @@ module Elibri
|
|
33
33
|
}.freeze
|
34
34
|
|
35
35
|
|
36
|
-
# Zamiast
|
36
|
+
# Zamiast rzezbic ciagle w XML`u, tworzymy instancje kolejek.
|
37
37
|
class Queue
|
38
38
|
attr_reader :name, :items_total, :picked_up_at, :last_insert_at, :queue_id, :url
|
39
39
|
|
@@ -49,26 +49,26 @@ module Elibri
|
|
49
49
|
end
|
50
50
|
|
51
51
|
|
52
|
-
# Przekonwertuj
|
52
|
+
# Przekonwertuj kolejke z danymi oczekujacymi (np. 'pending_meta') na kolejke nazwana.
|
53
53
|
def pick_up!
|
54
54
|
@api_adapter.pick_up_queue!(self) unless picked_up?
|
55
55
|
end
|
56
56
|
|
57
57
|
|
58
|
-
# Hermetyzujemy stronicowanie danych.
|
58
|
+
# Hermetyzujemy stronicowanie danych. Programiste interesuja tylko kolejne rekordy <Product>
|
59
59
|
def each_product(&block)
|
60
60
|
@api_adapter.each_product(self, &block)
|
61
61
|
end
|
62
62
|
|
63
63
|
|
64
|
-
# Czy to jest kolejka nazwana, czy
|
64
|
+
# Czy to jest kolejka nazwana, czy oczekujaca? Wszystkie kolejki z danymi oczekujacymi maja w nazwie
|
65
65
|
# przedrostek 'pending_'. Np. 'pending_meta', 'pending_stocks'.
|
66
66
|
def picked_up?
|
67
67
|
!self.name.start_with?('pending_')
|
68
68
|
end
|
69
69
|
|
70
70
|
|
71
|
-
# Zbuduj
|
71
|
+
# Zbuduj instancje kolejki na podstawie XML`a.
|
72
72
|
def self.build_from_xml(api_adapter, queue_xml)
|
73
73
|
queue_xml = Nokogiri::XML(queue_xml).css('queue').first if queue_xml.is_a? String
|
74
74
|
Queue.new(api_adapter,
|
@@ -4,8 +4,8 @@ require 'elibri_api_client/api_adapters/v1'
|
|
4
4
|
module Elibri
|
5
5
|
class ApiClient
|
6
6
|
|
7
|
-
#
|
8
|
-
# dodanie kolejnej wersji API sprowadza
|
7
|
+
# Modul zawierajacy adaptery dla poszczegolnych wersji API. Dzieki takiej architekturze
|
8
|
+
# dodanie kolejnej wersji API sprowadza sie do utworzenia nowej klasy w tym module, np.
|
9
9
|
# Elibri::ApiClient::ApiAdapters::V3
|
10
10
|
module ApiAdapters
|
11
11
|
|
data/lib/elibri_api_client.rb
CHANGED
@@ -20,7 +20,7 @@ module Elibri
|
|
20
20
|
@password = options[:password]
|
21
21
|
@host_uri = options[:host_uri] || DEFAULT_API_HOST_URI
|
22
22
|
|
23
|
-
# W
|
23
|
+
# W przyszlosci moga byc nowe wersje API, wiec zostawiamy sobie furtke w postaci adapterow:
|
24
24
|
api_version_str = options[:api_version] || 'v1'
|
25
25
|
adapter_class = Elibri::ApiClient::ApiAdapters.const_get(api_version_str.upcase) # Elibri::ApiClient::ApiAdapters::V1
|
26
26
|
@api_adapter = adapter_class.new(@host_uri, @login, @password)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elibri_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 3
|
10
|
+
version: 1.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Marcin Urba\xC5\x84ski"
|