class PgParty::ModelInjector

Public Class Methods

new(model, *key, &blk) click to toggle source
# File lib/pg_party/model_injector.rb, line 5
def initialize(model, *key, &blk)
  @model = model
  @key = key.flatten.compact
  @key_blk = blk
end

Public Instance Methods

inject_hash_methods() click to toggle source
# File lib/pg_party/model_injector.rb, line 23
def inject_hash_methods
  require "pg_party/model/hash_methods"

  inject_methods_for(PgParty::Model::HashMethods)
end
inject_list_methods() click to toggle source
# File lib/pg_party/model_injector.rb, line 17
def inject_list_methods
  require "pg_party/model/list_methods"

  inject_methods_for(PgParty::Model::ListMethods)
end
inject_range_methods() click to toggle source
# File lib/pg_party/model_injector.rb, line 11
def inject_range_methods
  require "pg_party/model/range_methods"

  inject_methods_for(PgParty::Model::RangeMethods)
end

Private Instance Methods

create_class_attributes() click to toggle source
# File lib/pg_party/model_injector.rb, line 40
def create_class_attributes
  @model.class_attribute(
    :partition_key,
    :complex_partition_key,
    instance_accessor: false,
    instance_predicate: false
  )

  if @key_blk
    @model.partition_key = @key_blk.call
    @model.complex_partition_key = true
  else
    if @key.size == 1
      @model.partition_key = @key.first
    else
      @model.partition_key = @key
    end

    @model.complex_partition_key = false
  end
end
inject_methods_for(mod) click to toggle source
# File lib/pg_party/model_injector.rb, line 31
def inject_methods_for(mod)
  require "pg_party/model/shared_methods"

  @model.extend(PgParty::Model::SharedMethods)
  @model.extend(mod)

  create_class_attributes
end