Sha256: 05471861881731c5d0bdc648ba34135b0267ae87cb7b9677d749485a71a9fef6

Contents?: true

Size: 636 Bytes

Versions: 6

Compression:

Stored size: 636 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

      private

      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

6 entries across 6 versions & 1 rubygems

Version Path
rbexy-0.1.5 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.1.4 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.1.3 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.1.2 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.1.1 lib/rbexy/component_providers/view_component_provider.rb
rbexy-0.1.0 lib/rbexy/component_providers/view_component_provider.rb