motor-admin 0.2.54 → 0.2.58

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15b533466db4a33c9391b0b6b01ccc843db7f69641e45b94588f8fd73b58bdd6
4
- data.tar.gz: 1eca4eb32893da6b571a24e6ce75fa58c2290c759e973fea99186a5e795d2bca
3
+ metadata.gz: bf2ac492abdb2cc783edd588a7ca4c74e25139d93c2daf54a249e04abb03ffd4
4
+ data.tar.gz: 7d30965b411c7188c1a3b53abaf1da57dfaa0545789ad201164e7e68a38a16fe
5
5
  SHA512:
6
- metadata.gz: 1526cd8885184c8e4e3b8863f7a5c3c5a6adc240c5dc6cd976a5e804f0538635973977f6bb7dcb23c8042a6997817e529d7ff368fe349d5236c13528ff704301
7
- data.tar.gz: 202b9a9b155b23ae205c278d1301d5d58e7eaf19571d2d0b8d539635586c2227d49b72bcbf3a605c2b98e85da5545161ddc46c27837c4343f2a281c981874f04
6
+ metadata.gz: b5419e438008855f5ea5eadadf40cceaa6660cba27eee1c4602076814014e4f5fef8f69584ccedbc843adde9f051241497c10b1ceaf4c232b2cf5c09ec3abf86
7
+ data.tar.gz: 7cee450d42f434a0d619a023061915435913e2d40691724c2980df44036d3d366e1e2d58d8de4b26956582f486595344fb2aacb7f761510d6d1e1305528feb44
@@ -33,7 +33,7 @@ module Motor
33
33
  def set_i18n_locale
34
34
  configs = Motor::Configs::LoadFromCache.load_configs(cache_key: cache_keys[:configs])
35
35
 
36
- I18n.locale = configs.find { |c| c.key == 'language' }&.value || I18n.locale
36
+ I18n.locale = configs.find { |c| c.key == 'language' }&.value&.to_sym || I18n.locale
37
37
  end
38
38
 
39
39
  def cache_keys
