alula-ruby 0.50.1

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.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +14 -0
  3. data/.env.example +8 -0
  4. data/.github/workflows/gem-push.yml +45 -0
  5. data/.gitignore +23 -0
  6. data/.rspec +3 -0
  7. data/.travis.yml +7 -0
  8. data/Dockerfile +6 -0
  9. data/Gemfile +12 -0
  10. data/Guardfile +42 -0
  11. data/README.md +423 -0
  12. data/Rakefile +6 -0
  13. data/VERSION.md +84 -0
  14. data/alula-docker-compose.yml +80 -0
  15. data/alula.gemspec +38 -0
  16. data/bin/console +15 -0
  17. data/bin/docparse +36 -0
  18. data/bin/genresource +79 -0
  19. data/bin/setup +8 -0
  20. data/bin/testauth +24 -0
  21. data/bin/testprep +9 -0
  22. data/data/docs/Alula_API_Documentation_2021-04-06.html +16240 -0
  23. data/docker-compose.yml +11 -0
  24. data/lib/alula/alula_response.rb +20 -0
  25. data/lib/alula/api_operations/delete.rb +52 -0
  26. data/lib/alula/api_operations/list.rb +45 -0
  27. data/lib/alula/api_operations/request.rb +44 -0
  28. data/lib/alula/api_operations/save.rb +81 -0
  29. data/lib/alula/api_resource.rb +196 -0
  30. data/lib/alula/client.rb +142 -0
  31. data/lib/alula/errors.rb +169 -0
  32. data/lib/alula/filter_builder.rb +271 -0
  33. data/lib/alula/helpers/device_attribute_translations.rb +68 -0
  34. data/lib/alula/list_object.rb +64 -0
  35. data/lib/alula/meta.rb +16 -0
  36. data/lib/alula/monkey_patches.rb +24 -0
  37. data/lib/alula/oauth.rb +118 -0
  38. data/lib/alula/pagination.rb +25 -0
  39. data/lib/alula/procedures/dealer_device_stats_proc.rb +16 -0
  40. data/lib/alula/procedures/dealer_restore_proc.rb +25 -0
  41. data/lib/alula/procedures/dealer_suspend_proc.rb +25 -0
  42. data/lib/alula/procedures/device_assign_proc.rb +23 -0
  43. data/lib/alula/procedures/device_cellular_history_proc.rb +33 -0
  44. data/lib/alula/procedures/device_rateplan_get_proc.rb +21 -0
  45. data/lib/alula/procedures/device_register_proc.rb +31 -0
  46. data/lib/alula/procedures/device_signal_add_proc.rb +42 -0
  47. data/lib/alula/procedures/device_signal_delivered_proc.rb +31 -0
  48. data/lib/alula/procedures/device_signal_update_proc.rb +32 -0
  49. data/lib/alula/procedures/device_unassign_proc.rb +16 -0
  50. data/lib/alula/procedures/device_unregister_proc.rb +21 -0
  51. data/lib/alula/procedures/upload_touchpad_branding_proc.rb +24 -0
  52. data/lib/alula/procedures/user_plansvideo_price_get.rb +21 -0
  53. data/lib/alula/procedures/user_transfer_accept.rb +19 -0
  54. data/lib/alula/procedures/user_transfer_authorize.rb +18 -0
  55. data/lib/alula/procedures/user_transfer_cancel.rb +18 -0
  56. data/lib/alula/procedures/user_transfer_deny.rb +19 -0
  57. data/lib/alula/procedures/user_transfer_reject.rb +19 -0
  58. data/lib/alula/procedures/user_transfer_request.rb +19 -0
  59. data/lib/alula/query_interface.rb +142 -0
  60. data/lib/alula/rate_limit.rb +11 -0
  61. data/lib/alula/relationship_attributes.rb +107 -0
  62. data/lib/alula/resource_attributes.rb +206 -0
  63. data/lib/alula/resources/admin_user.rb +207 -0
  64. data/lib/alula/resources/billing_program.rb +41 -0
  65. data/lib/alula/resources/dealer.rb +218 -0
  66. data/lib/alula/resources/dealer_account_transfer.rb +172 -0
  67. data/lib/alula/resources/dealer_address.rb +89 -0
  68. data/lib/alula/resources/dealer_branding.rb +226 -0
  69. data/lib/alula/resources/dealer_program.rb +75 -0
  70. data/lib/alula/resources/dealer_suspension_log.rb +49 -0
  71. data/lib/alula/resources/device.rb +716 -0
  72. data/lib/alula/resources/device_cellular_status.rb +134 -0
  73. data/lib/alula/resources/device_charge.rb +70 -0
  74. data/lib/alula/resources/device_event_log.rb +167 -0
  75. data/lib/alula/resources/device_program.rb +54 -0
  76. data/lib/alula/resources/event_trigger.rb +75 -0
  77. data/lib/alula/resources/event_webhook.rb +47 -0
  78. data/lib/alula/resources/feature_bysubject.rb +74 -0
  79. data/lib/alula/resources/feature_plan.rb +57 -0
  80. data/lib/alula/resources/feature_planvideo.rb +54 -0
  81. data/lib/alula/resources/feature_price.rb +46 -0
  82. data/lib/alula/resources/receiver_connection.rb +95 -0
  83. data/lib/alula/resources/receiver_group.rb +74 -0
  84. data/lib/alula/resources/revision.rb +91 -0
  85. data/lib/alula/resources/self.rb +61 -0
  86. data/lib/alula/resources/station.rb +130 -0
  87. data/lib/alula/resources/token_exchange.rb +34 -0
  88. data/lib/alula/resources/user.rb +229 -0
  89. data/lib/alula/resources/user_address.rb +121 -0
  90. data/lib/alula/resources/user_phone.rb +116 -0
  91. data/lib/alula/resources/user_preferences.rb +57 -0
  92. data/lib/alula/resources/user_pushtoken.rb +75 -0
  93. data/lib/alula/resources/user_videoprofile.rb +38 -0
  94. data/lib/alula/rest_resource.rb +17 -0
  95. data/lib/alula/rpc_resource.rb +40 -0
  96. data/lib/alula/rpc_response.rb +14 -0
  97. data/lib/alula/singleton_rest_resource.rb +26 -0
  98. data/lib/alula/util.rb +107 -0
  99. data/lib/alula/version.rb +5 -0
  100. data/lib/alula.rb +135 -0
  101. data/lib/parser.rb +199 -0
  102. metadata +282 -0
