Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Commit to [email protected] support #682

Merged
merged 1 commit into from
Nov 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@ jobs:
strategy:
fail-fast: false
matrix:
rails: [ "6.1", "7.0", "7.1" ]
ruby: [ "3.0", "3.1", "3.2", "3.3" ]
rails: [ "6.1", "7.0", "7.1", "7.2" ]
ruby: [ "2.7", "3.0", "3.1", "3.2", "3.3" ]
allow-fail: [ false ]
include:
- { ruby: "2.6", rails: "6.1" }
- { ruby: "3.3", rails: "main", allow-fail: true }
- { ruby: "3.2", rails: "main", allow-fail: true }
- { ruby: "head", rails: "main", allow-fail: true }
exclude:
- { ruby: "2.7", rails: "7.2" }
- { ruby: "3.0", rails: "7.2" }

env:
FERRUM_PROCESS_TIMEOUT: 25
Expand All @@ -33,6 +37,7 @@ jobs:

- name: Run Bug Template Tests
run: ruby bug_report_template.rb || ruby bug_report_template.rb
continue-on-error: ${{ startsWith(matrix.ruby, '2') || false }}

- name: Run tests
id: test
Expand Down
20 changes: 15 additions & 5 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ source 'https://rubygems.org'

gemspec

rails_version = ENV.fetch("RAILS_VERSION", "7.1")
rails_version = ENV.fetch("RAILS_VERSION", "7.2")

if rails_version == "main"
rails_constraint = { github: "rails/rails" }
Expand All @@ -15,16 +15,26 @@ gem "sprockets-rails"

gem 'rake'
gem 'byebug'
gem 'puma'
gem 'rack'

if RUBY_VERSION < "3"
gem "rack", "< 3"
gem "puma", "< 6"
else
gem "rack"
gem "puma"
end

group :development, :test do
gem 'importmap-rails'
if rails_version == "6.1"
gem "importmap-rails", "0.6.1"
else
gem "importmap-rails"
end
end

group :test do
gem 'capybara'
gem 'rexml'
gem 'cuprite', '~> 0.9', require: 'capybara/cuprite'
gem 'sqlite3', '~> 1.4'
gem 'sqlite3', '1.5'
end
2 changes: 2 additions & 0 deletions app/channels/turbo/streams/broadcasts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ def broadcast_refresh_to(*streamables, **opts)
end

def broadcast_action_to(*streamables, action:, target: nil, targets: nil, attributes: {}, **rendering)
attributes.deep_symbolize_keys! if RUBY_VERSION < "3"

broadcast_stream_to(*streamables, content: turbo_stream_action_tag(
action, target: target, targets: targets, template: render_broadcast_action(rendering), **attributes)
)
Expand Down
9 changes: 7 additions & 2 deletions app/helpers/turbo/streams/action_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@ module Turbo::Streams::ActionHelper
# message = Message.find(1)
# turbo_stream_action_tag "remove", target: [message, :special]
# # => <turbo-stream action="remove" target="special_message_1"></turbo-stream>
def turbo_stream_action_tag(action, target: nil, targets: nil, template: nil, **attributes)
def turbo_stream_action_tag(action, attributes = {})
attributes.deep_symbolize_keys! if RUBY_VERSION < "3"

target = attributes.delete(:target)
targets = attributes.delete(:targets)
template = attributes.delete(:template)
template = action.to_sym.in?(%i[ remove refresh ]) ? "" : tag.template(template.to_s.html_safe)

