alula-ruby 2.28.0 → 2.30.0
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/VERSION.md +2 -0
- data/alula-docker-compose.yml +3 -0
- data/lib/alula/client.rb +51 -4
- data/lib/alula/errors.rb +28 -0
- data/lib/alula/m2m_response.rb +22 -0
- data/lib/alula/m2m_rest_resource.rb +17 -0
- data/lib/alula/meta.rb +61 -7
- data/lib/alula/resources/m2m/m2m_central_station.rb +111 -0
- data/lib/alula/resources/permitted_central_station.rb +55 -0
- data/lib/alula/resources/user_impersonation.rb +27 -0
- data/lib/alula/version.rb +1 -1
- data/lib/alula.rb +7 -0
- metadata +7 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e01ef49bc046ae1795d32869b79a7e4b92996c0d35e3cee3cfd2de8df534dcd2
|
|
4
|
+
data.tar.gz: 62d790ddc15244480f6ab1e08d5b77738a92aaeb94a6d286c2a82c9229694267
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 107146e1b827e0f7d8418ca3339d114c27f18750658e73af54e25b6190e65b0857983c93dd8862105b7ffdd2f039a0f1c142db6e2ae948c8b882d5912c561e2c
|
|
7
|
+
data.tar.gz: f095933709d5855fca510bfe3700409e6f1e97e2ab116dc1f9e88f2e845c94ec45ed2f41457536a03b4ab4038f23f5f9ad055b07127d6ebb7e8b49ffa626fb17
|
data/VERSION.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
| Version | Date | Description |
|
|
4
4
|
| ------- | ------------| --------------------------------------------------------------------------- |
|
|
5
|
+
| v2.30.0 | 2025-12-16 | Adds M2MCentralStation and PermittedCentralStation |
|
|
6
|
+
| v2.29.0 | 2025-12-01 | Adds User Impersonation Requests and new Meta |
|
|
5
7
|
| v2.28.0 | 2025-11-19 | Add product_sku Device property |
|
|
6
8
|
| v2.27.1 | 2025-11-14 | Add ONVIF feature support for CONNECT-FLX-DUAL and CONNECT-FLX-DUAL-Z devices |
|
|
7
9
|
| v2.27.0 | 2025-10-02 | Add nfc_get_branding proc to get dealer branding from tag id |
|
data/alula-docker-compose.yml
CHANGED
|
@@ -70,6 +70,9 @@ services:
|
|
|
70
70
|
IPDAPI_RL_DEFAULT_MAX_HITS: ${IPDAPI_RL_DEFAULT_MAX_HITS:-10000}
|
|
71
71
|
IPDAPI_RL_LOGIN_MAX_HITS: ${IPDAPI_RL_LOGIN_MAX_HITS:-1000}
|
|
72
72
|
IPDAPI_TRUST_PROXY: loopback
|
|
73
|
+
IPDAPI_M2M_API_BASE_URL: https://app.m2mservices.com/
|
|
74
|
+
IPDAPI_M2M_API_USERNAME: user
|
|
75
|
+
IPDAPI_M2M_API_PASSWORD: pass
|
|
73
76
|
IPDAPI_WS_WORK_EVENTS_ENABLED: true
|
|
74
77
|
IPDAPI_WS_WORK_VIGILANCE_BATCH_WINDOW_MSEC: ${IPDAPI_WS_WORK_VIGILANCE_BATCH_WINDOW_MSEC:-5000}
|
|
75
78
|
IPDAPI_WS_WORK_VIGILANCE_CANCEL_BATCH_WINDOW_MSEC: ${IPDAPI_WS_WORK_VIGILANCE_CANCEL_BATCH_WINDOW_MSEC:-10000}
|
data/lib/alula/client.rb
CHANGED
|
@@ -18,8 +18,37 @@ module Alula
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def request(http_method, resource_path, filters = {}, opts = {})
|
|
21
|
+
if resource_path.match(%r{^/m2m/})
|
|
22
|
+
request_m2m(http_method, resource_path, filters, opts)
|
|
23
|
+
else
|
|
24
|
+
request_alula(http_method, resource_path, filters, opts)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def request_m2m(http_method, resource_path, filters = {}, opts = {})
|
|
31
|
+
validate_request!(http_method, resource_path)
|
|
32
|
+
request_opts = build_options_m2m(http_method, resource_path, filters, opts)
|
|
33
|
+
api_url = config.api_url
|
|
34
|
+
request_resource_path = resource_path
|
|
35
|
+
|
|
36
|
+
# TODO: Handle network failures
|
|
37
|
+
response = make_request(http_method, api_url + request_resource_path, request_opts)
|
|
38
|
+
|
|
39
|
+
begin
|
|
40
|
+
resp = M2MResponse.from_httparty_response(response)
|
|
41
|
+
rescue JSON::ParserError
|
|
42
|
+
# TODO: Should be able to send better info up with this
|
|
43
|
+
raise 'Unable to decode JSON'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
resp
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def request_alula(http_method, resource_path, filters = {}, opts = {})
|
|
21
50
|
validate_request!(http_method, resource_path) unless resource_path.match(%r{^/public/v1})
|
|
22
|
-
request_opts =
|
|
51
|
+
request_opts = build_options_alula(http_method, resource_path, filters, opts)
|
|
23
52
|
api_url = video_request?(resource_path) ? config.video_api_url : config.api_url
|
|
24
53
|
request_resource_path = video_request?(resource_path) ? resource_path.gsub(%r{^/video}, '') : resource_path
|
|
25
54
|
|
|
@@ -36,8 +65,6 @@ module Alula
|
|
|
36
65
|
resp
|
|
37
66
|
end
|
|
38
67
|
|
|
39
|
-
private
|
|
40
|
-
|
|
41
68
|
def validate_request!(http_method, resource_path)
|
|
42
69
|
config.ensure_api_key_set
|
|
43
70
|
config.ensure_api_url_set
|
|
@@ -64,7 +91,27 @@ module Alula
|
|
|
64
91
|
resource_path.match(%r{^/video})
|
|
65
92
|
end
|
|
66
93
|
|
|
67
|
-
def
|
|
94
|
+
def build_options_m2m(http_method, resource_path, filters = {}, opts = {})
|
|
95
|
+
api_key = Alula::Client.config.impersonator_api_key || Alula::Client.config.api_key
|
|
96
|
+
request_opts = {
|
|
97
|
+
headers: {
|
|
98
|
+
'Authorization': "Bearer #{api_key}",
|
|
99
|
+
'User-Agent': "#{Alula::Client.config.user_agent || 'No Agent Set'}/alula-ruby v#{Alula::VERSION}"
|
|
100
|
+
}
|
|
101
|
+
}.merge(opts)
|
|
102
|
+
|
|
103
|
+
request_opts[:headers]['Content-Type'] = 'application/json'
|
|
104
|
+
request_opts[:body] = opts[:multipart] ? filters : JSON.generate(filters)
|
|
105
|
+
|
|
106
|
+
if Alula::Client.config.debug
|
|
107
|
+
request_opts[:debug_output] = Alula.logger
|
|
108
|
+
logger Alula.logger, :info
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
request_opts
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def build_options_alula(http_method, resource_path, filters = {}, opts = {})
|
|
68
115
|
api_key = Alula::Client.config.impersonator_api_key || Alula::Client.config.api_key
|
|
69
116
|
request_opts = {
|
|
70
117
|
headers: {
|
data/lib/alula/errors.rb
CHANGED
|
@@ -231,4 +231,32 @@ module Alula
|
|
|
231
231
|
@errors = errors
|
|
232
232
|
end
|
|
233
233
|
end
|
|
234
|
+
|
|
235
|
+
class M2MError < AlulaError
|
|
236
|
+
attr_reader :error_code
|
|
237
|
+
|
|
238
|
+
def self.for_response(response)
|
|
239
|
+
if response.data['Success'] == false
|
|
240
|
+
self.m2m_error_for_response(response)
|
|
241
|
+
else
|
|
242
|
+
super response
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
private
|
|
247
|
+
|
|
248
|
+
def self.m2m_error_for_response(response)
|
|
249
|
+
error_code = response.data['ErrorCode']
|
|
250
|
+
error = response.data['ErrorString']
|
|
251
|
+
message = self.build_message(error, error_code)
|
|
252
|
+
BadRequestError.new(message)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def self.build_message(error, code)
|
|
256
|
+
return error unless error.to_s.strip.empty?
|
|
257
|
+
return "M2M request failed with code #{code}" if code
|
|
258
|
+
|
|
259
|
+
'M2M request failed'
|
|
260
|
+
end
|
|
261
|
+
end
|
|
234
262
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative 'alula_response'
|
|
2
|
+
|
|
3
|
+
module Alula
|
|
4
|
+
class M2MResponse < AlulaResponse
|
|
5
|
+
attr_accessor :data, :http_body, :http_headers, :http_status, :raw, :rate_limit
|
|
6
|
+
|
|
7
|
+
def ok?
|
|
8
|
+
super && self.data['Success'] == true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.from_httparty_response(response)
|
|
12
|
+
resp = M2MResponse.new
|
|
13
|
+
resp.data = response.parsed_response
|
|
14
|
+
resp.http_body = response.body
|
|
15
|
+
resp.http_headers = response.headers
|
|
16
|
+
resp.rate_limit = Alula::RateLimit.new(response.headers)
|
|
17
|
+
resp.http_status = response.code
|
|
18
|
+
resp.raw = response
|
|
19
|
+
resp
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Alula
|
|
2
|
+
class M2MRestResource < ApiResource
|
|
3
|
+
def self.resource_url(id = nil)
|
|
4
|
+
if self == M2MRestResource
|
|
5
|
+
raise NotImplementedError, "Cannot call resource_url on a M2MRestResource. Try using M2MCentralStation instead."
|
|
6
|
+
end
|
|
7
|
+
base_path = "/m2m/bll/v3/external"
|
|
8
|
+
return base_path if id.nil?
|
|
9
|
+
|
|
10
|
+
[base_path, id].join('/').gsub(%r{/+}, '/').sub(%r{/$}, '')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def resource_url(id = nil)
|
|
14
|
+
self.class.resource_url(id)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/alula/meta.rb
CHANGED
|
@@ -1,16 +1,70 @@
|
|
|
1
1
|
module Alula
|
|
2
2
|
class Meta
|
|
3
|
-
attr_reader :page, :total, :number, :size
|
|
3
|
+
attr_reader :page, :total, :number, :size, :custom_attributes
|
|
4
4
|
|
|
5
5
|
def initialize(meta)
|
|
6
|
-
|
|
6
|
+
meta_hash = coerce_to_hash(meta)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
page_data = extract_page(meta_hash)
|
|
9
|
+
build_pagination(page_data)
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
@custom_attributes = build_custom_attributes(meta_hash)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def [](key)
|
|
15
|
+
custom_attributes[normalize_key(key)]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fetch(key, *args, &block)
|
|
19
|
+
custom_attributes.fetch(normalize_key(key), *args, &block)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def method_missing(method_name, *args, &block)
|
|
23
|
+
return custom_attributes[method_name] if custom_attributes.key?(method_name)
|
|
24
|
+
|
|
25
|
+
super
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def respond_to_missing?(method_name, include_private = false)
|
|
29
|
+
custom_attributes.key?(method_name) || super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def coerce_to_hash(meta)
|
|
35
|
+
return {} unless meta.respond_to?(:each_pair)
|
|
36
|
+
|
|
37
|
+
meta.each_pair.each_with_object({}) do |(key, value), result|
|
|
38
|
+
result[key.to_s] = value
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def extract_page(meta_hash)
|
|
43
|
+
meta_hash.delete('page') || meta_hash.delete(:page)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def build_pagination(page_data)
|
|
47
|
+
if page_data
|
|
48
|
+
@page = Alula::Pagination.new(page_data)
|
|
49
|
+
@total = @page.total
|
|
50
|
+
@number = @page.number
|
|
51
|
+
@size = @page.size
|
|
52
|
+
else
|
|
53
|
+
@page = nil
|
|
54
|
+
@total = nil
|
|
55
|
+
@number = nil
|
|
56
|
+
@size = nil
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def build_custom_attributes(meta_hash)
|
|
61
|
+
meta_hash.each_with_object({}) do |(key, value), attributes|
|
|
62
|
+
attributes[normalize_key(key)] = value
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def normalize_key(key)
|
|
67
|
+
Util.underscore(key.to_s).to_sym
|
|
14
68
|
end
|
|
15
69
|
end
|
|
16
70
|
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Please forget about abstractions if working with M2M API. Endpoints are
|
|
4
|
+
# inconsistent and do not follow REST principles.
|
|
5
|
+
module Alula
|
|
6
|
+
class M2MCentralStation < Alula::M2MRestResource
|
|
7
|
+
extend Alula::ResourceAttributes
|
|
8
|
+
|
|
9
|
+
DEFAULT_PAGE_NUMBER = 1
|
|
10
|
+
|
|
11
|
+
field :app_name,
|
|
12
|
+
type: :string,
|
|
13
|
+
sortable: false,
|
|
14
|
+
filterable: true,
|
|
15
|
+
creatable_by: [],
|
|
16
|
+
patchable_by: []
|
|
17
|
+
|
|
18
|
+
field :primary_proxy,
|
|
19
|
+
type: :string,
|
|
20
|
+
sortable: false,
|
|
21
|
+
filterable: false,
|
|
22
|
+
creatable_by: [],
|
|
23
|
+
patchable_by: []
|
|
24
|
+
|
|
25
|
+
field :backup_proxy,
|
|
26
|
+
type: :string,
|
|
27
|
+
sortable: false,
|
|
28
|
+
filterable: false,
|
|
29
|
+
creatable_by: [],
|
|
30
|
+
patchable_by: []
|
|
31
|
+
|
|
32
|
+
class << self
|
|
33
|
+
def list(filters = {}, opts = {})
|
|
34
|
+
built_filters = {}
|
|
35
|
+
pagination = filters.delete(:page)
|
|
36
|
+
if pagination
|
|
37
|
+
built_filters['Page'] = pagination[:number]
|
|
38
|
+
built_filters['PageSize'] = pagination[:size]
|
|
39
|
+
end
|
|
40
|
+
response = Alula::Client.request(:post, resource_url('GetAvailableCentralStations'), built_filters, opts)
|
|
41
|
+
if response.ok?
|
|
42
|
+
list = construct_list_from_response(self, response.data.fetch('ResponseBody', {}), pagination)
|
|
43
|
+
list.rate_limit = response.rate_limit
|
|
44
|
+
list
|
|
45
|
+
else
|
|
46
|
+
error_class = M2MError.for_response(response)
|
|
47
|
+
raise error_class
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def retrieve(id)
|
|
52
|
+
built_filters = {}
|
|
53
|
+
built_filters['AppName'] = id
|
|
54
|
+
response = Alula::Client.request(:post, self.resource_url('GetCentralStationProxies'), built_filters, {})
|
|
55
|
+
if response.ok?
|
|
56
|
+
item = build_model(self, response.data.fetch('ResponseBody', {}))
|
|
57
|
+
item.rate_limit = response.rate_limit
|
|
58
|
+
item
|
|
59
|
+
else
|
|
60
|
+
error_class = M2MError.for_response(response)
|
|
61
|
+
raise error_class
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def method_missing(method, *args, &block)
|
|
66
|
+
query = QueryInterface.new(self)
|
|
67
|
+
return query.public_send(method, *args, &block) if query.respond_to?(method)
|
|
68
|
+
|
|
69
|
+
super
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def respond_to_missing?(method, include_private = false)
|
|
73
|
+
QueryInterface.new(self).respond_to?(method, include_private) || super
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
private
|
|
77
|
+
|
|
78
|
+
def construct_list_from_response(klass, response_body, pagination)
|
|
79
|
+
list = ListObject.new(klass)
|
|
80
|
+
Array(response_body.fetch('AvailableCentralStations', [])).each do |item|
|
|
81
|
+
next unless item.is_a?(Hash)
|
|
82
|
+
|
|
83
|
+
list << build_model(klass, item)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
list.set_meta Meta.new(
|
|
87
|
+
'page' => {
|
|
88
|
+
'total' => response_body['TotalCount'] || list.length,
|
|
89
|
+
'number' => pagination[:number],
|
|
90
|
+
'size' => pagination[:size]
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
list
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def build_model(klass, attributes)
|
|
97
|
+
sanitized_attributes = attributes.each_with_object({}) do |(key, value), memo|
|
|
98
|
+
memo[Util.camelize(Util.underscore(key.to_s))] = value
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
klass.new(sanitized_attributes['appName'], sanitized_attributes)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def extract_page_value(pagination, key)
|
|
105
|
+
return nil unless pagination.is_a?(Hash)
|
|
106
|
+
|
|
107
|
+
pagination[key] || pagination[key.to_s]
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Alula
|
|
2
|
+
class PermittedCentralStation < Alula::RestResource
|
|
3
|
+
extend Alula::ResourceAttributes
|
|
4
|
+
extend Alula::RelationshipAttributes
|
|
5
|
+
extend Alula::ApiOperations::Request
|
|
6
|
+
extend Alula::ApiOperations::List
|
|
7
|
+
extend Alula::ApiOperations::Save
|
|
8
|
+
extend Alula::ApiOperations::Delete
|
|
9
|
+
|
|
10
|
+
resource_path 'dealers/permittedCentralStations'
|
|
11
|
+
type 'dealers-permittedCentralStations'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
relationship :dealer, type: 'dealers', cardinality: 'To-one'
|
|
15
|
+
|
|
16
|
+
# Resource Fields
|
|
17
|
+
# Not all params are used at the moment. See Alula::ResourceAttributes for details
|
|
18
|
+
# on how params are parsed,
|
|
19
|
+
field :id,
|
|
20
|
+
type: :string,
|
|
21
|
+
sortable: false,
|
|
22
|
+
filterable: false,
|
|
23
|
+
creatable_by: [:system],
|
|
24
|
+
patchable_by: []
|
|
25
|
+
|
|
26
|
+
field :dealer_id,
|
|
27
|
+
type: :string,
|
|
28
|
+
sortable: false,
|
|
29
|
+
filterable: false,
|
|
30
|
+
creatable_by: [:system],
|
|
31
|
+
patchable_by: []
|
|
32
|
+
|
|
33
|
+
field :remote_central_station_id,
|
|
34
|
+
type: :string,
|
|
35
|
+
sortable: false,
|
|
36
|
+
filterable: true,
|
|
37
|
+
creatable_by: [:system],
|
|
38
|
+
patchable_by: []
|
|
39
|
+
|
|
40
|
+
field :created_by,
|
|
41
|
+
type: :string,
|
|
42
|
+
sortable: false,
|
|
43
|
+
filterable: false,
|
|
44
|
+
creatable_by: [],
|
|
45
|
+
patchable_by: []
|
|
46
|
+
|
|
47
|
+
field :created_at,
|
|
48
|
+
type: :date,
|
|
49
|
+
sortable: false,
|
|
50
|
+
filterable: false,
|
|
51
|
+
creatable_by: [],
|
|
52
|
+
patchable_by: []
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Alula
|
|
2
|
+
class UserImpersonation < Alula::RestResource
|
|
3
|
+
extend Alula::ResourceAttributes
|
|
4
|
+
extend Alula::ApiOperations::Request
|
|
5
|
+
extend Alula::ApiOperations::Save
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
resource_path 'users/impersonation'
|
|
9
|
+
type 'users-impersonation'
|
|
10
|
+
|
|
11
|
+
# Resource Fields
|
|
12
|
+
# Not all params are presented here at the moment
|
|
13
|
+
field :id,
|
|
14
|
+
type: :string,
|
|
15
|
+
sortable: false,
|
|
16
|
+
filterable: false,
|
|
17
|
+
creatable_by: [],
|
|
18
|
+
patchable_by: []
|
|
19
|
+
|
|
20
|
+
field :status,
|
|
21
|
+
type: :string,
|
|
22
|
+
sortable: false,
|
|
23
|
+
filterable: false,
|
|
24
|
+
creatable_by: [],
|
|
25
|
+
patchable_by: %i[dealer]
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/alula/version.rb
CHANGED
data/lib/alula.rb
CHANGED
|
@@ -11,6 +11,8 @@ require_relative 'alula/api_operations/request'
|
|
|
11
11
|
require_relative 'alula/api_operations/save'
|
|
12
12
|
require_relative 'alula/api_operations/delete'
|
|
13
13
|
require_relative 'alula/api_resource'
|
|
14
|
+
require_relative 'alula/m2m_rest_resource'
|
|
15
|
+
require_relative 'alula/m2m_response'
|
|
14
16
|
|
|
15
17
|
require_relative 'alula/dcp/error_handler'
|
|
16
18
|
require_relative 'alula/dcp/list_object'
|
|
@@ -121,6 +123,7 @@ require_relative 'alula/resources/self'
|
|
|
121
123
|
require_relative 'alula/resources/user'
|
|
122
124
|
require_relative 'alula/resources/user_phone'
|
|
123
125
|
require_relative 'alula/resources/user_address'
|
|
126
|
+
require_relative 'alula/resources/user_impersonation'
|
|
124
127
|
require_relative 'alula/resources/user_pushtoken'
|
|
125
128
|
require_relative 'alula/resources/user_preferences'
|
|
126
129
|
require_relative 'alula/resources/user_videoprofile'
|
|
@@ -146,9 +149,11 @@ require_relative 'alula/resources/feature_price'
|
|
|
146
149
|
require_relative 'alula/resources/feature_bysubject'
|
|
147
150
|
require_relative 'alula/resources/nfc_tag'
|
|
148
151
|
require_relative 'alula/resources/sim_card'
|
|
152
|
+
require_relative 'alula/resources/permitted_central_station'
|
|
149
153
|
require_relative 'alula/resources/dcp/config/synchronize'
|
|
150
154
|
require_relative 'alula/resources/video/base_resource'
|
|
151
155
|
require_relative 'alula/resources/video/device'
|
|
156
|
+
require_relative 'alula/resources/m2m/m2m_central_station'
|
|
152
157
|
|
|
153
158
|
require_relative 'alula/procedures/device_cellular_history_proc'
|
|
154
159
|
require_relative 'alula/procedures/device_rateplan_get_proc'
|
|
@@ -236,6 +241,8 @@ module Alula
|
|
|
236
241
|
Alula::ReceiverBind,
|
|
237
242
|
Alula::Revision,
|
|
238
243
|
Alula::Self,
|
|
244
|
+
Alula::M2MCentralStation,
|
|
245
|
+
Alula::PermittedCentralStation,
|
|
239
246
|
Alula::Station,
|
|
240
247
|
Alula::User,
|
|
241
248
|
Alula::UserAddress,
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: alula-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.30.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Titus Johnson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-12-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: httparty
|
|
@@ -225,6 +225,8 @@ files:
|
|
|
225
225
|
- lib/alula/helpers/device_helpers/program_id_helper.rb
|
|
226
226
|
- lib/alula/helpers/jwt_helper.rb
|
|
227
227
|
- lib/alula/list_object.rb
|
|
228
|
+
- lib/alula/m2m_response.rb
|
|
229
|
+
- lib/alula/m2m_rest_resource.rb
|
|
228
230
|
- lib/alula/meta.rb
|
|
229
231
|
- lib/alula/monkey_patches.rb
|
|
230
232
|
- lib/alula/oauth.rb
|
|
@@ -341,8 +343,10 @@ files:
|
|
|
341
343
|
- lib/alula/resources/feature_planvideo.rb
|
|
342
344
|
- lib/alula/resources/feature_price.rb
|
|
343
345
|
- lib/alula/resources/helix_user.rb
|
|
346
|
+
- lib/alula/resources/m2m/m2m_central_station.rb
|
|
344
347
|
- lib/alula/resources/nfc_tag.rb
|
|
345
348
|
- lib/alula/resources/oauth_client.rb
|
|
349
|
+
- lib/alula/resources/permitted_central_station.rb
|
|
346
350
|
- lib/alula/resources/receiver.rb
|
|
347
351
|
- lib/alula/resources/receiver_bind.rb
|
|
348
352
|
- lib/alula/resources/receiver_connection.rb
|
|
@@ -355,6 +359,7 @@ files:
|
|
|
355
359
|
- lib/alula/resources/token_exchange.rb
|
|
356
360
|
- lib/alula/resources/user.rb
|
|
357
361
|
- lib/alula/resources/user_address.rb
|
|
362
|
+
- lib/alula/resources/user_impersonation.rb
|
|
358
363
|
- lib/alula/resources/user_phone.rb
|
|
359
364
|
- lib/alula/resources/user_preferences.rb
|
|
360
365
|
- lib/alula/resources/user_pushtoken.rb
|