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,229 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alula
4
+ class User < 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 'users'
12
+ type 'users'
13
+
14
+ relationship :devices, type: 'devices', cardinality: 'To-many'
15
+ relationship :dealer, type: 'dealers', cardinality: 'To-one'
16
+ relationship :phone, type: 'users-phones', cardinality: 'To-one'
17
+ relationship :address, type: 'users-addresses', cardinality: 'To-one'
18
+ relationship :pushtokens, type: 'users-pushtokens', cardinality: 'To-many'
19
+ relationship :preferences, type: 'users-preferences', cardinality: 'To-one'
20
+ relationship :videoprofiles, type: 'users-videoprofiles', cardinality: 'To-many'
21
+
22
+ # Resource Fields
23
+ # Not all params are used at the moment. See Alula::ResourceAttributes for details
24
+ # on how params are parsed,
25
+ field :id,
26
+ type: :string,
27
+ sortable: false,
28
+ filterable: false,
29
+ creatable_by: [],
30
+ patchable_by: []
31
+
32
+ field :username,
33
+ type: :string,
34
+ sortable: true,
35
+ filterable: true,
36
+ creatable_by: %i[system station dealer technician user],
37
+ patchable_by: %i[system station dealer technician user sub_user]
38
+
39
+ field :password,
40
+ type: :string,
41
+ sortable: false,
42
+ filterable: false,
43
+ creatable_by: %i[system station dealer technician user],
44
+ patchable_by: []
45
+
46
+ field :u_type,
47
+ type: :string,
48
+ sortable: false,
49
+ filterable: true,
50
+ creatable_by: %i[system station dealer technician user],
51
+ patchable_by: []
52
+
53
+ field :user_type,
54
+ type: :string,
55
+ sortable: false,
56
+ filterable: true,
57
+ creatable_by: %i[system station dealer technician user],
58
+ patchable_by: [],
59
+ symbolize: true
60
+
61
+ field :u_level,
62
+ type: :string,
63
+ sortable: false,
64
+ filterable: false,
65
+ creatable_by: [],
66
+ patchable_by: []
67
+
68
+ field :parent_id,
69
+ type: :string,
70
+ sortable: false,
71
+ filterable: true,
72
+ creatable_by: %i[system station dealer technician user],
73
+ patchable_by: []
74
+
75
+ field :dealer_id,
76
+ type: :string,
77
+ sortable: false,
78
+ filterable: true,
79
+ creatable_by: %i[system station dealer technician user],
80
+ patchable_by: []
81
+
82
+ field :station_id,
83
+ type: :string,
84
+ sortable: false,
85
+ filterable: true,
86
+ creatable_by: [:system],
87
+ patchable_by: []
88
+
89
+ field :last_login,
90
+ type: :string,
91
+ sortable: false,
92
+ filterable: false,
93
+ creatable_by: [],
94
+ patchable_by: []
95
+
96
+ field :date_entered,
97
+ type: :date,
98
+ sortable: true,
99
+ filterable: true,
100
+ creatable_by: [],
101
+ patchable_by: []
102
+
103
+ field :date_modified,
104
+ type: :date,
105
+ sortable: true,
106
+ filterable: true,
107
+ creatable_by: [],
108
+ patchable_by: []
109
+
110
+ field :entered_by,
111
+ type: :string,
112
+ sortable: false,
113
+ filterable: false,
114
+ creatable_by: [],
115
+ patchable_by: []
116
+
117
+ field :modified_by,
118
+ type: :string,
119
+ sortable: false,
120
+ filterable: false,
121
+ creatable_by: [],
122
+ patchable_by: []
123
+
124
+ field :pwch,
125
+ type: :string,
126
+ sortable: false,
127
+ filterable: false,
128
+ creatable_by: [],
129
+ patchable_by: []
130
+
131
+ field :features_selected,
132
+ type: :object,
133
+ sortable: false,
134
+ filterable: false,
135
+ creatable_by: %i[system station dealer technician],
136
+ patchable_by: %i[system station dealer technician]
137
+
138
+ field :eula,
139
+ type: :string,
140
+ sortable: false,
141
+ filterable: false,
142
+ creatable_by: [],
143
+ patchable_by: %i[system station dealer technician user sub_user]
144
+
145
+ field :def_mod,
146
+ type: :string,
147
+ sortable: false,
148
+ filterable: false,
149
+ creatable_by: [],
150
+ patchable_by: []
151
+
152
+ field :rg_activated,
153
+ type: :string,
154
+ sortable: false,
155
+ filterable: false,
156
+ creatable_by: [],
157
+ patchable_by: []
158
+
159
+ field :company_name,
160
+ type: :string,
161
+ sortable: false,
162
+ filterable: false,
163
+ creatable_by: [],
164
+ patchable_by: []
165
+
166
+ field :name_first,
167
+ type: :string,
168
+ sortable: true,
169
+ filterable: true,
170
+ creatable_by: %i[system station dealer technician user],
171
+ patchable_by: %i[system station dealer technician user sub_user]
172
+
173
+ field :name_last,
174
+ type: :string,
175
+ sortable: true,
176
+ filterable: true,
177
+ creatable_by: %i[system station dealer technician user],
178
+ patchable_by: %i[system station dealer technician user sub_user]
179
+
180
+ field :email,
181
+ type: :string,
182
+ sortable: true,
183
+ filterable: true,
184
+ creatable_by: %i[system station dealer technician user],
185
+ patchable_by: %i[system station dealer technician user sub_user]
186
+
187
+ field :time_offset,
188
+ type: :string,
189
+ sortable: false,
190
+ filterable: false,
191
+ creatable_by: [],
192
+ patchable_by: []
193
+
194
+ field :timezone,
195
+ type: :string,
196
+ sortable: false,
197
+ filterable: false,
198
+ creatable_by: %i[system station dealer technician user],
199
+ patchable_by: %i[system station dealer technician user sub_user]
200
+
201
+ def user_role
202
+ # pre-alula api users will be u_type 32, newer ones are 96. need to differentiate
203
+ # between account users and account owners by checking if they own themselves
204
+ {
205
+ 2 => :system,
206
+ 4 => :station,
207
+ 8 => :dealer,
208
+ 16 => :technician,
209
+ 32 => :user,
210
+ 64 => :sub_user,
211
+ 96 => :account_user,
212
+ 320 => :local_access_user
213
+ }[(u_type == 96 && parent_id == id ? 32 : u_type)]
214
+ end
215
+
216
+ def user_role_name
217
+ {
218
+ system: 'System',
219
+ station: 'Station',
220
+ dealer: 'Dealer',
221
+ technician: 'Technician',
222
+ user: 'Account Owner',
223
+ sub_user: 'Sub-User',
224
+ account_user: 'Account User',
225
+ local_access_user: 'Local Access User'
226
+ }[user_role]
227
+ end
228
+ end
229
+ end
@@ -0,0 +1,121 @@
1
+ ##
2
+ # Create, view, and configure users’ and sub-users’ address contact information.
3
+ module Alula
4
+ class UserAddress < 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
+ # You should update this to be a slash-separated, literal path to the resource
12
+ # without the prefix /api/v1 or the suffix of an ID
13
+ resource_path 'users/addresses'
14
+ type 'users-addresses'
15
+
16
+ # Relationships
17
+ relationship :user, type: 'users', 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 :username,
30
+ type: :string,
31
+ sortable: true,
32
+ filterable: true,
33
+ creatable_by: [],
34
+ patchable_by: []
35
+
36
+ field :address1,
37
+ type: :string,
38
+ sortable: false,
39
+ filterable: true,
40
+ creatable_by: [],
41
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
42
+
43
+ field :address2,
44
+ type: :string,
45
+ sortable: false,
46
+ filterable: true,
47
+ creatable_by: [],
48
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
49
+
50
+ field :st_number,
51
+ type: :string,
52
+ sortable: false,
53
+ filterable: true,
54
+ creatable_by: [],
55
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
56
+
57
+ field :st_name,
58
+ type: :string,
59
+ sortable: false,
60
+ filterable: true,
61
+ creatable_by: [],
62
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
63
+
64
+ field :st_direction,
65
+ type: :string,
66
+ sortable: false,
67
+ filterable: true,
68
+ creatable_by: [],
69
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
70
+
71
+ field :city,
72
+ type: :string,
73
+ sortable: false,
74
+ filterable: true,
75
+ creatable_by: [],
76
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
77
+
78
+ field :state,
79
+ type: :string,
80
+ sortable: false,
81
+ filterable: true,
82
+ creatable_by: [],
83
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
84
+
85
+ field :zip_code,
86
+ type: :string,
87
+ sortable: false,
88
+ filterable: true,
89
+ creatable_by: [],
90
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
91
+
92
+ field :country,
93
+ type: :string,
94
+ sortable: false,
95
+ filterable: true,
96
+ creatable_by: [],
97
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
98
+
99
+ field :time_offset,
100
+ type: :string,
101
+ sortable: false,
102
+ filterable: false,
103
+ creatable_by: [],
104
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
105
+
106
+ field :timezone,
107
+ type: :string,
108
+ sortable: false,
109
+ filterable: false,
110
+ creatable_by: [],
111
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
112
+
113
+ field :company_name,
114
+ type: :string,
115
+ sortable: false,
116
+ filterable: false,
117
+ creatable_by: [],
118
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
119
+
120
+ end
121
+ end
@@ -0,0 +1,116 @@
1
+ module Alula
2
+ class UserPhone < 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 'users/phones'
10
+ type 'users-phones'
11
+
12
+ # Relationships
13
+ # None
14
+
15
+ # Resource Fields
16
+ # Not all params are used at the moment. See Alula::ResourceAttributes for details
17
+ # on how params are parsed,
18
+ field :id,
19
+ type: :string,
20
+ sortable: false,
21
+ filterable: false,
22
+ creatable_by: [],
23
+ patchable_by: []
24
+
25
+ field :username,
26
+ type: :string,
27
+ sortable: true,
28
+ filterable: true,
29
+ creatable_by: [],
30
+ patchable_by: []
31
+
32
+ field :phone_pri_contact,
33
+ type: :string,
34
+ sortable: false,
35
+ filterable: false,
36
+ creatable_by: [],
37
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
38
+
39
+ field :phone_pri_ct,
40
+ type: :string,
41
+ sortable: false,
42
+ filterable: false,
43
+ creatable_by: [],
44
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
45
+
46
+ field :phone_sec_contact,
47
+ type: :string,
48
+ sortable: false,
49
+ filterable: false,
50
+ creatable_by: [],
51
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
52
+
53
+ field :phone_sec_ct,
54
+ type: :string,
55
+ sortable: false,
56
+ filterable: false,
57
+ creatable_by: [],
58
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
59
+
60
+ field :contact_type,
61
+ type: :string,
62
+ sortable: false,
63
+ filterable: false,
64
+ creatable_by: [],
65
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
66
+
67
+ field :co_ph_pri,
68
+ type: :string,
69
+ sortable: false,
70
+ filterable: false,
71
+ creatable_by: [],
72
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
73
+
74
+ field :co_ph_sec,
75
+ type: :string,
76
+ sortable: false,
77
+ filterable: false,
78
+ creatable_by: [],
79
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
80
+
81
+ field :co_ph_sales,
82
+ type: :string,
83
+ sortable: false,
84
+ filterable: false,
85
+ creatable_by: [],
86
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
87
+
88
+ field :co_ph_service,
89
+ type: :string,
90
+ sortable: false,
91
+ filterable: false,
92
+ creatable_by: [],
93
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
94
+
95
+ field :co_ph_billing,
96
+ type: :string,
97
+ sortable: false,
98
+ filterable: false,
99
+ creatable_by: [],
100
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
101
+
102
+ field :cell_text,
103
+ type: :string,
104
+ sortable: false,
105
+ filterable: false,
106
+ creatable_by: [],
107
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
108
+
109
+ field :company_name,
110
+ type: :string,
111
+ sortable: false,
112
+ filterable: false,
113
+ creatable_by: [],
114
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
115
+ end
116
+ end
@@ -0,0 +1,57 @@
1
+ module Alula
2
+ # The Generic Preferences for a User
3
+ class UserPreferences < Alula::RestResource
4
+ extend Alula::ResourceAttributes
5
+ extend Alula::RelationshipAttributes
6
+ extend Alula::ApiOperations::Request
7
+ extend Alula::ApiOperations::List
8
+
9
+ resource_path 'users/preferences'
10
+ type 'users-preferences'
11
+
12
+ # Resource Fields
13
+ # Not all params are used at the moment. See Alula::ResourceAttributes for details
14
+ # on how params are parsed,
15
+ field :id,
16
+ type: :string,
17
+ sortable: false,
18
+ filterable: false,
19
+ creatable_by: [],
20
+ patchable_by: []
21
+
22
+ field :user_id,
23
+ type: :string,
24
+ sortable: true,
25
+ filterable: true,
26
+ creatable_by: [],
27
+ patchable_by: []
28
+
29
+ field :key,
30
+ type: :string,
31
+ sortable: false,
32
+ filterable: false,
33
+ creatable_by: [],
34
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
35
+
36
+ field :value,
37
+ type: :string,
38
+ sortable: false,
39
+ filterable: false,
40
+ creatable_by: [],
41
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
42
+
43
+ field :data,
44
+ type: :string,
45
+ sortable: false,
46
+ filterable: false,
47
+ creatable_by: [],
48
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
49
+
50
+ field :inherited,
51
+ type: :string,
52
+ sortable: false,
53
+ filterable: false,
54
+ creatable_by: [],
55
+ patchable_by: [:system, :station, :dealer, :technician, :user, :subuser]
56
+ end
57
+ end
@@ -0,0 +1,75 @@
1
+ # The Push Tokens for a User
2
+ module Alula
3
+ # The Push Tokens for a User
4
+ class UserPushtoken < Alula::RestResource
5
+ extend Alula::ResourceAttributes
6
+ extend Alula::RelationshipAttributes
7
+ extend Alula::ApiOperations::Request
8
+ extend Alula::ApiOperations::List
9
+
10
+ resource_path 'users/pushtokens'
11
+ type 'users-pushtokens'
12
+
13
+ # Relationships
14
+ relationship :user, type: :users, 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: %i[system user subuser],
24
+ patchable_by: []
25
+
26
+ field :user_id,
27
+ type: :string,
28
+ sortable: false,
29
+ filterable: true,
30
+ creatable_by: %i[system user subuser],
31
+ patchable_by: []
32
+
33
+ field :key,
34
+ type: :string,
35
+ sortable: false,
36
+ filterable: true,
37
+ creatable_by: %i[system user subuser],
38
+ patchable_by: %i[system user subuser]
39
+
40
+ field :type,
41
+ type: :string,
42
+ sortable: true,
43
+ filterable: true,
44
+ creatable_by: %i[system user subuser],
45
+ patchable_by: %i[system user subuser]
46
+
47
+ field :version,
48
+ type: :string,
49
+ sortable: true,
50
+ filterable: true,
51
+ creatable_by: %i[system user subuser],
52
+ patchable_by: %i[system user subuser]
53
+
54
+ field :video,
55
+ type: :string,
56
+ sortable: false,
57
+ filterable: false,
58
+ creatable_by: %i[system user subuser],
59
+ patchable_by: %i[system user subuser]
60
+
61
+ field :doorbell,
62
+ type: :string,
63
+ sortable: false,
64
+ filterable: false,
65
+ creatable_by: %i[system user subuser],
66
+ patchable_by: %i[system user subuser]
67
+
68
+ field :security,
69
+ type: :string,
70
+ sortable: false,
71
+ filterable: false,
72
+ creatable_by: %i[system user subuser],
73
+ patchable_by: %i[system user subuser]
74
+ end
75
+ end
@@ -0,0 +1,38 @@
1
+ module Alula
2
+ class UserVideoProfile < 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 'users/videoprofiles'
10
+ type 'users-videoprofiles'
11
+
12
+ relationship :user, type: :users, cardinality: 'To-one'
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 :camera_plan_count,
25
+ type: :number,
26
+ sortable: true,
27
+ filterable: false,
28
+ creatable_by: [:system, :station, :dealer, :technician],
29
+ patchable_by: [:system, :station, :dealer, :technician]
30
+
31
+ field :clip_plan_count,
32
+ type: :number,
33
+ sortable: false,
34
+ filterable: false,
35
+ creatable_by: [:system, :station, :dealer, :technician],
36
+ patchable_by: [:system, :station, :dealer, :technician]
37
+ end
38
+ end
@@ -0,0 +1,17 @@
1
+ module Alula
2
+ class RestResource < ApiResource
3
+ # TODO: Not sure if the period replace is applicatble to our use
4
+ # determine as we add child resources
5
+ def self.resource_url(id = nil)
6
+ if self == RestResource
7
+ raise NotImplementedError, "Cannot call resource_url on a RestResource. Try using Device or Customer instead."
8
+ end
9
+ "/rest/v1/#{self.get_resource_path(id)}"
10
+ end
11
+
12
+ def resource_url(param_id = nil)
13
+ our_id = [id, param_id].compact.first
14
+ self.class.resource_url(our_id)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,40 @@
1
+ module Alula
2
+ class RpcResource
3
+ def self.request(http_method:, path:, payload:, handler:, wrap: true, opts: {})
4
+ response = Alula::Client.request(http_method, path, wrap ? wrap_payload(payload) : payload, opts)
5
+
6
+ unless response.ok? && ok?(response)
7
+ error = Alula::AlulaError.for_response(response)
8
+
9
+ #
10
+ # Some error classifications are critical and should be raised for visibility
11
+ # These errors do not contain meaningful data that an end-user can use to correct
12
+ # the error.
13
+ raise error if [Alula::RateLimitError, Alula::BadRequestError, Alula::ForbiddenError,
14
+ Alula::UnknownError, Alula::InsufficientScopeError].include?(error.class)
15
+
16
+ return error
17
+ end
18
+
19
+ handler.new(response)
20
+ end
21
+
22
+ ##
23
+ # RPC endpoints tend to return a 200 OK even if the response failed. Examine
24
+ # the response body to determine if there was an error.
25
+ def self.ok?(response)
26
+ error = response.data['error'] && !response.data['error'].empty?
27
+ errors = response.data['errors'] && !response.data['errors'].empty?
28
+
29
+ !(error || errors)
30
+ end
31
+
32
+ def self.wrap_payload(payload)
33
+ {
34
+ id: SecureRandom.uuid,
35
+ jsonrpc: '2.0',
36
+ params: payload
37
+ }
38
+ end
39
+ end
40
+ end