@@ -0,0 +1,389 @@
1
+ el:
2
+ motor:
3
+ action_has_been_applied: Η ενέργεια έχει εφαρμοστεί!
4
+ action_has_failed_with_code: Η ενέργεια απέτυχε με κωδικό
5
+ action_type: Τύπος ενέργειας
6
+ actions: Ενέργειες
7
+ add: Προσθληκη
8
+ add_action: Προσθήκη ενέργειας
9
+ add_alert: Προσθήκη ειδοποίησης
10
+ add_column: Προσθήκη Στήλης
11
+ add_dashboard: Προσθήκη Ταμπλό
12
+ add_field: Προσθήκη Πεδίου
13
+ add_filter: Προσθήκη Φίλτρου
14
+ add_form: Προσθήκη Φόρμας
15
+ add_group: Προσθήκη Ομάδας
16
+ add_item: Προσθήκη Αντικειμένου
17
+ add_link: Προσθήκη Συνδέσμου
18
+ add_query: Προσθήκη Ερωτήματος
19
+ add_scope: Προσθήκη πεδίου εφαρμογής
20
+ add_tab: Προσθήκη Καρτέλας
21
+ adjust_form: Προσαρμογή φόρμας
22
+ adjust_fields: Προσαρμογή πεδίων
23
+ alert_email_has_been_sent: Το email ειδοποίησης έχει σταλεί!
24
+ alert_has_been_activated: Η ειδοποίηση έχει ενεργοποιηθεί
25
+ alert_has_been_disabled: Η ειδοποίηση έχει απενεργοποιηθεί
26
+ alert_has_been_saved: Η ειδοποίηση έχει σωθεί!
27
+ alert_name: Όνομα ειδοποίησης
28
+ alerts: Ειδοποιήσεις
29
+ all: Όλα
30
+ all_resources: Όλοι οι πόροι
31
+ and: Και
32
+ api: API
33
+ api_path: Διαδρομή API
34
+ api_request: Αίτημα API
35
+ apply: Εφαρμογή
36
+ are_you_sure: Είστε σίγουροι;
37
+ associations: Συνδέσεις
38
+ bar_chart: Ραβδόγραμμα
39
+ base: Βάση
40
+ boolean: Boolean
41
+ build_custom_form: Δημιουργία προσαρμοσμένης φόρμας
42
+ cancel: Ακύρωση
43
+ cents: Σεντς
44
+ checkbox: Checkbox
45
+ clear_all: Εκκαθάριση όλων
46
+ clear_selection: Εκκαθάριση επιλογής
47
+ close: Κλείσιμο
48
+ close_editor: Κλείσιμο επεξεργαστή
49
+ close_settings: Κλείσιμο ρυθμίσεων
50
+ close_variables: Κλείσιμο μεταβλητών
51
+ columns: Στήλες
52
+ contains: Περιέχει
53
+ create: Δημιουργία
54
+ currency: Νόμισμα
55
+ dashboard: Ταμπλό
56
+ dashboard_has_been_saved: Το ταμπλό έχει αποθηκευτεί!
57
+ dashboard_title: Τίτλος ταμπλό
58
+ dashboards: Ταμπλό
59
+ date: Ημερομηνία
60
+ date_and_time: Ημερομηνία και ώρα
61
+ decimal: Δεκαδικό
62
+ default: Προεπιλεγμένο
63
+ default_value: Προεπιλεγμένη τιμή
64
+ describe_this_alert_optional: Περιγράψτε αυτή την ειδοποίηση (προαιρετικά)
65
+ describe_your_dashboard_optional: Περιγράψτε το ταμπλό σας (προαιρετικά)
66
+ describe_your_form_optional: Περιγράψτε τη φόρμα σας (προαιρετικά)
67
+ describe_your_query_optional: Περιγράψτε το ερώτημά σας (προαιρετικά)
68
+ description: Περιγραφή
69
+ deselect_all: Αποεπιλέξτε όλα
70
+ details: Λεπτομέρειες
71
+ disable: Απενεργοποίηση
72
+ display_as: Εμφάνιση ως
73
+ edit: Επεξεργασία
74
+ edit_sql: Επεξεργασία SQL
75
+ edit_markdown: Επεξεργασία Markdown
76
+ emails: Emails
77
+ ends_with: Τελειώνει με
78
+ equal_to: Ίσο με
79
+ every_day_at_hh_mm: κάθε μέρα στις HH:mm PM...
80
+ excludes: εξαιρείται
81
+ field_is_not_a_number: '%{field} δεν είναι αριθμός'
82
+ field_is_required: '%{field} απαιτείται'
83
+ field_list_cant_be_empty: "%{field} λίστα δεν μπορεί να είναι άδεια"
84
+ field_must_be_exactly_in_length: '%{field} πρέπει να είναι ακριβώς %{length} σε μήκος'
85
+ field_must_be_less_in_length: '%{field} πρέπει να είναι μικρότερο από %{length} σε μήκος'
86
+ field_must_be_more_in_length: '%{field} πρέπει να είναι μεγαλύτερο από %{length} σε μήκος'
87
+ field_name: Όνομα πεδίου
88
+ field_value_does_not_match_pattern: '%{field} η τιμή δεν ταιριάζει με %{pattern}'
89
+ file: Αρχείο
90
+ filter: Φίλτρο
91
+ filters: Φίλτρα
92
+ form: Φόρμα
93
+ form_has_been_saved: Η φόρμα έχει αποθηκευτεί!
94
+ form_has_been_submitted_successfully: Η φόρμα υποβλήθηκε επιτυχώς!
95
+ form_name: Όνομα φόρμας
96
+ forms: Φόρμες
97
+ funnel: Funnel
98
+ greater_or_equal: Μεγαλύτερο ή ίσο
99
+ greater_than: Μεγαλύτερο από
100
+ greater_than_or_equal_to: Μεγαλύτερο ή ίσο με
101
+ group_name: Όνομα ομάδας
102
+ has_been_created: έχει δημιουργηθεί
103
+ has_been_removed_succesfully: έχει αφαιρεθεί επιτυχώς
104
+ has_been_updated: έχει ενημερωθεί
105
+ hello_admin: Γεια σου Διαχειριστή 👋
106
+ hidden: Κρυφό
107
+ image: Εικόνα
108
+ includes: Περιλαμβάνει
109
+ input_type: Τύπος εισόδου
110
+ integer: Ακέραιος αριθμός
111
+ interval: Interval
112
+ is: Είναι
113
+ is_not: Δεν είναι
114
+ items_have_been_removed: τα στοιχεία έχουν αφαιρεθεί
115
+ items_will_be_removed: '%{count} τα στοιχεία θα αφαιρεθούν'
116
+ json: JSON
117
+ label: Νόμισμα
118
+ less_or_equal: Λιγότερο ή ίσο
119
+ less_than: Λιγότερο από
120
+ less_than_or_equal_to: Λιγότερο ή ίσο με
121
+ line_chart: Γραμμικό γράφημα
122
+ link_name: Όνομα συνδέσμου
123
+ links: Σύνδεσμοι
124
+ load_initial_data: Φόρτωση αρχικών δεδομένων
125
+ loading: Φόρτωση...
126
+ looks_like_you_are_new_here: Φαίνεται ότι είστε νέος εδώ 🙃
127
+ markdown: Markdown
128
+ method: Μέθοδος
129
+ method_call: Κλήση μεθόδου
130
+ multiple: Πολλαπλό
131
+ name: Όνομα
132
+ new_alert: Νέα ειδοποίηση
133
+ new_dashboard: Νέο ταμπλό
134
+ new_form: Νέα φόρμα
135
+ new_query: Νέο ερώτημα
136
+ no_data: Δεν υπάρχουν δεδομένα
137
+ not_found: Δεν βρέθηκε
138
+ number: Αριθμός
139
+ ok: ΟΚ
140
+ options_separated_with_new_line_or_comma: Επιλογές χωρισμένες με νέα γραμμή ή κόμμα
141
+ or: Ή
142
+ other_than: Άλλο εκτός από
143
+ param_name: Όνομα παραμέτρου
144
+ password: Κωδικός
145
+ path: Διαδρομή
146
+ percent: Ποσοστό
147
+ pie_chart: Διάγραμμα πίτας
148
+ queries: Ερωτήματα
149
+ query: Ερώτημα
150
+ query_has_been_saved: Το ερώτημα έχει αποθηκευτεί!
151
+ query_name: Όνομα ερωτήματος
152
+ query_not_selected: Το ερώτημα δεν έχει επιλεγεί
153
+ query_revisions: Αναθεωρήσεις ερωτημάτων
154
+ read_only: Μόνο για ανάγνωση
155
+ read_write: Ανάγνωση-Εγγραφή
156
+ reference: Παραπομπή
157
+ reference_resource: Πόρος αναφοράς
158
+ remove: Αφαίρεση
159
+ reports: Αναφορές
160
+ request_param: Παράμετρος αιτήματος
161
+ required: Απαιτούμενο
162
+ resource_filters: '%{resource} Φίλτρα'
163
+ resource_settings: '%{resource} Ρυθμίσεις'
164
+ resources: Πόροι
165
+ resubmit: Επαναϋποβολή
166
+ revert: Αναστρέψτε το
167
+ revision_has_been_applied: Εφαρμόστηκε η αναθεώρηση
168
+ revisions: Αναθεωρήσεις
169
+ richtext: Πλούσιο κείμενο
170
+ row_chart: Διάγραμμα γραμμής
171
+ save: Αποθήκευση
172
+ save_and_create_new: Αποθήκευση και δημιουργία νέου
173
+ save_as_new: Αποθήκευση ως νέο
174
+ save_dashboard: Αποθήκευση ταμπλό
175
+ save_form: Αποθήκευση φόρμας
176
+ save_query: Αποθήκευση ερωτήματος
177
+ scopes: Πεδία εφαρμογής
178
+ search: Αναζήτηση
179
+ search_placeholder: Αναζήτηση...
180
+ search_query: Ερώτημα αναζήτησης
181
+ select: Επιλογή
182
+ select_alert_tags: Επιλέξτε ετικέτες ειδοποίησης
183
+ select_dashboard: Επιλέξτε ταμπλό
184
+ select_dashboard_tags: Επιλέξτε ετικέτες ταμπλό
185
+ select_form: Επιλέξτε φόρμα
186
+ select_form_tags: Επιλέξτε ετικέτες dashform
187
+ select_options: Επιλέξτε επιλογές
188
+ select_placeholder: Επιλογή...
189
+ select_query: Επιλέξτε ερώτημα
190
+ select_query_tags: Επιλέξτε ετικέτες ερωτήματος
191
+ select_resource_placeholder: Επιλέξτε πόρο...
192
+ selected_item_has_been_removed: Το επιλεγμένο στοιχείο έχει αφαιρεθεί
193
+ selected_item_will_be_removed: Το επιλεγμένο στοιχείο θα αφαιρεθεί
194
+ selected_item_will_be_removed_are_you_sure: Το επιλεγμένο στοιχείο θα αφαιρεθεί. Είστε σίγουροι;
195
+ send_empty: Να σταλεί άδειο;
196
+ send_now: Αποστολή τώρα
197
+ send_to: Αποστολή προς
198
+ set_tags: Ορισμός ετικετών
199
+ settings: Ρυθμίσεις
200
+ should_be_a_valid_json: '%{field} θα πρέπει να είναι ένα έγκυρο JSON'
201
+ should_be_error_constraint: '%{field} θα πρέπει να είναι %{error} %{constraint}'
202
+ stacked_bars: Στοιβαγμένες μπάρες
203
+ starts_with: Ξεκινάει με
204
+ submit: Υποβολή
205
+ tab_type: Τύπος καρτέλας
206
+ table: Πίνακας
207
+ tabs: Καρτέλες
208
+ tags: Ετικέτες
209
+ text: Κείμενο
210
+ textarea: Περιοχή κειμένου
211
+ timezone: Ζώνη ώρας
212
+ title: Τίτλος
213
+ type: Τύπος
214
+ unable_to_load_form_data: Αδυναμία φόρτωσης δεδομένων φόρμας
215
+ unable_to_remove_item: Αδυναμία αφαίρεσης στοιχείου
216
+ unable_to_remove_items: Αδυναμία αφαίρεσης στοιχείων
217
+ unable_to_send_email: Αδυναμία αποστολής email
218
+ unable_to_submit_form: Αδυναμία υποβολής φόρμας
219
+ unit: Μονάδα
220
+ value: Τιμή
221
+ values_axis: Άξονας τιμών
222
+ variables: Μεταβλητές
223
+ visibility: Ορατότητα
224
+ visualization: Απεικόνιση
225
+ write_only: Μόνο για εγγραφή
226
+ long_text: Μακρύ κείμενο
227
+ percentage: Ποσοστό
228
+ change: Αλλαγή
229
+ chart: Διάγραμμα
230
+ tag: Ετικέτα
231
+ link: Σύνδεσμος
232
+ color: Χρώμα
233
+ link_text: Κείμενο συνδέσμου
234
+ copied_to_the_clipboard: Αντιγραφή στο πρόχειρο
235
+ queries_can_contain_variable_via_syntax_html: "Τα ερωτήματα μπορούν να περιέχουν μεταβλητές ενσωμάτωσης χρησιμοποιώντας <code>{{variable}}</code> σύνταξη:"
236
+ syntax_is_used_for_if_and_if_not_conditions_html: "<code>{{#variable}} ... {{/variable}}</code> και <code>{{^variable}} ... {{variable}}</code> σύνταξη χρησιμοποιείται για <code>if</code> και <code>if not</code> συνθήκες αντίστοιχα:"
237
+ current_user_variables_are_always_passed_explicitly_and_can_he_used_html: "<code>{{current_user_id}}</code> και <code>{{current_user_email}}</code> μεταβλητές μεταβιβάζονται πάντα ρητά και μπορούν να χρησιμοποιηθούν για να αποφασιστεί ποια δεδομένα θα πρέπει να εμφανίζονται για ορισμένους χρήστες:"
238
+ create_new: Δημιουργία νέου
239
+ conditional: Υπό προϋποθέσεις
240
+ condition: Προϋπόθεση
241
+ field: Πεδίο
242
+ empty: Άδειο
243
+ not_empty: Δεν είναι άδειο
244
+ general: Γενικό
245
+ run: Εκτέλεση
246
+ use_default: Χρήση προεπιλογής
247
+ query_editor: Επεξεργαστής ερωτημάτων
248
+ polymorphic: Πολυμορφικό
249
+ foreign_key: Ξένο κλειδί
250
+ primary_key: Πρωτεύον κλειδί
251
+ through: Μέσω
252
+ source: Πηγή
253
+ resource: Πόρος
254
+ add_association: Προσθήκη σύνδεσης
255
+ there_are_unsaved_changes_from: "Υπάρχουν μη αποθηκευμένες αλλαγές από %{timestamp}"
256
+ clear: Καθαρισμός
257
+ restore: Επαναφορά
258
+ more: Περισσότερα
259
+ add_text: Προσθήκη κειμένου
260
+ edit_text: Επεξεργασία κειμένου
261
+ open_in_markdown_editor: Άνοιγμα σε markdown συντάκτη
262
+ activate: Ενεργοποίηση
263
+ load_existing_options_from_database: Φόρτωση υφιστάμενων επιλογών από τη βάση δεδομένων
264
+ add_database: Προσθήκη βάσης δεδομένων
265
+ audio: Ήχος
266
+ video: Βίντεο
267
+ display_column: Εμφάνιση στήλης
268
+ not_authorized_to_perform_action: Δεν είστε εξουσιοδοτημένοι να εκτελέσετε αυτή την ενέργεια.
269
+ download: Λήψη
270
+ alert: Ειδοποίηση
271
+ downloading: Γίνεται λήψη
272
+ display_id: Εμφάνιση ID
273
+ display_settings: Ρυθμίσεις εμφάνισης
274
+ sign_out: Αποσύνδεση
275
+ header: Επικεφαλίδα
276
+ user_dropdown: Αναδιπλούμενο παράθυρο χρήστη
277
+ upload: Ανέβασμα
278
+ there_is_nothing_here_yet: Δεν υπάρχει τίποτα ακόμα εδώ 🤷‍♂️
279
+ is_null: Είναι null
280
+ is_not_null: Δεν είναι null
281
+ split_tags_by: Διαχωρισμός ετικετών κατά
282
+ do_not_split: Μην χωρίζετε
283
+ semicolon: Ερωτηματικό
284
+ hyphen: Παύλα
285
+ comma: Κόμμα
286
+ slash: Κάθετος
287
+ sql: SQL
288
+ api: API
289
+ searchable_columns: Στήλες με δυνατότητα αναζήτησης
290
+ validate: Επικύρωση
291
+ error_message: Μήνυμα σφάλματος
292
+ validation_regexp: Επικύρωση RegExp
293
+ regexp: RegExp
294
+ message: Μήνυμα
295
+ should_be_a_valid_regexp: Πρέπει να είναι μία έγκυρη RegExp συμβολοσειρά
296
+ order_by: Ταξινόμηση κατά
297
+ ascending: Αύξουσα
298
+ descending: Φθίνουσα
299
+ url: URL
300
+ expand: Επέκταση
301
+ add_api: Προσθήκη API
302
+ on_collection: Κατά τη συλλογή
303
+ association: Σύνδεση
304
+ action_has_been_removed: Η ενέργεια αυτή έχει καταργηθεί
305
+ i:
306
+ locale: el
307
+ select:
308
+ placeholder: Επιλογή
309
+ noMatch: Δεν βρέθηκαν αποτελέσματα
310
+ loading: Φόρτωση
311
+ table:
312
+ noDataText: Χωρίς δεδομένα
313
+ noFilteredDataText: Χωρίς φίλτρο
314
+ confirmFilter: Επιβεβαίωση
315
+ resetFilter: Επαναφορά
316
+ clearFilter: Όλα
317
+ sumText: Σύνολο
318
+ datepicker:
319
+ selectDate: Επιλέξτε ημέρα
320
+ selectTime: Επιλέξτε ώρα
321
+ startTime: Ωρα Έναρξης
322
+ endTime: Ωρα Λήξης
323
+ clear: Καθαρισμός
324
+ ok: Εντάξει
325
+ datePanelLabel: "[mmmm] [yyyy]"
326
+ month: Μήνας
327
+ month1: Ιανουάριος
328
+ month2: Φεβρουάριος
329
+ month3: Μάρτιος
330
+ month4: Απρίλιος
331
+ month5: Μάιος
332
+ month6: Ιούνιος
333
+ month7: Ιούλιος
334
+ month8: Αύγουστος
335
+ month9: Σεπτέμβριος
336
+ month10: Οκτώβριος
337
+ month11: Νοέμβριος
338
+ month12: Δεκέμβριος
339
+ year: Έτος
340
+ weekStartDay: '1'
341
+ weeks:
342
+ sun: Κυρ
343
+ mon: Δευ
344
+ tue: Τρι
345
+ wed: Τετ
346
+ thu: Πεμ
347
+ fri: Παρ
348
+ sat: Σαβ
349
+ months:
350
+ m1: Ιαν
351
+ m2: Φεβ
352
+ m3: Μαρ
353
+ m4: Απρ
354
+ m5: Μαϊ
355
+ m6: Ιουν
356
+ m7: Ιουλ
357
+ m8: Αυγ
358
+ m9: Σεπ
359
+ m10: Οκτ
360
+ m11: Νοε
361
+ m12: Δεκ
362
+ transfer:
363
+ titles:
364
+ source: Πηγή
365
+ target: Στόχος
366
+ filterPlaceholder: Αναζήτηση
367
+ notFoundText: Δεν βρέθηκαν αποτελέσματα
368
+ modal:
369
+ okText: Εντάξει
370
+ cancelText: Ακύρωση
371
+ poptip:
372
+ okText: Εντάξει
373
+ cancelText: Ακύρωση
374
+ page:
375
+ prev: Προηγούμενη Σελίδα
376
+ next: Επόμενη Σελίδα
377
+ total: Σύνολο
378
+ item: Αντικείμενο
379
+ items: Αντικείμενα
380
+ prev5: Προηγούμενες 5 Σελίδες
381
+ next5: Επόμενες 5 Σελίδες
382
+ page: "/Σελίδα"
383
+ goto: Μετάβαση σε
384
+ p: ''
385
+ rate:
386
+ star: Αστέρι
387
+ stars: Αστέρια
388
+ tree:
389
+ emptyText: Χωρίς Δεδομένα
@@ -301,3 +301,4 @@ en:
301
301
  add_api: Add API
