Sha256: 43d5c8251b2a627969b4bd9c664dfeaaae6ee7a8997dad6777bf30d31a20ef5f

Contents?: true

Size: 980 Bytes

Versions: 4

Compression:

Stored size: 980 Bytes

Contents

module ActiveAdmin
  module CepAutoComplete
    class Renderer
      def initialize(page)
        @page = page
        @renderers = DEFAULT_FIELDS.map { |field| [field, default_renderer_for(field)] }.to_h.with_indifferent_access
      end

      def field(field_name, &block)
        @renderers[field_name] =
          if block_given?
            block
          else
            default_renderer_for(field_name)
          end
      end

      def render(query)
        object = build_object(query)

        @renderers.keys.map do |field|
          value = @renderers[field].call(object)
          object.public_send("#{field}=", value)
          [field, value]
        end.to_h
      end

      protected

      def default_renderer_for(field)
        lambda { |cep| cep.public_send(field) }
      end

      private

      def build_object(query)
        klass.new(*query.values)
      end

      def klass
        Struct.new(:cep, *@renderers.keys)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active_admin-cep_auto_complete-0.2.2 lib/active_admin/cep_auto_complete/renderer.rb
active_admin-cep_auto_complete-0.2.1 lib/active_admin/cep_auto_complete/renderer.rb
active_admin-cep_auto_complete-0.2.0 lib/active_admin/cep_auto_complete/renderer.rb
active_admin-cep_auto_complete-0.1.0 lib/active_admin/cep_auto_complete/renderer.rb