diff --git a/lib/stimulus_reflex.rb b/lib/stimulus_reflex.rb index fee1c8eb..425bb042 100644 --- a/lib/stimulus_reflex.rb +++ b/lib/stimulus_reflex.rb @@ -11,6 +11,7 @@ require "nokogiri" require "cable_ready" require "stimulus_reflex/version" +require "stimulus_reflex/open_struct_fix" require "stimulus_reflex/cable_ready_channels" require "stimulus_reflex/concern_enhancer" require "stimulus_reflex/configuration" diff --git a/lib/stimulus_reflex/open_struct_fix.rb b/lib/stimulus_reflex/open_struct_fix.rb new file mode 100644 index 00000000..fb1cc79a --- /dev/null +++ b/lib/stimulus_reflex/open_struct_fix.rb @@ -0,0 +1,29 @@ +# +# Temporary fix until this PR gets merged: +# https://github.com/ruby/ostruct/pull/37 +# Thanks to @Laykou +# +# Calling this in OpenStruct 0.5.2 fails: +# os = OpenStruct.new(class: "my-class", method: "post") + +if defined?(OpenStruct::VERSION) && OpenStruct::VERSION == "0.5.2" + class OpenStruct + private def is_method_protected!(name) + if !respond_to?(name, true) + false + elsif name.match?(/!$/) + true + else + owner = method!(name).owner + if owner.instance_of?(::Class) + owner < ::OpenStruct + else + class!.ancestors.any? do |mod| + return false if mod == ::OpenStruct + mod == owner + end + end + end + end + end +end