Sha256: 80fba252c8a91de703e725794ef9226a4539d43d318c5b9c1a57cbf31a1d0325

Contents?: true

Size: 625 Bytes

Versions: 6

Compression:

Stored size: 625 Bytes

Contents

module Rbexy
  module ComponentProviders
    class RbexyProvider
      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(context, **props).render(&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/rbexy_provider.rb
rbexy-0.1.4 lib/rbexy/component_providers/rbexy_provider.rb
rbexy-0.1.3 lib/rbexy/component_providers/rbexy_provider.rb
rbexy-0.1.2 lib/rbexy/component_providers/rbexy_provider.rb
rbexy-0.1.1 lib/rbexy/component_providers/rbexy_provider.rb
rbexy-0.1.0 lib/rbexy/component_providers/rbexy_provider.rb