302
302
  on_collection: On collection
303
303
  association: Association
304
+ action_has_been_removed: This action has been removed
@@ -301,6 +301,7 @@ es:
301
301
  add_api: De API
302
302
  on_collection: En la colección
303
303
  association: Asociación
304
+ action_has_been_removed: Esta acción ha sido eliminada
304
305
  i:
305
306
  locale: es
306
307
  select:
@@ -297,6 +297,7 @@ pt:
297
297
  add_api: De API
298
298
  on_collection: Na coleção
299
299
  association: Associação
300
+ action_has_been_removed: Esta ação foi removida
300
301
  i:
301
302
  locale: pt
302
303
  select:
@@ -123,9 +123,9 @@ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Mi
123
123
  end
124
124
 
125
125
  create_table :motor_audits do |t|
126
- t.column :auditable_id, :bigint
126
+ t.column :auditable_id, :string
127
127
  t.column :auditable_type, :string
128
- t.column :associated_id, :bigint
128
+ t.column :associated_id, :string
129
129
  t.column :associated_type, :string
130
130
  t.column :user_id, :bigint
131
131
  t.column :user_type, :string
@@ -172,7 +172,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Mi
172
172
 
173
173
  model.table_name = 'motor_api_configs'
174
174
 
175
- model.create!(name: 'origin', path: '/')
175
+ model.create!(name: 'origin', url: '/', preferences: {}, credentials: {})
176
176
  end
