mat_views 0.2.0 → 0.4.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 (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +46 -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 +1037 -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 +372 -0
  17. data/app/controllers/mat_views/admin/mat_view_runs_controller.rb +185 -0
  18. data/app/controllers/mat_views/admin/preferences_controller.rb +91 -0
  19. data/app/helpers/mat_views/admin/datatable_helper.rb +249 -0
  20. data/app/helpers/mat_views/admin/localized_digit_helper.rb +70 -0
  21. data/app/helpers/mat_views/admin/ui_helper.rb +539 -0
  22. data/app/javascript/mat_views/application.js +8 -0
  23. data/app/javascript/mat_views/controllers/application.js +10 -0
  24. data/app/javascript/mat_views/controllers/body_setup_controller.js +120 -0
  25. data/app/javascript/mat_views/controllers/datatable_controller.js +351 -0
  26. data/app/javascript/mat_views/controllers/details_controller.js +200 -0
  27. data/app/javascript/mat_views/controllers/drawer_controller.js +470 -0
  28. data/app/javascript/mat_views/controllers/flash_controller.js +112 -0
  29. data/app/javascript/mat_views/controllers/index.js +10 -0
  30. data/app/javascript/mat_views/controllers/mv_confirm_controller.js +435 -0
  31. data/app/javascript/mat_views/controllers/tabs_controller.js +184 -0
  32. data/app/javascript/mat_views/controllers/tooltip_controller.js +523 -0
  33. data/app/javascript/mat_views/controllers/turbo_frame_lifecycle_controller.js +343 -0
  34. data/app/jobs/mat_views/application_job.rb +2 -2
  35. data/app/jobs/mat_views/create_view_job.rb +9 -8
  36. data/app/jobs/mat_views/delete_view_job.rb +8 -8
  37. data/app/jobs/mat_views/refresh_view_job.rb +8 -9
  38. data/app/models/concerns/mat_views_i18n.rb +139 -0
  39. data/app/models/concerns/mat_views_paginate.rb +70 -0
  40. data/app/models/concerns/mat_views_query_helper.rb +36 -0
  41. data/app/models/mat_views/application_record.rb +5 -0
  42. data/app/models/mat_views/mat_view_definition.rb +163 -7
  43. data/app/models/mat_views/mat_view_run.rb +179 -13
  44. data/app/views/layouts/mat_views/_footer.html.erb +47 -0
  45. data/app/views/layouts/mat_views/_header.html.erb +25 -0
  46. data/app/views/layouts/mat_views/admin.html.erb +47 -0
  47. data/app/views/layouts/mat_views/turbo_frame.html.erb +3 -0
  48. data/app/views/mat_views/admin/dashboard/index.html.erb +38 -0
  49. data/app/views/mat_views/admin/mat_view_definitions/_definition_actions.html.erb +94 -0
  50. data/app/views/mat_views/admin/mat_view_definitions/_dt-index-empty-row.html.erb +11 -0
  51. data/app/views/mat_views/admin/mat_view_definitions/_dt-index-row.html.erb +27 -0
  52. data/app/views/mat_views/admin/mat_view_definitions/empty.html.erb +1 -0
  53. data/app/views/mat_views/admin/mat_view_definitions/form.html.erb +79 -0
  54. data/app/views/mat_views/admin/mat_view_definitions/index.html.erb +10 -0
  55. data/app/views/mat_views/admin/mat_view_definitions/show.html.erb +40 -0
  56. data/app/views/mat_views/admin/mat_view_runs/_dt-index-empty-row.html.erb +11 -0
  57. data/app/views/mat_views/admin/mat_view_runs/_dt-index-row.html.erb +41 -0
  58. data/app/views/mat_views/admin/mat_view_runs/index.html.erb +1 -0
  59. data/app/views/mat_views/admin/mat_view_runs/show.html.erb +64 -0
  60. data/app/views/mat_views/admin/preferences/show.html.erb +49 -0
  61. data/app/views/mat_views/admin/ui/_card.html.erb +15 -0
  62. data/app/views/mat_views/admin/ui/_datatable.html.erb +34 -0
  63. data/app/views/mat_views/admin/ui/_datatable_filters.html.erb +45 -0
  64. data/app/views/mat_views/admin/ui/_datatable_tbody.html.erb +11 -0
  65. data/app/views/mat_views/admin/ui/_datatable_tfoot.html.erb +70 -0
  66. data/app/views/mat_views/admin/ui/_datatable_thead.html.erb +105 -0
  67. data/app/views/mat_views/admin/ui/_details.html.erb +10 -0
  68. data/app/views/mat_views/admin/ui/_flash.html.erb +6 -0
  69. data/app/views/mat_views/admin/ui/_table.html.erb +8 -0
  70. data/config/importmap.rb +9 -0
  71. data/config/locales/ar.yml +223 -0
  72. data/config/locales/de.yml +230 -0
  73. data/config/locales/en-AU-ocker.yml +223 -0
  74. data/config/locales/en-AU.yml +202 -0
  75. data/config/locales/en-BORK.yml +225 -0
  76. data/config/locales/en-CA.yml +223 -0
  77. data/config/locales/en-GB.yml +223 -0
  78. data/config/locales/en-LOL.yml +219 -0
  79. data/config/locales/en-SCOT.yml +223 -0
  80. data/config/locales/en-SHAKESPEARE.yml +225 -0
  81. data/config/locales/en-US-pirate.yml +222 -0
  82. data/config/locales/en-US.yml +225 -0
  83. data/config/locales/en-YODA.yml +221 -0
  84. data/config/locales/en.yml +223 -0
  85. data/config/locales/es.yml +226 -0
  86. data/config/locales/fa.yml +223 -0
  87. data/config/locales/fr-CA.yml +227 -0
  88. data/config/locales/fr.yml +227 -0
  89. data/config/locales/he.yml +218 -0
  90. data/config/locales/hi.yml +223 -0
  91. data/config/locales/it.yml +225 -0
  92. data/config/locales/ja-JP.yml +215 -0
  93. data/config/locales/pt.yml +225 -0
  94. data/config/locales/ru.yml +228 -0
  95. data/config/locales/ur.yml +225 -0
  96. data/config/locales/zh-CN.yml +214 -0
  97. data/config/locales/zh-TW.yml +214 -0
  98. data/config/routes.rb +27 -3
  99. data/lib/generators/mat_views/install/templates/create_mat_view_definitions.rb +7 -7
  100. data/lib/generators/mat_views/install/templates/create_mat_view_runs.rb +5 -5
  101. data/lib/mat_views/admin/auth_bridge.rb +93 -0
  102. data/lib/mat_views/admin/default_auth.rb +62 -0
  103. data/lib/mat_views/configuration.rb +9 -0
  104. data/lib/mat_views/engine.rb +50 -2
  105. data/lib/mat_views/helpers/ui_test_ids.rb +49 -0
  106. data/lib/mat_views/services/base_service.rb +46 -38
  107. data/lib/mat_views/services/check_matview_exists.rb +76 -0
  108. data/lib/mat_views/services/concurrent_refresh.rb +9 -6
  109. data/lib/mat_views/services/create_view.rb +15 -15
  110. data/lib/mat_views/services/delete_view.rb +8 -11
  111. data/lib/mat_views/services/regular_refresh.rb +6 -5
  112. data/lib/mat_views/services/swap_refresh.rb +11 -9
  113. data/lib/mat_views/version.rb +1 -1
  114. data/lib/mat_views.rb +10 -4
  115. data/lib/tasks/helpers.rb +13 -13
  116. data/lib/tasks/mat_views_tasks.rake +15 -15
  117. metadata +115 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7120f5d0821cb752001586381ab084a7366aeaa9616b86ef6e648be2b52d152
4
- data.tar.gz: ab541f3705c974e8272cc07db3c9612add6311cb159467e04055eb980fa648b6
3
+ metadata.gz: 974af875a1734132602a2e7399f1e59018967eda8f5bec833ba60662e7aaf5ba
4
+ data.tar.gz: fc46a66673cf33a04b0a1e0bb278b1c5a3618b6da7189065f5b1194318420252
5
5
  SHA512:
6
- metadata.gz: e3d260f3fcaf3029af874c943ae72b8786e2e86232dbc352a955ae9c4e1add587a0df88507cb86fe5463b308df1ff354b64ebfed00ebe2bcd124924984121797
7
- data.tar.gz: 235208e771305d1085eeea02f5bd762bfb91942901e2b9d7d127281d8e7d04da878fcbf5eb8df4cdec9434c1e5db243fb90b20c79d77ede4136006449cbe2df8
6
+ metadata.gz: b804e909a542003ae1f8443ff02f5e4839472ce4a174495fb7f43f5a62e43e54db6398831ad453a4d89279d3cac23c0e7f597979bfebf2b8db2db37d1e26cf03
7
+ data.tar.gz: 5d85a38e9a08c4e07ac89e1583defc047407069e5e7359be4a0b5900a28004e8de101e66ce8180d0cfae0a1c16a03918eaac365e2972c889d967397aa5f3d310
data/README.md CHANGED
@@ -65,19 +65,19 @@ defn = MatViews::MatViewDefinition.create!(
65
65
 
66
66
  ```ruby
67
67
  # Create
68
- MatViews::Services::CreateView.new(defn, force: true).run
68
+ MatViews::Services::CreateView.new(defn, force: true).call
69
69
  MatViews::CreateViewJob.perform_later(defn.id, force: true)
70
70
 
71
71
  # Refresh
72
- MatViews::Services::RegularRefresh.new(defn, row_count_strategy: :estimated).run
72
+ MatViews::Services::RegularRefresh.new(defn, row_count_strategy: :estimated).call
73
73
  MatViews::RefreshViewJob.perform_later(defn.id, row_count_strategy: :exact)
74
74
 
75
75
  # Delete
76
- MatViews::Services::DeleteView.new(defn, cascade: false, if_exists: true).run
76
+ MatViews::Services::DeleteView.new(defn, cascade: false, if_exists: true).call
77
77
  MatViews::DeleteViewJob.perform_later(defn.id, cascade: true)
78
78
  ```
79
79
 
80
- **Uniform response**: `status`, `payload`, `meta`, `success?` / `error?`.
80
+ **Uniform response**: `status`, `meta`, `success?` / `error?`.
81
81
 
82
82
  ---
83
83
 
@@ -113,6 +113,48 @@ bundle exec rake mat_views:delete_all\[cascade,row_count_strategy,--yes]
113
113
 
114
114
  ---
115
115
 
116
+ ## Rails version matrix
117
+
118
+ Use the pinned Gemfiles in `gemfiles/` to exercise the engine against specific Rails releases:
119
+
120
+ ```bash
121
+ # Rails 7.2.x
122
+ bundle install --gemfile gemfiles/rails_7_2.gemfile
123
+ BUNDLE_GEMFILE=gemfiles/rails_7_2.gemfile bundle exec bin/rspec-unit
124
+ BUNDLE_GEMFILE=gemfiles/rails_7_2.gemfile bundle exec bin/rspec-e2e
125
+
126
+ # Rails 8.0.x
127
+ bundle install --gemfile gemfiles/rails_8_0.gemfile
128
+ BUNDLE_GEMFILE=gemfiles/rails_8_0.gemfile bundle exec bin/rspec-unit
129
+ BUNDLE_GEMFILE=gemfiles/rails_8_0.gemfile bundle exec bin/rspec-e2e
130
+
131
+ # Rails main branch
132
+ bundle install --gemfile gemfiles/rails_edge.gemfile
133
+ BUNDLE_GEMFILE=gemfiles/rails_edge.gemfile bundle exec bin/rspec-unit
134
+ BUNDLE_GEMFILE=gemfiles/rails_edge.gemfile bundle exec bin/rspec-e2e
135
+ ```
136
+
137
+ The CI workflow consumes the same Gemfiles to run the unit suite across the compatibility matrix.
138
+
139
+ ---
140
+
141
+ ## Screenshots
142
+
143
+ The end-to-end tests generate screenshots for visual verification. They are uploaded as artifacts in the GitHub Actions workflow runs.
144
+ After creating a pull request, apply the `e2e-screenshots` label to trigger screenshot generation.
145
+
146
+ You can trigger screenshot in your local setup as well:
147
+
148
+ ```bash
149
+ # 'en' is the desired locale
150
+ SCREENSHOT_LANG=en bin/rspec-app-screenshot
151
+
152
+ # OR
153
+
154
+ # runs for all configured locales (this may take long time)
155
+ bin/rspec-app-screenshots
156
+ ```
157
+
116
158
  ## Docs & policies
117
159
 
118
160
  - Root README: [../README.md](../README.md)
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="128" height="128" viewBox="0 0 256 256" fill="none"
3
+ xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
4
+ <title id="title">MatViews Monogram</title>
5
+ <desc id="desc">Stylized M and V mark for Materialized Views. Transparent background.</desc>
6
+
7
+ <!-- subtle outer ring -->
8
+ <circle cx="128" cy="128" r="110" stroke="#0F172A" stroke-opacity="0.18" stroke-width="10" fill="none"/>
9
+
10
+ <!-- V (accent) -->
11
+ <path d="M64 64 L128 192 L192 64" stroke="#10B981" stroke-width="20" stroke-linecap="round" stroke-linejoin="round"/>
12
+
13
+ <!-- M (primary) -->
14
+ <path d="M48 176 L92 80 L128 144 L164 80 L208 176" stroke="#0F172A" stroke-width="20" stroke-linecap="round" stroke-linejoin="round"/>
15
+
16
+ <!-- optional tiny dot to balance negative space -->
17
+ <circle cx="128" cy="208" r="4" fill="#10B981" fill-opacity="0.9"/>
18
+ </svg>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="128" height="128" viewBox="0 0 256 256" fill="none"
3
+ xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
4
+ <title id="title">MatViews Monogram</title>
5
+ <desc id="desc">Stylized M and V mark for Materialized Views. Transparent background.</desc>
6
+
7
+ <!-- subtle outer ring -->
8
+ <circle cx="128" cy="128" r="110" stroke="#0F172A" stroke-opacity="0.18" stroke-width="10" fill="none"/>
9
+
10
+ <!-- V (accent) -->
11
+ <path d="M64 64 L128 192 L192 64" stroke="#10B981" stroke-width="20" stroke-linecap="round" stroke-linejoin="round"/>
12
+
13
+ <!-- M (primary) -->
14
+ <path d="M48 176 L92 80 L128 144 L164 80 L208 176" stroke="#0F172A" stroke-width="20" stroke-linecap="round" stroke-linejoin="round"/>
15
+
16
+ <!-- optional tiny dot to balance negative space -->
17
+ <circle cx="128" cy="208" r="4" fill="#10B981" fill-opacity="0.9"/>
18
+ </svg>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="none">
3
+ <path d="M64 64 L128 192 L192 64" stroke="currentColor" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
4
+ <path d="M48 176 L92 80 L128 144 L164 80 L208 176" stroke="currentColor" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
5
+ </svg>