Sha256: 6f6bd386e3616ec434f887db79d8ef393e69174f2fe9fe4ac7d6a3935ea8bd5b

Contents?: true

Size: 621 Bytes

Versions: 10

Compression:

Stored size: 621 Bytes

Contents

module Rbexy
  module ComponentProviders
    class ViewComponentProvider
      def match?(name)
        name =~ /^[A-Z]/ && find(name) != nil
      end

      def render(context, name, **attrs, &block)
        props = attrs.transform_keys { |k| ActiveSupport::Inflector.underscore(k.to_s).to_sym }
        find(name).new(**props).render_in(context, &block)
      end

      def find(name)
        ActiveSupport::Inflector.constantize("#{name}Component")
      rescue NameError => e
        raise e unless e.message =~ /wrong constant name/ || e.message =~ /uninitialized constant/
        nil
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
rbexy-1.1.0 lib/rbexy/component_providers/view_component_provider.rb
rbexy-1.0.2 lib/rbexy/component_providers/view_component_provider.rb
rbexy-1.0.1 lib/rbexy/component_providers/view_component_provider.rb
rbexy-1.0.0 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.3.1 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.3.0 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.2.3 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.2.2 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.2.1 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.2.0 lib/rbexy/component_providers/view_component_provider.rb