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