Module: StagingTable

Defined in:
lib/staging_table.rb,
lib/staging_table/errors.rb,
lib/staging_table/session.rb,
lib/staging_table/version.rb,
lib/staging_table/adapters/base.rb,
lib/staging_table/bulk_inserter.rb,
lib/staging_table/configuration.rb,
lib/staging_table/model_factory.rb,
lib/staging_table/adapters/mysql.rb,
lib/staging_table/adapters/sqlite.rb,
lib/staging_table/instrumentation.rb,
lib/staging_table/transfer_result.rb,
lib/staging_table/adapters/postgresql.rb,
lib/staging_table/transfer_strategies/insert.rb,
lib/staging_table/transfer_strategies/upsert.rb

Defined Under Namespace

Modules: Adapters, Instrumentation, TransferStrategies Classes: AdapterError, BulkInserter, Configuration, ConfigurationError, Error, ModelFactory, RecordError, Session, TableError, TransferError, TransferResult

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.configurationObject



21
22
23
# File 'lib/staging_table.rb', line 21

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



25
26
27
# File 'lib/staging_table.rb', line 25

def configure
  yield(configuration)
end

.stage(source_model, **options) {|session| ... } ⇒ TransferResult, Session

Stage data for bulk import into a model’s table.

Parameters:

  • source_model (Class)

    The ActiveRecord model to stage data for

  • options (Hash)

    Configuration options

Options Hash (**options):

  • :batch_size (Integer)

    Number of records per batch (default: 1000)

  • :transfer_strategy (Symbol)

    :insert or :upsert (default: :insert)

  • :conflict_target (Array<Symbol>)

    Columns for upsert conflict detection

  • :conflict_action (Symbol)

    :update or :ignore for upsert conflicts

  • :before_insert (Proc)

    Called before inserting into staging

  • :after_insert (Proc)

    Called after inserting into staging

  • :before_transfer (Proc)

    Called before transferring to target

  • :after_transfer (Proc)

    Called after transferring to target

Yields:

  • (session)

    Block for staging operations

Yield Parameters:

  • session (Session)

    The staging session

Returns:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/staging_table.rb', line 45

def stage(source_model, **options, &block)
  session = Session.new(source_model, **options)

  if block
    payload = {
      source_model: source_model,
      source_table: source_model.table_name,
      options: options.except(*Session::CALLBACK_OPTIONS)
    }

    Instrumentation.instrument(:stage, payload) do |instrumentation_payload|
      session.create_table
      yield(session)
      result = session.transfer
      instrumentation_payload[:result] = result
      result
    ensure
      session.drop_table
    end
  else
    session.create_table
    session
  end
end