Sha256: d1e5d57e4654ef57ff832a304295e02ed57d110721d0e95f27d25d0723142927

Contents?: true

Size: 1.4 KB

Versions: 8

Compression:

Stored size: 1.4 KB

Contents

module AgnosticBackend
  module Indexable

    class ContentManager

      def add_definitions &block
        return unless block_given?
        instance_eval &block
      end

      def contents
        @contents ||= {}
      end

      def method_missing(sym, *args, **kwargs)
        if FieldType.exists? sym
          kwargs[:type] = sym
          field(*args, **kwargs)
        else
          super
        end
      end

      def respond_to?(sym, include_private=false)
        FieldType.exists?(sym) || super
      end

      def field(field_name, value: nil, type:, from: nil, **options)
        contents[field_name.to_s] = Field.new(value.present? ? value : field_name, type,
                                              from: from, **options)
      end

      def extract_contents_from(object, index_name, observer:)
        kv_pairs = contents.map do |field_name, field|
          field_value = field.evaluate(context: object)
          if field.type.nested?
            if field_value.respond_to? :generate_document
              observer.add(field_value)
              field_value = field_value.generate_document(for_index: index_name, observer: observer)
            elsif field_value.present?
              field_name = nil
            end
          end
          [field_name, field_value]
        end
        kv_pairs.reject! { |attr_name, _| attr_name.nil? }
        Hash[kv_pairs]
      end

    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
agnostic_backend-1.0.4 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-1.0.3 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-1.0.2 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-1.0.1 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-1.0.0 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-0.9.9 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-0.9.8 lib/agnostic_backend/indexable/content_manager.rb
agnostic_backend-0.9.4 lib/agnostic_backend/indexable/content_manager.rb