├── .gitattributes ├── .gitignore ├── .ruby-version ├── Brewfile ├── Brewfile.lock.json ├── Gemfile ├── Gemfile.lock ├── Procfile.dev ├── README.md ├── Rakefile ├── app ├── assets │ ├── builds │ │ └── .keep │ ├── images │ │ ├── .keep │ │ ├── favicon.ico │ │ └── mark.svg │ └── stylesheets │ │ └── application.tailwind.css ├── channels │ └── application_cable │ │ ├── channel.rb │ │ └── connection.rb ├── components │ ├── application_component.rb │ ├── bootstrap │ │ └── icon_component.rb │ ├── button_component.rb │ ├── menu_component.rb │ ├── menu_item_component.rb │ └── popover_component.rb ├── controllers │ ├── application_controller.rb │ ├── books_controller.rb │ ├── concerns │ │ └── .keep │ └── views_controller.rb ├── helpers │ ├── application_helper.rb │ ├── books_helper.rb │ ├── filter_helper.rb │ └── search_helper.rb ├── javascript │ ├── application.js │ ├── channels │ │ ├── consumer.js │ │ └── index.js │ ├── config │ │ ├── debounced.js │ │ ├── index.js │ │ └── turbo.js │ └── controllers │ │ ├── application.js │ │ ├── application_controller.js │ │ ├── checkbox_set_controller.js │ │ ├── clearable_controller.js │ │ ├── column_controller.js │ │ ├── details_popover_controller.js │ │ ├── details_set_controller.js │ │ ├── element_controller.js │ │ ├── filter_by_controller.js │ │ ├── groupable_controller.js │ │ ├── index.js │ │ ├── pagy_controller.js │ │ └── sort_by_controller.js ├── jobs │ └── application_job.rb ├── models │ ├── application_record.rb │ ├── author.rb │ ├── book.rb │ ├── book_author.rb │ ├── concerns │ │ └── .keep │ └── view.rb └── views │ ├── books │ ├── _form.html.erb │ ├── form │ │ ├── _batch.html.erb │ │ ├── _fields.html.erb │ │ ├── _filter.html.erb │ │ ├── _sort.html.erb │ │ ├── section.rb │ │ └── section │ │ │ └── heading.rb │ ├── index.rb │ ├── tab.rb │ ├── tab_popover.rb │ └── tabs.rb │ ├── filter │ ├── _attribute_fields.html.erb │ ├── _condition_fields.html.erb │ ├── _grouping_fields.html.erb │ └── _value_fields.html.erb │ ├── layout.rb │ ├── table.rb │ └── table │ ├── column.rb │ ├── column_edit.rb │ ├── column_summary.rb │ ├── footer.rb │ ├── group_header.rb │ ├── head.rb │ ├── header.rb │ └── row.rb ├── bin ├── bundle ├── dev ├── rails ├── rake └── setup ├── config.ru ├── config ├── application.rb ├── boot.rb ├── cable.yml ├── credentials.yml.enc ├── database.yml ├── environment.rb ├── environments │ ├── development.rb │ ├── production.rb │ └── test.rb ├── initializers │ ├── assets.rb │ ├── content_security_policy.rb │ ├── filter_parameter_logging.rb │ ├── inflections.rb │ ├── pagy.rb │ ├── permissions_policy.rb │ └── ransack.rb ├── locales │ └── en.yml ├── puma.rb ├── routes.rb └── storage.yml ├── db ├── books.csv ├── migrate │ ├── 20220917065513_create_authors.rb │ ├── 20220917071354_create_books.rb │ ├── 20220917071558_create_book_authors.rb │ └── 20220918220202_create_views.rb ├── schema.rb └── seeds.rb ├── esbuild.config.js ├── lib ├── assets │ └── .keep └── tasks │ └── .keep ├── log └── .keep ├── package.json ├── public ├── 404.html ├── 422.html ├── 500.html ├── apple-touch-icon-precomposed.png ├── apple-touch-icon.png ├── favicon.ico └── robots.txt ├── screenshots ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png └── 9.png ├── storage └── .keep ├── tailwind.config.js ├── tmp ├── .keep ├── pids │ └── .keep └── storage │ └── .keep ├── vendor └── .keep └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | # See https://git-scm.com/docs/gitattributes for more about git attribute files. 2 | 3 | # Mark the database schema as having been generated. 4 | db/schema.rb linguist-generated 5 | 6 | # Mark any vendored files as having been vendored. 7 | vendor/* linguist-vendored 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files. 2 | # 3 | # If you find yourself ignoring temporary files generated by your text editor 4 | # or operating system, you probably want to add a global ignore instead: 5 | # git config --global core.excludesfile '~/.gitignore_global' 6 | 7 | # Ignore bundler config. 8 | /.bundle 9 | 10 | # Ignore all logfiles and tempfiles. 11 | /log/* 12 | /tmp/* 13 | !/log/.keep 14 | !/tmp/.keep 15 | 16 | # Ignore pidfiles, but keep the directory. 17 | /tmp/pids/* 18 | !/tmp/pids/ 19 | !/tmp/pids/.keep 20 | 21 | # Ignore uploaded files in development. 22 | /storage/* 23 | !/storage/.keep 24 | /tmp/storage/* 25 | !/tmp/storage/ 26 | !/tmp/storage/.keep 27 | 28 | /public/assets 29 | 30 | # Ignore master key for decrypting credentials and more. 31 | /config/master.key 32 | 33 | /app/assets/builds/* 34 | !/app/assets/builds/.keep 35 | 36 | /node_modules 37 | .DS_Store 38 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.1.2 2 | -------------------------------------------------------------------------------- /Brewfile: -------------------------------------------------------------------------------- 1 | brew "postgresql" 2 | -------------------------------------------------------------------------------- /Brewfile.lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "entries": { 3 | "brew": { 4 | "postgres": { 5 | }, 6 | "postgresql": { 7 | "version": "14.5_3", 8 | "bottle": { 9 | "rebuild": 0, 10 | "root_url": "https://ghcr.io/v2/homebrew/core", 11 | "files": { 12 | "arm64_monterey": { 13 | "cellar": "/opt/homebrew/Cellar", 14 | "url": "https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:75506d966a456a059f493b89cc7f94263240a9545c2315014e7307664cc3c235", 15 | "sha256": "75506d966a456a059f493b89cc7f94263240a9545c2315014e7307664cc3c235" 16 | }, 17 | "arm64_big_sur": { 18 | "cellar": "/opt/homebrew/Cellar", 19 | "url": "https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:d1781239cf4367b89ecddecd4e7ae435a4ea05515a03efc92d7f5c145154937f", 20 | "sha256": "d1781239cf4367b89ecddecd4e7ae435a4ea05515a03efc92d7f5c145154937f" 21 | }, 22 | "monterey": { 23 | "cellar": "/usr/local/Cellar", 24 | "url": "https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:4979666427e82ca7e83ec171ed1eec689e3a1f1403fe6f48a3ade861278acc1a", 25 | "sha256": "4979666427e82ca7e83ec171ed1eec689e3a1f1403fe6f48a3ade861278acc1a" 26 | }, 27 | "big_sur": { 28 | "cellar": "/usr/local/Cellar", 29 | "url": "https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:055199badf88a0bc7b203d8b86d236feeebed6dcf6660885b7bba2748d595c9b", 30 | "sha256": "055199badf88a0bc7b203d8b86d236feeebed6dcf6660885b7bba2748d595c9b" 31 | }, 32 | "catalina": { 33 | "cellar": "/usr/local/Cellar", 34 | "url": "https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:1f34877b0fe1648b7a1f8493fbd151c7479f9ce237d8170ac6baee77f4083d06", 35 | "sha256": "1f34877b0fe1648b7a1f8493fbd151c7479f9ce237d8170ac6baee77f4083d06" 36 | }, 37 | "x86_64_linux": { 38 | "cellar": "/home/linuxbrew/.linuxbrew/Cellar", 39 | "url": "https://ghcr.io/v2/homebrew/core/postgresql/14/blobs/sha256:82aa0f9ed91993af10830d8b32e5bded5f9d2d6b743c69b8e4a58d02731546e9", 40 | "sha256": "82aa0f9ed91993af10830d8b32e5bded5f9d2d6b743c69b8e4a58d02731546e9" 41 | } 42 | } 43 | } 44 | } 45 | } 46 | }, 47 | "system": { 48 | "macos": { 49 | "monterey": { 50 | "HOMEBREW_VERSION": "3.6.1", 51 | "HOMEBREW_PREFIX": "/opt/homebrew", 52 | "Homebrew/homebrew-core": "8819d6244d3f5f2827b7cb8df93b51e1be4a3f22", 53 | "CLT": "12.5.0.22.9", 54 | "Xcode": "12.5.1", 55 | "macOS": "12.6" 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | git_source(:github) { |repo| "https://github.com/#{repo}.git" } 3 | 4 | ruby "3.1.2" 5 | 6 | # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" 7 | gem "rails", "~> 7.0.4" 8 | 9 | # The modern asset pipeline for Rails [https://github.com/rails/propshaft] 10 | gem "propshaft" 11 | 12 | # Use postgresql as the database for Active Record 13 | gem "pg", "~> 1.1" 14 | 15 | # Use the Puma web server [https://github.com/puma/puma] 16 | gem "puma", "~> 5.0" 17 | 18 | # Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails] 19 | gem "jsbundling-rails" 20 | 21 | # Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev] 22 | gem "turbo-rails", "~> 1.3.0" 23 | 24 | # Power-pack for Turbo-Streams 25 | gem "turbo_power", "~> 0.1.2" 26 | 27 | # Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev] 28 | gem "stimulus-rails" 29 | 30 | # Bundle and process CSS [https://github.com/rails/cssbundling-rails] 31 | gem "cssbundling-rails" 32 | 33 | # Use Redis adapter to run Action Cable in production 34 | gem "redis", "~> 4.0" 35 | 36 | # Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis] 37 | # gem "kredis" 38 | 39 | # Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword] 40 | # gem "bcrypt", "~> 3.1.7" 41 | 42 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem 43 | gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ] 44 | 45 | # Reduces boot times through caching; required in config/boot.rb 46 | gem "bootsnap", require: false 47 | 48 | # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images] 49 | # gem "image_processing", "~> 1.2" 50 | 51 | # Object-based searching. 52 | gem "ransack", "~> 3.2" 53 | 54 | # The Best Pagination Ruby Gem 55 | gem "pagy", "~> 5.10" 56 | 57 | # A framework for building view components with a Ruby DSL. 58 | gem "phlex-rails" 59 | 60 | group :development, :test do 61 | # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem 62 | gem "debug", platforms: %i[ mri mingw x64_mingw ] 63 | end 64 | 65 | group :development do 66 | # Use console on exceptions pages [https://github.com/rails/web-console] 67 | gem "web-console" 68 | 69 | # Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler] 70 | # gem "rack-mini-profiler" 71 | 72 | # Speed up commands on slow machines / big apps [https://github.com/rails/spring] 73 | # gem "spring" 74 | end 75 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | actioncable (7.0.4) 5 | actionpack (= 7.0.4) 6 | activesupport (= 7.0.4) 7 | nio4r (~> 2.0) 8 | websocket-driver (>= 0.6.1) 9 | actionmailbox (7.0.4) 10 | actionpack (= 7.0.4) 11 | activejob (= 7.0.4) 12 | activerecord (= 7.0.4) 13 | activestorage (= 7.0.4) 14 | activesupport (= 7.0.4) 15 | mail (>= 2.7.1) 16 | net-imap 17 | net-pop 18 | net-smtp 19 | actionmailer (7.0.4) 20 | actionpack (= 7.0.4) 21 | actionview (= 7.0.4) 22 | activejob (= 7.0.4) 23 | activesupport (= 7.0.4) 24 | mail (~> 2.5, >= 2.5.4) 25 | net-imap 26 | net-pop 27 | net-smtp 28 | rails-dom-testing (~> 2.0) 29 | actionpack (7.0.4) 30 | actionview (= 7.0.4) 31 | activesupport (= 7.0.4) 32 | rack (~> 2.0, >= 2.2.0) 33 | rack-test (>= 0.6.3) 34 | rails-dom-testing (~> 2.0) 35 | rails-html-sanitizer (~> 1.0, >= 1.2.0) 36 | actiontext (7.0.4) 37 | actionpack (= 7.0.4) 38 | activerecord (= 7.0.4) 39 | activestorage (= 7.0.4) 40 | activesupport (= 7.0.4) 41 | globalid (>= 0.6.0) 42 | nokogiri (>= 1.8.5) 43 | actionview (7.0.4) 44 | activesupport (= 7.0.4) 45 | builder (~> 3.1) 46 | erubi (~> 1.4) 47 | rails-dom-testing (~> 2.0) 48 | rails-html-sanitizer (~> 1.1, >= 1.2.0) 49 | activejob (7.0.4) 50 | activesupport (= 7.0.4) 51 | globalid (>= 0.3.6) 52 | activemodel (7.0.4) 53 | activesupport (= 7.0.4) 54 | activerecord (7.0.4) 55 | activemodel (= 7.0.4) 56 | activesupport (= 7.0.4) 57 | activestorage (7.0.4) 58 | actionpack (= 7.0.4) 59 | activejob (= 7.0.4) 60 | activerecord (= 7.0.4) 61 | activesupport (= 7.0.4) 62 | marcel (~> 1.0) 63 | mini_mime (>= 1.1.0) 64 | activesupport (7.0.4) 65 | concurrent-ruby (~> 1.0, >= 1.0.2) 66 | i18n (>= 1.6, < 2) 67 | minitest (>= 5.1) 68 | tzinfo (~> 2.0) 69 | bindex (0.8.1) 70 | bootsnap (1.15.0) 71 | msgpack (~> 1.2) 72 | builder (3.2.4) 73 | concurrent-ruby (1.1.10) 74 | crass (1.0.6) 75 | cssbundling-rails (1.1.1) 76 | railties (>= 6.0.0) 77 | debug (1.6.3) 78 | irb (>= 1.3.6) 79 | reline (>= 0.3.1) 80 | erubi (1.11.0) 81 | globalid (1.0.0) 82 | activesupport (>= 5.0) 83 | i18n (1.12.0) 84 | concurrent-ruby (~> 1.0) 85 | io-console (0.5.11) 86 | irb (1.5.0) 87 | reline (>= 0.3.0) 88 | jsbundling-rails (1.0.3) 89 | railties (>= 6.0.0) 90 | loofah (2.19.0) 91 | crass (~> 1.0.2) 92 | nokogiri (>= 1.5.9) 93 | mail (2.7.1) 94 | mini_mime (>= 0.1.1) 95 | marcel (1.0.2) 96 | method_source (1.0.0) 97 | mini_mime (1.1.2) 98 | minitest (5.16.3) 99 | msgpack (1.6.0) 100 | net-imap (0.3.1) 101 | net-protocol 102 | net-pop (0.1.2) 103 | net-protocol 104 | net-protocol (0.1.3) 105 | timeout 106 | net-smtp (0.3.3) 107 | net-protocol 108 | nio4r (2.5.8) 109 | nokogiri (1.13.9-arm64-darwin) 110 | racc (~> 1.4) 111 | nokogiri (1.13.9-x86_64-darwin) 112 | racc (~> 1.4) 113 | nokogiri (1.13.9-x86_64-linux) 114 | racc (~> 1.4) 115 | pagy (5.10.1) 116 | activesupport 117 | pg (1.4.5) 118 | phlex (1.0.0.rc1) 119 | zeitwerk (~> 2.6) 120 | phlex-rails (0.3.1) 121 | phlex (>= 1.0.0.rc1, < 2) 122 | rails (>= 6.1, < 8) 123 | zeitwerk (~> 2) 124 | propshaft (0.6.4) 125 | actionpack (>= 7.0.0) 126 | activesupport (>= 7.0.0) 127 | rack 128 | railties (>= 7.0.0) 129 | puma (5.6.5) 130 | nio4r (~> 2.0) 131 | racc (1.6.0) 132 | rack (2.2.4) 133 | rack-test (2.0.2) 134 | rack (>= 1.3) 135 | rails (7.0.4) 136 | actioncable (= 7.0.4) 137 | actionmailbox (= 7.0.4) 138 | actionmailer (= 7.0.4) 139 | actionpack (= 7.0.4) 140 | actiontext (= 7.0.4) 141 | actionview (= 7.0.4) 142 | activejob (= 7.0.4) 143 | activemodel (= 7.0.4) 144 | activerecord (= 7.0.4) 145 | activestorage (= 7.0.4) 146 | activesupport (= 7.0.4) 147 | bundler (>= 1.15.0) 148 | railties (= 7.0.4) 149 | rails-dom-testing (2.0.3) 150 | activesupport (>= 4.2.0) 151 | nokogiri (>= 1.6) 152 | rails-html-sanitizer (1.4.3) 153 | loofah (~> 2.3) 154 | railties (7.0.4) 155 | actionpack (= 7.0.4) 156 | activesupport (= 7.0.4) 157 | method_source 158 | rake (>= 12.2) 159 | thor (~> 1.0) 160 | zeitwerk (~> 2.5) 161 | rake (13.0.6) 162 | ransack (3.2.1) 163 | activerecord (>= 6.1.5) 164 | activesupport (>= 6.1.5) 165 | i18n 166 | redis (4.8.0) 167 | reline (0.3.1) 168 | io-console (~> 0.5) 169 | stimulus-rails (1.1.1) 170 | railties (>= 6.0.0) 171 | thor (1.2.1) 172 | timeout (0.3.0) 173 | turbo-rails (1.3.2) 174 | actionpack (>= 6.0.0) 175 | activejob (>= 6.0.0) 176 | railties (>= 6.0.0) 177 | turbo_power (0.1.6) 178 | turbo-rails (~> 1.3.0) 179 | turbo_ready 180 | turbo_ready (0.1.2) 181 | rails (>= 6.1) 182 | turbo-rails (>= 1.1) 183 | tzinfo (2.0.5) 184 | concurrent-ruby (~> 1.0) 185 | web-console (4.2.0) 186 | actionview (>= 6.0.0) 187 | activemodel (>= 6.0.0) 188 | bindex (>= 0.4.0) 189 | railties (>= 6.0.0) 190 | websocket-driver (0.7.5) 191 | websocket-extensions (>= 0.1.0) 192 | websocket-extensions (0.1.5) 193 | zeitwerk (2.6.6) 194 | 195 | PLATFORMS 196 | arm64-darwin-21 197 | x86_64-darwin-19 198 | x86_64-linux 199 | 200 | DEPENDENCIES 201 | bootsnap 202 | cssbundling-rails 203 | debug 204 | jsbundling-rails 205 | pagy (~> 5.10) 206 | pg (~> 1.1) 207 | phlex-rails 208 | propshaft 209 | puma (~> 5.0) 210 | rails (~> 7.0.4) 211 | ransack (~> 3.2) 212 | redis (~> 4.0) 213 | stimulus-rails 214 | turbo-rails (~> 1.3.0) 215 | turbo_power (~> 0.1.2) 216 | tzinfo-data 217 | web-console 218 | 219 | RUBY VERSION 220 | ruby 3.1.2p20 221 | 222 | BUNDLED WITH 223 | 2.3.7 224 | -------------------------------------------------------------------------------- /Procfile.dev: -------------------------------------------------------------------------------- 1 | web: bin/rails server -p 3000 2 | js: yarn build --watch 3 | css: yarn build:css --watch 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HotTable 2 | 3 | This application was built during the [Rails Hackathon](https://railshackathon.com) 2022. A remote hackathon for Rails developers. 4 | We had 48 hours to build a Ruby on Rails application with the theme: **[Hotwire](https://hotwired.dev) powered Rails apps**. 5 | 6 | ## Team 7 | 8 | * [Stephen Margheim](https://github.com/fractaledmind) 9 | * [Joel Drapper](https://github.com/joeldrapper) 10 | * [Marco Roth](https://github.com/marcoroth) 11 | 12 | On the Rails Hackathon site: https://railshackathon.com/teams/18 13 | 14 | 15 | ## Description 16 | 17 | This is an (minimal) [Airtable](https://airtable.com) clone. We left out any of the schema-building functionality and focused squarely on the data management functionality. Moreover, we pushed hard on using semantic HTML, so the table is an actual `
You may have mistyped the address or the page may have moved.
If you are the application owner check the logs for more information.
Maybe you tried to change something you didn't have access to.