Sha256: 3880c487c27fbc8724c762883cfd6a5dbd52148553d77c04ee514b37f5bd7b44

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

module BulkLoader
  module DSL
    module ClassMethods
      # getter for +BulkLoader::ClassAttribute+
      # If you pass name, mapping, options argument, you can define loader
      # if you does not want to export name to object, pass export: false to options.
      def bulk_loader(*args, &block)
        @bulk_loader ||= if superclass.respond_to?(:bulk_loader)
                           superclass.bulk_loader.dup
                         else
                           BulkLoader::ClassAttribute.new
                         end

        return @bulk_loader if args.empty?

        name, mapping, options = *args
        options ||= {}
        does_export = options.delete(:export)

        @bulk_loader.define_loader(name, BulkLoader::Loader.new(mapping, options, &block))

        return if does_export == false

        define_method name do
          bulk_loader.public_send(name)
        end
      end
    end

    def self.included(mod)
      mod.extend(ClassMethods)
    end

    def bulk_loader
      return @bulk_loader if @bulk_loader

      class_attribute = self.class.bulk_loader
      @bulk_loader = BulkLoader::Attribute.new(class_attribute, self)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bulk_loader-0.4.0 lib/bulk_loader/dsl.rb
bulk_loader-0.3.0 lib/bulk_loader/dsl.rb