module ViewComponent::UseHelpers
def define_helper(helper_method:, source:)
def define_helper(helper_method:, source:) return "__vc_original_view_context.#{helper_method}(*args, &block)" unless source.present? "#{source}.instance_method(:#{helper_method}).bind(self).call(*args, &block)" end
def full_helper_method_name(helper_method, prefix: false, source: nil)
def full_helper_method_name(helper_method, prefix: false, source: nil) return helper_method unless prefix.present? if !!prefix == prefix "#{source.to_s.underscore}_#{helper_method}" else "#{prefix}_#{helper_method}" end end
def use_helper(helper_method, from: nil, prefix: false)
def use_helper(helper_method, from: nil, prefix: false) helper_method_name = full_helper_method_name(helper_method, prefix: prefix, source: from) class_eval(<<-RUBY, __FILE__, __LINE__ + 1) def #{helper_method_name}(*args, &block) raise HelpersCalledBeforeRenderError if view_context.nil? #{define_helper(helper_method: helper_method, source: from)} end RUBY ruby2_keywords(helper_method_name) if respond_to?(:ruby2_keywords, true) end
def use_helpers(*args, from: nil, prefix: false)
def use_helpers(*args, from: nil, prefix: false) args.each { |helper_method| use_helper(helper_method, from: from, prefix: prefix) } end