mat_views 0.2.0 → 0.3.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.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/app/assets/images/mat_views/android-chrome-192x192.png +0 -0
  4. data/app/assets/images/mat_views/android-chrome-512x512.png +0 -0
  5. data/app/assets/images/mat_views/apple-touch-icon.png +0 -0
  6. data/app/assets/images/mat_views/favicon-16x16.png +0 -0
  7. data/app/assets/images/mat_views/favicon-32x32.png +0 -0
  8. data/app/assets/images/mat_views/favicon-48x48.png +0 -0
  9. data/app/assets/images/mat_views/favicon.ico +0 -0
  10. data/app/assets/images/mat_views/favicon.svg +18 -0
  11. data/app/assets/images/mat_views/logo.svg +18 -0
  12. data/app/assets/images/mat_views/mask-icon.svg +5 -0
  13. data/app/assets/stylesheets/mat_views/application.css +323 -12
  14. data/app/controllers/mat_views/admin/application_controller.rb +135 -0
  15. data/app/controllers/mat_views/admin/dashboard_controller.rb +32 -0
  16. data/app/controllers/mat_views/admin/mat_view_definitions_controller.rb +248 -0
  17. data/app/controllers/mat_views/admin/preferences_controller.rb +91 -0
  18. data/app/controllers/mat_views/admin/runs_controller.rb +74 -0
  19. data/app/helpers/mat_views/admin/ui_helper.rb +385 -0
  20. data/app/javascript/mat_views/application.js +8 -0
  21. data/app/javascript/mat_views/controllers/application.js +10 -0
  22. data/app/javascript/mat_views/controllers/details_controller.js +122 -0
  23. data/app/javascript/mat_views/controllers/drawer_controller.js +252 -0
  24. data/app/javascript/mat_views/controllers/filter_controller.js +90 -0
  25. data/app/javascript/mat_views/controllers/flash_controller.js +13 -0
  26. data/app/javascript/mat_views/controllers/index.js +10 -0
  27. data/app/javascript/mat_views/controllers/mv_confirm_controller.js +281 -0
  28. data/app/javascript/mat_views/controllers/submitter_controller.js +15 -0
  29. data/app/javascript/mat_views/controllers/tabs_controller.js +67 -0
  30. data/app/javascript/mat_views/controllers/timezone_controller.js +16 -0
  31. data/app/javascript/mat_views/controllers/tooltip_controller.js +328 -0
  32. data/app/javascript/mat_views/controllers/turbo_frame_lifecycle_controller.js +49 -0
  33. data/app/jobs/mat_views/application_job.rb +2 -2
  34. data/app/jobs/mat_views/create_view_job.rb +9 -8
  35. data/app/jobs/mat_views/delete_view_job.rb +8 -8
  36. data/app/jobs/mat_views/refresh_view_job.rb +8 -9
  37. data/app/models/concerns/mat_views_i18n.rb +139 -0
  38. data/app/models/mat_views/application_record.rb +1 -0
  39. data/app/models/mat_views/mat_view_definition.rb +12 -7
  40. data/app/models/mat_views/mat_view_run.rb +11 -13
  41. data/app/views/layouts/mat_views/_footer.html.erb +41 -0
  42. data/app/views/layouts/mat_views/_header.html.erb +25 -0
  43. data/app/views/layouts/mat_views/admin.html.erb +47 -0
  44. data/app/views/layouts/mat_views/turbo_frame.html.erb +3 -0
  45. data/app/views/mat_views/admin/dashboard/index.html.erb +33 -0
  46. data/app/views/mat_views/admin/mat_view_definitions/_definition_actions.html.erb +94 -0
  47. data/app/views/mat_views/admin/mat_view_definitions/_table.html.erb +48 -0
  48. data/app/views/mat_views/admin/mat_view_definitions/empty.html.erb +1 -0
  49. data/app/views/mat_views/admin/mat_view_definitions/form.html.erb +79 -0
  50. data/app/views/mat_views/admin/mat_view_definitions/index.html.erb +10 -0
  51. data/app/views/mat_views/admin/mat_view_definitions/show.html.erb +40 -0
  52. data/app/views/mat_views/admin/preferences/show.html.erb +50 -0
  53. data/app/views/mat_views/admin/runs/_table.html.erb +61 -0
  54. data/app/views/mat_views/admin/runs/index.html.erb +38 -0
  55. data/app/views/mat_views/admin/runs/show.html.erb +64 -0
  56. data/app/views/mat_views/admin/ui/_card.html.erb +15 -0
  57. data/app/views/mat_views/admin/ui/_details.html.erb +10 -0
  58. data/app/views/mat_views/admin/ui/_flash.html.erb +6 -0
  59. data/app/views/mat_views/admin/ui/_table.html.erb +8 -0
  60. data/config/importmap.rb +9 -0
  61. data/config/locales/en-AU-ocker.yml +187 -0
  62. data/config/locales/en-AU.yml +187 -0
  63. data/config/locales/en-BB.yml +187 -0
  64. data/config/locales/en-BD.yml +187 -0
  65. data/config/locales/en-BE.yml +187 -0
  66. data/config/locales/en-BORK.yml +187 -0
  67. data/config/locales/en-BS.yml +187 -0
  68. data/config/locales/en-BZ.yml +187 -0
  69. data/config/locales/en-CA.yml +187 -0
  70. data/config/locales/en-CM.yml +187 -0
  71. data/config/locales/en-CY.yml +187 -0
  72. data/config/locales/en-EG.yml +187 -0
  73. data/config/locales/en-FJ.yml +187 -0
  74. data/config/locales/en-GB.yml +187 -0
  75. data/config/locales/en-GH.yml +187 -0
  76. data/config/locales/en-GI.yml +187 -0
  77. data/config/locales/en-GM.yml +187 -0
  78. data/config/locales/en-GY.yml +187 -0
  79. data/config/locales/en-HK.yml +187 -0
  80. data/config/locales/en-IE.yml +187 -0
  81. data/config/locales/en-IN.yml +187 -0
  82. data/config/locales/en-JM.yml +187 -0
  83. data/config/locales/en-KE.yml +187 -0
  84. data/config/locales/en-LK.yml +187 -0
  85. data/config/locales/en-LOL.yml +187 -0
  86. data/config/locales/en-LR.yml +187 -0
  87. data/config/locales/en-MS.yml +187 -0
  88. data/config/locales/en-MT.yml +187 -0
  89. data/config/locales/en-MW.yml +187 -0
  90. data/config/locales/en-MY.yml +187 -0
  91. data/config/locales/en-NG.yml +187 -0
  92. data/config/locales/en-NP.yml +187 -0
  93. data/config/locales/en-NZ.yml +187 -0
  94. data/config/locales/en-PG.yml +187 -0
  95. data/config/locales/en-PH.yml +187 -0
  96. data/config/locales/en-PK.yml +187 -0
  97. data/config/locales/en-RW.yml +187 -0
  98. data/config/locales/en-SCOT.yml +187 -0
  99. data/config/locales/en-SG.yml +187 -0
  100. data/config/locales/en-SHAKESPEARE.yml +187 -0
  101. data/config/locales/en-SL.yml +187 -0
  102. data/config/locales/en-SS.yml +187 -0
  103. data/config/locales/en-TH.yml +187 -0
  104. data/config/locales/en-TT.yml +187 -0
  105. data/config/locales/en-TZ.yml +187 -0
  106. data/config/locales/en-UG.yml +187 -0
  107. data/config/locales/en-US-pirate.yml +187 -0
  108. data/config/locales/en-US.yml +187 -0
  109. data/config/locales/en-YODA.yml +187 -0
  110. data/config/locales/en-ZA.yml +187 -0
  111. data/config/locales/en-ZW.yml +187 -0
  112. data/config/locales/en.yml +187 -0
  113. data/config/routes.rb +27 -3
  114. data/lib/generators/mat_views/install/templates/create_mat_view_definitions.rb +7 -7
  115. data/lib/generators/mat_views/install/templates/create_mat_view_runs.rb +5 -5
  116. data/lib/mat_views/admin/auth_bridge.rb +93 -0
  117. data/lib/mat_views/admin/default_auth.rb +61 -0
  118. data/lib/mat_views/configuration.rb +9 -0
  119. data/lib/mat_views/engine.rb +50 -2
  120. data/lib/mat_views/helpers/ui_test_ids.rb +43 -0
  121. data/lib/mat_views/services/base_service.rb +46 -38
  122. data/lib/mat_views/services/check_matview_exists.rb +76 -0
  123. data/lib/mat_views/services/concurrent_refresh.rb +9 -6
  124. data/lib/mat_views/services/create_view.rb +15 -15
  125. data/lib/mat_views/services/delete_view.rb +8 -11
  126. data/lib/mat_views/services/regular_refresh.rb +6 -5
  127. data/lib/mat_views/services/swap_refresh.rb +11 -9
  128. data/lib/mat_views/version.rb +1 -1
  129. data/lib/mat_views.rb +10 -4
  130. data/lib/tasks/helpers.rb +13 -13
  131. data/lib/tasks/mat_views_tasks.rake +15 -15
  132. metadata +130 -5