@@ -0,0 +1,54 @@
1
+ module Alula
2
+ class FeaturePlanVideo < Alula::RestResource
3
+ extend Alula::ResourceAttributes
4
+ extend Alula::ApiOperations::Request
5
+ extend Alula::ApiOperations::List
6
+ extend Alula::ApiOperations::Save
7
+ extend Alula::ApiOperations::Delete
8
+
9
+ resource_path 'features/plansvideo'
10
+ type 'feature-plansvideo'
11
+
12
+ field :id,
13
+ type: :string,
14
+ sortable: false,
15
+ filterable: false,
16
+ creatable_by: [:system],
17
+ patchable_by: []
18
+
19
+ field :gp_id,
20
+ type: :string,
21
+ sortable: true,
22
+ filterable: true,
23
+ creatable_by: [:system],
24
+ patchable_by: []
25
+
26
+ field :item,
27
+ type: :string,
28
+ sortable: true,
29
+ filterable: false,
30
+ creatable_by: [:system],
31
+ patchable_by: []
32
+
33
+ field :overflow,
34
+ type: :string,
35
+ sortable: true,
36
+ filterable: true,
37
+ creatable_by: [:system],
38
+ patchable_by: []
39
+
40
+ field :count,
41
+ type: :string,
42
+ sortable: true,
43
+ filterable: false,
44
+ creatable_by: [:system],
45
+ patchable_by: [:system]
46
+
47
+ field :price,
48
+ type: :string,
49
+ sortable: true,
50
+ filterable: false,
51
+ creatable_by: [:system],
52
+ patchable_by: [:system]
53
+ end
54
+ end
@@ -0,0 +1,46 @@
1
+ module Alula
2
+ class FeaturePrice < Alula::RestResource
3
+ extend Alula::ResourceAttributes
4
+ extend Alula::ApiOperations::Request
5
+ extend Alula::ApiOperations::List
6
+ extend Alula::ApiOperations::Save
7
+
8
+ resource_path 'features/prices'
9
+ type 'feature-prices'
10
+
11
+ field :id,
12
+ type: :string,
13
+ sortable: true,
14
+ filterable: true,
15
+ creatable_by: [],
16
+ patchable_by: []
17
+
18
+ field :gp_id,
19
+ type: :string,
20
+ sortable: true,
21
+ filterable: true,
22
+ creatable_by: [:system],
23
+ patchable_by: []
24
+
25
+ field :feature_name,
26
+ type: :string,
27
+ sortable: true,
28
+ filterable: true,
29
+ creatable_by: [:system],
30
+ patchable_by: []
31
+
32
+ field :device_type,
33
+ type: :string,
34
+ sortable: true,
35
+ filterable: true,
36
+ creatable_by: [:system],
37
+ patchable_by: []
38
+
39
+ field :price,
40
+ type: :string,
41
+ sortable: true,
42
+ filterable: true,
43
+ creatable_by: [:system],
44
+ patchable_by: [:system]
45
+ end
46
+ end
@@ -0,0 +1,95 @@
1
+ module Alula
2
+ class ReceiverConnection < Alula::RestResource
3
+ extend Alula::ResourceAttributes
4
+ extend Alula::ApiOperations::List
5
+
6
+ # You should update this to be a slash-separated, literal path to the resource
7
+ # without the prefix /api/v1 or the suffix of an ID
8
+ resource_path 'receivers/connections'
9
+ type 'receivers-connections'
10
+
11
+ # Relationships
12
+ # None
13
+
14
+ # Resource Fields
15
+ # Not all params are used at the moment. See Alula::ResourceAttributes for details
16
+ # on how params are parsed,
17
+ field :id,
18
+ type: :string,
19
+ sortable: false,
20
+ filterable: false,
21
+ creatable_by: [],
22
+ patchable_by: []
23
+
24
+ field :path,
25
+ type: :string,
26
+ sortable: true,
27
+ filterable: true,
28
+ creatable_by: [],
29
+ patchable_by: []
30
+
31
+ field :name,
32
+ type: :string,
33
+ sortable: false,
34
+ filterable: false,
35
+ creatable_by: [],
36
+ patchable_by: []
37
+
38
+ field :station_id,
39
+ type: :string,
40
+ sortable: false,
41
+ filterable: false,
42
+ creatable_by: [],
43
+ patchable_by: []
44
+
45
+ field :success_count,
46
+ type: :number,
47
+ sortable: false,
48
+ filterable: false,
49
+ creatable_by: [],
50
+ patchable_by: []
51
+
52
+ field :fail_count,
53
+ type: :number,
54
+ sortable: false,
55
+ filterable: false,
56
+ creatable_by: [],
57
+ patchable_by: []
58
+
59
+ field :last_success,
60
+ type: :date,
61
+ sortable: false,
62
+ filterable: false,
63
+ creatable_by: [],
64
+ patchable_by: []
65
+
66
+ field :last_fail,
67
+ type: :date,
68
+ sortable: false,
69
+ filterable: false,
70
+ creatable_by: [],
71
+ patchable_by: []
72
+
73
+ field :status,
74
+ type: :string,
75
+ sortable: false,
76
+ filterable: true,
77
+ creatable_by: [],
78
+ patchable_by: []
79
+
80
+ field :type,
81
+ type: :string,
82
+ sortable: false,
83
+ filterable: true,
84
+ creatable_by: [],
85
+ patchable_by: []
86
+
87
+ field :status_date,
88
+ type: :date,
89
+ sortable: true,
90
+ filterable: true,
91
+ creatable_by: [],
92
+ patchable_by: []
93
+
94
+ end
95
+ end
@@ -0,0 +1,74 @@
1
+ module Alula
2
+ class ReceiverGroup < 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
+
9
+ resource_path 'receivers/groups'
10
+ type 'receivers-groups'
11
+
12
+ # Relationships
13
+ relationship :dealer, type: 'dealers', cardinality: 'To-one'
14
+ relationship :devices, type: 'devices', cardinality: 'To-many'
15
+
16
+ # Resource Fields
17
+ field :id,
18
+ type: :string,
19
+ sortable: false,
20
+ filterable: false,
21
+ creatable_by: [],
22
+ patchable_by: []
23
+
24
+ field :dealer_id,
25
+ type: :string,
26
+ sortable: false,
27
+ filterable: true,
28
+ creatable_by: [:system, :station, :dealer],
29
+ patchable_by: []
30
+
31
+ field :name,
32
+ type: :string,
33
+ sortable: true,
34
+ filterable: true,
35
+ creatable_by: [:system, :station, :dealer],
36
+ patchable_by: [:system, :station, :dealer, :technician, :user, :sub_user]
37
+
38
+ field :description,
39
+ type: :string,
40
+ sortable: false,
41
+ filterable: false,
42
+ creatable_by: [:system, :station, :dealer],
43
+ patchable_by: [:system, :station, :dealer, :technician, :user, :sub_user]
44
+
45
+ field :date_modified,
46
+ type: :date,
47
+ sortable: true,
48
+ filterable: true,
49
+ creatable_by: [],
50
+ patchable_by: []
51
+
52
+ field :date_entered,
53
+ type: :date,
54
+ sortable: true,
55
+ filterable: true,
56
+ creatable_by: [],
57
+ patchable_by: []
58
+
59
+ field :created_by,
60
+ type: :string,
61
+ sortable: false,
62
+ filterable: false,
63
+ creatable_by: [],
64
+ patchable_by: []
65
+
66
+ field :modified_by,
67
+ type: :string,
68
+ sortable: false,
69
+ filterable: false,
70
+ creatable_by: [],
71
+ patchable_by: []
72
+
73
+ end
74
+ end
@@ -0,0 +1,91 @@
1
+ module Alula
2
+ class Revision < Alula::RestResource
3
+ extend Alula::ResourceAttributes
4
+ extend Alula::RelationshipAttributes
5
+ extend Alula::ApiOperations::Request
6
+ extend Alula::ApiOperations::List
7
+
8
+ # You should update this to be a slash-separated, literal path to the resource
9
+ # without the prefix /api/v1 or the suffix of an ID
10
+ resource_path 'revisions'
11
+ type 'revisions'
12
+
13
+ # Relationships
14
+ relationship :creator, type: 'users', cardinality: 'To-one'
15
+ relationship :device, type: 'devices', cardinality: 'To-one'
16
+ relationship :user, type: 'users', cardinality: 'To-one'
17
+ relationship :dealer, type: 'dealers', cardinality: 'To-one'
18
+
19
+ # Resource Fields
20
+ # Not all params are used at the moment. See Alula::ResourceAttributes for details
21
+ # on how params are parsed,
22
+ field :id,
23
+ type: :string,
24
+ sortable: false,
25
+ filterable: false,
26
+ creatable_by: [],
27
+ patchable_by: []
28
+
29
+ field :model,
30
+ type: :string,
31
+ sortable: false,
32
+ filterable: false,
33
+ creatable_by: [],
34
+ patchable_by: []
35
+
36
+ field :document,
37
+ type: :object,
38
+ sortable: false,
39
+ filterable: false,
40
+ creatable_by: [],
41
+ patchable_by: []
42
+
43
+ field :operation,
44
+ type: :string,
45
+ sortable: false,
46
+ filterable: false,
47
+ creatable_by: [],
48
+ patchable_by: []
49
+
50
+ field :document_id,
51
+ type: :string,
52
+ sortable: false,
53
+ filterable: true,
54
+ creatable_by: [],
55
+ patchable_by: []
56
+
57
+ field :revision,
58
+ type: :string,
59
+ sortable: true,
60
+ filterable: false,
61
+ creatable_by: [],
62
+ patchable_by: []
63
+
64
+ field :created_at,
65
+ type: :date,
66
+ sortable: true,
67
+ filterable: true,
68
+ creatable_by: [],
69
+ patchable_by: []
70
+
71
+ field :updated_at,
72
+ type: :date,
73
+ sortable: true,
74
+ filterable: false,
75
+ creatable_by: [],
76
+ patchable_by: []
77
+
78
+ field :user_id,
79
+ type: :string,
80
+ sortable: false,
81
+ filterable: true,
82
+ creatable_by: [],
83
+ patchable_by: []
84
+
85
+
86
+ def document
87
+ JSON.parse(@values['document'])
88
+ .with_indifferent_access
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,61 @@
1
+ module Alula
2
+ class Self < Alula::SingletonRestResource
3
+ extend Alula::ResourceAttributes
4
+ extend Alula::RelationshipAttributes
5
+
6
+ # You should update this to be a slash-separated, literal path to the resource
7
+ # without the prefix /api/v1 or the suffix of an ID
8
+ resource_path 'self'
9
+ type 'self'
10
+
11
+ # Relationships
12
+ # None
13
+
14
+ # Resource Fields
15
+ # Not all params are used at the moment. See Alula::ResourceAttributes for details
16
+ # on how params are parsed,
17
+ field :id,
18
+ type: :string,
19
+ sortable: false,
20
+ filterable: false,
21
+ creatable_by: [],
22
+ patchable_by: []
23
+
24
+ field :dealer_id,
25
+ type: :string,
26
+ sortable: false,
27
+ filterable: false,
28
+ creatable_by: [],
29
+ patchable_by: []
30
+
31
+ field :parent_id,
32
+ type: :string,
33
+ sortable: false,
34
+ filterable: false,
35
+ creatable_by: [],
36
+ patchable_by: []
37
+
38
+ field :u_type,
39
+ type: :string,
40
+ sortable: false,
41
+ filterable: false,
42
+ creatable_by: [],
43
+ patchable_by: []
44
+
45
+ field :user_type,
46
+ type: :string,
47
+ sortable: false,
48
+ filterable: false,
49
+ creatable_by: [],
50
+ patchable_by: [],
51
+ symbolize: true
52
+
53
+ field :impersonator,
54
+ type: :string,
55
+ sortable: false,
56
+ filterable: false,
57
+ creatable_by: [],
58
+ patchable_by: []
59
+
60
+ end
61
+ end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alula
4
+ class Station < Alula::RestResource
5
+ extend Alula::ResourceAttributes
6
+ extend Alula::RelationshipAttributes
7
+ extend Alula::ApiOperations::Request
8
+ extend Alula::ApiOperations::List
9
+ extend Alula::ApiOperations::Save
10
+
11
+ resource_path 'stations'
12
+
13
+ # Relationships
14
+ relationship :dealers, type: 'dealers', cardinality: 'To-many'
15
+
16
+ # Resource Fields
17
+ field :id,
18
+ type: :string,
19
+ sortable: false,
20
+ filterable: false,
21
+ creatable_by: [],
22
+ patchable_by: []
23
+
24
+ field :company_name,
25
+ type: :string,
26
+ sortable: true,
27
+ filterable: true,
28
+ creatable_by: [:system],
29
+ patchable_by: %i[system station dealer]
30
+
31
+ field :date_entered,
32
+ type: :date,
33
+ sortable: true,
34
+ filterable: true,
35
+ creatable_by: [],
36
+ patchable_by: []
37
+
38
+ field :date_modified,
39
+ type: :date,
40
+ sortable: true,
41
+ filterable: true,
42
+ creatable_by: [],
43
+ patchable_by: %i[system station dealer]
44
+
45
+ field :modified_by,
46
+ type: :string,
47
+ sortable: false,
48
+ filterable: false,
49
+ creatable_by: [],
50
+ patchable_by: %i[system station dealer]
51
+
52
+ field :entered_by,
53
+ type: :string,
54
+ sortable: false,
55
+ filterable: false,
56
+ creatable_by: [],
57
+ patchable_by: []
58
+
59
+ field :acnt_no,
60
+ type: :string,
61
+ sortable: false,
62
+ filterable: true,
63
+ creatable_by: [:system],
64
+ patchable_by: %i[system station dealer]
65
+
66
+ field :email,
67
+ type: :string,
68
+ sortable: false,
69
+ filterable: false,
70
+ creatable_by: [:system],
71
+ patchable_by: %i[system station dealer]
72
+
73
+ field :username,
74
+ type: :string,
75
+ sortable: false,
76
+ filterable: false,
77
+ creatable_by: [:system],
78
+ patchable_by: []
79
+
80
+ field :password,
81
+ type: :string,
82
+ sortable: false,
83
+ filterable: false,
84
+ creatable_by: [:system],
85
+ patchable_by: []
86
+
87
+ field :name_last,
88
+ type: :string,
89
+ sortable: false,
90
+ filterable: false,
91
+ creatable_by: [:system],
92
+ patchable_by: []
93
+
94
+ field :name_first,
95
+ type: :string,
96
+ sortable: false,
97
+ filterable: false,
98
+ creatable_by: [:system],
99
+ patchable_by: []
100
+
101
+ field :u_type,
102
+ type: :string,
103
+ sortable: false,
104
+ filterable: false,
105
+ creatable_by: [:system],
106
+ patchable_by: []
107
+
108
+ field :timezone,
109
+ type: :string,
110
+ sortable: false,
111
+ filterable: false,
112
+ creatable_by: [:system],
113
+ patchable_by: []
114
+
115
+ field :hidden,
116
+ type: :string,
117
+ sortable: false,
118
+ filterable: false,
119
+ creatable_by: [],
120
+ patchable_by: [:system]
121
+
122
+ field :station_id,
123
+ type: :string,
124
+ sortable: false,
125
+ filterable: false,
126
+ creatable_by: [:system],
127
+ patchable_by: []
128
+
129
+ end
130
+ end
@@ -0,0 +1,34 @@
1
+ module Alula
2
+ class TokenExchange
3
+ def self.token_for_user(user_id)
4
+ url = '/rest/v1/oauth/accesstokens'
5
+ payload = { data: { attributes: { userId: user_id } } }
6
+ opts = {}
7
+
8
+ response = Alula::Client.request(:post, url, payload, opts)
9
+
10
+ if response.ok?
11
+ ImpersonatedToken.new(response.data['data']['attributes'])
12
+ else
13
+ error_class = AlulaError.for_response(response)
14
+ raise error_class
15
+ end
16
+ end
17
+
18
+ class ImpersonatedToken
19
+ # Simple Oauth::Response reader object
20
+ attr_reader :date_created, :access_token, :expires_in, :expires_at, :refresh_token, :scope
21
+
22
+ def initialize(attributes)
23
+ @raw_response = attributes
24
+
25
+ @date_created = Time.parse(attributes['dateCreated'])
26
+ @access_token = attributes['accessToken']
27
+ @expires_at = Time.parse(attributes['expires'])
28
+ @expires_in = (@expires_at - Time.now.utc).to_i
29
+ @refresh_token = attributes['refresh_token']
30
+ @scope = attributes['scope']
31
+ end
32
+ end
33
+ end
34
+ end