Sha256: 34f7cfa8592bcdc324816fadfd3c76f93c8a6c3eec880c57738fe9685214caf2

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

=begin rdoc
Field metadata class. Includes information for type, reflections etc.

Also, it eases the migration from AR to Sequel, which returns metadata as
a hash instead of a class.
=end

class ModelColumn
  # these are from AR
  attr_accessor :primary, :scale, :sql_type, :name, :precision, :default, :type, :meta

  attr_writer :limit

  # if it's not here, it's probably from Sequel, so figure it out from
  # the db_type
  def limit
    unless @limit
      db_type =~ /\((\d+)\)/
      @limit = $1.to_i
    end
    @limit
  end

  # these are from Sequel::Model.columns_hash
  attr_accessor :ruby_default, :primary_key, :allow_null, :db_type

  # sequel::Model.reflections
  attr_accessor :key, :eager_block, :type, :eager_grapher, :before_add, :model, :graph_join_type, :class_name, :before_remove, :eager_loader, :uses_composite_keys, :order_eager_graph, :dataset, :cartesian_product_number, :after_add, :cache, :keys, :after_remove, :extend, :graph_conditions, :name, :orig_opts, :after_load, :before_set, :after_set, :reciprocal, :reciprocal_type

  # for many_to_one targets
  attr_accessor :primary_keys

  # TODO not sure where these are from
  attr_accessor :order, :class, :conditions

  # a enw one in sequel 3.25.0
  attr_accessor :block

  # For Sequel many_to_many
  attr_accessor :left_key,
    :left_keys,
    :right_key,
    :right_keys,
    :left_primary_key,
    :left_primary_keys,
    :uses_left_composite_keys,
    :uses_right_composite_keys,
    :cartesian_product_number,
    :join_table,
    :left_key_alias,
    :graph_join_table_conditions,
    :graph_join_table_join_type

  # added by us
  attr_accessor :association
  def association?; association; end

  def initialize( name, hash )
    @hash = hash
    @hash.each do |key,value|
      send( "#{key}=", value )
    end

    # must be after hash so it takes precedence
    @name = name
  end

  def name
    @name
  end

  def related_class
    @related_class ||= eval class_name
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
clevic-0.13.0.b10 lib/clevic/model_column.rb