@@ -0,0 +1,187 @@
1
+ en-GM:
2
+ activerecord:
3
+ attributes:
4
+ mat_views/mat_view_definition:
5
+ created_at: "Created at"
6
+ dependencies: "Dependencies"
7
+ name: "Name"
8
+ refresh_strategy: "Refresh strategy"
9
+ schedule_cron: "Schedule (cron)"
10
+ sql: "SQL (SELECT ...)"
11
+ unique_index_columns: "Unique index columns"
12
+ updated_at: "Updated at"
13
+ mat_views/mat_view_run:
14
+ created_at: "Created at"
15
+ details: "Details"
16
+ duration_ms: "Duration (ms)"
17
+ error: "Error"
18
+ finished_at: "Finished at"
19
+ mat_view_definition: "Definition"
20
+ meta: "Metadata"
21
+ operation: "Operation"
22
+ row_count_after: "Row count after"
23
+ row_count_before: "Row count before"
24
+ rows_before_after: "Rows (before/after)"
25
+ started_at: "Started at"
26
+ status: "Status"
27
+ updated_at: "Updated at"
28
+ enums:
29
+ mat_views/mat_view_definition:
30
+ refresh_strategy:
31
+ concurrent: "Concurrent"
32
+ regular: "Regular"
33
+ swap: "Swap"
34
+ mat_views/mat_view_run:
35
+ operation:
36
+ create: "Create"
37
+ drop: "Drop"
38
+ refresh: "Refresh"
39
+ status:
40
+ failed: "Failed"
41
+ running: "Running"
42
+ success: "Successful"
43
+ errors:
44
+ models:
45
+ mat_views/mat_view_definition:
46
+ attributes:
47
+ name:
48
+ blank: "must be provided"
49
+ invalid: "is not a valid PostgreSQL identifier"
50
+ taken: "is already taken"
51
+ sql:
52
+ blank: "must be provided"
53
+ invalid: "must begin with SELECT"
54
+ unique_index_columns:
55
+ at_least_one: "must include at least one column when using concurrent refresh strategy"
56
+ hints:
57
+ mat_views/mat_view_definition:
58
+ dependencies: "Comma-separated list of tables or views this materialised view depends on."
59
+ name: "The name of the materialised view in the database."
60
+ refresh_strategy: "Specifies how the materialised view is refreshed."
61
+ schedule_cron: "Use the standard cron format. Leave empty for no scheduling."
62
+ sql: "The SQL query must be a valid SELECT statement."
63
+ unique_index_columns: "Columns to create a unique index on. Required for concurrent refresh."
64
+ mat_views/mat_view_run:
65
+ error: "Error message if the run failed."
66
+ meta: "Additional metadata in JSON format."
67
+ operation: "Type of operation performed."
68
+ status: "The current status of the run."
69
+ models:
70
+ mat_views/mat_view_definition: "Materialised View Definition"
71
+ mat_views/mat_view_run: "Materialised View Run"
72
+ placeholders:
73
+ mat_views/mat_view_definition:
74
+ dependencies: "Enter dependencies (comma separated, optional)"
75
+ name: "Enter name"
76
+ refresh_strategy: "Select refresh strategy"
77
+ schedule_cron: "0 0 * * * for daily at midnight, leave empty for no scheduling"
78
+ sql: "Enter SQL (SELECT ...)"
79
+ unique_index_columns: "Enter unique index columns (comma separated, optional)"
80
+ mat_views/mat_view_run:
81
+ error: "Enter error message"
82
+ mat_view_definition: "Select materialised view"
83
+ meta: "Enter metadata (JSON)"
84
+ operation: "Select operation"
85
+ status: "Select status"
86
+ i18n:
87
+ name: English (Gambia)
88
+ mat_views:
89
+ actions: "Actions"
90
+ all_definitions: "All definitions"
91
+ all_operations: "All operations"
92
+ all_statuses: "All statuses"
93
+ cancel: "Cancel"
94
+ close: "Close"
95
+ close_window: "Close window"
96
+ create: "Create"
97
+ dashboard:
98
+ metrics:
99
+ title: "Metrics"
100
+ title: "Dashboard"
101
+ definition: "Definition"
102
+ definitions: "Definitions"
103
+ delete: "Delete"
104
+ details: "Details"
105
+ edit: "Edit"
106
+ edit_var: "Edit %{name}"
107
+ errors:
108
+ frame_only: "This action may only be performed within a frame. Redirected to dashboard."
109
+ prevented_saving:
110
+ one: "1 error prevented saving:"
111
+ other: "%{count} errors prevented saving:"
112
+ filter_by: "Filter by:"
113
+ footer:
114
+ copyright: "© %{year} %{company} All rights reserved."
115
+ documentation: "Documentation"
116
+ need_help: "Need guaranteed uptime and expert support?"
117
+ open_issue: "Open an Issue"
118
+ project_homepage: "Project Homepage"
119
+ support: "Professional Support →"
120
+ tagline: "Built with ❤️ by developers, for developers."
121
+ tooltip:
122
+ documentation: "Read the documentation"
123
+ gem_version: "Visit the RubyGems page"
124
+ open_issue: "Report a bug or request a feature"
125
+ project_homepage: "GitHub repository"
126
+ support: "Professional support plans"
127
+ version: "v%{version}"
128
+ header:
129
+ signed_in_as: "Signed in as %{email}"
130
+ history: "History"
131
+ loading: "Loading..."
132
+ loading_definitions: "Loading definitions..."
133
+ loading_runs: "Loading runs..."
134
+ mat_view_definition:
135
+ create_mv: "Create MV"
136
+ create_mv_tooltip: "Creates the materialised view in the database."
137
+ delete_confirm: "Delete definition %{name}? (This will not drop the MV)"
138
+ delete_tooltip: "Deletes the definition but does not drop the materialised view."
139
+ drop_mv: "Drop MV"
140
+ drop_mv_cascade: "Drop MV (Cascade)"
141
+ drop_mv_cascade_confirm: "Drop the materialised view and all dependent objects for %{name}?"
142
+ drop_mv_cascade_tooltip: "Drops the materialised view and all dependent objects. The definition remains."
143
+ drop_mv_confirm: "Drop materialised view for %{name}?"
144
+ drop_mv_tooltip: "Drops only the materialised view. The definition remains."
145
+ edit_tooltip: "Edit the materialised view definition."
146
+ materialized_view: "Materialised View"
147
+ materialized_view_exists: "Materialised view exists"
148
+ materialized_view_not_exists: "Materialised view not created yet"
149
+ new_definition: "New definition"
150
+ new_definition_tooltip: "Create a new materialised view definition."
151
+ no_definitions: "No materialised view definitions found. Create one to begin."
152
+ refresh_tooltip: "Refreshes the materialised view."
153
+ sql_summary_tooltip: "Click to expand or collapse SQL"
154
+ view_tooltip: "View materialised view definition."
155
+ mat_view_run:
156
+ error_tooltip: "Error message if the run failed."
157
+ meta_tooltip: "Additional metadata in JSON format."
158
+ no_runs: "No runs found."
159
+ no_runs_if_filtered: "No runs found for the selected filters."
160
+ view_details: "View details"
161
+ view_tooltip: "View run details"
162
+ project_author: "Codevedas Inc."
163
+ project_description: "Administrative interface for managing PostgreSQL materialised views in Rails applications."
164
+ project_tags: "rails, ruby, materialised views, admin, dashboard, ui, interface, management"
165
+ refresh: "Refresh"
166
+ refresh_contents: "Refresh contents"
167
+ reloading: "Reloading..."
168
+ reset: "Reset"
169
+ run: "Run"
170
+ runs: "Runs"
171
+ save_changes: "Save changes"
172
+ settings:
173
+ auto: "Auto"
174
+ dark: "Dark"
175
+ language: "Language"
176
+ language_hint: "Choose your interface language."
177
+ light: "Light"
178
+ theme: "Theme"
179
+ theme_hint: "Auto follows your system preference; light and dark override it."
180
+ title: "Preferences"
181
+ title: "MatViews Admin"
182
+ view_var: "View %{name}"
183
+ time:
184
+ am: "AM"
185
+ formats:
186
+ datetime12hour: "%Y-%m-%d %I:%M:%S %p"
187
+ pm: "PM"
@@ -0,0 +1,187 @@
1
+ en-GY:
2
+ activerecord:
3
+ attributes:
4
+ mat_views/mat_view_definition:
5
+ created_at: "Created at"
6
+ dependencies: "Dependencies"
7
+ name: "Name"
8
+ refresh_strategy: "Refresh strategy"
9
+ schedule_cron: "Schedule (cron)"
10
+ sql: "SQL (SELECT ...)"
11
+ unique_index_columns: "Unique index columns"
12
+ updated_at: "Updated at"
13
+ mat_views/mat_view_run:
14
+ created_at: "Created at"
15
+ details: "Details"
16
+ duration_ms: "Duration (ms)"
17
+ error: "Error"
18
+ finished_at: "Finished at"
19
+ mat_view_definition: "Definition"
20
+ meta: "Metadata"
21
+ operation: "Operation"
22
+ row_count_after: "Row count after"
23
+ row_count_before: "Row count before"
24
+ rows_before_after: "Rows (before/after)"
25
+ started_at: "Started at"
26
+ status: "Status"
27
+ updated_at: "Updated at"
28
+ enums:
29
+ mat_views/mat_view_definition:
30
+ refresh_strategy:
31
+ concurrent: "Concurrent"
32
+ regular: "Regular"
33
+ swap: "Swap"
34
+ mat_views/mat_view_run:
35
+ operation:
36
+ create: "Create"
37
+ drop: "Drop"
38
+ refresh: "Refresh"
39
+ status:
40
+ failed: "Failed"
41
+ running: "Running"
42
+ success: "Successful"
43
+ errors:
44
+ models:
45
+ mat_views/mat_view_definition:
46
+ attributes:
47
+ name:
48
+ blank: "must be provided"
49
+ invalid: "is not a valid PostgreSQL identifier"
50
+ taken: "is already taken"
51
+ sql:
52
+ blank: "must be provided"
53
+ invalid: "must begin with SELECT"
54
+ unique_index_columns:
55
+ at_least_one: "must include at least one column when using concurrent refresh strategy"
56
+ hints:
57
+ mat_views/mat_view_definition:
58
+ dependencies: "Comma-separated list of tables or views this materialised view depends on."
59
+ name: "The name of the materialised view in the database."
60
+ refresh_strategy: "Specifies how the materialised view is refreshed."
61
+ schedule_cron: "Use the standard cron format. Leave empty for no scheduling."
62
+ sql: "The SQL query must be a valid SELECT statement."
63
+ unique_index_columns: "Columns to create a unique index on. Required for concurrent refresh."
64
+ mat_views/mat_view_run:
65
+ error: "Error message if the run failed."
66
+ meta: "Additional metadata in JSON format."
67
+ operation: "Type of operation performed."
68
+ status: "The current status of the run."
69
+ models:
70
+ mat_views/mat_view_definition: "Materialised View Definition"
71
+ mat_views/mat_view_run: "Materialised View Run"
72
+ placeholders:
73
+ mat_views/mat_view_definition:
74
+ dependencies: "Enter dependencies (comma separated, optional)"
75
+ name: "Enter name"
76
+ refresh_strategy: "Select refresh strategy"
77
+ schedule_cron: "0 0 * * * for daily at midnight, leave empty for no scheduling"
78
+ sql: "Enter SQL (SELECT ...)"
79
+ unique_index_columns: "Enter unique index columns (comma separated, optional)"
80
+ mat_views/mat_view_run:
81
+ error: "Enter error message"
82
+ mat_view_definition: "Select materialised view"
83
+ meta: "Enter metadata (JSON)"
84
+ operation: "Select operation"
85
+ status: "Select status"
86
+ i18n:
87
+ name: English (Guyana)
88
+ mat_views:
89
+ actions: "Actions"
90
+ all_definitions: "All definitions"
91
+ all_operations: "All operations"
92
+ all_statuses: "All statuses"
93
+ cancel: "Cancel"
94
+ close: "Close"
95
+ close_window: "Close window"
96
+ create: "Create"
97
+ dashboard:
98
+ metrics:
99
+ title: "Metrics"
100
+ title: "Dashboard"
101
+ definition: "Definition"
102
+ definitions: "Definitions"
103
+ delete: "Delete"
104
+ details: "Details"
105
+ edit: "Edit"
106
+ edit_var: "Edit %{name}"
107
+ errors:
108
+ frame_only: "This action may only be performed within a frame. Redirected to dashboard."
109
+ prevented_saving:
110
+ one: "1 error prevented saving:"
111
+ other: "%{count} errors prevented saving:"
112
+ filter_by: "Filter by:"
113
+ footer:
114
+ copyright: "© %{year} %{company} All rights reserved."
115
+ documentation: "Documentation"
116
+ need_help: "Need guaranteed uptime and expert support?"
117
+ open_issue: "Open an Issue"
118
+ project_homepage: "Project Homepage"
119
+ support: "Professional Support →"
120
+ tagline: "Built with ❤️ by developers, for developers."
121
+ tooltip:
122
+ documentation: "Read the documentation"
123
+ gem_version: "Visit the RubyGems page"
124
+ open_issue: "Report a bug or request a feature"
125
+ project_homepage: "GitHub repository"
126
+ support: "Professional support plans"
127
+ version: "v%{version}"
128
+ header:
129
+ signed_in_as: "Signed in as %{email}"
130
+ history: "History"
131
+ loading: "Loading..."
132
+ loading_definitions: "Loading definitions..."
133
+ loading_runs: "Loading runs..."
134
+ mat_view_definition:
135
+ create_mv: "Create MV"
136
+ create_mv_tooltip: "Creates the materialised view in the database."
137
+ delete_confirm: "Delete definition %{name}? (This will not drop the MV)"
138
+ delete_tooltip: "Deletes the definition but does not drop the materialised view."
139
+ drop_mv: "Drop MV"
140
+ drop_mv_cascade: "Drop MV (Cascade)"
141
+ drop_mv_cascade_confirm: "Drop the materialised view and all dependent objects for %{name}?"
142
+ drop_mv_cascade_tooltip: "Drops the materialised view and all dependent objects. The definition remains."
143
+ drop_mv_confirm: "Drop materialised view for %{name}?"
144
+ drop_mv_tooltip: "Drops only the materialised view. The definition remains."
145
+ edit_tooltip: "Edit the materialised view definition."
146
+ materialized_view: "Materialised View"
147
+ materialized_view_exists: "Materialised view exists"
148
+ materialized_view_not_exists: "Materialised view not created yet"
149
+ new_definition: "New definition"
150
+ new_definition_tooltip: "Create a new materialised view definition."
151
+ no_definitions: "No materialised view definitions found. Create one to begin."
152
+ refresh_tooltip: "Refreshes the materialised view."
153
+ sql_summary_tooltip: "Click to expand or collapse SQL"
154
+ view_tooltip: "View materialised view definition."
155
+ mat_view_run:
156
+ error_tooltip: "Error message if the run failed."
157
+ meta_tooltip: "Additional metadata in JSON format."
158
+ no_runs: "No runs found."
159
+ no_runs_if_filtered: "No runs found for the selected filters."
160
+ view_details: "View details"
161
+ view_tooltip: "View run details"
162
+ project_author: "Codevedas Inc."
163
+ project_description: "Administrative interface for managing PostgreSQL materialised views in Rails applications."
164
+ project_tags: "rails, ruby, materialised views, admin, dashboard, ui, interface, management"
165
+ refresh: "Refresh"
166
+ refresh_contents: "Refresh contents"
167
+ reloading: "Reloading..."
168
+ reset: "Reset"
169
+ run: "Run"
170
+ runs: "Runs"
171
+ save_changes: "Save changes"
172
+ settings:
173
+ auto: "Auto"
174
+ dark: "Dark"
175
+ language: "Language"
176
+ language_hint: "Choose your interface language."
177
+ light: "Light"
178
+ theme: "Theme"
179
+ theme_hint: "Auto follows your system preference; light and dark override it."
180
+ title: "Preferences"
181
+ title: "MatViews Admin"
182
+ view_var: "View %{name}"
183
+ time:
184
+ am: "AM"
185
+ formats:
186
+ datetime12hour: "%Y-%m-%d %I:%M:%S %p"
187
+ pm: "PM"
@@ -0,0 +1,187 @@
1
+ en-HK:
2
+ activerecord:
3
+ attributes:
4
+ mat_views/mat_view_definition:
5
+ created_at: "Created at"
6
+ dependencies: "Dependencies"
7
+ name: "Name"
8
+ refresh_strategy: "Refresh strategy"
9
+ schedule_cron: "Schedule (cron)"
10
+ sql: "SQL (SELECT ...)"
11
+ unique_index_columns: "Unique index columns"
12
+ updated_at: "Updated at"
13
+ mat_views/mat_view_run:
14
+ created_at: "Created at"
15
+ details: "Details"
16
+ duration_ms: "Duration (ms)"
17
+ error: "Error"
18
+ finished_at: "Finished at"
19
+ mat_view_definition: "Definition"
20
+ meta: "Metadata"
21
+ operation: "Operation"
22
+ row_count_after: "Row count after"
23
+ row_count_before: "Row count before"
24
+ rows_before_after: "Rows (before/after)"
25
+ started_at: "Started at"
26
+ status: "Status"
27
+ updated_at: "Updated at"
28
+ enums:
29
+ mat_views/mat_view_definition:
30
+ refresh_strategy:
31
+ concurrent: "Concurrent"
32
+ regular: "Regular"
33
+ swap: "Swap"
34
+ mat_views/mat_view_run:
35
+ operation:
36
+ create: "Create"
37
+ drop: "Drop"
38
+ refresh: "Refresh"
39
+ status:
40
+ failed: "Failed"
41
+ running: "Running"
42
+ success: "Successful"
43
+ errors:
44
+ models:
45
+ mat_views/mat_view_definition:
46
+ attributes:
47
+ name:
48
+ blank: "must be provided"
49
+ invalid: "is not a valid PostgreSQL identifier"
50
+ taken: "must be unique"
51
+ sql:
52
+ blank: "must be provided"
53
+ invalid: "must start with SELECT"
54
+ unique_index_columns:
55
+ at_least_one: "must have at least one column when using concurrent refresh strategy"
56
+ hints:
57
+ mat_views/mat_view_definition:
58
+ dependencies: "Comma-separated list of tables or views this materialised view depends on."
59
+ name: "Name of the materialised view in the database."
60
+ refresh_strategy: "Determines how the materialised view is refreshed."
61
+ schedule_cron: "Use standard cron format. Leave empty for no scheduling."
62
+ sql: "The SQL query must be a valid SELECT statement."
63
+ unique_index_columns: "Columns to create a unique index on. Required for concurrent refresh."
64
+ mat_views/mat_view_run:
65
+ error: "Error message if the run failed."
66
+ meta: "Additional metadata in JSON format."
67
+ operation: "Type of operation performed."
68
+ status: "Current status of the run."
69
+ models:
70
+ mat_views/mat_view_definition: "Materialised View Definition"
71
+ mat_views/mat_view_run: "Materialised View Run"
72
+ placeholders:
73
+ mat_views/mat_view_definition:
74
+ dependencies: "Enter dependencies (comma separated, optional)"
75
+ name: "Enter name"
76
+ refresh_strategy: "Select refresh strategy"
77
+ schedule_cron: "0 0 * * * for daily at midnight, leave empty for no scheduling"
78
+ sql: "Enter SQL (SELECT ...)"
79
+ unique_index_columns: "Enter unique index columns (comma separated, optional)"
80
+ mat_views/mat_view_run:
81
+ error: "Error message"
82
+ mat_view_definition: "Select materialised view"
83
+ meta: "Metadata (JSON)"
84
+ operation: "Select operation"
85
+ status: "Select status"
86
+ i18n:
87
+ name: English (Hong Kong)
88
+ mat_views:
89
+ actions: "Actions"
90
+ all_definitions: "All definitions"
91
+ all_operations: "All operations"
92
+ all_statuses: "All statuses"
93
+ cancel: "Cancel"
94
+ close: "Close"
95
+ close_window: "Close window"
96
+ create: "Create"
97
+ dashboard:
98
+ metrics:
99
+ title: "Metrics"
100
+ title: "Dashboard"
101
+ definition: "Definition"
102
+ definitions: "Definitions"
103
+ delete: "Delete"
104
+ details: "Details"
105
+ edit: "Edit"
106
+ edit_var: "Edit %{name}"
107
+ errors:
108
+ frame_only: "This action can only be performed in a frame, redirected to dashboard."
109
+ prevented_saving:
110
+ one: "1 error prevented saving:"
111
+ other: "%{count} errors prevented saving:"
112
+ filter_by: "Filter by:"
113
+ footer:
114
+ copyright: "© %{year} %{company} All rights reserved."
115
+ documentation: "Documentation"
116
+ need_help: "Need guaranteed uptime & expert help?"
117
+ open_issue: "Open an Issue"
118
+ project_homepage: "Project Homepage"
119
+ support: "Get Professional Support →"
120
+ tagline: "Built with ❤️ by developers, for developers."
121
+ tooltip:
122
+ documentation: "Read the documentation"
123
+ gem_version: "Click to visit the RubyGems page"
124
+ open_issue: "Report a bug or request a feature"
125
+ project_homepage: "GitHub repository"
126
+ support: "Professional support plans"
127
+ version: "v%{version}"
128
+ header:
129
+ signed_in_as: "Signed in as %{email}"
130
+ history: "History"
131
+ loading: "Loading..."
132
+ loading_definitions: "Loading definitions..."
133
+ loading_runs: "Loading runs..."
134
+ mat_view_definition:
135
+ create_mv: "Create MV"
136
+ create_mv_tooltip: "Creates the materialised view in the database."
137
+ delete_confirm: "Delete definition %{name}? (Does NOT drop MV)"
138
+ delete_tooltip: "Deletes the definition but does NOT drop the materialised view in the database."
139
+ drop_mv: "Drop MV"
140
+ drop_mv_cascade: "Drop MV (Cascade)"
141
+ drop_mv_cascade_confirm: "Drop materialised view and all dependent objects for %{name}?"
142
+ drop_mv_cascade_tooltip: "Drops the materialised view and all dependent objects in the database. Definition remains."
143
+ drop_mv_confirm: "Drop materialised view for %{name}?"
144
+ drop_mv_tooltip: "Drops the materialised view in the database. Definition remains."
145
+ edit_tooltip: "Edit materialised view definition."
146
+ materialized_view: "Materialised View"
147
+ materialized_view_exists: "Materialised view exists"
148
+ materialized_view_not_exists: "Materialised view not created yet!"
149
+ new_definition: "New definition"
150
+ new_definition_tooltip: "Create a new materialised view definition."
151
+ no_definitions: "No materialised view definitions found. Create one to get started."
152
+ refresh_tooltip: "Refreshes the materialised view in the database."
153
+ sql_summary_tooltip: "Click to expand/collapse SQL"
154
+ view_tooltip: "View materialised view definition."
155
+ mat_view_run:
156
+ error_tooltip: "Error message if the run failed."
157
+ meta_tooltip: "Additional metadata in JSON format."
158
+ no_runs: "No runs found."
159
+ no_runs_if_filtered: "No runs found for the selected filters."
160
+ view_details: "View details"
161
+ view_tooltip: "View run details."
162
+ project_author: "Codevedas Inc."
163
+ project_description: "Admin interface for managing PostgreSQL materialised views in Rails applications."
164
+ project_tags: "rails, ruby, materialised views, admin, dashboard, ui, interface, management"
165
+ refresh: "Refresh"
166
+ refresh_contents: "Refresh contents"
167
+ reloading: "Reloading..."
168
+ reset: "Reset"
169
+ run: "Run"
170
+ runs: "Runs"
171
+ save_changes: "Save changes"
172
+ settings:
173
+ auto: "Auto"
174
+ dark: "Dark"
175
+ language: "Language"
176
+ language_hint: "Choose your interface language."
177
+ light: "Light"
178
+ theme: "Theme"
179
+ theme_hint: "Auto follows your system preference, light and dark overrides it."
180
+ title: "Preferences"
181
+ title: "MatViews Admin"
182
+ view_var: "View %{name}"
183
+ time:
184
+ am: "AM"
185
+ formats:
186
+ datetime12hour: "%Y-%m-%d %I:%M:%S %p"
187
+ pm: "PM"