cable_ready 5.0.0.pre9 → 5.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -1
- data/Gemfile.lock +119 -100
- data/README.md +12 -15
- data/app/assets/javascripts/cable_ready.js +465 -155
- data/app/assets/javascripts/cable_ready.umd.js +449 -169
- data/app/channels/cable_ready/stream.rb +7 -5
- data/app/helpers/cable_ready/view_helper.rb +58 -0
- data/app/jobs/cable_ready/broadcast_job.rb +15 -0
- data/app/models/concerns/cable_ready/updatable/collection_updatable_callbacks.rb +2 -0
- data/app/models/concerns/cable_ready/updatable/collections_registry.rb +31 -5
- data/app/models/concerns/cable_ready/updatable/model_updatable_callbacks.rb +9 -4
- data/app/models/concerns/cable_ready/updatable.rb +107 -39
- data/app/models/concerns/extend_has_many.rb +2 -0
- data/cable_ready.gemspec +4 -6
- data/lib/cable_ready/broadcaster.rb +2 -0
- data/lib/cable_ready/cable_car.rb +2 -0
- data/lib/cable_ready/channel.rb +12 -4
- data/lib/cable_ready/channels.rb +3 -1
- data/lib/cable_ready/config.rb +17 -2
- data/lib/cable_ready/engine.rb +33 -14
- data/lib/cable_ready/identifiable.rb +23 -5
- data/lib/cable_ready/importmap.rb +3 -1
- data/lib/cable_ready/installer.rb +224 -0
- data/lib/cable_ready/operation_builder.rb +1 -1
- data/lib/cable_ready/sanity_checker.rb +1 -31
- data/lib/cable_ready/updatable/memory_cache_debounce_adapter.rb +22 -0
- data/lib/cable_ready/version.rb +1 -1
- data/lib/cable_ready.rb +5 -8
- data/lib/cable_ready_helper.rb +13 -0
- data/lib/generators/cable_ready/channel_generator.rb +51 -12
- data/lib/generators/cable_ready/templates/config/initializers/cable_ready.rb +15 -6
- data/lib/install/action_cable.rb +144 -0
- data/lib/install/broadcaster.rb +109 -0
- data/lib/install/bundle.rb +54 -0
- data/lib/install/compression.rb +51 -0
- data/lib/install/config.rb +39 -0
- data/lib/install/development.rb +34 -0
- data/lib/install/esbuild.rb +101 -0
- data/lib/install/importmap.rb +96 -0
- data/lib/install/initializers.rb +15 -0
- data/lib/install/mrujs.rb +121 -0
- data/lib/install/npm_packages.rb +13 -0
- data/lib/install/shakapacker.rb +65 -0
- data/lib/install/spring.rb +54 -0
- data/lib/install/updatable.rb +34 -0
- data/lib/install/vite.rb +66 -0
- data/lib/install/webpacker.rb +93 -0
- data/lib/install/yarn.rb +56 -0
- data/lib/tasks/cable_ready/cable_ready.rake +247 -0
- data/package.json +36 -22
- data/{rollup.config.js → rollup.config.mjs} +7 -25
- data/web-test-runner.config.mjs +12 -0
- data/yarn.lock +3058 -398
- metadata +39 -167
- data/IMPLEMENTATION.md +0 -93
- data/LATEST +0 -1
- data/app/assets/javascripts/cable_ready.min.js +0 -2
- data/app/assets/javascripts/cable_ready.min.js.map +0 -1
- data/app/assets/javascripts/cable_ready.umd.min.js +0 -2
- data/app/assets/javascripts/cable_ready.umd.min.js.map +0 -1
- data/app/helpers/cable_ready_helper.rb +0 -26
- data/app/jobs/cable_ready_broadcast_job.rb +0 -14
- data/lib/generators/cable_ready/helpers_generator.rb +0 -43
- data/lib/generators/cable_ready/initializer_generator.rb +0 -14
- data/test/dummy/app/channels/application_cable/channel.rb +0 -4
- data/test/dummy/app/channels/application_cable/connection.rb +0 -4
- data/test/dummy/app/controllers/application_controller.rb +0 -2
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/jobs/application_job.rb +0 -7
- data/test/dummy/app/mailers/application_mailer.rb +0 -4
- data/test/dummy/app/models/application_record.rb +0 -3
- data/test/dummy/app/models/dugong.rb +0 -4
- data/test/dummy/app/models/global_idable_entity.rb +0 -16
- data/test/dummy/app/models/post.rb +0 -4
- data/test/dummy/app/models/section.rb +0 -6
- data/test/dummy/app/models/team.rb +0 -6
- data/test/dummy/app/models/topic.rb +0 -4
- data/test/dummy/app/models/user.rb +0 -7
- data/test/dummy/config/application.rb +0 -22
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -76
- data/test/dummy/config/environments/production.rb +0 -120
- data/test/dummy/config/environments/test.rb +0 -59
- data/test/dummy/config/initializers/application_controller_renderer.rb +0 -8
- data/test/dummy/config/initializers/assets.rb +0 -12
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -8
- data/test/dummy/config/initializers/cable_ready.rb +0 -18
- data/test/dummy/config/initializers/content_security_policy.rb +0 -28
- data/test/dummy/config/initializers/cookies_serializer.rb +0 -5
- data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -6
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -4
- data/test/dummy/config/initializers/permissions_policy.rb +0 -11
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/puma.rb +0 -43
- data/test/dummy/config/routes.rb +0 -3
- data/test/dummy/db/migrate/20210902154139_create_users.rb +0 -9
- data/test/dummy/db/migrate/20210902154153_create_posts.rb +0 -10
- data/test/dummy/db/migrate/20210904081930_create_topics.rb +0 -9
- data/test/dummy/db/migrate/20210904093607_create_sections.rb +0 -9
- data/test/dummy/db/migrate/20210913191735_create_teams.rb +0 -8
- data/test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb +0 -5
- data/test/dummy/db/migrate/20220329222959_create_dugongs.rb +0 -8
- data/test/dummy/db/migrate/20220329230221_create_active_storage_tables.active_storage.rb +0 -36
- data/test/dummy/db/schema.rb +0 -84
- data/test/dummy/test/models/dugong_test.rb +0 -7
- data/test/dummy/test/models/post_test.rb +0 -7
- data/test/dummy/test/models/section_test.rb +0 -7
- data/test/dummy/test/models/team_test.rb +0 -7
- data/test/dummy/test/models/topic_test.rb +0 -7
- data/test/dummy/test/models/user_test.rb +0 -7
- data/test/lib/cable_ready/cable_car_test.rb +0 -50
- data/test/lib/cable_ready/compoundable_test.rb +0 -26
- data/test/lib/cable_ready/helper_test.rb +0 -25
- data/test/lib/cable_ready/identifiable_test.rb +0 -69
- data/test/lib/cable_ready/operation_builder_test.rb +0 -189
- data/test/lib/cable_ready/updatable_test.rb +0 -135
- data/test/lib/generators/cable_ready/channel_generator_test.rb +0 -157
- data/test/support/generator_test_helpers.rb +0 -28
- data/test/test_helper.rb +0 -18
@@ -1,12 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# Version of your assets, change this if you want to expire all your assets.
|
4
|
-
Rails.application.config.assets.version = '1.0'
|
5
|
-
|
6
|
-
# Add additional assets to the asset load path.
|
7
|
-
# Rails.application.config.assets.paths << Emoji.images_path
|
8
|
-
|
9
|
-
# Precompile additional assets.
|
10
|
-
# application.js, application.css, and all non-JS/CSS in the app/assets
|
11
|
-
# folder are already added.
|
12
|
-
# Rails.application.config.assets.precompile += %w( admin.js admin.css )
|
@@ -1,8 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
-
# Rails.backtrace_cleaner.add_silencer { |line| /my_noisy_library/.match?(line) }
|
5
|
-
|
6
|
-
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code
|
7
|
-
# by setting BACKTRACE=1 before calling your invocation, like "BACKTRACE=1 ./bin/rails runner 'MyClass.perform'".
|
8
|
-
Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
CableReady.configure do |config|
|
4
|
-
# Enable/disable exiting / warning when the sanity checks fail options:
|
5
|
-
# `:exit` or `:warn` or `:ignore`
|
6
|
-
|
7
|
-
config.on_failed_sanity_checks = :ignore
|
8
|
-
|
9
|
-
# Enable/disable exiting / warning when there's a new CableReady release
|
10
|
-
# `:exit` or `:warn` or `:ignore`
|
11
|
-
|
12
|
-
# config.on_new_version_available = :ignore
|
13
|
-
|
14
|
-
# Define your own custom operations
|
15
|
-
# https://cableready.stimulusreflex.com/customization#custom-operations
|
16
|
-
|
17
|
-
# config.add_operation_name :jazz_hands
|
18
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# Define an application-wide content security policy
|
4
|
-
# For further information see the following documentation
|
5
|
-
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
|
6
|
-
|
7
|
-
# Rails.application.config.content_security_policy do |policy|
|
8
|
-
# policy.default_src :self, :https
|
9
|
-
# policy.font_src :self, :https, :data
|
10
|
-
# policy.img_src :self, :https, :data
|
11
|
-
# policy.object_src :none
|
12
|
-
# policy.script_src :self, :https
|
13
|
-
# policy.style_src :self, :https
|
14
|
-
|
15
|
-
# # Specify URI for violation reports
|
16
|
-
# # policy.report_uri "/csp-violation-report-endpoint"
|
17
|
-
# end
|
18
|
-
|
19
|
-
# If you are using UJS then enable automatic nonce generation
|
20
|
-
# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
|
21
|
-
|
22
|
-
# Set the nonce only to specific directives
|
23
|
-
# Rails.application.config.content_security_policy_nonce_directives = %w(script-src)
|
24
|
-
|
25
|
-
# Report CSP violations to a specified URI
|
26
|
-
# For further information see the following documentation:
|
27
|
-
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
|
28
|
-
# Rails.application.config.content_security_policy_report_only = true
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# Add new inflection rules using the following format. Inflections
|
4
|
-
# are locale specific, and you may define rules for as many different
|
5
|
-
# locales as you wish. All of these examples are active by default:
|
6
|
-
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
7
|
-
# inflect.plural /^(ox)$/i, '\1en'
|
8
|
-
# inflect.singular /^(ox)en/i, '\1'
|
9
|
-
# inflect.irregular 'person', 'people'
|
10
|
-
# inflect.uncountable %w( fish sheep )
|
11
|
-
# end
|
12
|
-
|
13
|
-
# These inflection rules are supported but not enabled by default:
|
14
|
-
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
15
|
-
# inflect.acronym 'RESTful'
|
16
|
-
# end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# Define an application-wide HTTP permissions policy. For further
|
2
|
-
# information see https://developers.google.com/web/updates/2018/06/feature-policy
|
3
|
-
#
|
4
|
-
# Rails.application.config.permissions_policy do |f|
|
5
|
-
# f.camera :none
|
6
|
-
# f.gyroscope :none
|
7
|
-
# f.microphone :none
|
8
|
-
# f.usb :none
|
9
|
-
# f.fullscreen :self
|
10
|
-
# f.payment :self, "https://secure.example.com"
|
11
|
-
# end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
-
# is enabled by default.
|
5
|
-
|
6
|
-
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
-
ActiveSupport.on_load(:action_controller) do
|
8
|
-
wrap_parameters format: [:json]
|
9
|
-
end
|
10
|
-
|
11
|
-
# To enable root element in JSON for ActiveRecord objects.
|
12
|
-
# ActiveSupport.on_load(:active_record) do
|
13
|
-
# self.include_root_in_json = true
|
14
|
-
# end
|
data/test/dummy/config/puma.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# Puma can serve each request in a thread from an internal thread pool.
|
2
|
-
# The `threads` method setting takes two numbers: a minimum and maximum.
|
3
|
-
# Any libraries that use thread pools should be configured to match
|
4
|
-
# the maximum value specified for Puma. Default is set to 5 threads for minimum
|
5
|
-
# and maximum; this matches the default thread size of Active Record.
|
6
|
-
#
|
7
|
-
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
|
8
|
-
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
|
9
|
-
threads min_threads_count, max_threads_count
|
10
|
-
|
11
|
-
# Specifies the `worker_timeout` threshold that Puma will use to wait before
|
12
|
-
# terminating a worker in development environments.
|
13
|
-
#
|
14
|
-
worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
|
15
|
-
|
16
|
-
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
|
17
|
-
#
|
18
|
-
port ENV.fetch("PORT") { 3000 }
|
19
|
-
|
20
|
-
# Specifies the `environment` that Puma will run in.
|
21
|
-
#
|
22
|
-
environment ENV.fetch("RAILS_ENV") { "development" }
|
23
|
-
|
24
|
-
# Specifies the `pidfile` that Puma will use.
|
25
|
-
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
|
26
|
-
|
27
|
-
# Specifies the number of `workers` to boot in clustered mode.
|
28
|
-
# Workers are forked web server processes. If using threads and workers together
|
29
|
-
# the concurrency of the application would be max `threads` * `workers`.
|
30
|
-
# Workers do not work on JRuby or Windows (both of which do not support
|
31
|
-
# processes).
|
32
|
-
#
|
33
|
-
# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
|
34
|
-
|
35
|
-
# Use the `preload_app!` method when specifying a `workers` number.
|
36
|
-
# This directive tells Puma to first boot the application and load code
|
37
|
-
# before forking the application. This takes advantage of Copy On Write
|
38
|
-
# process behavior so workers use less memory.
|
39
|
-
#
|
40
|
-
# preload_app!
|
41
|
-
|
42
|
-
# Allow puma to be restarted by `rails restart` command.
|
43
|
-
plugin :tmp_restart
|
data/test/dummy/config/routes.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# This migration comes from active_storage (originally 20170806125915)
|
2
|
-
class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
|
3
|
-
def change
|
4
|
-
create_table :active_storage_blobs do |t|
|
5
|
-
t.string :key, null: false
|
6
|
-
t.string :filename, null: false
|
7
|
-
t.string :content_type
|
8
|
-
t.text :metadata
|
9
|
-
t.string :service_name, null: false
|
10
|
-
t.bigint :byte_size, null: false
|
11
|
-
t.string :checksum, null: false
|
12
|
-
t.datetime :created_at, null: false
|
13
|
-
|
14
|
-
t.index [ :key ], unique: true
|
15
|
-
end
|
16
|
-
|
17
|
-
create_table :active_storage_attachments do |t|
|
18
|
-
t.string :name, null: false
|
19
|
-
t.references :record, null: false, polymorphic: true, index: false
|
20
|
-
t.references :blob, null: false
|
21
|
-
|
22
|
-
t.datetime :created_at, null: false
|
23
|
-
|
24
|
-
t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
|
25
|
-
t.foreign_key :active_storage_blobs, column: :blob_id
|
26
|
-
end
|
27
|
-
|
28
|
-
create_table :active_storage_variant_records do |t|
|
29
|
-
t.belongs_to :blob, null: false, index: false
|
30
|
-
t.string :variation_digest, null: false
|
31
|
-
|
32
|
-
t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true
|
33
|
-
t.foreign_key :active_storage_blobs, column: :blob_id
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/test/dummy/db/schema.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
# This file is auto-generated from the current state of the database. Instead
|
2
|
-
# of editing this file, please use the migrations feature of Active Record to
|
3
|
-
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
-
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `bin/rails
|
6
|
-
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
7
|
-
# be faster and is potentially less error prone than running all of your
|
8
|
-
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
|
-
# migrations use external dependencies or application code.
|
10
|
-
#
|
11
|
-
# It's strongly recommended that you check this file into your version control system.
|
12
|
-
|
13
|
-
ActiveRecord::Schema.define(version: 2022_03_29_230221) do
|
14
|
-
|
15
|
-
create_table "active_storage_attachments", force: :cascade do |t|
|
16
|
-
t.string "name", null: false
|
17
|
-
t.string "record_type", null: false
|
18
|
-
t.integer "record_id", null: false
|
19
|
-
t.integer "blob_id", null: false
|
20
|
-
t.datetime "created_at", null: false
|
21
|
-
t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
|
22
|
-
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table "active_storage_blobs", force: :cascade do |t|
|
26
|
-
t.string "key", null: false
|
27
|
-
t.string "filename", null: false
|
28
|
-
t.string "content_type"
|
29
|
-
t.text "metadata"
|
30
|
-
t.string "service_name", null: false
|
31
|
-
t.bigint "byte_size", null: false
|
32
|
-
t.string "checksum", null: false
|
33
|
-
t.datetime "created_at", null: false
|
34
|
-
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
|
35
|
-
end
|
36
|
-
|
37
|
-
create_table "active_storage_variant_records", force: :cascade do |t|
|
38
|
-
t.integer "blob_id", null: false
|
39
|
-
t.string "variation_digest", null: false
|
40
|
-
t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
|
41
|
-
end
|
42
|
-
|
43
|
-
create_table "dugongs", force: :cascade do |t|
|
44
|
-
t.datetime "created_at", precision: 6, null: false
|
45
|
-
t.datetime "updated_at", precision: 6, null: false
|
46
|
-
end
|
47
|
-
|
48
|
-
create_table "posts", force: :cascade do |t|
|
49
|
-
t.string "title"
|
50
|
-
t.integer "user_id", null: false
|
51
|
-
t.datetime "created_at", precision: 6, null: false
|
52
|
-
t.datetime "updated_at", precision: 6, null: false
|
53
|
-
t.index ["user_id"], name: "index_posts_on_user_id"
|
54
|
-
end
|
55
|
-
|
56
|
-
create_table "sections", force: :cascade do |t|
|
57
|
-
t.string "title"
|
58
|
-
t.datetime "created_at", precision: 6, null: false
|
59
|
-
t.datetime "updated_at", precision: 6, null: false
|
60
|
-
end
|
61
|
-
|
62
|
-
create_table "teams", force: :cascade do |t|
|
63
|
-
t.datetime "created_at", precision: 6, null: false
|
64
|
-
t.datetime "updated_at", precision: 6, null: false
|
65
|
-
end
|
66
|
-
|
67
|
-
create_table "topics", force: :cascade do |t|
|
68
|
-
t.string "title"
|
69
|
-
t.datetime "created_at", precision: 6, null: false
|
70
|
-
t.datetime "updated_at", precision: 6, null: false
|
71
|
-
end
|
72
|
-
|
73
|
-
create_table "users", force: :cascade do |t|
|
74
|
-
t.string "name"
|
75
|
-
t.datetime "created_at", precision: 6, null: false
|
76
|
-
t.datetime "updated_at", precision: 6, null: false
|
77
|
-
t.integer "team_id"
|
78
|
-
t.index ["team_id"], name: "index_users_on_team_id"
|
79
|
-
end
|
80
|
-
|
81
|
-
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
|
82
|
-
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
|
83
|
-
add_foreign_key "posts", "users"
|
84
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
require_relative "../../../lib/cable_ready"
|
5
|
-
|
6
|
-
class CableReady::CableCarTest < ActiveSupport::TestCase
|
7
|
-
setup do
|
8
|
-
@cable_car = CableReady::CableCar.instance
|
9
|
-
end
|
10
|
-
|
11
|
-
test "dispatch should return json-ifiable payload" do
|
12
|
-
CableReady::CableCar.instance.reset!
|
13
|
-
dispatch = CableReady::CableCar.instance.inner_html(selector: "#users", html: "<span>winning</span>").dispatch
|
14
|
-
assert_equal([{"operation" => "innerHtml", "selector" => "#users", "html" => "<span>winning</span>"}], dispatch)
|
15
|
-
end
|
16
|
-
|
17
|
-
test "dispatch should clear operations" do
|
18
|
-
CableReady::CableCar.instance.reset!
|
19
|
-
CableReady::CableCar.instance.inner_html(selector: "#users", html: "<span>winning</span>").dispatch
|
20
|
-
assert_equal([], CableReady::CableCar.instance.instance_variable_get(:@enqueued_operations))
|
21
|
-
end
|
22
|
-
|
23
|
-
test "dispatch should maintain operations if clear is false" do
|
24
|
-
CableReady::CableCar.instance.reset!
|
25
|
-
CableReady::CableCar.instance.inner_html(selector: "#users", html: "<span>winning</span>").dispatch(clear: false)
|
26
|
-
assert_equal([{"operation" => "innerHtml", "selector" => "#users", "html" => "<span>winning</span>"}], CableReady::CableCar.instance.instance_variable_get(:@enqueued_operations))
|
27
|
-
end
|
28
|
-
|
29
|
-
test "selectors should accept any object which respond_to? to_dom_selector" do
|
30
|
-
CableReady::CableCar.instance.reset!
|
31
|
-
my_object = Struct.new(:id) do
|
32
|
-
def to_dom_selector
|
33
|
-
".#{id}"
|
34
|
-
end
|
35
|
-
end.new("users")
|
36
|
-
dispatch = CableReady::CableCar.instance.inner_html(selector: my_object, html: "<span>winning</span>").dispatch
|
37
|
-
assert_equal([{"operation" => "innerHtml", "selector" => ".users", "html" => "<span>winning</span>"}], dispatch)
|
38
|
-
end
|
39
|
-
|
40
|
-
test "selectors should accept any object which respond_to? to_dom_id" do
|
41
|
-
CableReady::CableCar.instance.reset!
|
42
|
-
my_object = Struct.new(:id) do
|
43
|
-
def to_dom_id
|
44
|
-
id
|
45
|
-
end
|
46
|
-
end.new("users")
|
47
|
-
dispatch = CableReady::CableCar.instance.inner_html(selector: my_object, html: "<span>winning</span>").dispatch
|
48
|
-
assert_equal([{"operation" => "innerHtml", "selector" => "#users", "html" => "<span>winning</span>"}], dispatch)
|
49
|
-
end
|
50
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
require_relative "../../../lib/cable_ready"
|
5
|
-
|
6
|
-
class CableReady::CompoundableTest < ActiveSupport::TestCase
|
7
|
-
include CableReady::Compoundable
|
8
|
-
|
9
|
-
test "compounds an ActiveRecord::Base" do
|
10
|
-
user = User.create(name: "Alan Turing")
|
11
|
-
|
12
|
-
assert_equal "gid://dummy/User/1", compound([user])
|
13
|
-
end
|
14
|
-
|
15
|
-
test "compounds any GlobalId-able entity" do
|
16
|
-
entity = GlobalIdableEntity.new
|
17
|
-
|
18
|
-
assert_equal "gid://dummy/GlobalIdableEntity/fake-id", compound([entity])
|
19
|
-
end
|
20
|
-
|
21
|
-
test "compounds any combination of globalid-able and strings" do
|
22
|
-
user = User.create(name: "Alan Turing")
|
23
|
-
|
24
|
-
assert_equal "gid://dummy/User/1:enigma", compound([user, :enigma])
|
25
|
-
end
|
26
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class CableReady::HelperTest < ActionView::TestCase
|
6
|
-
include CableReadyHelper
|
7
|
-
|
8
|
-
# stream_from
|
9
|
-
|
10
|
-
test "stream_from renders html options" do
|
11
|
-
element = Nokogiri::HTML.fragment(stream_from("key", html_options: {class: "block", data: {controller: "modal"}}) {})
|
12
|
-
|
13
|
-
assert_equal "block", element.children.first["class"]
|
14
|
-
assert_equal "modal", element.children.first["data-controller"]
|
15
|
-
end
|
16
|
-
|
17
|
-
# updates_for
|
18
|
-
|
19
|
-
test "updates_for renders html options" do
|
20
|
-
element = Nokogiri::HTML.fragment(updates_for("key", html_options: {class: "block", data: {controller: "modal"}}) {})
|
21
|
-
|
22
|
-
assert_equal "block", element.children.first["class"]
|
23
|
-
assert_equal "modal", element.children.first["data-controller"]
|
24
|
-
end
|
25
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
require_relative "../../../lib/cable_ready"
|
5
|
-
|
6
|
-
class CableReady::IdentifiableTest < ActiveSupport::TestCase
|
7
|
-
include CableReady::Identifiable
|
8
|
-
|
9
|
-
test "should handle nil" do
|
10
|
-
assert_equal "#", dom_id(nil)
|
11
|
-
end
|
12
|
-
|
13
|
-
test "should work with strings" do
|
14
|
-
assert_equal "#users", dom_id("users")
|
15
|
-
assert_equal "#users", dom_id("users ")
|
16
|
-
assert_equal "#users", dom_id(" users ")
|
17
|
-
end
|
18
|
-
|
19
|
-
test "should work with symbols" do
|
20
|
-
assert_equal "#users", dom_id(:users)
|
21
|
-
assert_equal "#active_users", dom_id(:active_users)
|
22
|
-
end
|
23
|
-
|
24
|
-
test "should just return one hash" do
|
25
|
-
assert_equal "#users", dom_id("users")
|
26
|
-
assert_equal "#users", dom_id("#users")
|
27
|
-
assert_equal "#users", dom_id("##users")
|
28
|
-
end
|
29
|
-
|
30
|
-
test "should strip prefixes" do
|
31
|
-
assert_equal "#active_users", dom_id(" users ", " active ")
|
32
|
-
assert_equal "#all_active_users", dom_id(" users ", " all_active ")
|
33
|
-
end
|
34
|
-
|
35
|
-
test "should not include provided prefix if prefix is nil" do
|
36
|
-
assert_equal "#users", dom_id("users", nil)
|
37
|
-
end
|
38
|
-
|
39
|
-
test "should work with ActiveRecord::Relation" do
|
40
|
-
relation = mock("ActiveRecord::Relation")
|
41
|
-
|
42
|
-
relation.stubs(:is_a?).with(ActiveRecord::Relation).returns(true).at_least_once
|
43
|
-
relation.stubs(:is_a?).with(ActiveRecord::Base).never
|
44
|
-
relation.stubs(:model_name).returns(OpenStruct.new(plural: "users"))
|
45
|
-
|
46
|
-
assert_equal "#users", dom_id(relation)
|
47
|
-
assert_equal "#users", dom_id(relation, nil)
|
48
|
-
assert_equal "#active_users", dom_id(relation, "active")
|
49
|
-
end
|
50
|
-
|
51
|
-
test "should work with ActiveRecord::Base" do
|
52
|
-
User.any_instance.stubs(:is_a?).with(ActiveRecord::Relation).returns(false)
|
53
|
-
User.any_instance.stubs(:is_a?).with(ActiveRecord::Base).returns(true)
|
54
|
-
|
55
|
-
assert_equal "#new_user", dom_id(User.new(id: nil))
|
56
|
-
|
57
|
-
user = User.new(id: 42)
|
58
|
-
|
59
|
-
assert_equal "#user_42", dom_id(user)
|
60
|
-
assert_equal "#user_42", dom_id(user, nil)
|
61
|
-
assert_equal "#all_active_user_42", dom_id(user, "all_active")
|
62
|
-
|
63
|
-
user = User.new(id: 99)
|
64
|
-
|
65
|
-
assert_equal "#user_99", dom_id(user)
|
66
|
-
assert_equal "#user_99", dom_id(user, nil)
|
67
|
-
assert_equal "#all_active_user_99", dom_id(user, "all_active")
|
68
|
-
end
|
69
|
-
end
|