hyper-mesh 0.6.0 → 1.0.0.lap22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +12 -4
- data/.travis.yml +25 -2
- data/DOCS.md +722 -0
- data/Gemfile +2 -8
- data/README.md +32 -264
- data/Rakefile +7 -5
- data/dciy.toml +3 -0
- data/hyper-mesh.gemspec +59 -81
- data/lib/active_record_base.rb +3 -3
- data/lib/hypermesh/version.rb +1 -1
- data/lib/opal/parse_patch.rb +1 -1
- data/lib/reactive_record/active_record/aggregations.rb +1 -1
- data/lib/reactive_record/active_record/associations.rb +1 -5
- data/lib/reactive_record/active_record/class_methods.rb +6 -23
- data/lib/reactive_record/active_record/instance_methods.rb +30 -10
- data/lib/reactive_record/active_record/public_columns_hash.rb +27 -8
- data/lib/reactive_record/active_record/reactive_record/collection.rb +1 -1
- data/lib/reactive_record/active_record/reactive_record/column_types.rb +7 -1
- data/lib/reactive_record/active_record/reactive_record/dummy_value.rb +28 -15
- data/lib/reactive_record/active_record/reactive_record/isomorphic_base.rb +23 -12
- data/lib/reactive_record/active_record/reactive_record/while_loading.rb +84 -53
- data/lib/reactive_record/engine.rb +1 -1
- data/lib/reactive_record/server_data_cache.rb +99 -44
- metadata +101 -984
- data/docs/action_cable_quickstart.md +0 -134
- data/docs/activerecord_api.md +0 -275
- data/docs/authorization-policies.md +0 -502
- data/docs/client_side_scoping.md +0 -103
- data/docs/configuration_details.md +0 -33
- data/docs/pusher_faker_quickstart.md +0 -56
- data/docs/pusher_quickstart.md +0 -44
- data/docs/simple_poller_quickstart.md +0 -31
- data/docs/todo-example.md +0 -118
- data/docs/word_game.md +0 -28
- data/docs/words-example.md +0 -67
- data/examples/action-cable-production-mode/.gitignore +0 -21
- data/examples/action-cable-production-mode/Gemfile +0 -57
- data/examples/action-cable-production-mode/Gemfile.lock +0 -231
- data/examples/action-cable-production-mode/README.md +0 -24
- data/examples/action-cable-production-mode/Rakefile +0 -6
- data/examples/action-cable-production-mode/app/assets/config/manifest.js +0 -3
- data/examples/action-cable-production-mode/app/assets/images/.keep +0 -0
- data/examples/action-cable-production-mode/app/assets/javascripts/application.js +0 -20
- data/examples/action-cable-production-mode/app/assets/javascripts/cable.js +0 -13
- data/examples/action-cable-production-mode/app/assets/javascripts/channels/.keep +0 -0
- data/examples/action-cable-production-mode/app/assets/stylesheets/application.css +0 -15
- data/examples/action-cable-production-mode/app/channels/application_cable/channel.rb +0 -4
- data/examples/action-cable-production-mode/app/channels/application_cable/connection.rb +0 -4
- data/examples/action-cable-production-mode/app/controllers/application_controller.rb +0 -3
- data/examples/action-cable-production-mode/app/controllers/test_controller.rb +0 -5
- data/examples/action-cable-production-mode/app/models/models.rb +0 -2
- data/examples/action-cable-production-mode/app/models/public/application_record.rb +0 -3
- data/examples/action-cable-production-mode/app/models/public/word.rb +0 -2
- data/examples/action-cable-production-mode/app/policies/application_policy.rb +0 -14
- data/examples/action-cable-production-mode/app/views/components.rb +0 -16
- data/examples/action-cable-production-mode/app/views/components/app.rb +0 -18
- data/examples/action-cable-production-mode/app/views/layouts/application.html.erb +0 -14
- data/examples/action-cable-production-mode/bin/bundle +0 -3
- data/examples/action-cable-production-mode/bin/rails +0 -9
- data/examples/action-cable-production-mode/bin/rake +0 -9
- data/examples/action-cable-production-mode/bin/setup +0 -34
- data/examples/action-cable-production-mode/bin/spring +0 -16
- data/examples/action-cable-production-mode/bin/update +0 -29
- data/examples/action-cable-production-mode/config.ru +0 -5
- data/examples/action-cable-production-mode/config/application.rb +0 -18
- data/examples/action-cable-production-mode/config/boot.rb +0 -3
- data/examples/action-cable-production-mode/config/cable.yml +0 -9
- data/examples/action-cable-production-mode/config/database.yml +0 -25
- data/examples/action-cable-production-mode/config/environment.rb +0 -5
- data/examples/action-cable-production-mode/config/environments/development.rb +0 -56
- data/examples/action-cable-production-mode/config/environments/production.rb +0 -89
- data/examples/action-cable-production-mode/config/environments/test.rb +0 -42
- data/examples/action-cable-production-mode/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/action-cable-production-mode/config/initializers/assets.rb +0 -11
- data/examples/action-cable-production-mode/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/action-cable-production-mode/config/initializers/cookies_serializer.rb +0 -5
- data/examples/action-cable-production-mode/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/action-cable-production-mode/config/initializers/hyper_mesh.rb +0 -4
- data/examples/action-cable-production-mode/config/initializers/inflections.rb +0 -16
- data/examples/action-cable-production-mode/config/initializers/mime_types.rb +0 -4
- data/examples/action-cable-production-mode/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/action-cable-production-mode/config/initializers/session_store.rb +0 -3
- data/examples/action-cable-production-mode/config/initializers/wrap_parameters.rb +0 -14
- data/examples/action-cable-production-mode/config/locales/en.yml +0 -23
- data/examples/action-cable-production-mode/config/puma.rb +0 -47
- data/examples/action-cable-production-mode/config/routes.rb +0 -5
- data/examples/action-cable-production-mode/config/secrets.yml +0 -22
- data/examples/action-cable-production-mode/config/spring.rb +0 -6
- data/examples/action-cable-production-mode/db/migrate/20161114213840_create_words.rb +0 -9
- data/examples/action-cable-production-mode/db/schema.rb +0 -34
- data/examples/action-cable-production-mode/db/seeds.rb +0 -7
- data/examples/action-cable-production-mode/lib/assets/.keep +0 -0
- data/examples/action-cable-production-mode/lib/tasks/.keep +0 -0
- data/examples/action-cable-production-mode/public/404.html +0 -67
- data/examples/action-cable-production-mode/public/422.html +0 -67
- data/examples/action-cable-production-mode/public/500.html +0 -66
- data/examples/action-cable-production-mode/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/action-cable-production-mode/public/apple-touch-icon.png +0 -0
- data/examples/action-cable-production-mode/public/assets/.sprockets-manifest-3e9abd3ee8ba47c39a55b61ae37ed9e1.json +0 -1
- data/examples/action-cable-production-mode/public/favicon.ico +0 -0
- data/examples/action-cable-production-mode/public/robots.txt +0 -5
- data/examples/action-cable-production-mode/test/controllers/.keep +0 -0
- data/examples/action-cable-production-mode/test/fixtures/.keep +0 -0
- data/examples/action-cable-production-mode/test/fixtures/files/.keep +0 -0
- data/examples/action-cable-production-mode/test/fixtures/words.yml +0 -7
- data/examples/action-cable-production-mode/test/helpers/.keep +0 -0
- data/examples/action-cable-production-mode/test/integration/.keep +0 -0
- data/examples/action-cable-production-mode/test/mailers/.keep +0 -0
- data/examples/action-cable-production-mode/test/models/.keep +0 -0
- data/examples/action-cable-production-mode/test/models/word_test.rb +0 -7
- data/examples/action-cable-production-mode/test/test_helper.rb +0 -10
- data/examples/action-cable-production-mode/vendor/assets/javascripts/.keep +0 -0
- data/examples/action-cable-production-mode/vendor/assets/stylesheets/.keep +0 -0
- data/examples/action-cable/.gitignore +0 -21
- data/examples/action-cable/Gemfile +0 -58
- data/examples/action-cable/Gemfile.lock +0 -248
- data/examples/action-cable/README.md +0 -24
- data/examples/action-cable/Rakefile +0 -6
- data/examples/action-cable/app/assets/config/manifest.js +0 -3
- data/examples/action-cable/app/assets/images/.keep +0 -0
- data/examples/action-cable/app/assets/javascripts/application.js +0 -20
- data/examples/action-cable/app/assets/javascripts/cable.js +0 -13
- data/examples/action-cable/app/assets/javascripts/channels/.keep +0 -0
- data/examples/action-cable/app/assets/stylesheets/application.css +0 -15
- data/examples/action-cable/app/channels/application_cable/channel.rb +0 -4
- data/examples/action-cable/app/channels/application_cable/connection.rb +0 -4
- data/examples/action-cable/app/controllers/application_controller.rb +0 -3
- data/examples/action-cable/app/controllers/test_controller.rb +0 -5
- data/examples/action-cable/app/models/models.rb +0 -2
- data/examples/action-cable/app/models/public/.keep +0 -0
- data/examples/action-cable/app/models/public/application_record.rb +0 -3
- data/examples/action-cable/app/models/public/word.rb +0 -2
- data/examples/action-cable/app/policies/application_policy.rb +0 -14
- data/examples/action-cable/app/views/components.rb +0 -16
- data/examples/action-cable/app/views/components/app.rb +0 -18
- data/examples/action-cable/app/views/layouts/application.html.erb +0 -14
- data/examples/action-cable/bin/bundle +0 -3
- data/examples/action-cable/bin/rails +0 -9
- data/examples/action-cable/bin/rake +0 -9
- data/examples/action-cable/bin/setup +0 -34
- data/examples/action-cable/bin/spring +0 -16
- data/examples/action-cable/bin/update +0 -29
- data/examples/action-cable/config.ru +0 -5
- data/examples/action-cable/config/application.rb +0 -20
- data/examples/action-cable/config/boot.rb +0 -3
- data/examples/action-cable/config/cable.yml +0 -9
- data/examples/action-cable/config/database.yml +0 -25
- data/examples/action-cable/config/environment.rb +0 -5
- data/examples/action-cable/config/environments/development.rb +0 -56
- data/examples/action-cable/config/environments/production.rb +0 -86
- data/examples/action-cable/config/environments/test.rb +0 -42
- data/examples/action-cable/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/action-cable/config/initializers/assets.rb +0 -11
- data/examples/action-cable/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/action-cable/config/initializers/cookies_serializer.rb +0 -5
- data/examples/action-cable/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/action-cable/config/initializers/hyperloop.rb +0 -4
- data/examples/action-cable/config/initializers/inflections.rb +0 -16
- data/examples/action-cable/config/initializers/mime_types.rb +0 -4
- data/examples/action-cable/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/action-cable/config/initializers/session_store.rb +0 -3
- data/examples/action-cable/config/initializers/wrap_parameters.rb +0 -14
- data/examples/action-cable/config/locales/en.yml +0 -23
- data/examples/action-cable/config/puma.rb +0 -47
- data/examples/action-cable/config/routes.rb +0 -5
- data/examples/action-cable/config/secrets.yml +0 -22
- data/examples/action-cable/config/spring.rb +0 -6
- data/examples/action-cable/db/migrate/20161114213840_create_words.rb +0 -9
- data/examples/action-cable/db/schema.rb +0 -34
- data/examples/action-cable/db/seeds.rb +0 -7
- data/examples/action-cable/lib/assets/.keep +0 -0
- data/examples/action-cable/lib/tasks/.keep +0 -0
- data/examples/action-cable/public/404.html +0 -67
- data/examples/action-cable/public/422.html +0 -67
- data/examples/action-cable/public/500.html +0 -66
- data/examples/action-cable/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/action-cable/public/apple-touch-icon.png +0 -0
- data/examples/action-cable/public/favicon.ico +0 -0
- data/examples/action-cable/public/robots.txt +0 -5
- data/examples/action-cable/test/controllers/.keep +0 -0
- data/examples/action-cable/test/fixtures/.keep +0 -0
- data/examples/action-cable/test/fixtures/files/.keep +0 -0
- data/examples/action-cable/test/fixtures/words.yml +0 -7
- data/examples/action-cable/test/helpers/.keep +0 -0
- data/examples/action-cable/test/integration/.keep +0 -0
- data/examples/action-cable/test/mailers/.keep +0 -0
- data/examples/action-cable/test/models/.keep +0 -0
- data/examples/action-cable/test/models/word_test.rb +0 -7
- data/examples/action-cable/test/test_helper.rb +0 -10
- data/examples/action-cable/vendor/assets/javascripts/.keep +0 -0
- data/examples/action-cable/vendor/assets/stylesheets/.keep +0 -0
- data/examples/pusher-fake/.gitignore +0 -21
- data/examples/pusher-fake/Gemfile +0 -59
- data/examples/pusher-fake/Gemfile.lock +0 -262
- data/examples/pusher-fake/README.md +0 -24
- data/examples/pusher-fake/Rakefile +0 -6
- data/examples/pusher-fake/app/assets/config/manifest.js +0 -3
- data/examples/pusher-fake/app/assets/images/.keep +0 -0
- data/examples/pusher-fake/app/assets/javascripts/application.js +0 -21
- data/examples/pusher-fake/app/assets/stylesheets/application.css +0 -15
- data/examples/pusher-fake/app/controllers/application_controller.rb +0 -3
- data/examples/pusher-fake/app/controllers/test_controller.rb +0 -5
- data/examples/pusher-fake/app/models/models.rb +0 -2
- data/examples/pusher-fake/app/models/public/.keep +0 -0
- data/examples/pusher-fake/app/models/public/application_record.rb +0 -3
- data/examples/pusher-fake/app/models/public/word.rb +0 -2
- data/examples/pusher-fake/app/policies/application_policy.rb +0 -14
- data/examples/pusher-fake/app/views/components.rb +0 -16
- data/examples/pusher-fake/app/views/components/app.rb +0 -18
- data/examples/pusher-fake/app/views/layouts/application.html.erb +0 -14
- data/examples/pusher-fake/bin/bundle +0 -3
- data/examples/pusher-fake/bin/rails +0 -9
- data/examples/pusher-fake/bin/rake +0 -9
- data/examples/pusher-fake/bin/setup +0 -34
- data/examples/pusher-fake/bin/spring +0 -16
- data/examples/pusher-fake/bin/update +0 -29
- data/examples/pusher-fake/config.ru +0 -5
- data/examples/pusher-fake/config/application.rb +0 -20
- data/examples/pusher-fake/config/boot.rb +0 -3
- data/examples/pusher-fake/config/database.yml +0 -25
- data/examples/pusher-fake/config/environment.rb +0 -5
- data/examples/pusher-fake/config/environments/development.rb +0 -56
- data/examples/pusher-fake/config/environments/production.rb +0 -86
- data/examples/pusher-fake/config/environments/test.rb +0 -42
- data/examples/pusher-fake/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/pusher-fake/config/initializers/assets.rb +0 -11
- data/examples/pusher-fake/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/pusher-fake/config/initializers/cookies_serializer.rb +0 -5
- data/examples/pusher-fake/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/pusher-fake/config/initializers/hyper_mesh.rb +0 -21
- data/examples/pusher-fake/config/initializers/inflections.rb +0 -16
- data/examples/pusher-fake/config/initializers/mime_types.rb +0 -4
- data/examples/pusher-fake/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/pusher-fake/config/initializers/session_store.rb +0 -3
- data/examples/pusher-fake/config/initializers/wrap_parameters.rb +0 -14
- data/examples/pusher-fake/config/locales/en.yml +0 -23
- data/examples/pusher-fake/config/puma.rb +0 -47
- data/examples/pusher-fake/config/routes.rb +0 -5
- data/examples/pusher-fake/config/secrets.yml +0 -22
- data/examples/pusher-fake/config/spring.rb +0 -6
- data/examples/pusher-fake/db/migrate/20161114213840_create_words.rb +0 -9
- data/examples/pusher-fake/db/schema.rb +0 -34
- data/examples/pusher-fake/db/seeds.rb +0 -7
- data/examples/pusher-fake/lib/assets/.keep +0 -0
- data/examples/pusher-fake/lib/tasks/.keep +0 -0
- data/examples/pusher-fake/public/404.html +0 -67
- data/examples/pusher-fake/public/422.html +0 -67
- data/examples/pusher-fake/public/500.html +0 -66
- data/examples/pusher-fake/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/pusher-fake/public/apple-touch-icon.png +0 -0
- data/examples/pusher-fake/public/favicon.ico +0 -0
- data/examples/pusher-fake/public/robots.txt +0 -5
- data/examples/pusher-fake/test/controllers/.keep +0 -0
- data/examples/pusher-fake/test/fixtures/.keep +0 -0
- data/examples/pusher-fake/test/fixtures/files/.keep +0 -0
- data/examples/pusher-fake/test/fixtures/words.yml +0 -7
- data/examples/pusher-fake/test/helpers/.keep +0 -0
- data/examples/pusher-fake/test/integration/.keep +0 -0
- data/examples/pusher-fake/test/mailers/.keep +0 -0
- data/examples/pusher-fake/test/models/.keep +0 -0
- data/examples/pusher-fake/test/models/word_test.rb +0 -7
- data/examples/pusher-fake/test/test_helper.rb +0 -10
- data/examples/pusher-fake/vendor/assets/javascripts/.keep +0 -0
- data/examples/pusher-fake/vendor/assets/stylesheets/.keep +0 -0
- data/examples/pusher/.gitignore +0 -21
- data/examples/pusher/Gemfile +0 -58
- data/examples/pusher/Gemfile.lock +0 -236
- data/examples/pusher/README.md +0 -24
- data/examples/pusher/Rakefile +0 -6
- data/examples/pusher/app/assets/config/manifest.js +0 -3
- data/examples/pusher/app/assets/images/.keep +0 -0
- data/examples/pusher/app/assets/javascripts/application.js +0 -21
- data/examples/pusher/app/assets/stylesheets/application.css +0 -15
- data/examples/pusher/app/controllers/application_controller.rb +0 -3
- data/examples/pusher/app/controllers/test_controller.rb +0 -5
- data/examples/pusher/app/models/models.rb +0 -2
- data/examples/pusher/app/models/public/.keep +0 -0
- data/examples/pusher/app/models/public/application_record.rb +0 -3
- data/examples/pusher/app/models/public/word.rb +0 -2
- data/examples/pusher/app/policies/application_policy.rb +0 -14
- data/examples/pusher/app/views/components.rb +0 -16
- data/examples/pusher/app/views/components/app.rb +0 -18
- data/examples/pusher/app/views/layouts/application.html.erb +0 -14
- data/examples/pusher/bin/bundle +0 -3
- data/examples/pusher/bin/rails +0 -9
- data/examples/pusher/bin/rake +0 -9
- data/examples/pusher/bin/setup +0 -34
- data/examples/pusher/bin/spring +0 -16
- data/examples/pusher/bin/update +0 -29
- data/examples/pusher/config.ru +0 -5
- data/examples/pusher/config/application.rb +0 -20
- data/examples/pusher/config/boot.rb +0 -3
- data/examples/pusher/config/database.yml +0 -25
- data/examples/pusher/config/environment.rb +0 -5
- data/examples/pusher/config/environments/development.rb +0 -56
- data/examples/pusher/config/environments/production.rb +0 -86
- data/examples/pusher/config/environments/test.rb +0 -42
- data/examples/pusher/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/pusher/config/initializers/assets.rb +0 -11
- data/examples/pusher/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/pusher/config/initializers/cookies_serializer.rb +0 -5
- data/examples/pusher/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/pusher/config/initializers/hyper_mesh.rb +0 -10
- data/examples/pusher/config/initializers/inflections.rb +0 -16
- data/examples/pusher/config/initializers/mime_types.rb +0 -4
- data/examples/pusher/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/pusher/config/initializers/session_store.rb +0 -3
- data/examples/pusher/config/initializers/wrap_parameters.rb +0 -14
- data/examples/pusher/config/locales/en.yml +0 -23
- data/examples/pusher/config/puma.rb +0 -47
- data/examples/pusher/config/routes.rb +0 -5
- data/examples/pusher/config/secrets.yml +0 -22
- data/examples/pusher/config/spring.rb +0 -6
- data/examples/pusher/db/migrate/20161114213840_create_words.rb +0 -9
- data/examples/pusher/db/schema.rb +0 -34
- data/examples/pusher/db/seeds.rb +0 -7
- data/examples/pusher/lib/assets/.keep +0 -0
- data/examples/pusher/lib/tasks/.keep +0 -0
- data/examples/pusher/public/404.html +0 -67
- data/examples/pusher/public/422.html +0 -67
- data/examples/pusher/public/500.html +0 -66
- data/examples/pusher/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/pusher/public/apple-touch-icon.png +0 -0
- data/examples/pusher/public/favicon.ico +0 -0
- data/examples/pusher/public/robots.txt +0 -5
- data/examples/pusher/test/controllers/.keep +0 -0
- data/examples/pusher/test/fixtures/.keep +0 -0
- data/examples/pusher/test/fixtures/files/.keep +0 -0
- data/examples/pusher/test/fixtures/words.yml +0 -7
- data/examples/pusher/test/helpers/.keep +0 -0
- data/examples/pusher/test/integration/.keep +0 -0
- data/examples/pusher/test/mailers/.keep +0 -0
- data/examples/pusher/test/models/.keep +0 -0
- data/examples/pusher/test/models/word_test.rb +0 -7
- data/examples/pusher/test/test_helper.rb +0 -10
- data/examples/pusher/vendor/assets/javascripts/.keep +0 -0
- data/examples/pusher/vendor/assets/stylesheets/.keep +0 -0
- data/examples/simple-poller/.gitignore +0 -21
- data/examples/simple-poller/Gemfile +0 -57
- data/examples/simple-poller/Gemfile.lock +0 -229
- data/examples/simple-poller/README.md +0 -24
- data/examples/simple-poller/Rakefile +0 -6
- data/examples/simple-poller/app/assets/config/manifest.js +0 -3
- data/examples/simple-poller/app/assets/images/.keep +0 -0
- data/examples/simple-poller/app/assets/javascripts/application.js +0 -21
- data/examples/simple-poller/app/assets/stylesheets/application.css +0 -15
- data/examples/simple-poller/app/controllers/application_controller.rb +0 -3
- data/examples/simple-poller/app/controllers/test_controller.rb +0 -5
- data/examples/simple-poller/app/models/models.rb +0 -2
- data/examples/simple-poller/app/models/public/.keep +0 -0
- data/examples/simple-poller/app/models/public/application_record.rb +0 -3
- data/examples/simple-poller/app/models/public/word.rb +0 -2
- data/examples/simple-poller/app/policies/application_policy.rb +0 -14
- data/examples/simple-poller/app/views/components.rb +0 -16
- data/examples/simple-poller/app/views/components/app.rb +0 -18
- data/examples/simple-poller/app/views/layouts/application.html.erb +0 -14
- data/examples/simple-poller/bin/bundle +0 -3
- data/examples/simple-poller/bin/rails +0 -9
- data/examples/simple-poller/bin/rake +0 -9
- data/examples/simple-poller/bin/setup +0 -34
- data/examples/simple-poller/bin/spring +0 -16
- data/examples/simple-poller/bin/update +0 -29
- data/examples/simple-poller/config.ru +0 -5
- data/examples/simple-poller/config/application.rb +0 -20
- data/examples/simple-poller/config/boot.rb +0 -3
- data/examples/simple-poller/config/database.yml +0 -25
- data/examples/simple-poller/config/environment.rb +0 -5
- data/examples/simple-poller/config/environments/development.rb +0 -56
- data/examples/simple-poller/config/environments/production.rb +0 -86
- data/examples/simple-poller/config/environments/test.rb +0 -42
- data/examples/simple-poller/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/simple-poller/config/initializers/assets.rb +0 -11
- data/examples/simple-poller/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/simple-poller/config/initializers/cookies_serializer.rb +0 -5
- data/examples/simple-poller/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/simple-poller/config/initializers/hyper_mesh.rb +0 -9
- data/examples/simple-poller/config/initializers/inflections.rb +0 -16
- data/examples/simple-poller/config/initializers/mime_types.rb +0 -4
- data/examples/simple-poller/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/simple-poller/config/initializers/session_store.rb +0 -3
- data/examples/simple-poller/config/initializers/wrap_parameters.rb +0 -14
- data/examples/simple-poller/config/locales/en.yml +0 -23
- data/examples/simple-poller/config/puma.rb +0 -47
- data/examples/simple-poller/config/routes.rb +0 -5
- data/examples/simple-poller/config/secrets.yml +0 -22
- data/examples/simple-poller/config/spring.rb +0 -6
- data/examples/simple-poller/db/migrate/20161114213840_create_words.rb +0 -9
- data/examples/simple-poller/db/schema.rb +0 -34
- data/examples/simple-poller/db/seeds.rb +0 -7
- data/examples/simple-poller/lib/assets/.keep +0 -0
- data/examples/simple-poller/lib/tasks/.keep +0 -0
- data/examples/simple-poller/public/404.html +0 -67
- data/examples/simple-poller/public/422.html +0 -67
- data/examples/simple-poller/public/500.html +0 -66
- data/examples/simple-poller/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/simple-poller/public/apple-touch-icon.png +0 -0
- data/examples/simple-poller/public/favicon.ico +0 -0
- data/examples/simple-poller/public/robots.txt +0 -5
- data/examples/simple-poller/test/controllers/.keep +0 -0
- data/examples/simple-poller/test/fixtures/.keep +0 -0
- data/examples/simple-poller/test/fixtures/files/.keep +0 -0
- data/examples/simple-poller/test/fixtures/words.yml +0 -7
- data/examples/simple-poller/test/helpers/.keep +0 -0
- data/examples/simple-poller/test/integration/.keep +0 -0
- data/examples/simple-poller/test/mailers/.keep +0 -0
- data/examples/simple-poller/test/models/.keep +0 -0
- data/examples/simple-poller/test/models/word_test.rb +0 -7
- data/examples/simple-poller/test/test_helper.rb +0 -10
- data/examples/simple-poller/vendor/assets/javascripts/.keep +0 -0
- data/examples/simple-poller/vendor/assets/stylesheets/.keep +0 -0
- data/examples/word-game/.gitignore +0 -21
- data/examples/word-game/Gemfile +0 -57
- data/examples/word-game/Gemfile.lock +0 -241
- data/examples/word-game/README.md +0 -24
- data/examples/word-game/Rakefile +0 -6
- data/examples/word-game/app/assets/config/manifest.js +0 -3
- data/examples/word-game/app/assets/images/.keep +0 -0
- data/examples/word-game/app/assets/javascripts/application.js +0 -20
- data/examples/word-game/app/assets/javascripts/cable.js +0 -13
- data/examples/word-game/app/assets/javascripts/channels/.keep +0 -0
- data/examples/word-game/app/assets/stylesheets/application.css +0 -15
- data/examples/word-game/app/channels/application_cable/channel.rb +0 -4
- data/examples/word-game/app/channels/application_cable/connection.rb +0 -4
- data/examples/word-game/app/controllers/application_controller.rb +0 -3
- data/examples/word-game/app/controllers/concerns/.keep +0 -0
- data/examples/word-game/app/helpers/application_helper.rb +0 -2
- data/examples/word-game/app/jobs/application_job.rb +0 -2
- data/examples/word-game/app/mailers/application_mailer.rb +0 -4
- data/examples/word-game/app/models/application_record.rb +0 -3
- data/examples/word-game/app/models/concerns/.keep +0 -0
- data/examples/word-game/app/models/models.rb +0 -2
- data/examples/word-game/app/models/public/.keep +0 -0
- data/examples/word-game/app/policies/application_policy.rb +0 -14
- data/examples/word-game/app/views/components.rb +0 -16
- data/examples/word-game/app/views/components/.keep +0 -0
- data/examples/word-game/app/views/layouts/application.html.erb +0 -14
- data/examples/word-game/app/views/layouts/mailer.html.erb +0 -13
- data/examples/word-game/app/views/layouts/mailer.text.erb +0 -1
- data/examples/word-game/bin/bundle +0 -3
- data/examples/word-game/bin/rails +0 -9
- data/examples/word-game/bin/rake +0 -9
- data/examples/word-game/bin/setup +0 -34
- data/examples/word-game/bin/spring +0 -16
- data/examples/word-game/bin/update +0 -29
- data/examples/word-game/config.ru +0 -5
- data/examples/word-game/config/application.rb +0 -20
- data/examples/word-game/config/boot.rb +0 -3
- data/examples/word-game/config/cable.yml +0 -9
- data/examples/word-game/config/database.yml +0 -25
- data/examples/word-game/config/environment.rb +0 -5
- data/examples/word-game/config/environments/development.rb +0 -56
- data/examples/word-game/config/environments/production.rb +0 -86
- data/examples/word-game/config/environments/test.rb +0 -42
- data/examples/word-game/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/word-game/config/initializers/assets.rb +0 -11
- data/examples/word-game/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/word-game/config/initializers/cookies_serializer.rb +0 -5
- data/examples/word-game/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/word-game/config/initializers/hyper_mesh.rb +0 -4
- data/examples/word-game/config/initializers/inflections.rb +0 -16
- data/examples/word-game/config/initializers/mime_types.rb +0 -4
- data/examples/word-game/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/word-game/config/initializers/session_store.rb +0 -3
- data/examples/word-game/config/initializers/wrap_parameters.rb +0 -14
- data/examples/word-game/config/locales/en.yml +0 -23
- data/examples/word-game/config/puma.rb +0 -47
- data/examples/word-game/config/routes.rb +0 -4
- data/examples/word-game/config/secrets.yml +0 -22
- data/examples/word-game/config/spring.rb +0 -6
- data/examples/word-game/db/seeds.rb +0 -7
- data/examples/word-game/lib/assets/.keep +0 -0
- data/examples/word-game/lib/tasks/.keep +0 -0
- data/examples/word-game/public/404.html +0 -67
- data/examples/word-game/public/422.html +0 -67
- data/examples/word-game/public/500.html +0 -66
- data/examples/word-game/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/word-game/public/apple-touch-icon.png +0 -0
- data/examples/word-game/public/favicon.ico +0 -0
- data/examples/word-game/public/robots.txt +0 -5
- data/examples/word-game/test/controllers/.keep +0 -0
- data/examples/word-game/test/fixtures/.keep +0 -0
- data/examples/word-game/test/fixtures/files/.keep +0 -0
- data/examples/word-game/test/helpers/.keep +0 -0
- data/examples/word-game/test/integration/.keep +0 -0
- data/examples/word-game/test/mailers/.keep +0 -0
- data/examples/word-game/test/models/.keep +0 -0
- data/examples/word-game/test/test_helper.rb +0 -10
- data/examples/word-game/vendor/assets/javascripts/.keep +0 -0
- data/examples/word-game/vendor/assets/stylesheets/.keep +0 -0
- data/examples/words/.gitignore +0 -21
- data/examples/words/Gemfile +0 -59
- data/examples/words/Gemfile.lock +0 -248
- data/examples/words/README.md +0 -24
- data/examples/words/Rakefile +0 -6
- data/examples/words/app/assets/config/manifest.js +0 -3
- data/examples/words/app/assets/javascripts/application.js +0 -18
- data/examples/words/app/assets/stylesheets/application.css +0 -15
- data/examples/words/app/controllers/application_controller.rb +0 -3
- data/examples/words/app/controllers/test_controller.rb +0 -6
- data/examples/words/app/models/models.rb +0 -2
- data/examples/words/app/models/public/application_record.rb +0 -3
- data/examples/words/app/models/public/word.rb +0 -10
- data/examples/words/app/policies/application_policy.rb +0 -6
- data/examples/words/app/views/components.rb +0 -18
- data/examples/words/app/views/components/app.rb +0 -31
- data/examples/words/app/views/layouts/application.html.erb +0 -14
- data/examples/words/app/views/layouts/mailer.html.erb +0 -13
- data/examples/words/app/views/layouts/mailer.text.erb +0 -1
- data/examples/words/bin/bundle +0 -3
- data/examples/words/bin/rails +0 -9
- data/examples/words/bin/rake +0 -9
- data/examples/words/bin/setup +0 -34
- data/examples/words/bin/spring +0 -15
- data/examples/words/bin/update +0 -29
- data/examples/words/config.ru +0 -5
- data/examples/words/config/application.rb +0 -30
- data/examples/words/config/boot.rb +0 -3
- data/examples/words/config/cable.yml +0 -9
- data/examples/words/config/database.yml +0 -25
- data/examples/words/config/environment.rb +0 -5
- data/examples/words/config/environments/development.rb +0 -45
- data/examples/words/config/environments/production.rb +0 -86
- data/examples/words/config/environments/test.rb +0 -42
- data/examples/words/config/initializers/application_controller_renderer.rb +0 -6
- data/examples/words/config/initializers/assets.rb +0 -11
- data/examples/words/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/words/config/initializers/cookies_serializer.rb +0 -5
- data/examples/words/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/words/config/initializers/hyper_mesh.rb +0 -14
- data/examples/words/config/initializers/inflections.rb +0 -16
- data/examples/words/config/initializers/mime_types.rb +0 -4
- data/examples/words/config/initializers/new_framework_defaults.rb +0 -24
- data/examples/words/config/initializers/session_store.rb +0 -3
- data/examples/words/config/initializers/wrap_parameters.rb +0 -14
- data/examples/words/config/locales/en.yml +0 -23
- data/examples/words/config/puma.rb +0 -47
- data/examples/words/config/routes.rb +0 -5
- data/examples/words/config/secrets.yml +0 -22
- data/examples/words/config/spring.rb +0 -6
- data/examples/words/db/migrate/20160921223808_create_words.rb +0 -9
- data/examples/words/db/schema.rb +0 -28
- data/examples/words/public/404.html +0 -67
- data/examples/words/public/422.html +0 -67
- data/examples/words/public/500.html +0 -66
- data/examples/words/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/words/public/apple-touch-icon.png +0 -0
- data/examples/words/public/favicon.ico +0 -0
- data/examples/words/public/robots.txt +0 -5
- data/examples/words/vendor/assets/javascripts/.keep +0 -0
- data/examples/words/vendor/assets/stylesheets/.keep +0 -0
- data/reactive_record_test_app/Gemfile +0 -20
- data/reactive_record_test_app/Gemfile.lock +0 -269
- data/reactive_record_test_app/Rakefile +0 -7
- data/reactive_record_test_app/app/assets/javascripts/application.rb +0 -3
- data/reactive_record_test_app/app/assets/javascripts/bigdecimal.rb +0 -1
- data/reactive_record_test_app/app/assets/javascripts/reactive_record_config.js +0 -2
- data/reactive_record_test_app/app/assets/stylesheets/application.css +0 -13
- data/reactive_record_test_app/app/controllers/application_controller.rb +0 -8
- data/reactive_record_test_app/app/controllers/home_controller.rb +0 -7
- data/reactive_record_test_app/app/helpers/application_helper.rb +0 -2
- data/reactive_record_test_app/app/models/models.rb.erb +0 -6
- data/reactive_record_test_app/app/models/public/address.rb +0 -13
- data/reactive_record_test_app/app/models/public/comment.rb +0 -19
- data/reactive_record_test_app/app/models/public/todo_item.rb +0 -36
- data/reactive_record_test_app/app/models/public/user.rb +0 -78
- data/reactive_record_test_app/config.ru +0 -33
- data/reactive_record_test_app/config/application.rb +0 -75
- data/reactive_record_test_app/config/boot.rb +0 -10
- data/reactive_record_test_app/config/database.yml +0 -25
- data/reactive_record_test_app/config/environment.rb +0 -5
- data/reactive_record_test_app/config/environments/development.rb +0 -43
- data/reactive_record_test_app/config/initializers/backtrace_silencers.rb +0 -7
- data/reactive_record_test_app/config/initializers/hyper_mesh_legacy_behavior.rb +0 -5
- data/reactive_record_test_app/config/initializers/inflections.rb +0 -15
- data/reactive_record_test_app/config/initializers/mime_types.rb +0 -5
- data/reactive_record_test_app/config/initializers/secret_token.rb +0 -7
- data/reactive_record_test_app/config/initializers/session_store.rb +0 -8
- data/reactive_record_test_app/config/initializers/wrap_parameters.rb +0 -14
- data/reactive_record_test_app/config/locales/en.yml +0 -5
- data/reactive_record_test_app/config/routes.rb +0 -6
- data/reactive_record_test_app/db/migrate/20150617002932_create_todo_items.rb +0 -11
- data/reactive_record_test_app/db/migrate/20150617134028_create_users.rb +0 -14
- data/reactive_record_test_app/db/migrate/20150729195556_add_address_to_user.rb +0 -20
- data/reactive_record_test_app/db/migrate/20150826142045_create_comments.rb +0 -10
- data/reactive_record_test_app/db/migrate/20150828172008_add_single_comment_to_todo_item.rb +0 -5
- data/reactive_record_test_app/db/migrate/20150908184118_add_address_id_to_user.rb +0 -5
- data/reactive_record_test_app/db/migrate/20150917220236_add_second_address_to_user.rb +0 -10
- data/reactive_record_test_app/db/migrate/20151009000111_add_test_data_attributes_to_user.rb +0 -6
- data/reactive_record_test_app/db/migrate/20160129182544_add_test_enum_to_user.rb +0 -5
- data/reactive_record_test_app/db/schema.rb +0 -63
- data/reactive_record_test_app/db/seeds.rb +0 -66
- data/reactive_record_test_app/public/404.html +0 -26
- data/reactive_record_test_app/public/422.html +0 -26
- data/reactive_record_test_app/public/500.html +0 -25
- data/reactive_record_test_app/public/favicon.ico +0 -0
- data/reactive_record_test_app/script/rails +0 -6
- data/reactive_record_test_app/spec-opal/active-record/aggregations_spec.rb +0 -41
- data/reactive_record_test_app/spec-opal/active-record/associations_spec.rb +0 -75
- data/reactive_record_test_app/spec-opal/active-record/base_spec.rb +0 -126
- data/reactive_record_test_app/spec-opal/active-record/dummy_value_spec.rb +0 -27
- data/reactive_record_test_app/spec-opal/active-record/edge_cases_spec.rb +0 -116
- data/reactive_record_test_app/spec-opal/active-record/enum_spec.rb +0 -43
- data/reactive_record_test_app/spec-opal/active-record/instance_methods_spec.rb +0 -53
- data/reactive_record_test_app/spec-opal/active-record/non_ar_aggregations_spec.rb +0 -74
- data/reactive_record_test_app/spec-opal/active-record/reactive_record_load_spec.rb +0 -23
- data/reactive_record_test_app/spec-opal/active-record/rendering_spec.rb +0 -230
- data/reactive_record_test_app/spec-opal/active-record/save_spec.rb +0 -124
- data/reactive_record_test_app/spec-opal/active-record/scope_spec.rb +0 -85
- data/reactive_record_test_app/spec-opal/active-record/update_aggregations_spec.rb +0 -76
- data/reactive_record_test_app/spec-opal/active-record/update_attributes_spec.rb +0 -186
- data/reactive_record_test_app/spec-opal/active-record/virtual_methods_spec.rb +0 -71
- data/reactive_record_test_app/spec-opal/index.html.erb +0 -11
- data/reactive_record_test_app/spec-opal/spec_helper.js.rb +0 -268
- data/reactive_record_test_app/spec-opal/test_spec.rb +0 -7
- data/reactive_record_test_app/spec-opal/vendor/es5-shim.min.js +0 -6
- data/reactive_record_test_app/spec_dont_run/README.md +0 -33
- data/reactive_record_test_app/spec_dont_run/active_record_broken/permissions_spec.rb +0 -170
- data/reactive_record_test_app/spec_dont_run/active_record_broken/prerendering_spec.rb +0 -50
- data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzmany_to_many_spec_moved_to_main_suite.rb +0 -30
- data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzrevert_record_spec_moved.rb +0 -78
- data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzupdate_associations_spec_moved.rb +0 -142
- data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzupdate_scopes_movedspec.rb +0 -48
- data/spec/batch1/aaa-unit_tests/connection_movedspec.rb +0 -144
- data/spec/batch1/aaa-unit_tests/dummy_value_spec.rb +0 -26
- data/spec/batch1/column_types/column_type_spec.rb +0 -318
- data/spec/batch1/crud_access_regulation/broadcast_controls_access_spec.rb +0 -99
- data/spec/batch1/crud_access_regulation/model_policies_spec.rb +0 -133
- data/spec/batch1/misc/access_like_hash_spec.rb +0 -43
- data/spec/batch1/misc/while_loading_spec.rb +0 -196
- data/spec/batch1/policies/regulate_all_broadcasts_spec.rb +0 -315
- data/spec/batch1/policies/regulate_broadcast_spec.rb +0 -370
- data/spec/batch2/authorization_spec.rb +0 -112
- data/spec/batch2/default_scope_spec.rb +0 -121
- data/spec/batch2/has_many_through_spec.rb +0 -169
- data/spec/batch2/relationships_spec.rb +0 -263
- data/spec/batch3/auto_load_itself_spec.rb +0 -24
- data/spec/batch3/edge_cases_spec.rb +0 -31
- data/spec/batch3/finder_method_spec.rb +0 -67
- data/spec/batch3/many_to_many_spec.rb +0 -50
- data/spec/batch3/pry_rescue_xspec.rb +0 -48
- data/spec/batch3/readme.txt +0 -0
- data/spec/batch3/revert_spec.rb +0 -113
- data/spec/batch3/save_while_loading_spec.rb +0 -44
- data/spec/batch3/update_associations_spec.rb +0 -189
- data/spec/batch3/update_scopes_spec.rb +0 -54
- data/spec/batch4/saving_during_commit_spec.rb +0 -64
- data/spec/batch4/scope_spec.rb +0 -581
- data/spec/batch4/scoped_todos_spec.rb +0 -167
- data/spec/batch4/synchromesh_spec.rb +0 -80
- data/spec/bin/firebug-2.0.13-fx.xpi +0 -0
- data/spec/component_helpers_xspec.rb +0 -49
- data/spec/examples/dictionary.rb +0 -239
- data/spec/examples/dictionary_with_client_scopes.rb +0 -196
- data/spec/examples/random_examples.rb +0 -133
- data/spec/factories/child_model.rb +0 -5
- data/spec/factories/comment.rb +0 -5
- data/spec/factories/test_models.rb +0 -5
- data/spec/factories/todo.rb +0 -5
- data/spec/factories/user.rb +0 -5
- data/spec/play_ground.rb +0 -64
- data/spec/reactive_record_factory.rb +0 -62
- data/spec/spec_helper.rb +0 -372
- data/spec/support/component_helpers.rb +0 -351
- data/spec/test_app/Gemfile +0 -66
- data/spec/test_app/Gemfile.lock +0 -303
- data/spec/test_app/Rakefile +0 -6
- data/spec/test_app/app/assets/javascripts/application.js +0 -6
- data/spec/test_app/app/assets/stylesheets/application.css +0 -15
- data/spec/test_app/app/controllers/application_controller.rb +0 -13
- data/spec/test_app/app/controllers/test_controller.rb +0 -5
- data/spec/test_app/app/models/_react_public_models.rb +0 -2
- data/spec/test_app/app/models/public/address.rb +0 -13
- data/spec/test_app/app/models/public/child_model.rb +0 -3
- data/spec/test_app/app/models/public/comment.rb +0 -25
- data/spec/test_app/app/models/public/test_model.rb +0 -5
- data/spec/test_app/app/models/public/todo.rb +0 -6
- data/spec/test_app/app/models/public/todo_item.rb +0 -36
- data/spec/test_app/app/models/public/user.rb +0 -88
- data/spec/test_app/app/policies/auto_loader_test_classa_policy.rb +0 -3
- data/spec/test_app/app/policies/auto_loader_test_classb_policy.rb +0 -3
- data/spec/test_app/app/policies/auto_loader_test_classc_policy.rb +0 -3
- data/spec/test_app/app/policies/auto_loader_test_classd_policy.rb +0 -3
- data/spec/test_app/app/views/components.rb +0 -13
- data/spec/test_app/app/views/components/show.rb +0 -5
- data/spec/test_app/app/views/layouts/application.html.erb +0 -14
- data/spec/test_app/bin/bundle +0 -3
- data/spec/test_app/bin/rails +0 -4
- data/spec/test_app/bin/rake +0 -4
- data/spec/test_app/bin/setup +0 -29
- data/spec/test_app/config.ru +0 -4
- data/spec/test_app/config/application.rb +0 -44
- data/spec/test_app/config/boot.rb +0 -6
- data/spec/test_app/config/cable.yml +0 -10
- data/spec/test_app/config/database.yml +0 -47
- data/spec/test_app/config/environment.rb +0 -5
- data/spec/test_app/config/environments/development.rb +0 -41
- data/spec/test_app/config/environments/production.rb +0 -79
- data/spec/test_app/config/environments/test.rb +0 -42
- data/spec/test_app/config/initializers/assets.rb +0 -11
- data/spec/test_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/test_app/config/initializers/cookies_serializer.rb +0 -3
- data/spec/test_app/config/initializers/filter_parameter_logging.rb +0 -4
- data/spec/test_app/config/initializers/inflections.rb +0 -16
- data/spec/test_app/config/initializers/mime_types.rb +0 -4
- data/spec/test_app/config/initializers/session_store.rb +0 -3
- data/spec/test_app/config/initializers/synchromesh.rb +0 -11
- data/spec/test_app/config/initializers/wrap_parameters.rb +0 -14
- data/spec/test_app/config/locales/en.yml +0 -23
- data/spec/test_app/config/routes.rb +0 -61
- data/spec/test_app/config/secrets.yml +0 -22
- data/spec/test_app/db/development.sqlite3 +0 -0
- data/spec/test_app/db/migrate/20160731182106_create_test_models.rb +0 -75
- data/spec/test_app/db/schema.rb +0 -88
- data/spec/test_app/db/seeds.rb +0 -7
- data/spec/test_app/lib/assets/.keep +0 -0
- data/spec/test_app/public/404.html +0 -67
- data/spec/test_app/public/422.html +0 -67
- data/spec/test_app/public/500.html +0 -66
- data/spec/test_app/public/favicon.ico +0 -0
- data/spec/test_components.rb +0 -18
- data/spec/vendor/es5-shim.min.js +0 -6
data/docs/client_side_scoping.md
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
## ActiveRecord Scope Enhancement
|
2
|
-
|
3
|
-
When the client receives notification that a record has changed Hyperloop finds the set of currently rendered scopes that might be effected, and requests them to be updated from the server.
|
4
|
-
|
5
|
-
On the server scopes are a useful way to structure code. **On the client** scopes are vital as they limit the amount of data loaded, viewed, and updated in the browser. Consider a factory floor management system that shows *job* state as work flows through the factory. There may be millions of jobs that a production floor browser is authorized to view, but at any time there are probably only 50 being shown. Using ActiveRecord scopes is the way Hyperloop keeps the data requested by the browser limited to a reasonable amount.
|
6
|
-
|
7
|
-
To make scopes work efficiently on the client Hyperloop adds some features to the ActiveRecord `scope` and `default_scope` macros. Note you must use the `scope` macro (and not class methods) for things to work with Hyperloop.
|
8
|
-
|
9
|
-
The additional features are accessed via the `:joins`, `:client`, and `:select` options.
|
10
|
-
|
11
|
-
The `:joins` option tells the Hyperloop client which models are joined with the scope. *You must add a `:joins` option if the scope has any data base join operations in it, otherwise if a joined model changes, Hyperloop will not know to update the scope.*
|
12
|
-
|
13
|
-
The `:client` and `:select` options provide the client a way to update scopes without having to contact the server. Unlike the `:joins` option this is an optimization and is not required for scopes to work.
|
14
|
-
|
15
|
-
```ruby
|
16
|
-
class Todo < ActiveRecord::Base
|
17
|
-
|
18
|
-
# Standard ActiveRecord form:
|
19
|
-
# the proc will be evaluated as normal on the server, and as needed updates
|
20
|
-
# will be requested from the clients
|
21
|
-
|
22
|
-
scope :active, -> () { where(completed: true) }
|
23
|
-
|
24
|
-
# In the simple form the scope will be reevaluated if the model that is
|
25
|
-
# being scoped changes, and if the scope is currently being used to render data.
|
26
|
-
|
27
|
-
# If the scope joins with other data you will need to specify this by
|
28
|
-
# passing a relationship or array of relationships to the `joins` option.
|
29
|
-
|
30
|
-
scope :with_recent_comments,
|
31
|
-
-> { joins(:comments).where('comment.created_at >= ?', Time.now-1.week) },
|
32
|
-
joins: ['comments'] # or joins: 'comments'
|
33
|
-
|
34
|
-
# Now with_recent_comments will be re-evaluated whenever a Todo record, or a Comment
|
35
|
-
# joined with a Todo change.
|
36
|
-
|
37
|
-
# Normally whenever Hyperloop detects that a scope may be effected by a changed
|
38
|
-
# model, it will request the scope be re-evaluated on the server. To offload this
|
39
|
-
# computation to the client provide a client side scope method:
|
40
|
-
|
41
|
-
scope :with_recent_comments,
|
42
|
-
-> { joins(:comments).where('comment.created_at >= ?', Time.now-1.week) },
|
43
|
-
joins: ['comments']
|
44
|
-
client: -> { comments.detect { |comment| comment.created_at >= Time.now-1.week }
|
45
|
-
|
46
|
-
# The client proc is executed on each candidate record, and if it returns true the record
|
47
|
-
# will be added to the scope.
|
48
|
-
|
49
|
-
# Instead of a client proc you can provide a select proc, which will receive the entire
|
50
|
-
# collection which can then be filtered and sorted.
|
51
|
-
|
52
|
-
scope :sort_by_created_at,
|
53
|
-
-> { order('created_at DESC') }
|
54
|
-
select: -> { sort { |a, b| b.created_at <=> a.created_at }}
|
55
|
-
|
56
|
-
# To keep things tidy you can specify the server scope proc with the :server option
|
57
|
-
|
58
|
-
scope :completed,
|
59
|
-
server: -> { where(complete: true) }
|
60
|
-
client: -> { complete }
|
61
|
-
|
62
|
-
# The expressions in the joins array can be arbitrary sequences of relationships and
|
63
|
-
# scopes such as 'comments.author'.
|
64
|
-
|
65
|
-
scope :with_managers_comments,
|
66
|
-
server: -> { ... }
|
67
|
-
joins: ['comments.author', 'owner']
|
68
|
-
client: -> { comments.detect { |comment| comment.author == owner.manager }}}
|
69
|
-
|
70
|
-
# You can also use the client, select, server, and joins option with the default_scope macro
|
71
|
-
|
72
|
-
default_scope server: -> { where(deleted: false).order('updated_at DESC') }
|
73
|
-
select: -> { select { |r| !r.deleted }.sort { |a, b| b <=> a } }
|
74
|
-
|
75
|
-
# NOTE: it is highly recommend to provide a client proc with default_scopes. Otherwise
|
76
|
-
# every change is going to require a server interaction regardless of what other client procs
|
77
|
-
# you provide.
|
78
|
-
|
79
|
-
end
|
80
|
-
```
|
81
|
-
|
82
|
-
#### How it works
|
83
|
-
|
84
|
-
Consider this scope on the Todo model
|
85
|
-
|
86
|
-
```ruby
|
87
|
-
scope :with_managers_comments,
|
88
|
-
server: -> { joins(owner: :manager, comments: :author).where('managers_users.id = authors_comments.id').distinct },
|
89
|
-
client: -> { comments.detect { |comment| comment.author == owner.manager }}
|
90
|
-
joins: ['comments.author', 'owner']
|
91
|
-
```
|
92
|
-
|
93
|
-
The joins 'comments.author' relationship is inverted so that we have User 'has_many' Comments which 'belongs_to' Todos.
|
94
|
-
|
95
|
-
Thus we now know that whenever a User or a Comment changes this may effect our with_managers_comments scope
|
96
|
-
|
97
|
-
Likewise 'owner' becomes User 'has_many' Todos.
|
98
|
-
|
99
|
-
Lets say that a user changes teams and now has a new manager. This means according to the relationships that the
|
100
|
-
User model will change (i.e. there will be a new manager_id in the User model) and thus all Todos belonging to that
|
101
|
-
User are subject to evaluation.
|
102
|
-
|
103
|
-
While the server side proc efficiently delivers all the objects in the scope, the client side proc just needs to incrementally update the scope.
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# Hyperloop Configuration
|
2
|
-
|
3
|
-
TODO will this be replaced by readme from hyper-configuration gem?
|
4
|
-
|
5
|
-
There are parts to the Hyperloop configuration:
|
6
|
-
|
7
|
-
1. Model classes
|
8
|
-
2. Policies
|
9
|
-
3. Push Transport
|
10
|
-
|
11
|
-
## Configuration
|
12
|
-
|
13
|
-
Add an initializer like this:
|
14
|
-
|
15
|
-
```ruby
|
16
|
-
# for rails this would go in: config/initializers/Hyperloop.rb
|
17
|
-
Hyperloop.configuration do |config|
|
18
|
-
config.transport = :simple_poller # or :none, action_cable, :pusher - see below)
|
19
|
-
end
|
20
|
-
# for a minimal setup you will need to define at least one channel, which you can do
|
21
|
-
# in the same file as your initializer.
|
22
|
-
# Normally you would put these policies in the app/policies/ directory
|
23
|
-
class ApplicationPolicy
|
24
|
-
# allow all clients to connect to the Application channel
|
25
|
-
regulate_connection { true } # or always_allow_connection for short
|
26
|
-
# broadcast all model changes over the Application channel *DANGEROUS*
|
27
|
-
regulate_all_broadcasts { |policy| policy.send_all }
|
28
|
-
end
|
29
|
-
```
|
30
|
-
|
31
|
-
A minimal Hyperloop configuration consists of a simple initializer file, and at least one *Policy* class that will *authorize* who gets to see what.
|
32
|
-
|
33
|
-
The initializer file specifies what transport will be used. Currently you can use [Pusher](http://pusher.com), ActionCable (if using Rails 5), Pusher-Fake (for development) or a Simple Poller for testing etc.
|
@@ -1,56 +0,0 @@
|
|
1
|
-
### Pusher-Fake Quickstart
|
2
|
-
|
3
|
-
The [Pusher-Fake](https://github.com/tristandunn/pusher-fake) gem will provide a transport using the same protocol as pusher.com. You can use it to locally test an app that will be put into production using pusher.com.
|
4
|
-
|
5
|
-
#### 1 Add the Pusher, Pusher-Fake and HyperLoop gems to your Rails app
|
6
|
-
|
7
|
-
- add `gem 'pusher'` to your Gemfile.
|
8
|
-
- add `gem 'pusher-fake'` to the development and test sections of your Gemfile.
|
9
|
-
|
10
|
-
If you have not already installed the `hyper-component` and `hyper-model` gems, then do so now using the [hyper-rails](https://github.com/ruby-hyperloop/hyper-rails) gem.
|
11
|
-
|
12
|
-
- add `gem 'hyper-rails'` to your gem file (in the development section)
|
13
|
-
- run `bundle install`
|
14
|
-
- run `rails g hyperloop:install --all` (make sure to use the --all option)
|
15
|
-
- run `bundle update`
|
16
|
-
|
17
|
-
#### 2 Add the pusher js file to your application.js file
|
18
|
-
|
19
|
-
```ruby
|
20
|
-
# app/assets/javascript/application.js
|
21
|
-
...
|
22
|
-
//= require 'hyper-model/pusher'
|
23
|
-
//= require_tree .
|
24
|
-
Opal.load('components');
|
25
|
-
```
|
26
|
-
|
27
|
-
#### 3 Set the transport
|
28
|
-
|
29
|
-
Once you have Hyperloop, and pusher installed then add this initializer:
|
30
|
-
```ruby
|
31
|
-
# typically app/config/initializers/Hyperloop.rb
|
32
|
-
# or you can do a similar setup in your tests (see this gem's specs)
|
33
|
-
require 'pusher'
|
34
|
-
require 'pusher-fake'
|
35
|
-
# Assign any values to the Pusher app_id, key, and secret config values.
|
36
|
-
# These can be fake values or the real values for your pusher account.
|
37
|
-
Pusher.app_id = "MY_TEST_ID" # you use the real or fake values
|
38
|
-
Pusher.key = "MY_TEST_KEY"
|
39
|
-
Pusher.secret = "MY_TEST_SECRET"
|
40
|
-
# The next line actually starts the pusher-fake server (see the Pusher-Fake readme for details.)
|
41
|
-
require 'pusher-fake/support/base' # if using pusher with rspec change this to pusher-fake/support/rspec
|
42
|
-
# now copy over the credentials, and merge with PusherFake's config details
|
43
|
-
Hyperloop.configuration do |config|
|
44
|
-
config.transport = :pusher
|
45
|
-
config.channel_prefix = "Hyperloop"
|
46
|
-
config.opts = {
|
47
|
-
app_id: Pusher.app_id,
|
48
|
-
key: Pusher.key,
|
49
|
-
secret: Pusher.secret
|
50
|
-
}.merge(PusherFake.configuration.web_options)
|
51
|
-
end
|
52
|
-
```
|
53
|
-
|
54
|
-
#### 4 Try It Out
|
55
|
-
|
56
|
-
TODO include try_it_out partial
|
data/docs/pusher_quickstart.md
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
### PusherQuickstart
|
2
|
-
|
3
|
-
[Pusher.com](https://pusher.com/) provides a production ready push transport for your App. You can combine this with [Pusher-Fake](/docs/pusher_faker_quickstart.md) for local testing as well. You can get a free pusher account and API keys at [https://pusher.com](https://pusher.com)
|
4
|
-
|
5
|
-
#### 1 Add the Pusher and HyperLoop gems to your Rails app
|
6
|
-
|
7
|
-
- add `gem 'pusher'` to your Gemfile.
|
8
|
-
|
9
|
-
If you have not already installed the `hyper-component` and `hyper-model` gems, then do so now using the [hyper-rails](https://github.com/ruby-hyperloop/hyper-rails) gem.
|
10
|
-
|
11
|
-
- add `gem 'hyper-rails'` to your gem file (in the development section)
|
12
|
-
- run `bundle install`
|
13
|
-
- run `rails g hyperloop:install --all` (make sure to use the --all option)
|
14
|
-
- run `bundle update`
|
15
|
-
|
16
|
-
#### 2 Add the pusher js file to your application.js file
|
17
|
-
|
18
|
-
```ruby
|
19
|
-
# app/assets/javascript/application.js
|
20
|
-
...
|
21
|
-
//= require 'hyper-model/pusher'
|
22
|
-
//= require_tree .
|
23
|
-
Opal.load('components');
|
24
|
-
```
|
25
|
-
|
26
|
-
#### 3 Set the transport
|
27
|
-
|
28
|
-
Once you have Hyperloop and pusher installed then add this initializer:
|
29
|
-
```ruby
|
30
|
-
# config/initializers/Hyperloop.rb
|
31
|
-
Hyperloop.configuration do |config|
|
32
|
-
config.transport = :pusher
|
33
|
-
config.channel_prefix = "Hyperloop"
|
34
|
-
config.opts = {
|
35
|
-
app_id: "2....9",
|
36
|
-
key: "f.....g",
|
37
|
-
secret: "1.......3"
|
38
|
-
}
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
#### 4 Try It Out
|
43
|
-
|
44
|
-
TODO add try_it_out partial
|
@@ -1,31 +0,0 @@
|
|
1
|
-
### Simple Poller Quickstart
|
2
|
-
|
3
|
-
The easiest push transport is the built-in simple poller. This is great for demos or trying out Hyperloop but because it is constantly polling it is not suitable for production systems or any kind of real debug or test activities.
|
4
|
-
|
5
|
-
#### 1 Add the HyperLoop gems to your Rails app
|
6
|
-
|
7
|
-
If you have not already installed the `hyper-component` and `hyper-model` gems, then do so now using the [hyper-rails](https://github.com/ruby-hyperloop/hyper-rails) gem.
|
8
|
-
|
9
|
-
- add `gem 'hyper-rails'` to your gem file (in the development section)
|
10
|
-
- run `bundle install`
|
11
|
-
- run `rails g hyperloop:install --all` (make sure to use the --all option)
|
12
|
-
- run `bundle update`
|
13
|
-
|
14
|
-
#### 2 Set the transport
|
15
|
-
|
16
|
-
Once you have Hyperloop installed then add this initializer:
|
17
|
-
```ruby
|
18
|
-
#config/initializers/hyperloop.rb
|
19
|
-
Hyperloop.configuration do |config|
|
20
|
-
config.transport = :simple_poller
|
21
|
-
# options
|
22
|
-
# config.opts = {
|
23
|
-
# seconds_between_poll: 5, # default is 0.5 you may need to increase if testing with Selenium
|
24
|
-
# seconds_polled_data_will_be_retained: 1.hour # clears channel data after this time, default is 5 minutes
|
25
|
-
# }
|
26
|
-
end
|
27
|
-
```
|
28
|
-
|
29
|
-
#### 3 Try It Out
|
30
|
-
|
31
|
-
TODO add try_it_out partial
|
data/docs/todo-example.md
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
TODO not sure where this example should go?
|
2
|
-
|
3
|
-
Lets look at part of a very simple Todo application with one model:
|
4
|
-
|
5
|
-
```ruby
|
6
|
-
# app/models/public/todo.rb <- public models are accessible on the client
|
7
|
-
class Todo < ActiveRecord::Base
|
8
|
-
scope :active ->() { where(completed: true) }
|
9
|
-
scope :complete ->() { where(completed: false) }
|
10
|
-
end
|
11
|
-
```
|
12
|
-
|
13
|
-
To show our Todo's we might have a very simple app like this:
|
14
|
-
|
15
|
-
```ruby
|
16
|
-
# app/views/components/app.rb
|
17
|
-
class App < Hyperloop::Component
|
18
|
-
|
19
|
-
define_state scope: :active
|
20
|
-
define_state new_todo: Todo.new
|
21
|
-
|
22
|
-
def todos # display our list of todos
|
23
|
-
ul do
|
24
|
-
Todo.send(state.scope).each do |todo|
|
25
|
-
li do
|
26
|
-
status(todo); todo.title.span; delete_button(todo)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def status(todo) # display / change the status
|
33
|
-
checkbox(type: :checkbox, checked: todo.completed)
|
34
|
-
.on(:click) do
|
35
|
-
todo.completed = !todo.completed
|
36
|
-
todo.save
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def delete_button(todo) # delete a todo
|
41
|
-
button { "delete!" }.on(:click) { todo.destroy }
|
42
|
-
end
|
43
|
-
|
44
|
-
def save_new_todo # save a new todo
|
45
|
-
state.new_todo.save
|
46
|
-
state.new_todo! Todo.new
|
47
|
-
end
|
48
|
-
|
49
|
-
def link(to) # display a link to a scope
|
50
|
-
button { to }.on(:click) { state.scope! to }
|
51
|
-
end
|
52
|
-
|
53
|
-
render do # render everything
|
54
|
-
div do
|
55
|
-
todos
|
56
|
-
input(value: state.new_todo.title)
|
57
|
-
.on(:change) { |e| state.new_todo.title = e.target.value }
|
58
|
-
.on(:key_down) { |e| save_new_todo if e.key_code == 13 }
|
59
|
-
div { link(:all); link(:active); link(:complete) }
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
```
|
64
|
-
|
65
|
-
Finally we will need a controller:
|
66
|
-
|
67
|
-
```ruby
|
68
|
-
class HomeController < ApplicationController
|
69
|
-
def app
|
70
|
-
render_component
|
71
|
-
end
|
72
|
-
end
|
73
|
-
```
|
74
|
-
|
75
|
-
Except for configuration that is our complete App. When the page loads it will show all the todos currently in the database. As the user changes the state of the Todos (or adds more) the changes will be persisted via the Todo model.
|
76
|
-
|
77
|
-
In order to have the changes on one browser be synchronized across all browsers we have to set up some *policies* to define the desired behavior. Here is a very simple policy without any protection:
|
78
|
-
|
79
|
-
```ruby
|
80
|
-
#app/policies/application_policy.rb
|
81
|
-
class ApplicationPolicy
|
82
|
-
always_allow_connection # any browser may connect
|
83
|
-
regulate_all_broadcasts &:send_all # send all changes from all models
|
84
|
-
allow_change(to: :all, on: [:create, :update, :destroy])
|
85
|
-
end
|
86
|
-
```
|
87
|
-
|
88
|
-
That is it!
|
89
|
-
|
90
|
-
Lets walk through what happens users interact with the system.
|
91
|
-
|
92
|
-
When the page first renders (on the server) our `App` component executes (on the server) and renders the initial view. This is no different from the normal rendering cycle of any rails view, the only difference is we are using `Ruby` as our templating language.
|
93
|
-
|
94
|
-
Compare the lines:
|
95
|
-
```ruby
|
96
|
-
ul do
|
97
|
-
Todo.send(state.scope).each do |todo|
|
98
|
-
li do
|
99
|
-
status(todo); todo.title.span; delete_button(todo)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
```
|
104
|
-
to the equivilent html.erb file:
|
105
|
-
```html
|
106
|
-
<ul>
|
107
|
-
<% Todo.send(@scope).each do |todo| %>
|
108
|
-
<li>
|
109
|
-
...
|
110
|
-
</li>
|
111
|
-
<% end %>
|
112
|
-
</ul>
|
113
|
-
```
|
114
|
-
The only difference is your brain doesn't hurt from all the syntactic context switching.
|
115
|
-
|
116
|
-
So the server builds a pile of html and dumps it the browser as normal, but once on the browser we have the exact same ruby code running their as well. It will automatically add all of event handlers (`on(:click), on(:change)`, etc), and as the events occur the underlying react.js system will cause portions of our code to rerender.
|
117
|
-
|
118
|
-
Also during the client load any connections allowed to the browser will be established so that changes in the server database made by other sources will get broadcast to us.
|
data/docs/word_game.md
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
TODO: delete?
|
2
|
-
|
3
|
-
## The 5 Letter Word Game in Hyperloop
|
4
|
-
|
5
|
-
We are going to implement a simple game (that is actually quite fun to play) using HyperMesh.
|
6
|
-
|
7
|
-
In the 5 letter word game two players each secretly pick a 5 letter word that have 5 different letters. *truck* and *knife* for example.
|
8
|
-
|
9
|
-
Each player guesses a word, and the other player responds with the number of correct letters.
|
10
|
-
|
11
|
-
Players continue to take turns until a player guesses the other players word.
|
12
|
-
|
13
|
-
Because we are playing on a computer we are going to add some additional rules.
|
14
|
-
|
15
|
-
Instead of playing until one of the players correctly guesses a word, we will play until both players correctly guess a word, or one of the players concedes.
|
16
|
-
|
17
|
-
Players win by having the *fewest* points.
|
18
|
-
|
19
|
-
Points are calculated as follows:
|
20
|
-
|
21
|
-
+ 2 points for each guess
|
22
|
-
+ 2 points for conceding
|
23
|
-
+ 1 point if a player miscalculates the number of correct letters in the other players guess. The app will give the other player the true answer anyway.
|
24
|
-
+ 3 points if a player asks the app to guess a word. The app will always guess an optimal word (i.e. given all the previous guesses, the app will calculate a word that could be correct.)
|
25
|
-
|
26
|
-
In addition the players agree on a time per turn. If time runs out then the app will guess, and the player will get 3 points instead of 2 (i.e. the last rule above will apply.)
|
27
|
-
|
28
|
-
Each
|
data/docs/words-example.md
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
TODO: not sure where this should go?
|
2
|
-
|
3
|
-
## Random Words example
|
4
|
-
|
5
|
-
This is the example app used by the quick start guides, and if you want to dive deeper this is the place to be.
|
6
|
-
|
7
|
-
If you have not already done so, follow any one of the quick start guides to set up the basic system. Make sure to follow the steps in the last section and add a `Word` model, a `App` component, and a controller and route.
|
8
|
-
|
9
|
-
### The initial component:
|
10
|
-
|
11
|
-
Your initial component should look like this:
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
# app/views/components/app.rb
|
15
|
-
class App < Hyperloop::Component
|
16
|
-
|
17
|
-
def add_new_word
|
18
|
-
# for fun we will use setgetgo.com to get random words!
|
19
|
-
HTTP.get("http://randomword.setgetgo.com/get.php", dataType: :jsonp) do |response|
|
20
|
-
Word.new(text: response.json[:Word]).save
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
render(DIV) do
|
25
|
-
SPAN { "Count of Words: #{Word.count}" }
|
26
|
-
BUTTON { "add another" }.on(:click) { add_new_word }
|
27
|
-
UL do
|
28
|
-
Word.each { |word| LI { word.text } }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
```
|
33
|
-
|
34
|
-
Before going further lets understand exactly what is going on here.
|
35
|
-
|
36
|
-
1) Our controller has a method named `app`, so by convention Reactrb will look for a
|
37
|
-
component class named `App`, which it finds and *mounts* where ever the the *layout* yields to the view.
|
38
|
-
|
39
|
-
Take a second to look at your `application.html.erb` and find the `<%= yield %>`. That is the normal rails way of
|
40
|
-
indicating where the view requested by the controller (in the case our component) should be rendered.
|
41
|
-
|
42
|
-
2) The component is rendered on the server like any other view. The `render` callback defines exactly what to render.
|
43
|
-
|
44
|
-
|
45
|
-
```ruby
|
46
|
-
# app/views/components/app.rb
|
47
|
-
class App < React::Component::Base
|
48
|
-
|
49
|
-
def add_new_word
|
50
|
-
# for fun we will use setgetgo.com to get random words!
|
51
|
-
word = Word.new(text: '')
|
52
|
-
Word << word # force our local list to update before the save
|
53
|
-
HTTP.get("http://randomword.setgetgo.com/get.php", dataType: :jsonp) do |response|
|
54
|
-
word.text = response.json[:Word]
|
55
|
-
word.save
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
render(DIV) do
|
60
|
-
SPAN { "Count of Words: #{Word.count}" }
|
61
|
-
BUTTON { "add another" }.on(:click) { add_new_word }
|
62
|
-
UL do
|
63
|
-
Word.sort.each { |word| LI { word.text.empty? ? 'loading...' : word.text } }
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
```
|