diff --git a/app/controllers/concerns/view_component/preview_actions.rb b/app/controllers/concerns/view_component/preview_actions.rb index 1a4e7536e..db20a3a09 100644 --- a/app/controllers/concerns/view_component/preview_actions.rb +++ b/app/controllers/concerns/view_component/preview_actions.rb @@ -10,7 +10,7 @@ module PreviewActions around_action :set_locale, only: :previews before_action :require_local!, unless: :show_previews? - content_security_policy(false) if respond_to?(:content_security_policy) + content_security_policy(false) # Including helpers here ensures that we're loading the # latest version of helpers if code-reloading is enabled diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index ac7b9f2a5..1fbf49052 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -51,6 +51,10 @@ nav_order: 5 *Reegan Viljoen* +* Removed `respond_to?` methods from three files. + + *Tiago Menegaz* + ## 3.21.0 * Updates testing docs to include an example of how to use with RSpec. diff --git a/lib/view_component/base.rb b/lib/view_component/base.rb index 5099901a9..2e95ad18e 100644 --- a/lib/view_component/base.rb +++ b/lib/view_component/base.rb @@ -246,7 +246,7 @@ def method_missing(method_name, *args) # rubocop:disable Style/MissingRespondToM super rescue => e # rubocop:disable Style/RescueStandardError e.set_backtrace e.backtrace.tap(&:shift) - raise e, <<~MESSAGE.chomp if view_context && e.is_a?(NameError) && helpers.respond_to?(method_name) + raise e, <<~MESSAGE.chomp if view_context && e.is_a?(NameError) && helpers.methods.include?(method_name.to_sym) #{e.message} You may be trying to call a method provided as a view helper. Did you mean `helpers.#{method_name}'? @@ -287,7 +287,8 @@ def request # # @private def __vc_request - @__vc_request ||= controller.request if controller.respond_to?(:request) + @__vc_request ||= controller.request + rescue NoMethodError end # The content passed to the component instance as a block. @@ -678,7 +679,7 @@ def splatted_keyword_argument_present? end def initialize_parameter_names - return attribute_names.map(&:to_sym) if respond_to?(:attribute_names) + return attribute_names.map(&:to_sym) if method_defined?(:attribute_names) initialize_parameters.map(&:last) end diff --git a/lib/view_component/collection.rb b/lib/view_component/collection.rb index d3c13e56a..d12ef03e6 100644 --- a/lib/view_component/collection.rb +++ b/lib/view_component/collection.rb @@ -56,7 +56,7 @@ def initialize(component, object, spacer_component, **options) end def collection_variable(object) - if object.respond_to?(:to_ary) + if object.class.method_defined?(:to_ary) object.to_ary else raise InvalidCollectionArgumentError diff --git a/lib/view_component/slotable.rb b/lib/view_component/slotable.rb index a8c298965..a225f902c 100644 --- a/lib/view_component/slotable.rb +++ b/lib/view_component/slotable.rb @@ -168,7 +168,7 @@ def renders_many(slot_name, callable = nil) define_method :"with_#{slot_name}" do |collection_args = nil, &block| collection_args.map do |args| - if args.respond_to?(:to_hash) + if args.class.method_defined?(:to_hash) set_slot(slot_name, nil, **args, &block) else set_slot(slot_name, nil, *args, &block) diff --git a/lib/view_component/slotable_default.rb b/lib/view_component/slotable_default.rb index 538622f01..0b4eaf727 100644 --- a/lib/view_component/slotable_default.rb +++ b/lib/view_component/slotable_default.rb @@ -8,7 +8,7 @@ def get_slot(slot_name) renderable_value = send(default_method) slot = Slot.new(self) - if renderable_value.respond_to?(:render_in) + if renderable_value.class.method_defined?(:render_in) slot.__vc_component_instance = renderable_value else slot.__vc_content = renderable_value diff --git a/lib/view_component/translatable.rb b/lib/view_component/translatable.rb index 422218207..834af1212 100644 --- a/lib/view_component/translatable.rb +++ b/lib/view_component/translatable.rb @@ -127,7 +127,7 @@ def i18n_scope private def html_safe_translation(translation) - if translation.respond_to?(:map) + if translation.class.method_defined?(:map) translation.map { |element| html_safe_translation(element) } else # It's assumed here that objects loaded by the i18n backend will respond to `#html_safe?`. diff --git a/test/sandbox/test/rendering_test.rb b/test/sandbox/test/rendering_test.rb index d19863f40..a042888be 100644 --- a/test/sandbox/test/rendering_test.rb +++ b/test/sandbox/test/rendering_test.rb @@ -16,7 +16,7 @@ def test_render_inline_allocations MyComponent.ensure_compiled allocations = (Rails.version.to_f >= 8.0) ? - {"3.5.0" => 104, "3.4.1" => 104, "3.3.7" => 108} : + {"3.5.0" => 102, "3.4.1" => 104, "3.3.7" => 108} : {"3.3.7" => 107, "3.3.0" => 120, "3.2.7" => 105, "3.1.6" => 118, "3.0.7" => 127} assert_allocations(**allocations) do diff --git a/test/sandbox/test/slotable_test.rb b/test/sandbox/test/slotable_test.rb index 8ea493fac..fea56f19e 100644 --- a/test/sandbox/test/slotable_test.rb +++ b/test/sandbox/test/slotable_test.rb @@ -194,7 +194,7 @@ def test_slot_with_respond_to end end - assert component.items.first.respond_to?(:classes) + assert_not_nil component.items.first.classes end def test_slot_forwards_kwargs_to_component diff --git a/view_component.gemspec b/view_component.gemspec index 8101cfb8c..b8f306c05 100644 --- a/view_component.gemspec +++ b/view_component.gemspec @@ -13,16 +13,9 @@ Gem::Specification.new do |spec| spec.homepage = "https://viewcomponent.org" spec.license = "MIT" - # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host' - # to allow pushing to a single host or delete this section to allow pushing to any host. - if spec.respond_to?(:metadata) - spec.metadata["allowed_push_host"] = "https://rubygems.org" - spec.metadata["source_code_uri"] = "https://github.com/viewcomponent/view_component" - spec.metadata["changelog_uri"] = "https://github.com/ViewComponent/view_component/blob/main/docs/CHANGELOG.md" - else - raise "RubyGems 2.0 or newer is required to protect against " \ - "public gem pushes." - end + spec.metadata["allowed_push_host"] = "https://rubygems.org" + spec.metadata["source_code_uri"] = "https://github.com/viewcomponent/view_component" + spec.metadata["changelog_uri"] = "https://github.com/ViewComponent/view_component/blob/main/docs/CHANGELOG.md" spec.files = Dir["LICENSE.txt", "README.md", "app/**/*", "docs/CHANGELOG.md", "lib/**/*"] spec.require_paths = ["lib"]