ax-track 0.1.14 → 0.2.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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/ax-track.rb +1 -0
- data/lib/ax_track/client.rb +7 -5
- data/lib/ax_track/collection.rb +5 -7
- data/lib/ax_track/object.rb +9 -3
- data/lib/ax_track/objects/asset.rb +0 -10
- data/lib/ax_track/objects/tracker/gps_position.rb +15 -0
- data/lib/ax_track/objects/tracker.old +42 -0
- data/lib/ax_track/objects/tracker.rb +28 -36
- data/lib/ax_track/resource.rb +8 -1
- data/lib/ax_track/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6f78da793c4f53b05b464fc50ee9706fdcfee25b4d72feadc27ef0e60e1a868e
|
|
4
|
+
data.tar.gz: 54cabd6e87be27a30eb0826dd142b5c80ff4cd69a361b12ff437e18fb38e11d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7dc4c3bf7479eff86ac3f04b38520c1b2d0252b180f1cb34e27e476749b29c982ccfa579f2d7c98079a47e53c0d7a4f09b190b7b5baf568de45a60eb4b949208
|
|
7
|
+
data.tar.gz: cb6c264e58bc56f5cfcd816a6cd0a728451dbba2193c33e94ed3ab204fbf53732dff6575a455f2523c3b3a2c8170e81c2507a586e0e74fc02ee3f9ce607041b8
|
data/Gemfile.lock
CHANGED
data/lib/ax-track.rb
CHANGED
|
@@ -11,6 +11,7 @@ module AxTrack
|
|
|
11
11
|
|
|
12
12
|
autoload :Tracker, 'ax_track/objects/tracker'
|
|
13
13
|
autoload :Asset, 'ax_track/objects/asset'
|
|
14
|
+
autoload :GPSPosition, 'ax_track/objects/tracker/gps_position'
|
|
14
15
|
|
|
15
16
|
autoload :TrackerResource, 'ax_track/resources/tracker_resource'
|
|
16
17
|
autoload :AssetResource, 'ax_track/resources/asset_resource'
|
data/lib/ax_track/client.rb
CHANGED
|
@@ -12,9 +12,12 @@ module AxTrack
|
|
|
12
12
|
APIKeyMissing = Class.new(StandardError)
|
|
13
13
|
|
|
14
14
|
attr_reader :api_key, :adapter
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
attr_writer :connection
|
|
16
|
+
|
|
17
|
+
def initialize(api_key: nil, adapter: nil, stubs: nil)
|
|
18
|
+
@api_key = api_key || ENV['AXTRACK_API_KEY']
|
|
19
|
+
@adapter = adapter || Faraday.default_adapter
|
|
20
|
+
@stubs = stubs
|
|
18
21
|
|
|
19
22
|
raise APIKeyMissing, "No API key provided" if !defined?(api_key) || api_key.nil? || api_key.empty?
|
|
20
23
|
end
|
|
@@ -33,10 +36,9 @@ module AxTrack
|
|
|
33
36
|
#conn.request :url_encoded
|
|
34
37
|
conn.request :json
|
|
35
38
|
conn.response :json, content_type: 'application/json'
|
|
36
|
-
conn.adapter
|
|
39
|
+
conn.adapter adapter, @stubs
|
|
37
40
|
conn.headers['Authorization'] = "Token #{api_key}" unless api_key.empty?
|
|
38
41
|
end
|
|
39
42
|
end
|
|
40
|
-
|
|
41
43
|
end
|
|
42
44
|
end
|
data/lib/ax_track/collection.rb
CHANGED
|
@@ -6,15 +6,13 @@ module AxTrack
|
|
|
6
6
|
# type is the class Type to wrap the results from key
|
|
7
7
|
def self.from_response(json_response, key:, type: )
|
|
8
8
|
body = json_response.body
|
|
9
|
-
new(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
prev_cursor: body.dig('previous')
|
|
14
|
-
)
|
|
9
|
+
new(data: body[key].map { |attrs| type.new(attrs ) },
|
|
10
|
+
total: body.dig('count'),
|
|
11
|
+
next_cursor: body.dig('next'),
|
|
12
|
+
prev_cursor: body.dig('previous'))
|
|
15
13
|
end
|
|
16
14
|
|
|
17
|
-
def initialize
|
|
15
|
+
def initialize(data:, total:, next_cursor:, prev_cursor:)
|
|
18
16
|
@data = data
|
|
19
17
|
@total = total
|
|
20
18
|
@next_cursor = next_cursor.nil? || next_cursor.empty? ? nil : next_cursor
|
data/lib/ax_track/object.rb
CHANGED
|
@@ -3,14 +3,20 @@ require 'ostruct'
|
|
|
3
3
|
module AxTrack
|
|
4
4
|
class Object
|
|
5
5
|
|
|
6
|
+
def initialize(json_response)
|
|
7
|
+
# for each key create an own instance variable with a getter
|
|
8
|
+
json_response.each do |key, value|
|
|
9
|
+
instance_variable_set "@#{key}", value
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
create_getters
|
|
13
|
+
end
|
|
14
|
+
|
|
6
15
|
# pass in an array for getters which should be generated.
|
|
7
16
|
# if nothing is passed in, it will create an instance variable for all instance variables.
|
|
8
17
|
def create_getters(required_getter_methods = instance_variables.map { |attr_name| attr_name[1..-1 ]})
|
|
9
18
|
required_getter_methods.each do |attr|
|
|
10
19
|
singleton_class.send :attr_reader, attr unless self.respond_to? attr
|
|
11
|
-
# define_singleton_method(v.to_s.tr('@','')) do
|
|
12
|
-
# instance_variable_get(v)
|
|
13
|
-
# end
|
|
14
20
|
end
|
|
15
21
|
end
|
|
16
22
|
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
module AxTrack
|
|
2
2
|
class Asset < Object
|
|
3
|
-
|
|
4
|
-
def initialize(json_response)
|
|
5
|
-
# for each key create an own instance variable with a getter
|
|
6
|
-
json_response.each do |key, value|
|
|
7
|
-
instance_variable_set "@#{key}", value
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
create_getters
|
|
11
|
-
end
|
|
12
3
|
end
|
|
13
|
-
|
|
14
4
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module AxTrack
|
|
2
|
+
class Tracker
|
|
3
|
+
class GPSPosition < Object
|
|
4
|
+
|
|
5
|
+
def initialize(json_response)
|
|
6
|
+
@lat = json_response['lat']
|
|
7
|
+
@lng = json_response['lng']
|
|
8
|
+
@timestamp = DateTime.parse(json_response['timestamp'], false) if json_response['timestamp']
|
|
9
|
+
|
|
10
|
+
create_getters
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module AxTrack
|
|
2
|
+
class Tracker < Object
|
|
3
|
+
|
|
4
|
+
def initialize(json_response)
|
|
5
|
+
@tracker_id = json_response['id']
|
|
6
|
+
@asset_id = json_response['asset']
|
|
7
|
+
@identifier = json_response['identifier']
|
|
8
|
+
@url = json_response['url']
|
|
9
|
+
@active = json_response['active']
|
|
10
|
+
@model = json_response['model']
|
|
11
|
+
@asset_details = Asset.new json_response['asset_details'] if json_response['asset_details']
|
|
12
|
+
@name = json_response.dig('asset_details', 'name')
|
|
13
|
+
@last_message_timestamp = DateTime.parse(json_response['last_message_timestamp'], false) if json_response['last_message_timestamp']
|
|
14
|
+
@url = json_response['url']
|
|
15
|
+
@user_url = website_url
|
|
16
|
+
@last_gps_position = GPSPosition.new(json_response['last_gps_measurement'] || json_response['asset_details'])
|
|
17
|
+
|
|
18
|
+
@battery = json_response.dig('asset_details', 'sensor_data', 'battery', 'value')
|
|
19
|
+
sensor_data = json_response.dig('asset_details', 'sensor_data')
|
|
20
|
+
|
|
21
|
+
@sensor_data = sensor_data
|
|
22
|
+
|
|
23
|
+
@network = json_response['network']
|
|
24
|
+
|
|
25
|
+
create_getters
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def available_sensor_data
|
|
29
|
+
# returns a hash with available senson data
|
|
30
|
+
sensor_data_temp = self.sensor_data.keys
|
|
31
|
+
# if no timestamp is available in the GPSPosition, then there wasn't a last_gps_measurement returned in the json
|
|
32
|
+
# hence the sensor doesn't contain a GPS module.
|
|
33
|
+
sensor_data_temp = sensor_data_temp.unshift('gps') if self.last_gps_position.respond_to? :timestamp
|
|
34
|
+
sensor_data_temp
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def website_url
|
|
38
|
+
"https://app.ax-track.ch/#/map/assets/#{@tracker_id}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
module AxTrack
|
|
2
2
|
class Tracker < Object
|
|
3
3
|
|
|
4
|
-
def
|
|
5
|
-
@
|
|
6
|
-
@
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
def asset_details
|
|
5
|
+
@asset_details = Asset.new @asset_details unless @asset_details.is_a? Asset
|
|
6
|
+
@asset_details
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def asset_id
|
|
10
|
+
asset_details.id
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def name
|
|
14
|
+
@name = @asset_details['name']
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def last_message_timestamp
|
|
18
|
+
DateTime.parse(@last_message_timestamp, false) if @last_message_timestamp
|
|
19
|
+
end
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
def last_gps_position
|
|
22
|
+
#GPSPosition.new(@last_gps_measurement || { lat: asset_details.lat, lng: asset_details.lng } )
|
|
23
|
+
GPSPosition.new(@last_gps_measurement)
|
|
24
|
+
end
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
def battery
|
|
27
|
+
asset_details&.sensor_data.dig('battery', 'value')
|
|
28
|
+
end
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
def sensor_data
|
|
31
|
+
asset_details.sensor_data
|
|
32
|
+
end
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
def website_url
|
|
35
|
+
"https://app.ax-track.ch/#/map/assets/#{@tracker_id}"
|
|
26
36
|
end
|
|
27
37
|
|
|
28
38
|
def available_sensor_data
|
|
@@ -33,23 +43,5 @@ module AxTrack
|
|
|
33
43
|
sensor_data_temp = sensor_data_temp.unshift('gps') if self.last_gps_position.respond_to? :timestamp
|
|
34
44
|
sensor_data_temp
|
|
35
45
|
end
|
|
36
|
-
|
|
37
|
-
def website_url
|
|
38
|
-
"https://app.ax-track.ch/#/map/assets/#{@tracker_id}"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class GPSPosition < Object
|
|
43
|
-
|
|
44
|
-
def initialize(json_response)
|
|
45
|
-
@lat = json_response['lat']
|
|
46
|
-
@lng = json_response['lng']
|
|
47
|
-
@timestamp = DateTime.parse(json_response['timestamp'], false) if json_response['timestamp']
|
|
48
|
-
|
|
49
|
-
create_getters
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
end
|
|
53
|
-
|
|
54
46
|
end
|
|
55
47
|
end
|
data/lib/ax_track/resource.rb
CHANGED
|
@@ -10,7 +10,6 @@ module AxTrack
|
|
|
10
10
|
ApiRequestsQuotaReachedError = Class.new(ApiError)
|
|
11
11
|
NotFoundError = Class.new(ApiError)
|
|
12
12
|
UnprocessableEntityError = Class.new(ApiError)
|
|
13
|
-
ApiError = Class.new(ApiError)
|
|
14
13
|
|
|
15
14
|
HTTP_OK_CODE = 200
|
|
16
15
|
|
|
@@ -28,6 +27,14 @@ module AxTrack
|
|
|
28
27
|
def request(http_method: :get, endpoint:, headers: {}, params: {}, body: {}, result_subset: nil)
|
|
29
28
|
raise "Client not defined" unless defined? @client
|
|
30
29
|
endpoint = endpoint + "/" unless endpoint[-1] == "/"
|
|
30
|
+
|
|
31
|
+
body['picture'] = Faraday::UploadIO.new(
|
|
32
|
+
body['picture'].tempfile.path,
|
|
33
|
+
body['picture'].content_type,
|
|
34
|
+
body['picture'].filename
|
|
35
|
+
) if body.key? :picture
|
|
36
|
+
|
|
37
|
+
# client.connection['headers']['Content-Type'] = 'multipart/form-data' if body.key? :picture
|
|
31
38
|
@response = client.connection.public_send(http_method, endpoint, params.merge(body))
|
|
32
39
|
|
|
33
40
|
unless response_successful?
|
data/lib/ax_track/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ax-track
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Philipp Baumann
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-10-
|
|
11
|
+
date: 2021-10-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -63,7 +63,9 @@ files:
|
|
|
63
63
|
- lib/ax_track/error.rb
|
|
64
64
|
- lib/ax_track/object.rb
|
|
65
65
|
- lib/ax_track/objects/asset.rb
|
|
66
|
+
- lib/ax_track/objects/tracker.old
|
|
66
67
|
- lib/ax_track/objects/tracker.rb
|
|
68
|
+
- lib/ax_track/objects/tracker/gps_position.rb
|
|
67
69
|
- lib/ax_track/resource.rb
|
|
68
70
|
- lib/ax_track/resources/asset_resource.rb
|
|
69
71
|
- lib/ax_track/resources/tracker_resource.rb
|