177
177
 
178
178
  def self.down
@@ -0,0 +1,71 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
+ class MotorApiConfig < ActiveRecord::Base
3
+ self.table_name = 'motor_api_configs'
4
+
5
+ encrypts :credentials if defined?(::Motor::EncryptedConfig)
6
+
7
+ serialize :credentials, Motor::HashSerializer
8
+ serialize :preferences, Motor::HashSerializer
9
+
10
+ attribute :preferences, default: -> { HashWithIndifferentAccess.new }
11
+ attribute :credentials, default: -> { HashWithIndifferentAccess.new }
12
+ end
13
+
14
+ class MotorForm < ActiveRecord::Base
15
+ self.table_name = 'motor_forms'
16
+
17
+ serialize :preferences, Motor::HashSerializer
18
+ end
19
+
20
+ class MotorResource < ActiveRecord::Base
21
+ self.table_name = 'motor_resources'
22
+
23
+ serialize :preferences, Motor::HashSerializer
24
+ end
25
+
26
+ def up
27
+ MotorResource.all.each do |resource|
28
+ resource.preferences.fetch(:actions, []).each do |action|
29
+ next unless action[:action_type] == 'api'
30
+
31
+ api_path = action[:preferences][:api_path]
32
+ api_url = api_path[%r{\Ahttps?://[^/]+}]
33
+ api_path = api_path.delete_prefix(api_url).sub(/\A\/?/, '/') if api_url
34
+
35
+ api_config =
36
+ if api_url
37
+ MotorApiConfig.create_with(url: api_url).find_or_create_by!(name: api_url.sub(%r{\Ahttps?://}))
38
+ else
39
+ MotorApiConfig.create_with(url: '/').find_or_create_by!(name: 'origin')
40
+ end
41
+
42
+ resource_display_name = (resource[:preferences][:display_name] || resource.name).titleize.singularize
43
+
44
+ form = MotorForm.create_with(
45
+ api_config_name: api_config.name,
46
+ api_path: api_path.sub(/\{{1,2}\w+\}{1,2}/, '{{id}}'),
47
+ http_method: 'POST',
48
+ preferences: {
49
+ fields: [{
50
+ name: 'id',
51
+ display_name: resource_display_name,
52
+ default_value: '',
53
+ field_type: 'reference',
54
+ reference: { model_name: resource.name },
55
+ validators: [{ required: true }]
56
+ }]
57
+ }
58
+ ).find_or_create_by!(
59
+ name: "#{action[:display_name]} #{resource_display_name}"
60
+ )
61
+
62
+ action[:action_type] = 'form'
63
+ action[:preferences] = { form_id: form.id }
64
+ end
65
+
66
+ resource.save!
67
+ end
68
+ end
69
+
70
+ def down; end
71
+ end
@@ -15,11 +15,19 @@ module Motor
15
15
  source_root File.expand_path('templates', __dir__)
16
16
 
17
17
  def copy_migration
18
- if Motor::ApiConfig.table_exists?
19
- puts 'The latest Motor Admin features are already configured'
20
- else
18
+ has_api_actions = Motor::Resource.all.any? do |resource|
19
+ resource.preferences[:actions]&.any? { |action| action[:action_type] == 'api' }
20
+ end
21
+
22
+ unless Motor::ApiConfig.table_exists?
21
23
  migration_template 'install_api_configs.rb', 'db/migrate/install_motor_api_configs.rb'
24
+ end
25
+
26
+ migration_template 'upgrade_motor_api_actions.rb', 'db/migrate/upgrade_motor_api_actions.rb' if has_api_actions
22
27
 
28
+ if Motor::ApiConfig.table_exists? && !has_api_actions
29
+ puts 'The latest Motor Admin features are already configured'
30
+ else
23
31
  puts 'Run `rake db:migrate` to update DB schema'
24
32
  end
25
33
  end
data/lib/motor/admin.rb CHANGED
@@ -97,10 +97,14 @@ module Motor
97
97
 
98
98
  initializer 'motor.upgrade' do
99
99
  config.after_initialize do
100
+ next unless Motor.server?
101
+
100
102
  unless Motor::Query.table_exists?
101
103
  puts
102
104
  puts ' => Run `rails g motor:install && rake db:migrate` in order to create Motor Admin configuration tables'
103
105
  puts
106
+
107
+ raise
104
108
  end
105
109
 
106
110
  unless Motor::ApiConfig.table_exists?
@@ -108,9 +112,9 @@ module Motor
108
112
  puts ' => Run `rails g motor:upgrade && rake db:migrate`' \
109
113
  ' to perform data migration and enable the latest features'
110
114
  puts
115
+
116
+ raise
111
117
  end
112
- rescue ActiveRecord::NoDatabaseError
113
- nil
114
118
  end
115
119
  end
116
120
  end
@@ -4,6 +4,8 @@ module Motor
4
4
  module ApiConfigs
5
5
  METHODS = %w[get post put delete].freeze
6
6
 
7
+ DEFAULT_HEADERS = { 'Content-Type' => 'application/json' }.freeze
8
+
7
9
  InvalidHttpMethod = Class.new(StandardError)
8
10
 
9
11
  module_function
@@ -17,7 +19,7 @@ module Motor
17
19
  method.downcase.to_sym,
18
20
  api_config.url.to_s.sub(%r{/?\z}, '/') + path.delete_prefix('/'),
19
21
  params,
20
- headers.merge(api_config.headers),
22
+ DEFAULT_HEADERS.merge(headers).merge(api_config.headers),
21
23
  body&.to_json
22
24
  )
23
25
  end
data/lib/motor/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Motor
4
- VERSION = '0.2.54'
4
+ VERSION = '0.2.58'
5
5
  end
@@ -2601,9 +2601,9 @@
2601
2601
  "icons/zoom-out.svg.gz": "icons/zoom-out.svg.gz",
2602
2602
  "icons/zoom-question.svg": "icons/zoom-question.svg",
2603
2603
  "icons/zoom-question.svg.gz": "icons/zoom-question.svg.gz",
2604
- "main-14416e12b7c4f3d4ccf4.css.gz": "main-14416e12b7c4f3d4ccf4.css.gz",
2605
- "main-14416e12b7c4f3d4ccf4.js.LICENSE.txt": "main-14416e12b7c4f3d4ccf4.js.LICENSE.txt",
2606
- "main-14416e12b7c4f3d4ccf4.js.gz": "main-14416e12b7c4f3d4ccf4.js.gz",
2607
- "main.css": "main-14416e12b7c4f3d4ccf4.css",
2608
- "main.js": "main-14416e12b7c4f3d4ccf4.js"
2604
+ "main-63794e57609297e51db3.css.gz": "main-63794e57609297e51db3.css.gz",
2605
+ "main-63794e57609297e51db3.js.LICENSE.txt": "main-63794e57609297e51db3.js.LICENSE.txt",
2606
+ "main-63794e57609297e51db3.js.gz": "main-63794e57609297e51db3.js.gz",
2607
+ "main.css": "main-63794e57609297e51db3.css",
2608
+ "main.js": "main-63794e57609297e51db3.js"
2609
2609
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motor-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.54
4
+ version: 0.2.58
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Matsyburka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-11 00:00:00.000000000 Z
11
+ date: 2022-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-filter
@@ -154,6 +154,7 @@ files:
154
154
  - app/views/layouts/motor/application.html.erb
155
155
  - app/views/motor/alerts_mailer/alert_email.html.erb
156
156
  - app/views/motor/ui/show.html.erb
157
+ - config/locales/el.yml
157
158
  - config/locales/en.yml
158
159
  - config/locales/es.yml
159
160
  - config/locales/pt.yml
@@ -162,6 +163,7 @@ files:
162
163
  - lib/generators/motor/migration.rb
163
164
  - lib/generators/motor/templates/install.rb
164
165
  - lib/generators/motor/templates/install_api_configs.rb
166
+ - lib/generators/motor/templates/upgrade_motor_api_actions.rb
165
167
  - lib/generators/motor/upgrade_generator.rb
166
168
  - lib/motor-admin.rb
167
169
  - lib/motor.rb
@@ -1532,14 +1534,16 @@ files:
1532
1534
  - ui/dist/icons/zoom-money.svg.gz
1533
1535
  - ui/dist/icons/zoom-out.svg.gz
1534
1536
  - ui/dist/icons/zoom-question.svg.gz
1535
- - ui/dist/main-14416e12b7c4f3d4ccf4.css.gz
1536
- - ui/dist/main-14416e12b7c4f3d4ccf4.js.gz
1537
+ - ui/dist/main-63794e57609297e51db3.css.gz
1538
+ - ui/dist/main-63794e57609297e51db3.js.gz
1537
1539
  - ui/dist/manifest.json
1538
1540
  homepage:
1539
1541
  licenses:
1540
1542
  - MIT
1541
1543
  metadata: {}
1542
- post_install_message:
1544
+ post_install_message: "\n ==================\n Run `rails g motor:upgrade &&
1545
+ rake db:migrate`\n to perform data migration and enable the latest features'\n
1546
+ \ ==================\n "
1543
1547
  rdoc_options: []
1544
1548
  require_paths:
1545
1549
  - lib