if target = convert_to_turbo_stream_dom_id(target)
Expand All @@ -39,7 +44,7 @@ def turbo_stream_action_tag(action, target: nil, targets: nil, template: nil, **
# turbo_stream_refresh_tag
# # => <turbo-stream action="refresh"></turbo-stream>
def turbo_stream_refresh_tag(request_id: Turbo.current_request_id, **attributes)
turbo_stream_action_tag(:refresh, **{ "request-id": request_id }.compact, **attributes)
turbo_stream_action_tag(:refresh, attributes.with_defaults({ "request-id": request_id }.compact))
end

private
Expand Down
2 changes: 1 addition & 1 deletion app/models/concerns/turbo/broadcastable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ def broadcast_target_default
self.class.broadcast_target_default
end

def extract_options_and_add_target(rendering = {}, target: broadcast_target_default)
def extract_options_and_add_target(rendering, target: broadcast_target_default)
broadcast_rendering_with_defaults(rendering).tap do |options|
options[:target] = target if !options.key?(:target) && !options.key?(:targets)
end
Expand Down
4 changes: 2 additions & 2 deletions app/models/turbo/streams/tag_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,8 @@ def prepend_all(targets, content = nil, **rendering, &block)
#
# turbo_stream.refresh request_id: "abc123"
# # => <turbo-stream action="refresh" request-id="abc123"></turbo-stream>
def refresh(...)
turbo_stream_refresh_tag(...)
def refresh(**options)
turbo_stream_refresh_tag(**options)
end

# Send an action of the type <tt>name</tt> to <tt>target</tt>. Options described in the concrete methods.
Expand Down
2 changes: 1 addition & 1 deletion lib/turbo/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ class TurboStreamEncoder < IdentityEncoder
ActiveSupport.on_load(:action_dispatch_system_test_case) do
app.config.turbo.test_connect_after_actions.map do |method|
class_eval <<~RUBY, __FILE__, __LINE__ + 1
def #{method}(...) # def visit(...)
def #{method}(*args, &block) # def visit(*args, &block)
super.tap { connect_turbo_cable_stream_sources } # super.tap { connect_turbo_cable_stream_sources }
end # end
RUBY
Expand Down
8 changes: 4 additions & 4 deletions lib/turbo/system_test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ def connect_turbo_cable_stream_sources(**options, &block)
#
# In addition to the filters listed above, accepts any valid Capybara global
# filter option.
def assert_turbo_cable_stream_source(...)
assert_selector(:turbo_cable_stream_source, ...)
def assert_turbo_cable_stream_source(*args, &block)
assert_selector(:turbo_cable_stream_source, *args, &block)
end

# Asserts that a `<turbo-cable-stream-source>` element is absent from the
Expand All @@ -75,8 +75,8 @@ def assert_turbo_cable_stream_source(...)
#
# In addition to the filters listed above, accepts any valid Capybara global
# filter option.
def assert_no_turbo_cable_stream_source(...)
assert_no_selector(:turbo_cable_stream_source, ...)
def assert_no_turbo_cable_stream_source(*args, &block)
assert_no_selector(:turbo_cable_stream_source, *args, &block)
end

Capybara.add_selector :turbo_cable_stream_source do
Expand Down
10 changes: 6 additions & 4 deletions test/streams/broadcastable_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ def to_partial_path

test "broadcasting ignores blank streamables" do
ActionCable.server.stub :broadcast, proc { flunk "expected no broadcasts" } do
@message.broadcast_remove_to nil
@message.broadcast_remove_to [nil]
@message.broadcast_remove_to ""
@message.broadcast_remove_to [""]
assert_no_broadcasts @message.to_gid_param do
@message.broadcast_remove_to nil
@message.broadcast_remove_to [nil]
@message.broadcast_remove_to ""
@message.broadcast_remove_to [""]
end
end
end

Expand Down
14 changes: 10 additions & 4 deletions test/streams/streams_helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@ class TestChannel < ApplicationCable::Channel; end

class Turbo::StreamsHelperTest < ActionView::TestCase
class Component
extend ActiveModel::Naming
include ActiveModel::Model

def initialize(id:, content:) = (@id, @content = id, content)
def render_in(...) = @content
def to_key = [@id]
attr_accessor :id, :content

def render_in(view_context)
content
end

def to_key
[id]
end
end

attr_accessor :formats
Expand Down
4 changes: 2 additions & 2 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
ActionCable.server.config.logger = Logger.new(STDOUT) if ENV["VERBOSE"]

module ActionViewTestCaseExtensions
def render(...)
ApplicationController.renderer.render(...)
def render(*args, &block)
ApplicationController.renderer.render(*args, &block)
end
end

Expand Down
Loading